export const PERMISSIONS_UPDATED_EVENT = 'permissions-updated'; export type PermissionStatus = 'unknown' | 'loading' | 'ready'; export interface PermissionState { permissions: string[]; status: PermissionStatus; } let permissionState: PermissionState = { permissions: [], status: 'unknown' }; function notifyPermissionStateChanged(): void { window.dispatchEvent(new Event(PERMISSIONS_UPDATED_EVENT)); } export function readPermissionState(): PermissionState { return permissionState; } export function readPermissions(): string[] { return permissionState.status === 'ready' ? permissionState.permissions : []; } export function beginPermissionVerification(): void { permissionState = { permissions: [], status: 'loading' }; notifyPermissionStateChanged(); } export function writePermissions(permissions: string[]): void { const uniquePermissions = [...new Set(permissions)]; localStorage.setItem('permissions', JSON.stringify(uniquePermissions)); permissionState = { permissions: uniquePermissions, status: 'ready' }; notifyPermissionStateChanged(); } export function clearPermissions(status: PermissionStatus = 'unknown'): void { localStorage.removeItem('permissions'); permissionState = { permissions: [], status }; notifyPermissionStateChanged(); }