@emmanuel-nike/ark-notify-js 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +28 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +28 -25
- package/dist/index.js.map +1 -1
- package/dist/react/index.cjs +27 -24
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +2 -2
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +27 -24
- package/dist/react/index.js.map +1 -1
- package/dist/{utils-GvtOmbE8.d.cts → utils-BFAGOqsj.d.cts} +4 -2
- package/dist/{utils-zG2CPKQE.d.ts → utils-DX22wDRi.d.ts} +4 -2
- package/package.json +1 -1
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config.ts","../../src/utils.ts","../../src/connection-token.ts","../../src/client.ts","../../src/connection.ts","../../src/sse.ts","../../src/react/context.ts","../../src/react/ArkNotifyProvider.tsx","../../src/react/useArkNotify.ts","../../src/react/hooks.ts","../../src/react/useApplications.ts","../../src/react/usePlatformAuth.ts","../../src/react/useSSE.ts"],"names":["useRef","useCallback","useEffect","useState"],"mappings":"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","file":"index.js","sourcesContent":["export const DEFAULT_BASE_URL = 'https://ark-notify-933303906015.europe-north1.run.app'\n\nlet configuredBaseUrl: string | undefined\n\nexport interface ArkNotifyGlobalConfig {\n baseUrl?: string\n}\n\n/** Set the default base URL once at application startup. */\nexport function configureArkNotify(config: ArkNotifyGlobalConfig): void {\n if (config.baseUrl !== undefined) {\n configuredBaseUrl = config.baseUrl\n }\n}\n\nexport function resolveBaseUrl(baseUrl?: string): string {\n return (baseUrl ?? configuredBaseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '')\n}\n","import type { ApiError } from './types'\n\nexport class ArkNotifyError extends Error {\n readonly status: number\n readonly code: string\n readonly retryAfterSec?: number\n readonly reason?: string\n\n constructor(status: number, body: ApiError) {\n super(body.message)\n this.name = 'ArkNotifyError'\n this.status = status\n this.code = body.error\n this.retryAfterSec = body.retryAfterSec\n this.reason = body.reason\n }\n}\n\nexport function toWebSocketUrl(baseUrl: string, path: string): string {\n const httpUrl = new URL(path, baseUrl).href\n // Avoid assigning to url.protocol — not supported in React Native and some runtimes.\n return httpUrl.replace(/^https:/i, 'wss:').replace(/^http:/i, 'ws:')\n}\n\nexport function resolveValue<T>(value: T | (() => T)): T {\n return typeof value === 'function' ? (value as () => T)() : value\n}\n\nexport function isPrivateChannel(channel: string): boolean {\n return channel.startsWith('private-')\n}\n","import { resolveBaseUrl } from './config'\nimport type { AppCredentials, ConnectionTokenInput, ConnectionTokenResponse } from './types'\nimport { ArkNotifyError } from './utils'\n\nexport interface FetchConnectionTokenOptions extends ConnectionTokenInput {\n baseUrl?: string\n appKey: string\n /** Required unless the application has a serverAuthUrl (or one is passed in the request). */\n credentials?: AppCredentials\n fetch?: typeof fetch\n}\n\nfunction requiresAppSecret(options: FetchConnectionTokenOptions): boolean {\n if ('serverAuthUrl' in options) {\n const value = options.serverAuthUrl\n return value === null || value === ''\n }\n if ('server_auth_url' in options) {\n const value = options.server_auth_url\n return value === null || value === ''\n }\n return false\n}\n\nfunction buildConnectionTokenRequest(\n options: FetchConnectionTokenOptions\n): {\n url: string\n headers: Record<string, string>\n body: ConnectionTokenInput\n} {\n const {\n baseUrl,\n appKey,\n credentials,\n client_id,\n clientId,\n user_data,\n userData,\n ttl,\n capabilities,\n server_auth_url,\n serverAuthUrl,\n } = options\n\n const resolvedClientId = client_id ?? clientId\n if (!resolvedClientId) {\n throw new Error('client_id is required to fetch a connection token')\n }\n\n if (requiresAppSecret(options) && !credentials) {\n throw new Error('credentials are required when serverAuthUrl is explicitly set to null')\n }\n\n const body: ConnectionTokenInput = {\n client_id: resolvedClientId,\n user_data: user_data ?? userData,\n ttl,\n capabilities,\n }\n\n if ('serverAuthUrl' in options) {\n body.serverAuthUrl = serverAuthUrl\n } else if ('server_auth_url' in options) {\n body.server_auth_url = server_auth_url\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n }\n\n if (credentials) {\n headers['X-App-Key'] = credentials.appKey\n headers['X-App-Secret'] = credentials.secret\n }\n\n return {\n url: `${resolveBaseUrl(baseUrl)}/api/v1/apps/${appKey}/connection-token`,\n headers,\n body,\n }\n}\n\n/**\n * Request a signed connection token from the Ark Notify API.\n *\n * Authentication depends on server auth configuration:\n * - Application or request has a `serverAuthUrl`: public `appKey` only (frontend-safe).\n * - No `serverAuthUrl`: `credentials` with app key + secret (backend-only).\n */\nexport async function fetchConnectionToken(\n options: FetchConnectionTokenOptions\n): Promise<ConnectionTokenResponse> {\n const { fetch: fetchFn = globalThis.fetch.bind(globalThis) } = options\n const { url, headers, body } = buildConnectionTokenRequest(options)\n\n const response = await fetchFn(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n })\n\n if (!response.ok) {\n let errorBody: { error: string; message: string; reason?: string; retryAfterSec?: number }\n try {\n errorBody = await response.json()\n } catch {\n errorBody = { error: 'request_failed', message: response.statusText }\n }\n throw new ArkNotifyError(response.status, errorBody)\n }\n\n return response.json() as Promise<ConnectionTokenResponse>\n}\n","import { resolveBaseUrl } from './config'\nimport { fetchConnectionToken } from './connection-token'\nimport { ArkNotifyError, resolveValue } from './utils'\nimport type {\n Application,\n ArkNotifyClientConfig,\n AppCredentials,\n AuthResponse,\n ChannelAuthInput,\n ChannelAuthResponse,\n ConnectionTokenInput,\n ConnectionTokenResponse,\n CreateApplicationInput,\n HealthResponse,\n LoginInput,\n PublishEventInput,\n PublishEventResponse,\n UpdateApplicationInput,\n User,\n} from './types'\n\ntype RequestOptions = {\n method?: string\n body?: unknown\n headers?: Record<string, string>\n credentials?: AppCredentials\n}\n\nexport class ArkNotifyClient {\n private readonly baseUrl: string\n private readonly fetchFn: typeof fetch\n private token?: string | (() => string | null | undefined)\n\n constructor(config: Readonly<ArkNotifyClientConfig> = {}) {\n this.baseUrl = resolveBaseUrl(config?.baseUrl)\n this.token = config.token\n this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis)\n }\n\n setToken(token: string | null): void {\n this.token = token ?? undefined\n }\n\n private getAuthHeader(): string | undefined {\n const token = resolveValue(this.token)\n return token ? `Bearer ${token}` : undefined\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...options.headers,\n }\n\n const auth = this.getAuthHeader()\n if (auth) {\n headers.Authorization = auth\n }\n\n if (options.credentials) {\n headers['X-App-Key'] = options.credentials.appKey\n headers['X-App-Secret'] = options.credentials.secret\n }\n\n const response = await this.fetchFn(`${this.baseUrl}${path}`, {\n method: options.method ?? 'GET',\n headers,\n body: options.body !== undefined ? JSON.stringify(options.body) : undefined,\n })\n\n if (!response.ok) {\n let body: { error: string; message: string; reason?: string; retryAfterSec?: number }\n try {\n body = await response.json()\n } catch {\n body = { error: 'request_failed', message: response.statusText }\n }\n throw new ArkNotifyError(response.status, body)\n }\n\n if (response.status === 204) {\n return undefined as T\n }\n\n return response.json() as Promise<T>\n }\n\n // ── Health ──────────────────────────────────────────────────────────────\n\n health(): Promise<HealthResponse> {\n return this.request('/health')\n }\n\n // ── Platform auth ───────────────────────────────────────────────────────\n\n login(input: LoginInput): Promise<AuthResponse> {\n return this.request('/api/v1/auth/login', { method: 'POST', body: input })\n }\n\n me(): Promise<{ user: User }> {\n return this.request('/api/v1/auth/me')\n }\n\n // ── Applications ────────────────────────────────────────────────────────\n\n listApplications(): Promise<{ apps: Application[] }> {\n return this.request('/api/v1/applications')\n }\n\n createApplication(input: CreateApplicationInput): Promise<{ app: Application }> {\n return this.request('/api/v1/applications', { method: 'POST', body: input })\n }\n\n getApplication(id: string): Promise<{ app: Application }> {\n return this.request(`/api/v1/applications/${id}`)\n }\n\n updateApplication(id: string, input: UpdateApplicationInput): Promise<{ app: Application }> {\n return this.request(`/api/v1/applications/${id}`, { method: 'PUT', body: input })\n }\n\n deleteApplication(id: string): Promise<{ deleted: boolean; id: string }> {\n return this.request(`/api/v1/applications/${id}`, { method: 'DELETE' })\n }\n\n regenerateSecret(id: string): Promise<{ app: Application }> {\n return this.request(`/api/v1/applications/${id}/regenerate-secret`, {\n method: 'POST',\n })\n }\n\n // ── Data plane ──────────────────────────────────────────────────────────\n\n publishEvent(\n appKey: string,\n credentials: AppCredentials,\n input: PublishEventInput\n ): Promise<PublishEventResponse> {\n return this.request(`/api/v1/apps/${appKey}/events`, {\n method: 'POST',\n body: input,\n credentials,\n })\n }\n\n authorizeChannel(\n appKey: string,\n credentials: AppCredentials,\n input: ChannelAuthInput\n ): Promise<ChannelAuthResponse> {\n return this.request(`/api/v1/apps/${appKey}/auth`, {\n method: 'POST',\n body: input,\n credentials,\n })\n }\n\n issueConnectionToken(\n appKey: string,\n input: ConnectionTokenInput,\n credentials?: AppCredentials\n ): Promise<ConnectionTokenResponse> {\n return fetchConnectionToken({\n baseUrl: this.baseUrl,\n appKey,\n credentials,\n ...input,\n fetch: this.fetchFn,\n })\n }\n}\n","import { resolveBaseUrl } from './config'\nimport { fetchConnectionToken } from './connection-token'\nimport type {\n ArkNotifyConnectionConfig,\n ChannelEventHandler,\n ConnectedMessage,\n ConnectionState,\n EventMessage,\n PresenceMessage,\n ServerMessage,\n SubscribeOptions,\n} from './types'\nimport { isPrivateChannel, resolveValue, toWebSocketUrl } from './utils'\n\ntype EventMap = {\n state: (state: ConnectionState) => void\n connected: (message: ConnectedMessage) => void\n event: (message: EventMessage) => void\n presence: (message: PresenceMessage) => void\n message: (message: ServerMessage) => void\n error: (error: { code: string; message: string }) => void\n close: (event: { code: number; reason: string }) => void\n}\n\ntype EventName = keyof EventMap\n\nexport class ArkNotifyConnection {\n private readonly config: Required<\n Pick<\n ArkNotifyConnectionConfig,\n 'baseUrl' | 'appKey' | 'autoReconnect' | 'reconnectDelayMs' | 'maxReconnectDelayMs'\n >\n > &\n ArkNotifyConnectionConfig\n\n private ws: WebSocket | null = null\n private state: ConnectionState = 'disconnected'\n private connectionId: string | null = null\n private clientId: string | null = null\n private authenticated = false\n private readonly subscribedChannels = new Set<string>()\n private readonly pendingSubscriptions = new Map<string, SubscribeOptions>()\n private readonly listeners = new Map<EventName, Set<EventMap[EventName]>>()\n private reconnectAttempt = 0\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null\n private intentionalClose = false\n private connectPromise: Promise<void> | null = null\n private readonly WebSocketCtor: typeof WebSocket\n\n constructor(config: ArkNotifyConnectionConfig) {\n this.config = {\n autoReconnect: true,\n reconnectDelayMs: 1000,\n maxReconnectDelayMs: 30000,\n ...config,\n baseUrl: resolveBaseUrl(config.baseUrl),\n }\n this.WebSocketCtor = config.WebSocket ?? globalThis.WebSocket\n }\n\n getConnectionState(): ConnectionState {\n return this.state\n }\n\n getConnectionId(): string | null {\n return this.connectionId\n }\n\n getClientId(): string | null {\n return this.clientId\n }\n\n isAuthenticated(): boolean {\n return this.authenticated\n }\n\n getSubscribedChannels(): string[] {\n return [...this.subscribedChannels]\n }\n\n on<E extends EventName>(event: E, handler: EventMap[E]): () => void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set())\n }\n this.listeners.get(event)!.add(handler)\n return () => this.off(event, handler)\n }\n\n off<E extends EventName>(event: E, handler: EventMap[E]): void {\n this.listeners.get(event)?.delete(handler)\n }\n\n private emit<E extends EventName>(event: E, ...args: Parameters<EventMap[E]>): void {\n for (const handler of this.listeners.get(event) ?? []) {\n ;(handler as (...a: Parameters<EventMap[E]>) => void)(...args)\n }\n }\n\n private setState(state: ConnectionState): void {\n if (this.state !== state) {\n this.state = state\n this.emit('state', state)\n }\n }\n\n connect(): Promise<void> {\n if (this.ws?.readyState === WebSocket.OPEN || this.ws?.readyState === WebSocket.CONNECTING) {\n return Promise.resolve()\n }\n\n if (this.connectPromise) {\n return this.connectPromise\n }\n\n this.connectPromise = this.doConnect().finally(() => {\n this.connectPromise = null\n })\n\n return this.connectPromise\n }\n\n private async doConnect(): Promise<void> {\n this.intentionalClose = false\n this.clearReconnectTimer()\n this.setState(this.reconnectAttempt > 0 ? 'reconnecting' : 'connecting')\n\n const url = new URL(toWebSocketUrl(this.config.baseUrl, `/app/${this.config.appKey}`))\n\n let token = resolveValue(this.config.token)\n if (!token && this.config.clientId) {\n const result = await fetchConnectionToken({\n baseUrl: this.config.baseUrl,\n appKey: this.config.appKey,\n credentials: this.config.credentials,\n client_id: this.config.clientId,\n user_data: this.config.userData,\n serverAuthUrl: this.config.serverAuthUrl,\n fetch: this.config.fetch,\n })\n token = result.token\n }\n\n if (token) {\n url.searchParams.set('token', token)\n } else if (this.config.clientId) {\n url.searchParams.set('clientId', this.config.clientId)\n }\n\n this.ws = new this.WebSocketCtor(url.toString())\n\n this.ws.onopen = () => {\n this.reconnectAttempt = 0\n }\n\n this.ws.onmessage = (event) => {\n this.handleMessage(event.data as string)\n }\n\n this.ws.onerror = () => {\n this.emit('error', { code: 'websocket_error', message: 'WebSocket error' })\n }\n\n this.ws.onclose = (event) => {\n this.ws = null\n this.connectionId = null\n this.emit('close', { code: event.code, reason: event.reason })\n\n if (!this.intentionalClose && this.config.autoReconnect) {\n this.scheduleReconnect()\n } else {\n this.setState('failed')\n }\n }\n }\n\n disconnect(): void {\n this.intentionalClose = true\n this.clearReconnectTimer()\n this.subscribedChannels.clear()\n this.pendingSubscriptions.clear()\n if (this.ws) {\n this.ws.close()\n this.ws = null\n }\n this.setState('disconnected')\n }\n\n private scheduleReconnect(): void {\n this.setState('reconnecting')\n const delay = Math.min(\n this.config.reconnectDelayMs * 2 ** this.reconnectAttempt,\n this.config.maxReconnectDelayMs\n )\n this.reconnectAttempt++\n this.reconnectTimer = setTimeout(() => void this.connect(), delay)\n }\n\n private clearReconnectTimer(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer)\n this.reconnectTimer = null\n }\n }\n\n private send(payload: Record<string, unknown>): void {\n if (this.ws?.readyState !== WebSocket.OPEN) {\n throw new Error('WebSocket is not connected')\n }\n this.ws.send(JSON.stringify(payload))\n }\n\n private handleMessage(raw: string): void {\n let message: ServerMessage\n try {\n message = JSON.parse(raw) as ServerMessage\n } catch {\n this.emit('error', { code: 'invalid_json', message: 'Invalid JSON from server' })\n return\n }\n\n this.emit('message', message)\n\n switch (message.type) {\n case 'connected': {\n this.connectionId = message.connection_id\n this.clientId = message.client_id\n this.authenticated = message.authenticated\n this.setState('connected')\n this.emit('connected', message)\n this.resubscribeAll()\n break\n }\n case 'event':\n this.emit('event', message)\n break\n case 'presence':\n this.emit('presence', message)\n break\n case 'subscribed':\n this.subscribedChannels.add(message.channel)\n break\n case 'unsubscribed':\n this.subscribedChannels.delete(message.channel)\n break\n case 'error':\n this.emit('error', { code: message.code, message: message.message })\n break\n case 'ping':\n this.send({ action: 'ping' })\n break\n default:\n break\n }\n }\n\n private resubscribeAll(): void {\n for (const [channel, options] of this.pendingSubscriptions) {\n void this.subscribe(channel, options)\n }\n }\n\n async subscribe(channel: string, options: SubscribeOptions = {}): Promise<void> {\n this.pendingSubscriptions.set(channel, options)\n\n if (this.state !== 'connected' || !this.connectionId) {\n return\n }\n\n const payload: Record<string, unknown> = {\n action: 'subscribe',\n channel,\n }\n\n if (options.history) payload.history = true\n if (options.presence) {\n payload.presence = true\n if (options.presence_data) payload.presence_data = options.presence_data\n }\n\n if (isPrivateChannel(channel)) {\n if (options.auth) {\n payload.auth = options.auth\n } else if (this.config.onPrivateChannelAuth) {\n payload.auth = await this.config.onPrivateChannelAuth(channel, this.connectionId)\n } else {\n throw new Error(\n `Private channel \"${channel}\" requires auth. Provide options.auth or onPrivateChannelAuth.`\n )\n }\n }\n\n this.send(payload)\n }\n\n unsubscribe(channel: string): void {\n this.pendingSubscriptions.delete(channel)\n this.subscribedChannels.delete(channel)\n if (this.state === 'connected') {\n this.send({ action: 'unsubscribe', channel })\n }\n }\n\n publish(channel: string, event: string, data?: unknown): void {\n this.send({ action: 'publish', channel, event, data })\n }\n\n presenceEnter(channel: string, data: Record<string, unknown>): void {\n this.send({ action: 'presence_enter', channel, data })\n }\n\n presenceUpdate(channel: string, data: Record<string, unknown>): void {\n this.send({ action: 'presence_update', channel, data })\n }\n\n presenceLeave(channel: string): void {\n this.send({ action: 'presence_leave', channel })\n }\n\n presenceSync(channel: string): void {\n this.send({ action: 'presence_sync', channel })\n }\n\n ping(): void {\n this.send({ action: 'ping' })\n }\n\n bind(channel: string, event: string, handler: ChannelEventHandler): () => void {\n const listener = (message: EventMessage) => {\n if (message.channel === channel && message.event === event) {\n handler(message.data, message)\n }\n }\n return this.on('event', listener)\n }\n\n bindAll(channel: string, handler: ChannelEventHandler): () => void {\n const listener = (message: EventMessage) => {\n if (message.channel === channel) {\n handler(message.data, message)\n }\n }\n return this.on('event', listener)\n }\n}\n","import { resolveBaseUrl } from './config'\nimport type {\n ArkNotifySSEConfig,\n ConnectedMessage,\n EventMessage,\n PresenceMessage,\n ServerMessage,\n} from './types'\nimport { isPrivateChannel, resolveValue } from './utils'\n\ntype SSEEventMap = {\n connected: (message: ConnectedMessage) => void\n event: (message: EventMessage) => void\n presence: (message: PresenceMessage) => void\n message: (message: ServerMessage) => void\n error: (error: Error) => void\n close: () => void\n}\n\ntype SSEEventName = keyof SSEEventMap\n\nexport class ArkNotifySSE {\n private readonly config: ArkNotifySSEConfig & { baseUrl: string }\n private es: EventSource | null = null\n private connectionId: string | null = null\n private listeners = new Map<SSEEventName, Set<SSEEventMap[SSEEventName]>>()\n private readonly EventSourceCtor: typeof EventSource\n\n constructor(config: ArkNotifySSEConfig) {\n this.config = { ...config, baseUrl: resolveBaseUrl(config.baseUrl) }\n this.EventSourceCtor = config.EventSource ?? globalThis.EventSource\n }\n\n getConnectionId(): string | null {\n return this.connectionId\n }\n\n on<E extends SSEEventName>(event: E, handler: SSEEventMap[E]): () => void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set())\n }\n this.listeners.get(event)!.add(handler as SSEEventMap[SSEEventName])\n return () => this.off(event, handler)\n }\n\n off<E extends SSEEventName>(event: E, handler: SSEEventMap[E]): void {\n this.listeners.get(event)?.delete(handler as SSEEventMap[SSEEventName])\n }\n\n private emit<E extends SSEEventName>(event: E, ...args: Parameters<SSEEventMap[E]>): void {\n for (const handler of this.listeners.get(event) ?? []) {\n ;(handler as (...a: Parameters<SSEEventMap[E]>) => void)(...args)\n }\n }\n\n async connect(): Promise<void> {\n if (this.es) return\n\n const base = this.config.baseUrl.replace(/\\/$/, '')\n const url = new URL(`${base}/app/${this.config.appKey}/stream`)\n url.searchParams.set('channels', this.config.channels.join(','))\n\n const token = resolveValue(this.config.token)\n if (token) {\n url.searchParams.set('token', token)\n } else if (this.config.clientId) {\n url.searchParams.set('clientId', this.config.clientId)\n }\n\n if (this.config.history) {\n url.searchParams.set('history', 'true')\n }\n\n if (this.config.user_data) {\n url.searchParams.set('user_data', JSON.stringify(this.config.user_data))\n }\n\n let authMap = this.config.auth ? { ...this.config.auth } : {}\n\n const privateChannels = this.config.channels.filter(isPrivateChannel)\n if (privateChannels.length > 0 && this.config.onPrivateChannelAuth && !this.config.auth) {\n // Private SSE channels need auth tokens in the query before connect.\n // Fetch tokens server-side and pass them via the `auth` option, or use WebSocket instead.\n }\n\n if (Object.keys(authMap).length > 0) {\n url.searchParams.set('auth', JSON.stringify(authMap))\n }\n\n this.es = new this.EventSourceCtor(url.toString())\n\n this.es.addEventListener('connected', (e) => {\n const message = JSON.parse((e as MessageEvent).data) as ConnectedMessage\n this.connectionId = message.connection_id\n this.emit('connected', message)\n this.emit('message', message)\n })\n\n this.es.addEventListener('event', (e) => {\n const message = JSON.parse((e as MessageEvent).data) as EventMessage\n this.emit('event', message)\n this.emit('message', message)\n })\n\n this.es.addEventListener('presence', (e) => {\n const message = JSON.parse((e as MessageEvent).data) as PresenceMessage\n this.emit('presence', message)\n this.emit('message', message)\n })\n\n this.es.onerror = () => {\n this.emit('error', new Error('SSE connection error'))\n }\n }\n\n disconnect(): void {\n if (this.es) {\n this.es.close()\n this.es = null\n this.connectionId = null\n this.emit('close')\n }\n }\n\n bind(channel: string, event: string, handler: (data: unknown, message: EventMessage) => void): () => void {\n const listener = (message: EventMessage) => {\n if (message.channel === channel && message.event === event) {\n handler(message.data, message)\n }\n }\n return this.on('event', listener)\n }\n\n bindAll(channel: string, handler: (data: unknown, message: EventMessage) => void): () => void {\n const listener = (message: EventMessage) => {\n if (message.channel === channel) {\n handler(message.data, message)\n }\n }\n return this.on('event', listener)\n }\n}\n","import { createContext, useContext } from 'react'\nimport type { ArkNotifyClient } from '../client'\nimport type { ArkNotifyConnection } from '../connection'\nimport type { ArkNotifySSE } from '../sse'\nimport type { ArkNotifyConnectionConfig, ArkNotifySSEConfig } from '../types'\n\nexport interface ArkNotifyContextValue {\n baseUrl: string\n client: ArkNotifyClient\n createConnection: (config: Omit<ArkNotifyConnectionConfig, 'baseUrl'>) => ArkNotifyConnection\n createSSE: (config: Omit<ArkNotifySSEConfig, 'baseUrl'>) => ArkNotifySSE\n}\n\nexport const ArkNotifyContext = createContext<ArkNotifyContextValue | null>(null)\n\nexport function useArkNotifyContext(): ArkNotifyContextValue {\n const ctx = useContext(ArkNotifyContext)\n if (!ctx) {\n throw new Error('useArkNotify must be used within an ArkNotifyProvider')\n }\n return ctx\n}\n","import { useCallback, useEffect, useMemo, useRef, type ReactNode } from 'react'\nimport { ArkNotifyClient } from '../client'\nimport { resolveBaseUrl } from '../config'\nimport { ArkNotifyConnection } from '../connection'\nimport { ArkNotifySSE } from '../sse'\nimport type { ArkNotifyClientConfig, ArkNotifyConnectionConfig, ArkNotifySSEConfig } from '../types'\nimport { ArkNotifyContext } from './context'\n\nexport interface ArkNotifyProviderProps {\n children: ReactNode\n baseUrl?: string\n token?: ArkNotifyClientConfig['token']\n fetch?: ArkNotifyClientConfig['fetch']\n}\n\nexport function ArkNotifyProvider({\n children,\n baseUrl,\n token,\n fetch: fetchFn,\n}: Readonly<ArkNotifyProviderProps>) {\n const resolvedBaseUrl = useMemo(() => resolveBaseUrl(baseUrl), [baseUrl])\n const clientRef = useRef<ArkNotifyClient | null>(null)\n\n clientRef.current ??= new ArkNotifyClient({ baseUrl, token, fetch: fetchFn })\n\n const client = clientRef.current\n\n useEffect(() => {\n if (token === undefined) return\n const resolved = typeof token === 'function' ? (token() ?? null) : (token ?? null)\n client.setToken(resolved)\n }, [client, token])\n\n const createConnection = useCallback(\n (config: Omit<ArkNotifyConnectionConfig, 'baseUrl'>) =>\n new ArkNotifyConnection({ baseUrl: resolvedBaseUrl, ...config }),\n [resolvedBaseUrl]\n )\n\n const createSSE = useCallback(\n (config: Omit<ArkNotifySSEConfig, 'baseUrl'>) =>\n new ArkNotifySSE({ baseUrl: resolvedBaseUrl, ...config }),\n [resolvedBaseUrl]\n )\n\n const value = useMemo(\n () => ({ baseUrl: resolvedBaseUrl, client, createConnection, createSSE }),\n [resolvedBaseUrl, client, createConnection, createSSE]\n )\n\n return <ArkNotifyContext.Provider value={value}>{children}</ArkNotifyContext.Provider>\n}\n","import { useArkNotifyContext } from './context'\n\nexport function useArkNotify() {\n return useArkNotifyContext()\n}\n","import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react'\nimport type { ArkNotifyConnection } from '../connection'\nimport type {\n ArkNotifyConnectionConfig,\n ChannelEventHandler,\n ConnectedMessage,\n ConnectionState,\n EventMessage,\n PresenceMemberInfo,\n PresenceMessage,\n SubscribeOptions,\n} from '../types'\nimport { useArkNotify } from './useArkNotify'\n\nexport interface UseConnectionOptions\n extends Omit<ArkNotifyConnectionConfig, 'baseUrl'> {\n enabled?: boolean\n}\n\nexport interface UseConnectionResult {\n connection: ArkNotifyConnection | null\n state: ConnectionState\n connectionId: string | null\n clientId: string | null\n authenticated: boolean\n connectedMessage: ConnectedMessage | null\n connect: () => Promise<void>\n disconnect: () => void\n}\n\nexport function useConnection(options: UseConnectionOptions): UseConnectionResult {\n const { createConnection } = useArkNotify()\n const { enabled = true, ...connectionConfig } = options\n\n const connectionRef = useRef<ArkNotifyConnection | null>(null)\n const [connectedMessage, setConnectedMessage] = useState<ConnectedMessage | null>(null)\n\n if (!connectionRef.current) {\n connectionRef.current = createConnection(connectionConfig)\n }\n\n const connection = connectionRef.current!\n\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n const unsubscribers = [\n connection.on('state', onStoreChange),\n connection.on('connected', (msg) => {\n setConnectedMessage(msg)\n onStoreChange()\n }),\n ]\n return () => unsubscribers.forEach((u) => u())\n },\n [connection]\n )\n\n const getSnapshot = useCallback(() => connection.getConnectionState(), [connection])\n const state = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n\n useEffect(() => {\n if (enabled) {\n connection.connect()\n }\n return () => connection.disconnect()\n }, [connection, enabled])\n\n const connect = useCallback(() => connection.connect(), [connection])\n const disconnect = useCallback(() => connection.disconnect(), [connection])\n\n return {\n connection,\n state,\n connectionId: connection.getConnectionId(),\n clientId: connection.getClientId(),\n authenticated: connection.isAuthenticated(),\n connectedMessage,\n connect,\n disconnect,\n }\n}\n\nexport interface UseChannelOptions extends SubscribeOptions {\n enabled?: boolean\n onEvent?: (event: string, data: unknown, message: EventMessage) => void\n}\n\nexport interface UseChannelResult {\n subscribed: boolean\n subscribe: (opts?: SubscribeOptions) => Promise<void>\n unsubscribe: () => void\n publish: (event: string, data?: unknown) => void\n bind: (event: string, handler: ChannelEventHandler) => () => void\n}\n\nexport function useChannel(\n connection: ArkNotifyConnection | null,\n channel: string,\n options: UseChannelOptions = {}\n): UseChannelResult {\n const { enabled = true, onEvent, ...subscribeOptions } = options\n const [subscribed, setSubscribed] = useState(false)\n const subscribeOptionsRef = useRef(subscribeOptions)\n subscribeOptionsRef.current = subscribeOptions\n\n const subscribe = useCallback(\n async (opts?: SubscribeOptions) => {\n if (!connection) return\n await connection.subscribe(channel, { ...subscribeOptionsRef.current, ...opts })\n setSubscribed(true)\n },\n [connection, channel]\n )\n\n const unsubscribe = useCallback(() => {\n connection?.unsubscribe(channel)\n setSubscribed(false)\n }, [connection, channel])\n\n const publish = useCallback(\n (event: string, data?: unknown) => {\n connection?.publish(channel, event, data)\n },\n [connection, channel]\n )\n\n const bind = useCallback(\n (event: string, handler: ChannelEventHandler) => {\n if (!connection) return () => {}\n return connection.bind(channel, event, handler)\n },\n [connection, channel]\n )\n\n useEffect(() => {\n if (!connection || !enabled || !channel) return\n\n const unsubSubscribed = connection.on('message', (msg) => {\n if (msg.type === 'subscribed' && msg.channel === channel) {\n setSubscribed(true)\n }\n if (msg.type === 'unsubscribed' && msg.channel === channel) {\n setSubscribed(false)\n }\n })\n\n const unsubEvent = onEvent\n ? connection.on('event', (msg) => {\n if (msg.channel === channel) {\n onEvent(msg.event, msg.data, msg)\n }\n })\n : () => {}\n\n void subscribe()\n\n return () => {\n unsubSubscribed()\n unsubEvent()\n connection.unsubscribe(channel)\n setSubscribed(false)\n }\n }, [connection, channel, enabled, subscribe, onEvent])\n\n return { subscribed, subscribe, unsubscribe, publish, bind }\n}\n\nexport interface UsePresenceResult {\n members: PresenceMemberInfo[]\n enter: (data: Record<string, unknown>) => void\n update: (data: Record<string, unknown>) => void\n leave: () => void\n sync: () => void\n}\n\nexport function usePresence(\n connection: ArkNotifyConnection | null,\n channel: string,\n options: { enabled?: boolean; initialData?: Record<string, unknown> } = {}\n): UsePresenceResult {\n const { enabled = true, initialData } = options\n const [members, setMembers] = useState<PresenceMemberInfo[]>([])\n\n useEffect(() => {\n if (!connection || !enabled || !channel) return\n\n const unsubscribe = connection.on('presence', (msg: PresenceMessage) => {\n if (msg.channel !== channel) return\n\n if (msg.action === 'sync' && msg.members) {\n setMembers(msg.members)\n } else if (msg.action === 'enter' && msg.member) {\n setMembers((prev) => {\n const filtered = prev.filter((m) => m.clientId !== msg.member!.clientId)\n return [...filtered, msg.member!]\n })\n } else if (msg.action === 'leave' && msg.member) {\n setMembers((prev) => prev.filter((m) => m.clientId !== msg.member!.clientId))\n } else if (msg.action === 'update' && msg.member) {\n setMembers((prev) =>\n prev.map((m) => (m.clientId === msg.member!.clientId ? msg.member! : m))\n )\n }\n })\n\n if (initialData) {\n connection.presenceEnter(channel, initialData)\n }\n\n return unsubscribe\n }, [connection, channel, enabled, initialData])\n\n const enter = useCallback(\n (data: Record<string, unknown>) => connection?.presenceEnter(channel, data),\n [connection, channel]\n )\n const update = useCallback(\n (data: Record<string, unknown>) => connection?.presenceUpdate(channel, data),\n [connection, channel]\n )\n const leave = useCallback(() => connection?.presenceLeave(channel), [connection, channel])\n const sync = useCallback(() => connection?.presenceSync(channel), [connection, channel])\n\n return { members, enter, update, leave, sync }\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport type {\n Application,\n CreateApplicationInput,\n UpdateApplicationInput,\n} from '../types'\nimport { ArkNotifyError } from '../utils'\nimport { useArkNotify } from './useArkNotify'\n\nexport interface UseApplicationsResult {\n apps: Application[]\n loading: boolean\n error: ArkNotifyError | null\n refresh: () => Promise<void>\n create: (input: CreateApplicationInput) => Promise<Application>\n update: (id: string, input: UpdateApplicationInput) => Promise<Application>\n remove: (id: string) => Promise<void>\n regenerateSecret: (id: string) => Promise<Application>\n getById: (id: string) => Promise<Application>\n}\n\nexport function useApplications(): UseApplicationsResult {\n const { client } = useArkNotify()\n const [apps, setApps] = useState<Application[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<ArkNotifyError | null>(null)\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const { apps: list } = await client.listApplications()\n setApps(list)\n } catch (err) {\n if (err instanceof ArkNotifyError) setError(err)\n } finally {\n setLoading(false)\n }\n }, [client])\n\n useEffect(() => {\n void refresh()\n }, [refresh])\n\n const create = useCallback(\n async (input: CreateApplicationInput) => {\n const { app } = await client.createApplication(input)\n setApps((prev) => [...prev, app])\n return app\n },\n [client]\n )\n\n const update = useCallback(\n async (id: string, input: UpdateApplicationInput) => {\n const { app } = await client.updateApplication(id, input)\n setApps((prev) => prev.map((a) => (a.id === id ? app : a)))\n return app\n },\n [client]\n )\n\n const remove = useCallback(\n async (id: string) => {\n await client.deleteApplication(id)\n setApps((prev) => prev.filter((a) => a.id !== id))\n },\n [client]\n )\n\n const regenerateSecret = useCallback(\n async (id: string) => {\n const { app } = await client.regenerateSecret(id)\n setApps((prev) => prev.map((a) => (a.id === id ? app : a)))\n return app\n },\n [client]\n )\n\n const getById = useCallback(\n async (id: string) => {\n const { app } = await client.getApplication(id)\n return app\n },\n [client]\n )\n\n return { apps, loading, error, refresh, create, update, remove, regenerateSecret, getById }\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport type { LoginInput, User } from '../types'\nimport { ArkNotifyError } from '../utils'\nimport { useArkNotify } from './useArkNotify'\n\nconst TOKEN_STORAGE_KEY = 'ark-notify-js-token'\n\nexport interface UsePlatformAuthOptions {\n storageKey?: string\n persist?: boolean\n}\n\nexport interface UsePlatformAuthResult {\n user: User | null\n token: string | null\n loading: boolean\n error: ArkNotifyError | null\n login: (input: LoginInput) => Promise<void>\n logout: () => void\n refreshUser: () => Promise<void>\n isAuthenticated: boolean\n}\n\nexport function usePlatformAuth(options: UsePlatformAuthOptions = {}): UsePlatformAuthResult {\n const { client } = useArkNotify()\n const storageKey = options.storageKey ?? TOKEN_STORAGE_KEY\n const persist = options.persist ?? true\n\n const [user, setUser] = useState<User | null>(null)\n const [token, setToken] = useState<string | null>(() => {\n if (!persist || typeof window === 'undefined') return null\n return localStorage.getItem(storageKey)\n })\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<ArkNotifyError | null>(null)\n\n const saveToken = useCallback(\n (newToken: string | null) => {\n setToken(newToken)\n client.setToken(newToken)\n if (persist && typeof window !== 'undefined') {\n if (newToken) {\n localStorage.setItem(storageKey, newToken)\n } else {\n localStorage.removeItem(storageKey)\n }\n }\n },\n [client, persist, storageKey]\n )\n\n const refreshUser = useCallback(async () => {\n if (!token) {\n setUser(null)\n return\n }\n setLoading(true)\n setError(null)\n try {\n client.setToken(token)\n const { user: fetched } = await client.me()\n setUser(fetched)\n } catch (err) {\n setUser(null)\n if (err instanceof ArkNotifyError) {\n setError(err)\n if (err.status === 401) saveToken(null)\n }\n } finally {\n setLoading(false)\n }\n }, [client, token, saveToken])\n\n useEffect(() => {\n if (token) {\n client.setToken(token)\n void refreshUser()\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n const login = useCallback(\n async (input: LoginInput) => {\n setLoading(true)\n setError(null)\n try {\n const res = await client.login(input)\n saveToken(res.token)\n setUser(res.user)\n } catch (err) {\n if (err instanceof ArkNotifyError) setError(err)\n throw err\n } finally {\n setLoading(false)\n }\n },\n [client, saveToken]\n )\n\n const logout = useCallback(() => {\n saveToken(null)\n setUser(null)\n setError(null)\n }, [saveToken])\n\n return {\n user,\n token,\n loading,\n error,\n login,\n logout,\n refreshUser,\n isAuthenticated: !!user && !!token,\n }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport type { ArkNotifySSE } from '../sse'\nimport type { ArkNotifySSEConfig, ConnectedMessage, EventMessage } from '../types'\nimport { useArkNotify } from './useArkNotify'\n\nexport interface UseSSEOptions extends Omit<ArkNotifySSEConfig, 'baseUrl'> {\n enabled?: boolean\n onEvent?: (event: string, data: unknown, message: EventMessage) => void\n}\n\nexport interface UseSSEResult {\n sse: ArkNotifySSE | null\n connected: boolean\n connectionId: string | null\n connectedMessage: ConnectedMessage | null\n connect: () => void\n disconnect: () => void\n bind: (channel: string, event: string, handler: (data: unknown) => void) => () => void\n}\n\nexport function useSSE(options: UseSSEOptions): UseSSEResult {\n const { createSSE } = useArkNotify()\n const { enabled = true, onEvent, ...sseConfig } = options\n\n const sseRef = useRef<ArkNotifySSE | null>(null)\n const [connected, setConnected] = useState(false)\n const [connectedMessage, setConnectedMessage] = useState<ConnectedMessage | null>(null)\n\n if (!sseRef.current) {\n sseRef.current = createSSE(sseConfig)\n }\n\n const sse = sseRef.current!\n\n useEffect(() => {\n if (!enabled) return\n\n const unsubs = [\n sse.on('connected', (msg) => {\n setConnected(true)\n setConnectedMessage(msg)\n }),\n sse.on('close', () => {\n setConnected(false)\n setConnectedMessage(null)\n }),\n onEvent\n ? sse.on('event', (msg) => onEvent(msg.event, msg.data, msg))\n : () => {},\n ]\n\n void sse.connect()\n\n return () => {\n unsubs.forEach((u) => u())\n sse.disconnect()\n setConnected(false)\n }\n }, [sse, enabled, onEvent])\n\n const connect = useCallback(() => void sse.connect(), [sse])\n const disconnect = useCallback(() => sse.disconnect(), [sse])\n\n const bind = useCallback(\n (channel: string, event: string, handler: (data: unknown) => void) =>\n sse.bind(channel, event, (data) => handler(data)),\n [sse]\n )\n\n return {\n sse,\n connected,\n connectionId: sse.getConnectionId(),\n connectedMessage,\n connect,\n disconnect,\n bind,\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/config.ts","../../src/utils.ts","../../src/connection-token.ts","../../src/client.ts","../../src/connection.ts","../../src/sse.ts","../../src/react/context.ts","../../src/react/ArkNotifyProvider.tsx","../../src/react/useArkNotify.ts","../../src/react/hooks.ts","../../src/react/useApplications.ts","../../src/react/usePlatformAuth.ts","../../src/react/useSSE.ts"],"names":["useRef","useCallback","useEffect","useState"],"mappings":";;;;AAAO,IAAM,gBAAA,GAAmB;AAEhC,IAAI,iBAAA;AAOG,SAAS,mBAAmB,MAAA,EAAqC;AACtE,EAAA,IAAI,MAAA,CAAO,YAAY,MAAA,EAAW;AAChC,IAAA,iBAAA,GAAoB,MAAA,CAAO,OAAA;AAAA,EAC7B;AACF;AAEO,SAAS,eAAe,OAAA,EAA0B;AACvD,EAAA,OAAA,CAAQ,OAAA,IAAW,iBAAA,IAAqB,gBAAA,EAAkB,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC7E;;;ACfO,IAAM,cAAA,GAAN,cAA6B,KAAA,CAAM;AAAA,EAMxC,WAAA,CAAY,QAAgB,IAAA,EAAgB;AAC1C,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,KAAA;AACjB,IAAA,IAAA,CAAK,gBAAgB,IAAA,CAAK,aAAA;AAC1B,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AAAA,EACrB;AACF,CAAA;AAEO,SAAS,cAAA,CAAe,SAAiB,IAAA,EAAsB;AACpE,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAChD,EAAA,MAAM,iBAAiB,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,GAAO,IAAI,IAAI,CAAA,CAAA;AAC7D,EAAA,MAAM,OAAA,GAAU,CAAA,EAAG,cAAc,CAAA,EAAG,cAAc,CAAA,CAAA;AAElD,EAAA,OAAO,QAAQ,OAAA,CAAQ,UAAA,EAAY,MAAM,CAAA,CAAE,OAAA,CAAQ,WAAW,KAAK,CAAA;AACrE;AAGO,SAAS,iBAAA,CACd,KACA,MAAA,EACQ;AACR,EAAA,MAAM,QAAQ,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAChC,MAAA,CAAO,CAAC,KAAA,KAAqC;AAC5C,IAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,IAAA,OAAO,UAAU,MAAA,IAAa,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,SAAS,KAAA,KAAU,EAAA;AAAA,EAC/E,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAA,EAAG,mBAAmB,GAAG,CAAC,IAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAE,CAAA,CAC/E,KAAK,GAAG,CAAA;AAEX,EAAA,IAAI,CAAC,OAAO,OAAO,GAAA;AAEnB,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,QAAA,CAAS,GAAG,IAAI,GAAA,GAAM,GAAA;AAC5C,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,SAAS,GAAG,KAAK,CAAA,CAAA;AACnC;AAEO,SAAS,aAAgB,KAAA,EAAyB;AACvD,EAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAc,KAAA,EAAkB,GAAI,KAAA;AAC9D;AAEO,SAAS,iBAAiB,OAAA,EAA0B;AACzD,EAAA,OAAO,OAAA,CAAQ,WAAW,UAAU,CAAA;AACtC;;;ACvCA,SAAS,kBAAkB,OAAA,EAA+C;AACxE,EAAA,IAAI,mBAAmB,OAAA,EAAS;AAC9B,IAAA,MAAM,QAAQ,OAAA,CAAQ,aAAA;AACtB,IAAA,OAAO,KAAA,KAAU,QAAQ,KAAA,KAAU,EAAA;AAAA,EACrC;AACA,EAAA,IAAI,qBAAqB,OAAA,EAAS;AAChC,IAAA,MAAM,QAAQ,OAAA,CAAQ,eAAA;AACtB,IAAA,OAAO,KAAA,KAAU,QAAQ,KAAA,KAAU,EAAA;AAAA,EACrC;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,4BACP,OAAA,EAKA;AACA,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,MAAM,mBAAmB,SAAA,IAAa,QAAA;AACtC,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AAEA,EAAA,IAAI,iBAAA,CAAkB,OAAO,CAAA,IAAK,CAAC,WAAA,EAAa;AAC9C,IAAA,MAAM,IAAI,MAAM,uEAAuE,CAAA;AAAA,EACzF;AAEA,EAAA,MAAM,IAAA,GAA6B;AAAA,IACjC,SAAA,EAAW,gBAAA;AAAA,IACX,WAAW,SAAA,IAAa,QAAA;AAAA,IACxB,GAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,mBAAmB,OAAA,EAAS;AAC9B,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAAA,EACvB,CAAA,MAAA,IAAW,qBAAqB,OAAA,EAAS;AACvC,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AAAA,EACzB;AAEA,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,cAAA,EAAgB;AAAA,GAClB;AAEA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAA,CAAQ,WAAW,IAAI,WAAA,CAAY,MAAA;AACnC,IAAA,OAAA,CAAQ,cAAc,IAAI,WAAA,CAAY,MAAA;AAAA,EACxC;AAEA,EAAA,OAAO;AAAA,IACL,KAAK,CAAA,EAAG,cAAA,CAAe,OAAO,CAAC,gBAAgB,MAAM,CAAA,iBAAA,CAAA;AAAA,IACrD,OAAA;AAAA,IACA;AAAA,GACF;AACF;AASA,eAAsB,qBACpB,OAAA,EACkC;AAClC,EAAA,MAAM,EAAE,OAAO,OAAA,GAAU,UAAA,CAAW,MAAM,IAAA,CAAK,UAAU,GAAE,GAAI,OAAA;AAC/D,EAAA,MAAM,EAAE,GAAA,EAAK,OAAA,EAAS,IAAA,EAAK,GAAI,4BAA4B,OAAO,CAAA;AAElE,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK;AAAA,IAClC,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,GAC1B,CAAA;AAED,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI;AACF,MAAA,SAAA,GAAY,MAAM,SAAS,IAAA,EAAK;AAAA,IAClC,CAAA,CAAA,MAAQ;AACN,MAAA,SAAA,GAAY,EAAE,KAAA,EAAO,gBAAA,EAAkB,OAAA,EAAS,SAAS,UAAA,EAAW;AAAA,IACtE;AACA,IAAA,MAAM,IAAI,cAAA,CAAe,QAAA,CAAS,MAAA,EAAQ,SAAS,CAAA;AAAA,EACrD;AAEA,EAAA,OAAO,SAAS,IAAA,EAAK;AACvB;;;ACrFO,IAAM,kBAAN,MAAsB;AAAA,EAK3B,WAAA,CAAY,MAAA,GAA0C,EAAC,EAAG;AACxD,IAAA,IAAA,CAAK,OAAA,GAAU,cAAA,CAAe,MAAA,EAAQ,OAAO,CAAA;AAC7C,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,KAAA,IAAS,UAAA,CAAW,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,EACjE;AAAA,EAEA,SAAS,KAAA,EAA4B;AACnC,IAAA,IAAA,CAAK,QAAQ,KAAA,IAAS,MAAA;AAAA,EACxB;AAAA,EAEQ,aAAA,GAAoC;AAC1C,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA;AACrC,IAAA,OAAO,KAAA,GAAQ,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,GAAK,MAAA;AAAA,EACrC;AAAA,EAEA,MAAc,OAAA,CAAW,IAAA,EAAc,OAAA,GAA0B,EAAC,EAAe;AAC/E,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG,OAAA,CAAQ;AAAA,KACb;AAEA,IAAA,MAAM,IAAA,GAAO,KAAK,aAAA,EAAc;AAChC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAA,CAAQ,aAAA,GAAgB,IAAA;AAAA,IAC1B;AAEA,IAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,MAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,OAAA,CAAQ,WAAA,CAAY,MAAA;AAC3C,MAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,OAAA,CAAQ,WAAA,CAAY,MAAA;AAAA,IAChD;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAG,IAAA,CAAK,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,MAC5D,MAAA,EAAQ,QAAQ,MAAA,IAAU,KAAA;AAAA,MAC1B,OAAA;AAAA,MACA,IAAA,EAAM,QAAQ,IAAA,KAAS,MAAA,GAAY,KAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA,GAAI;AAAA,KACnE,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,MAAM,SAAS,IAAA,EAAK;AAAA,MAC7B,CAAA,CAAA,MAAQ;AACN,QAAA,IAAA,GAAO,EAAE,KAAA,EAAO,gBAAA,EAAkB,OAAA,EAAS,SAAS,UAAA,EAAW;AAAA,MACjE;AACA,MAAA,MAAM,IAAI,cAAA,CAAe,QAAA,CAAS,MAAA,EAAQ,IAAI,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AAAA;AAAA,EAIA,MAAA,GAAkC;AAChC,IAAA,OAAO,IAAA,CAAK,QAAQ,SAAS,CAAA;AAAA,EAC/B;AAAA;AAAA,EAIA,MAAM,KAAA,EAA0C;AAC9C,IAAA,OAAO,IAAA,CAAK,QAAQ,oBAAA,EAAsB,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,OAAO,CAAA;AAAA,EAC3E;AAAA,EAEA,EAAA,GAA8B;AAC5B,IAAA,OAAO,IAAA,CAAK,QAAQ,iBAAiB,CAAA;AAAA,EACvC;AAAA;AAAA,EAIA,gBAAA,GAAqD;AACnD,IAAA,OAAO,IAAA,CAAK,QAAQ,sBAAsB,CAAA;AAAA,EAC5C;AAAA,EAEA,kBAAkB,KAAA,EAA8D;AAC9E,IAAA,OAAO,IAAA,CAAK,QAAQ,sBAAA,EAAwB,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,OAAO,CAAA;AAAA,EAC7E;AAAA,EAEA,eAAe,EAAA,EAA2C;AACxD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,qBAAA,EAAwB,EAAE,CAAA,CAAE,CAAA;AAAA,EAClD;AAAA,EAEA,iBAAA,CAAkB,IAAY,KAAA,EAA8D;AAC1F,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,qBAAA,EAAwB,EAAE,CAAA,CAAA,EAAI,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,EAClF;AAAA,EAEA,kBAAkB,EAAA,EAAuD;AACvE,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,qBAAA,EAAwB,EAAE,IAAI,EAAE,MAAA,EAAQ,UAAU,CAAA;AAAA,EACxE;AAAA,EAEA,iBAAiB,EAAA,EAA2C;AAC1D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,qBAAA,EAAwB,EAAE,CAAA,kBAAA,CAAA,EAAsB;AAAA,MAClE,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAIA,YAAA,CACE,MAAA,EACA,WAAA,EACA,KAAA,EAC+B;AAC/B,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,aAAA,EAAgB,MAAM,CAAA,OAAA,CAAA,EAAW;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,gBAAA,CACE,MAAA,EACA,WAAA,EACA,KAAA,EAC8B;AAC9B,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,aAAA,EAAgB,MAAM,CAAA,KAAA,CAAA,EAAS;AAAA,MACjD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,oBAAA,CACE,MAAA,EACA,KAAA,EACA,WAAA,EACkC;AAClC,IAAA,OAAO,oBAAA,CAAqB;AAAA,MAC1B,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,MAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAG,KAAA;AAAA,MACH,OAAO,IAAA,CAAK;AAAA,KACb,CAAA;AAAA,EACH;AACF,CAAA;;;AChJO,IAAM,sBAAN,MAA0B;AAAA,EAuB/B,YAAY,MAAA,EAAmC;AAd/C,IAAA,IAAA,CAAQ,EAAA,GAAuB,IAAA;AAC/B,IAAA,IAAA,CAAQ,KAAA,GAAyB,cAAA;AACjC,IAAA,IAAA,CAAQ,YAAA,GAA8B,IAAA;AACtC,IAAA,IAAA,CAAQ,QAAA,GAA0B,IAAA;AAClC,IAAA,IAAA,CAAQ,aAAA,GAAgB,KAAA;AACxB,IAAA,IAAA,CAAiB,kBAAA,uBAAyB,GAAA,EAAY;AACtD,IAAA,IAAA,CAAiB,oBAAA,uBAA2B,GAAA,EAA8B;AAC1E,IAAA,IAAA,CAAiB,SAAA,uBAAgB,GAAA,EAAyC;AAC1E,IAAA,IAAA,CAAQ,gBAAA,GAAmB,CAAA;AAC3B,IAAA,IAAA,CAAQ,cAAA,GAAuD,IAAA;AAC/D,IAAA,IAAA,CAAQ,gBAAA,GAAmB,KAAA;AAC3B,IAAA,IAAA,CAAQ,cAAA,GAAuC,IAAA;AAI7C,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,aAAA,EAAe,IAAA;AAAA,MACf,gBAAA,EAAkB,GAAA;AAAA,MAClB,mBAAA,EAAqB,GAAA;AAAA,MACrB,GAAG,MAAA;AAAA,MACH,OAAA,EAAS,cAAA,CAAe,MAAA,CAAO,OAAO;AAAA,KACxC;AACA,IAAA,IAAA,CAAK,aAAA,GAAgB,MAAA,CAAO,SAAA,IAAa,UAAA,CAAW,SAAA;AAAA,EACtD;AAAA,EAEA,kBAAA,GAAsC;AACpC,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,eAAA,GAAiC;AAC/B,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEA,WAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,eAAA,GAA2B;AACzB,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA,EAEA,qBAAA,GAAkC;AAChC,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,kBAAkB,CAAA;AAAA,EACpC;AAAA,EAEA,EAAA,CAAwB,OAAU,OAAA,EAAkC;AAClE,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA,EAAG;AAC9B,MAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,KAAA,kBAAO,IAAI,KAAK,CAAA;AAAA,IACrC;AACA,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA,CAAG,IAAI,OAAO,CAAA;AACtC,IAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA;AAAA,EACtC;AAAA,EAEA,GAAA,CAAyB,OAAU,OAAA,EAA4B;AAC7D,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA,EAAG,OAAO,OAAO,CAAA;AAAA,EAC3C;AAAA,EAEQ,IAAA,CAA0B,UAAa,IAAA,EAAqC;AAClF,IAAA,KAAA,MAAW,WAAW,IAAA,CAAK,SAAA,CAAU,IAAI,KAAK,CAAA,IAAK,EAAC,EAAG;AACpD,MAAC,OAAA,CAAoD,GAAG,IAAI,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA,EAEQ,SAAS,KAAA,EAA8B;AAC7C,IAAA,IAAI,IAAA,CAAK,UAAU,KAAA,EAAO;AACxB,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,MAAA,IAAA,CAAK,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OAAA,GAAyB;AACvB,IAAA,IAAI,IAAA,CAAK,IAAI,UAAA,KAAe,SAAA,CAAU,QAAQ,IAAA,CAAK,EAAA,EAAI,UAAA,KAAe,SAAA,CAAU,UAAA,EAAY;AAC1F,MAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,IACzB;AAEA,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,OAAO,IAAA,CAAK,cAAA;AAAA,IACd;AAEA,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,SAAA,EAAU,CAAE,QAAQ,MAAM;AACnD,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,IACxB,CAAC,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA,EAEA,MAAc,SAAA,GAA2B;AACvC,IAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AACxB,IAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,IAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,gBAAA,GAAmB,CAAA,GAAI,iBAAiB,YAAY,CAAA;AAEvE,IAAA,IAAI,KAAA,GAAQ,eAAe,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA,KAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAE5E,IAAA,IAAI,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAC1C,IAAA,IAAI,CAAC,KAAA,IAAS,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU;AAClC,MAAA,MAAM,MAAA,GAAS,MAAM,oBAAA,CAAqB;AAAA,QACxC,OAAA,EAAS,KAAK,MAAA,CAAO,OAAA;AAAA,QACrB,MAAA,EAAQ,KAAK,MAAA,CAAO,MAAA;AAAA,QACpB,WAAA,EAAa,KAAK,MAAA,CAAO,WAAA;AAAA,QACzB,SAAA,EAAW,KAAK,MAAA,CAAO,QAAA;AAAA,QACvB,SAAA,EAAW,KAAK,MAAA,CAAO,QAAA;AAAA,QACvB,aAAA,EAAe,KAAK,MAAA,CAAO,aAAA;AAAA,QAC3B,KAAA,EAAO,KAAK,MAAA,CAAO;AAAA,OACpB,CAAA;AACD,MAAA,KAAA,GAAQ,MAAA,CAAO,KAAA;AAAA,IACjB;AAEA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,GAAQ,iBAAA,CAAkB,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA;AAAA,IAC5C,CAAA,MAAA,IAAW,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU;AAC/B,MAAA,KAAA,GAAQ,kBAAkB,KAAA,EAAO,EAAE,UAAU,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAAA,IACrE;AAEA,IAAA,IAAA,CAAK,EAAA,GAAK,IAAI,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA;AAEtC,IAAA,IAAA,CAAK,EAAA,CAAG,SAAS,MAAM;AACrB,MAAA,IAAA,CAAK,gBAAA,GAAmB,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,IAAA,CAAK,EAAA,CAAG,SAAA,GAAY,CAAC,KAAA,KAAU;AAC7B,MAAA,IAAA,CAAK,aAAA,CAAc,MAAM,IAAc,CAAA;AAAA,IACzC,CAAA;AAEA,IAAA,IAAA,CAAK,EAAA,CAAG,UAAU,MAAM;AACtB,MAAA,IAAA,CAAK,KAAK,OAAA,EAAS,EAAE,MAAM,iBAAA,EAAmB,OAAA,EAAS,mBAAmB,CAAA;AAAA,IAC5E,CAAA;AAEA,IAAA,IAAA,CAAK,EAAA,CAAG,OAAA,GAAU,CAAC,KAAA,KAAU;AAC3B,MAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,MAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,MAAA,IAAA,CAAK,IAAA,CAAK,SAAS,EAAE,IAAA,EAAM,MAAM,IAAA,EAAM,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQ,CAAA;AAE7D,MAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,IAAoB,IAAA,CAAK,OAAO,aAAA,EAAe;AACvD,QAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,SAAS,QAAQ,CAAA;AAAA,MACxB;AAAA,IACF,CAAA;AAAA,EACF;AAAA,EAEA,UAAA,GAAmB;AACjB,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,IAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,IAAA,IAAA,CAAK,mBAAmB,KAAA,EAAM;AAC9B,IAAA,IAAA,CAAK,qBAAqB,KAAA,EAAM;AAChC,IAAA,IAAI,KAAK,EAAA,EAAI;AACX,MAAA,IAAA,CAAK,GAAG,KAAA,EAAM;AACd,MAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AAAA,IACZ;AACA,IAAA,IAAA,CAAK,SAAS,cAAc,CAAA;AAAA,EAC9B;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,IAAA,CAAK,SAAS,cAAc,CAAA;AAC5B,IAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,MACjB,IAAA,CAAK,MAAA,CAAO,gBAAA,GAAmB,CAAA,IAAK,IAAA,CAAK,gBAAA;AAAA,MACzC,KAAK,MAAA,CAAO;AAAA,KACd;AACA,IAAA,IAAA,CAAK,gBAAA,EAAA;AACL,IAAA,IAAA,CAAK,iBAAiB,UAAA,CAAW,MAAM,KAAK,IAAA,CAAK,OAAA,IAAW,KAAK,CAAA;AAAA,EACnE;AAAA,EAEQ,mBAAA,GAA4B;AAClC,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,YAAA,CAAa,KAAK,cAAc,CAAA;AAChC,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,IACxB;AAAA,EACF;AAAA,EAEQ,KAAK,OAAA,EAAwC;AACnD,IAAA,IAAI,IAAA,CAAK,EAAA,EAAI,UAAA,KAAe,SAAA,CAAU,IAAA,EAAM;AAC1C,MAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,IAC9C;AACA,IAAA,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,EACtC;AAAA,EAEQ,cAAc,GAAA,EAAmB;AACvC,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAU,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IAC1B,CAAA,CAAA,MAAQ;AACN,MAAA,IAAA,CAAK,KAAK,OAAA,EAAS,EAAE,MAAM,cAAA,EAAgB,OAAA,EAAS,4BAA4B,CAAA;AAChF,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,IAAA,CAAK,WAAW,OAAO,CAAA;AAE5B,IAAA,QAAQ,QAAQ,IAAA;AAAM,MACpB,KAAK,WAAA,EAAa;AAChB,QAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,aAAA;AAC5B,QAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,SAAA;AACxB,QAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,aAAA;AAC7B,QAAA,IAAA,CAAK,SAAS,WAAW,CAAA;AACzB,QAAA,IAAA,CAAK,IAAA,CAAK,aAAa,OAAO,CAAA;AAC9B,QAAA,IAAA,CAAK,cAAA,EAAe;AACpB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,OAAA;AACH,QAAA,IAAA,CAAK,IAAA,CAAK,SAAS,OAAO,CAAA;AAC1B,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAA,CAAK,IAAA,CAAK,YAAY,OAAO,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,OAAA,CAAQ,OAAO,CAAA;AAC3C,QAAA;AAAA,MACF,KAAK,cAAA;AACH,QAAA,IAAA,CAAK,kBAAA,CAAmB,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA;AAC9C,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,IAAA,CAAK,IAAA,CAAK,SAAS,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAS,CAAA;AACnE,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAC5B,QAAA;AAEA;AACJ,EACF;AAAA,EAEQ,cAAA,GAAuB;AAC7B,IAAA,KAAA,MAAW,CAAC,OAAA,EAAS,OAAO,CAAA,IAAK,KAAK,oBAAA,EAAsB;AAC1D,MAAA,KAAK,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,OAAO,CAAA;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,SAAA,CAAU,OAAA,EAAiB,OAAA,GAA4B,EAAC,EAAkB;AAC9E,IAAA,IAAA,CAAK,oBAAA,CAAqB,GAAA,CAAI,OAAA,EAAS,OAAO,CAAA;AAE9C,IAAA,IAAI,IAAA,CAAK,KAAA,KAAU,WAAA,IAAe,CAAC,KAAK,YAAA,EAAc;AACpD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAmC;AAAA,MACvC,MAAA,EAAQ,WAAA;AAAA,MACR;AAAA,KACF;AAEA,IAAA,IAAI,OAAA,CAAQ,OAAA,EAAS,OAAA,CAAQ,OAAA,GAAU,IAAA;AACvC,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,OAAA,CAAQ,QAAA,GAAW,IAAA;AACnB,MAAA,IAAI,OAAA,CAAQ,aAAA,EAAe,OAAA,CAAQ,aAAA,GAAgB,OAAA,CAAQ,aAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,gBAAA,CAAiB,OAAO,CAAA,EAAG;AAC7B,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,OAAA,CAAQ,OAAO,OAAA,CAAQ,IAAA;AAAA,MACzB,CAAA,MAAA,IAAW,IAAA,CAAK,MAAA,CAAO,oBAAA,EAAsB;AAC3C,QAAA,OAAA,CAAQ,OAAO,MAAM,IAAA,CAAK,OAAO,oBAAA,CAAqB,OAAA,EAAS,KAAK,YAAY,CAAA;AAAA,MAClF,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,oBAAoB,OAAO,CAAA,8DAAA;AAAA,SAC7B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,EACnB;AAAA,EAEA,YAAY,OAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,oBAAA,CAAqB,OAAO,OAAO,CAAA;AACxC,IAAA,IAAA,CAAK,kBAAA,CAAmB,OAAO,OAAO,CAAA;AACtC,IAAA,IAAI,IAAA,CAAK,UAAU,WAAA,EAAa;AAC9B,MAAA,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,aAAA,EAAe,SAAS,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,OAAA,CAAQ,OAAA,EAAiB,KAAA,EAAe,IAAA,EAAsB;AAC5D,IAAA,IAAA,CAAK,KAAK,EAAE,MAAA,EAAQ,WAAW,OAAA,EAAS,KAAA,EAAO,MAAM,CAAA;AAAA,EACvD;AAAA,EAEA,aAAA,CAAc,SAAiB,IAAA,EAAqC;AAClE,IAAA,IAAA,CAAK,KAAK,EAAE,MAAA,EAAQ,gBAAA,EAAkB,OAAA,EAAS,MAAM,CAAA;AAAA,EACvD;AAAA,EAEA,cAAA,CAAe,SAAiB,IAAA,EAAqC;AACnE,IAAA,IAAA,CAAK,KAAK,EAAE,MAAA,EAAQ,iBAAA,EAAmB,OAAA,EAAS,MAAM,CAAA;AAAA,EACxD;AAAA,EAEA,cAAc,OAAA,EAAuB;AACnC,IAAA,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,gBAAA,EAAkB,SAAS,CAAA;AAAA,EACjD;AAAA,EAEA,aAAa,OAAA,EAAuB;AAClC,IAAA,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,eAAA,EAAiB,SAAS,CAAA;AAAA,EAChD;AAAA,EAEA,IAAA,GAAa;AACX,IAAA,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAAA,EAC9B;AAAA,EAEA,IAAA,CAAK,OAAA,EAAiB,KAAA,EAAe,OAAA,EAA0C;AAC7E,IAAA,MAAM,QAAA,GAAW,CAAC,OAAA,KAA0B;AAC1C,MAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,OAAA,IAAW,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC1D,QAAA,OAAA,CAAQ,OAAA,CAAQ,MAAM,OAAO,CAAA;AAAA,MAC/B;AAAA,IACF,CAAA;AACA,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,OAAA,EAAS,QAAQ,CAAA;AAAA,EAClC;AAAA,EAEA,OAAA,CAAQ,SAAiB,OAAA,EAA0C;AACjE,IAAA,MAAM,QAAA,GAAW,CAAC,OAAA,KAA0B;AAC1C,MAAA,IAAI,OAAA,CAAQ,YAAY,OAAA,EAAS;AAC/B,QAAA,OAAA,CAAQ,OAAA,CAAQ,MAAM,OAAO,CAAA;AAAA,MAC/B;AAAA,IACF,CAAA;AACA,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,OAAA,EAAS,QAAQ,CAAA;AAAA,EAClC;AACF,CAAA;;;AClUO,IAAM,eAAN,MAAmB;AAAA,EAOxB,YAAY,MAAA,EAA4B;AALxC,IAAA,IAAA,CAAQ,EAAA,GAAyB,IAAA;AACjC,IAAA,IAAA,CAAQ,YAAA,GAA8B,IAAA;AACtC,IAAA,IAAA,CAAiB,SAAA,uBAAgB,GAAA,EAAkD;AAIjF,IAAA,IAAA,CAAK,MAAA,GAAS,EAAE,GAAG,MAAA,EAAQ,SAAS,cAAA,CAAe,MAAA,CAAO,OAAO,CAAA,EAAE;AACnE,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA,CAAO,WAAA,IAAe,UAAA,CAAW,WAAA;AAAA,EAC1D;AAAA,EAEA,eAAA,GAAiC;AAC/B,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEA,EAAA,CAA2B,OAAU,OAAA,EAAqC;AACxE,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA,EAAG;AAC9B,MAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,KAAA,kBAAO,IAAI,KAAK,CAAA;AAAA,IACrC;AACA,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA,CAAG,IAAI,OAAO,CAAA;AACtC,IAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA;AAAA,EACtC;AAAA,EAEA,GAAA,CAA4B,OAAU,OAAA,EAA+B;AACnE,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA,EAAG,OAAO,OAAO,CAAA;AAAA,EAC3C;AAAA,EAEQ,IAAA,CAA6B,UAAa,IAAA,EAAwC;AACxF,IAAA,KAAA,MAAW,WAAW,IAAA,CAAK,SAAA,CAAU,IAAI,KAAK,CAAA,IAAK,EAAC,EAAG;AACpD,MAAC,OAAA,CAAuD,GAAG,IAAI,CAAA;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAI,KAAK,EAAA,EAAI;AAEb,IAAA,MAAM,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAA;AAClD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,IAAA,GAAO,EAAE,GAAG,IAAA,CAAK,MAAA,CAAO,IAAA,EAAK,GAAI,EAAC;AAE9D,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,OAAO,gBAAgB,CAAA;AACpE,IAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,IAAK,IAAA,CAAK,OAAO,oBAAA,IAAwB,CAAC,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM;AAKzF,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAC5C,IAAA,MAAM,SAAA,GAAY,kBAAkB,CAAA,EAAG,IAAI,QAAQ,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,OAAA,CAAA,EAAW;AAAA,MAC9E,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,MACvC,OAAO,KAAA,IAAS,MAAA;AAAA,MAChB,QAAA,EAAU,CAAC,KAAA,IAAS,IAAA,CAAK,OAAO,QAAA,GAAW,IAAA,CAAK,OAAO,QAAA,GAAW,MAAA;AAAA,MAClE,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,OAAA,GAAU,MAAA,GAAS,MAAA;AAAA,MACxC,SAAA,EAAW,KAAK,MAAA,CAAO,SAAA,GAAY,KAAK,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA,GAAI,MAAA;AAAA,MAC3E,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA,GAAI;AAAA,KACnE,CAAA;AAED,IAAA,IAAA,CAAK,EAAA,GAAK,IAAI,IAAA,CAAK,eAAA,CAAgB,SAAS,CAAA;AAE5C,IAAA,IAAA,CAAK,EAAA,CAAG,gBAAA,CAAiB,WAAA,EAAa,CAAC,CAAA,KAAM;AAC3C,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,IAAI,CAAA;AACjC,MAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,aAAA;AAC5B,MAAA,IAAA,CAAK,IAAA,CAAK,aAAa,OAAO,CAAA;AAC9B,MAAA,IAAA,CAAK,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA,IAC9B,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,EAAA,CAAG,gBAAA,CAAiB,OAAA,EAAS,CAAC,CAAA,KAAM;AACvC,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,IAAI,CAAA;AACjC,MAAA,IAAA,CAAK,IAAA,CAAK,SAAS,OAAO,CAAA;AAC1B,MAAA,IAAA,CAAK,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA,IAC9B,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,EAAA,CAAG,gBAAA,CAAiB,UAAA,EAAY,CAAC,CAAA,KAAM;AAC1C,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,IAAI,CAAA;AACjC,MAAA,IAAA,CAAK,IAAA,CAAK,YAAY,OAAO,CAAA;AAC7B,MAAA,IAAA,CAAK,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA,IAC9B,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,EAAA,CAAG,UAAU,MAAM;AACtB,MAAA,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,IAAI,KAAA,CAAM,sBAAsB,CAAC,CAAA;AAAA,IACtD,CAAA;AAAA,EACF;AAAA,EAEA,UAAA,GAAmB;AACjB,IAAA,IAAI,KAAK,EAAA,EAAI;AACX,MAAA,IAAA,CAAK,GAAG,KAAA,EAAM;AACd,MAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,MAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,MAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,IAAA,CACE,OAAA,EACA,KAAA,EACA,OAAA,EACY;AACZ,IAAA,MAAM,QAAA,GAAW,CAAC,OAAA,KAA0B;AAC1C,MAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,OAAA,IAAW,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC1D,QAAA,OAAA,CAAQ,OAAA,CAAQ,MAAM,OAAO,CAAA;AAAA,MAC/B;AAAA,IACF,CAAA;AACA,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,OAAA,EAAS,QAAQ,CAAA;AAAA,EAClC;AAAA,EAEA,OAAA,CAAQ,SAAiB,OAAA,EAAqE;AAC5F,IAAA,MAAM,QAAA,GAAW,CAAC,OAAA,KAA0B;AAC1C,MAAA,IAAI,OAAA,CAAQ,YAAY,OAAA,EAAS;AAC/B,QAAA,OAAA,CAAQ,OAAA,CAAQ,MAAM,OAAO,CAAA;AAAA,MAC/B;AAAA,IACF,CAAA;AACA,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,OAAA,EAAS,QAAQ,CAAA;AAAA,EAClC;AACF,CAAA;ACxHO,IAAM,gBAAA,GAAmB,cAA4C,IAAI,CAAA;AAEzE,SAAS,mBAAA,GAA6C;AAC3D,EAAA,MAAM,GAAA,GAAM,WAAW,gBAAgB,CAAA;AACvC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,GAAA;AACT;ACNO,SAAS,iBAAA,CAAkB;AAAA,EAChC,QAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,EAAO;AACT,CAAA,EAAqC;AACnC,EAAA,MAAM,eAAA,GAAkB,QAAQ,MAAM,cAAA,CAAe,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACxE,EAAA,MAAM,SAAA,GAAY,OAA+B,IAAI,CAAA;AAErD,EAAA,SAAA,CAAU,OAAA,KAAV,SAAA,CAAU,OAAA,GAAY,IAAI,eAAA,CAAgB,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,CAAA,CAAA;AAE5E,EAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AAEzB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAU,MAAA,EAAW;AACzB,IAAA,MAAM,WAAW,OAAO,KAAA,KAAU,aAAc,KAAA,EAAM,IAAK,OAAS,KAAA,IAAS,IAAA;AAC7E,IAAA,MAAA,CAAO,SAAS,QAAQ,CAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AAElB,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACvB,CAAC,WACC,IAAI,mBAAA,CAAoB,EAAE,OAAA,EAAS,eAAA,EAAiB,GAAG,MAAA,EAAQ,CAAA;AAAA,IACjE,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,MAAM,SAAA,GAAY,WAAA;AAAA,IAChB,CAAC,WACC,IAAI,YAAA,CAAa,EAAE,OAAA,EAAS,eAAA,EAAiB,GAAG,MAAA,EAAQ,CAAA;AAAA,IAC1D,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,OAAO,EAAE,OAAA,EAAS,eAAA,EAAiB,MAAA,EAAQ,kBAAkB,SAAA,EAAU,CAAA;AAAA,IACvE,CAAC,eAAA,EAAiB,MAAA,EAAQ,gBAAA,EAAkB,SAAS;AAAA,GACvD;AAEA,EAAA,uBAAO,GAAA,CAAC,gBAAA,CAAiB,QAAA,EAAjB,EAA0B,OAAe,QAAA,EAAS,CAAA;AAC5D;;;AClDO,SAAS,YAAA,GAAe;AAC7B,EAAA,OAAO,mBAAA,EAAoB;AAC7B;AC0BO,SAAS,cAAc,OAAA,EAAoD;AAChF,EAAA,MAAM,EAAE,gBAAA,EAAiB,GAAI,YAAA,EAAa;AAC1C,EAAA,MAAM,EAAE,OAAA,GAAU,IAAA,EAAM,GAAG,kBAAiB,GAAI,OAAA;AAEhD,EAAA,MAAM,aAAA,GAAgBA,OAAmC,IAAI,CAAA;AAC7D,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAkC,IAAI,CAAA;AAEtF,EAAA,IAAI,CAAC,cAAc,OAAA,EAAS;AAC1B,IAAA,aAAA,CAAc,OAAA,GAAU,iBAAiB,gBAAgB,CAAA;AAAA,EAC3D;AAEA,EAAA,MAAM,aAAa,aAAA,CAAc,OAAA;AAEjC,EAAA,MAAM,SAAA,GAAYC,WAAAA;AAAA,IAChB,CAAC,aAAA,KAA8B;AAC7B,MAAA,MAAM,aAAA,GAAgB;AAAA,QACpB,UAAA,CAAW,EAAA,CAAG,OAAA,EAAS,aAAa,CAAA;AAAA,QACpC,UAAA,CAAW,EAAA,CAAG,WAAA,EAAa,CAAC,GAAA,KAAQ;AAClC,UAAA,mBAAA,CAAoB,GAAG,CAAA;AACvB,UAAA,aAAA,EAAc;AAAA,QAChB,CAAC;AAAA,OACH;AACA,MAAA,OAAO,MAAM,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAA,KAAM,GAAG,CAAA;AAAA,IAC/C,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,WAAA,GAAcA,YAAY,MAAM,UAAA,CAAW,oBAAmB,EAAG,CAAC,UAAU,CAAC,CAAA;AACnF,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,SAAA,EAAW,WAAA,EAAa,WAAW,CAAA;AAEtE,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,UAAA,CAAW,OAAA,EAAQ;AAAA,IACrB;AACA,IAAA,OAAO,MAAM,WAAW,UAAA,EAAW;AAAA,EACrC,CAAA,EAAG,CAAC,UAAA,EAAY,OAAO,CAAC,CAAA;AAExB,EAAA,MAAM,OAAA,GAAUD,YAAY,MAAM,UAAA,CAAW,SAAQ,EAAG,CAAC,UAAU,CAAC,CAAA;AACpE,EAAA,MAAM,UAAA,GAAaA,YAAY,MAAM,UAAA,CAAW,YAAW,EAAG,CAAC,UAAU,CAAC,CAAA;AAE1E,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA,EAAc,WAAW,eAAA,EAAgB;AAAA,IACzC,QAAA,EAAU,WAAW,WAAA,EAAY;AAAA,IACjC,aAAA,EAAe,WAAW,eAAA,EAAgB;AAAA,IAC1C,gBAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAeO,SAAS,UAAA,CACd,UAAA,EACA,OAAA,EACA,OAAA,GAA6B,EAAC,EACZ;AAClB,EAAA,MAAM,EAAE,OAAA,GAAU,IAAA,EAAM,OAAA,EAAS,GAAG,kBAAiB,GAAI,OAAA;AACzD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,mBAAA,GAAsBD,OAAO,gBAAgB,CAAA;AACnD,EAAA,mBAAA,CAAoB,OAAA,GAAU,gBAAA;AAE9B,EAAA,MAAM,SAAA,GAAYC,WAAAA;AAAA,IAChB,OAAO,IAAA,KAA4B;AACjC,MAAA,IAAI,CAAC,UAAA,EAAY;AACjB,MAAA,MAAM,UAAA,CAAW,UAAU,OAAA,EAAS,EAAE,GAAG,mBAAA,CAAoB,OAAA,EAAS,GAAG,IAAA,EAAM,CAAA;AAC/E,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAC,YAAY,OAAO;AAAA,GACtB;AAEA,EAAA,MAAM,WAAA,GAAcA,YAAY,MAAM;AACpC,IAAA,UAAA,EAAY,YAAY,OAAO,CAAA;AAC/B,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,UAAA,EAAY,OAAO,CAAC,CAAA;AAExB,EAAA,MAAM,OAAA,GAAUA,WAAAA;AAAA,IACd,CAAC,OAAe,IAAA,KAAmB;AACjC,MAAA,UAAA,EAAY,OAAA,CAAQ,OAAA,EAAS,KAAA,EAAO,IAAI,CAAA;AAAA,IAC1C,CAAA;AAAA,IACA,CAAC,YAAY,OAAO;AAAA,GACtB;AAEA,EAAA,MAAM,IAAA,GAAOA,WAAAA;AAAA,IACX,CAAC,OAAe,OAAA,KAAiC;AAC/C,MAAA,IAAI,CAAC,UAAA,EAAY,OAAO,MAAM;AAAA,MAAC,CAAA;AAC/B,MAAA,OAAO,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,KAAA,EAAO,OAAO,CAAA;AAAA,IAChD,CAAA;AAAA,IACA,CAAC,YAAY,OAAO;AAAA,GACtB;AAEA,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS;AAEzC,IAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,EAAA,CAAG,SAAA,EAAW,CAAC,GAAA,KAAQ;AACxD,MAAA,IAAI,GAAA,CAAI,IAAA,KAAS,YAAA,IAAgB,GAAA,CAAI,YAAY,OAAA,EAAS;AACxD,QAAA,aAAA,CAAc,IAAI,CAAA;AAAA,MACpB;AACA,MAAA,IAAI,GAAA,CAAI,IAAA,KAAS,cAAA,IAAkB,GAAA,CAAI,YAAY,OAAA,EAAS;AAC1D,QAAA,aAAA,CAAc,KAAK,CAAA;AAAA,MACrB;AAAA,IACF,CAAC,CAAA;AAED,IAAA,MAAM,aAAa,OAAA,GACf,UAAA,CAAW,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAQ;AAC9B,MAAA,IAAI,GAAA,CAAI,YAAY,OAAA,EAAS;AAC3B,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAAA,MAClC;AAAA,IACF,CAAC,IACD,MAAM;AAAA,IAAC,CAAA;AAEX,IAAA,KAAK,SAAA,EAAU;AAEf,IAAA,OAAO,MAAM;AACX,MAAA,eAAA,EAAgB;AAChB,MAAA,UAAA,EAAW;AACX,MAAA,UAAA,CAAW,YAAY,OAAO,CAAA;AAC9B,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB,CAAA;AAAA,EACF,GAAG,CAAC,UAAA,EAAY,SAAS,OAAA,EAAS,SAAA,EAAW,OAAO,CAAC,CAAA;AAErD,EAAA,OAAO,EAAE,UAAA,EAAY,SAAA,EAAW,WAAA,EAAa,SAAS,IAAA,EAAK;AAC7D;AAUO,SAAS,WAAA,CACd,UAAA,EACA,OAAA,EACA,OAAA,GAAwE,EAAC,EACtD;AACnB,EAAA,MAAM,EAAE,OAAA,GAAU,IAAA,EAAM,WAAA,EAAY,GAAI,OAAA;AACxC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,QAAA,CAA+B,EAAE,CAAA;AAE/D,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS;AAEzC,IAAA,MAAM,WAAA,GAAc,UAAA,CAAW,EAAA,CAAG,UAAA,EAAY,CAAC,GAAA,KAAyB;AACtE,MAAA,IAAI,GAAA,CAAI,YAAY,OAAA,EAAS;AAE7B,MAAA,IAAI,GAAA,CAAI,MAAA,KAAW,MAAA,IAAU,GAAA,CAAI,OAAA,EAAS;AACxC,QAAA,UAAA,CAAW,IAAI,OAAO,CAAA;AAAA,MACxB,CAAA,MAAA,IAAW,GAAA,CAAI,MAAA,KAAW,OAAA,IAAW,IAAI,MAAA,EAAQ;AAC/C,QAAA,UAAA,CAAW,CAAC,IAAA,KAAS;AACnB,UAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,GAAA,CAAI,MAAA,CAAQ,QAAQ,CAAA;AACvE,UAAA,OAAO,CAAC,GAAG,QAAA,EAAU,GAAA,CAAI,MAAO,CAAA;AAAA,QAClC,CAAC,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,GAAA,CAAI,MAAA,KAAW,OAAA,IAAW,IAAI,MAAA,EAAQ;AAC/C,QAAA,UAAA,CAAW,CAAC,IAAA,KAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,KAAa,GAAA,CAAI,MAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,MAC9E,CAAA,MAAA,IAAW,GAAA,CAAI,MAAA,KAAW,QAAA,IAAY,IAAI,MAAA,EAAQ;AAChD,QAAA,UAAA;AAAA,UAAW,CAAC,IAAA,KACV,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,CAAE,QAAA,KAAa,GAAA,CAAI,MAAA,CAAQ,QAAA,GAAW,GAAA,CAAI,SAAU,CAAE;AAAA,SACzE;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,UAAA,CAAW,aAAA,CAAc,SAAS,WAAW,CAAA;AAAA,IAC/C;AAEA,IAAA,OAAO,WAAA;AAAA,EACT,GAAG,CAAC,UAAA,EAAY,OAAA,EAAS,OAAA,EAAS,WAAW,CAAC,CAAA;AAE9C,EAAA,MAAM,KAAA,GAAQD,WAAAA;AAAA,IACZ,CAAC,IAAA,KAAkC,UAAA,EAAY,aAAA,CAAc,SAAS,IAAI,CAAA;AAAA,IAC1E,CAAC,YAAY,OAAO;AAAA,GACtB;AACA,EAAA,MAAM,MAAA,GAASA,WAAAA;AAAA,IACb,CAAC,IAAA,KAAkC,UAAA,EAAY,cAAA,CAAe,SAAS,IAAI,CAAA;AAAA,IAC3E,CAAC,YAAY,OAAO;AAAA,GACtB;AACA,EAAA,MAAM,KAAA,GAAQA,WAAAA,CAAY,MAAM,UAAA,EAAY,aAAA,CAAc,OAAO,CAAA,EAAG,CAAC,UAAA,EAAY,OAAO,CAAC,CAAA;AACzF,EAAA,MAAM,IAAA,GAAOA,WAAAA,CAAY,MAAM,UAAA,EAAY,YAAA,CAAa,OAAO,CAAA,EAAG,CAAC,UAAA,EAAY,OAAO,CAAC,CAAA;AAEvF,EAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,OAAO,IAAA,EAAK;AAC/C;AC3MO,SAAS,eAAA,GAAyC;AACvD,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,YAAA,EAAa;AAChC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIE,QAAAA,CAAwB,EAAE,CAAA;AAClD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAgC,IAAI,CAAA;AAE9D,EAAA,MAAM,OAAA,GAAUF,YAAY,YAAY;AACtC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,MAAM,OAAO,gBAAA,EAAiB;AACrD,MAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,IACd,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,GAAA,YAAe,cAAA,EAAgB,QAAA,CAAS,GAAG,CAAA;AAAA,IACjD,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAAC,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,MAAA,GAASD,WAAAA;AAAA,IACb,OAAO,KAAA,KAAkC;AACvC,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,MAAM,MAAA,CAAO,kBAAkB,KAAK,CAAA;AACpD,MAAA,OAAA,CAAQ,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,GAAG,CAAC,CAAA;AAChC,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,MAAA,GAASA,WAAAA;AAAA,IACb,OAAO,IAAY,KAAA,KAAkC;AACnD,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,MAAM,MAAA,CAAO,iBAAA,CAAkB,IAAI,KAAK,CAAA;AACxD,MAAA,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,CAAE,EAAA,KAAO,EAAA,GAAK,GAAA,GAAM,CAAE,CAAC,CAAA;AAC1D,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,MAAA,GAASA,WAAAA;AAAA,IACb,OAAO,EAAA,KAAe;AACpB,MAAA,MAAM,MAAA,CAAO,kBAAkB,EAAE,CAAA;AACjC,MAAA,OAAA,CAAQ,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAC,CAAA;AAAA,IACnD,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,gBAAA,GAAmBA,WAAAA;AAAA,IACvB,OAAO,EAAA,KAAe;AACpB,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,MAAM,MAAA,CAAO,iBAAiB,EAAE,CAAA;AAChD,MAAA,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,CAAE,EAAA,KAAO,EAAA,GAAK,GAAA,GAAM,CAAE,CAAC,CAAA;AAC1D,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,OAAA,GAAUA,WAAAA;AAAA,IACd,OAAO,EAAA,KAAe;AACpB,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,MAAM,MAAA,CAAO,eAAe,EAAE,CAAA;AAC9C,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,OAAO,EAAE,MAAM,OAAA,EAAS,KAAA,EAAO,SAAS,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,gBAAA,EAAkB,OAAA,EAAQ;AAC5F;ACnFA,IAAM,iBAAA,GAAoB,qBAAA;AAkBnB,SAAS,eAAA,CAAgB,OAAA,GAAkC,EAAC,EAA0B;AAC3F,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,YAAA,EAAa;AAChC,EAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,iBAAA;AACzC,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,IAAA;AAEnC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIE,SAAsB,IAAI,CAAA;AAClD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,MAAM;AACtD,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,MAAA,KAAW,aAAa,OAAO,IAAA;AACtD,IAAA,OAAO,YAAA,CAAa,QAAQ,UAAU,CAAA;AAAA,EACxC,CAAC,CAAA;AACD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAgC,IAAI,CAAA;AAE9D,EAAA,MAAM,SAAA,GAAYF,WAAAA;AAAA,IAChB,CAAC,QAAA,KAA4B;AAC3B,MAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,MAAA,MAAA,CAAO,SAAS,QAAQ,CAAA;AACxB,MAAA,IAAI,OAAA,IAAW,OAAO,MAAA,KAAW,WAAA,EAAa;AAC5C,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,YAAA,CAAa,OAAA,CAAQ,YAAY,QAAQ,CAAA;AAAA,QAC3C,CAAA,MAAO;AACL,UAAA,YAAA,CAAa,WAAW,UAAU,CAAA;AAAA,QACpC;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,OAAA,EAAS,UAAU;AAAA,GAC9B;AAEA,EAAA,MAAM,WAAA,GAAcA,YAAY,YAAY;AAC1C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,SAAS,KAAK,CAAA;AACrB,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,MAAM,OAAO,EAAA,EAAG;AAC1C,MAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,IACjB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,IAAI,eAAe,cAAA,EAAgB;AACjC,QAAA,QAAA,CAAS,GAAG,CAAA;AACZ,QAAA,IAAI,GAAA,CAAI,MAAA,KAAW,GAAA,EAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACxC;AAAA,IACF,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAA,EAAO,SAAS,CAAC,CAAA;AAE7B,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAA,CAAO,SAAS,KAAK,CAAA;AACrB,MAAA,KAAK,WAAA,EAAY;AAAA,IACnB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQD,WAAAA;AAAA,IACZ,OAAO,KAAA,KAAsB;AAC3B,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AACpC,QAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AACnB,QAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,MAClB,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,GAAA,YAAe,cAAA,EAAgB,QAAA,CAAS,GAAG,CAAA;AAC/C,QAAA,MAAM,GAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,SAAS;AAAA,GACpB;AAEA,EAAA,MAAM,MAAA,GAASA,YAAY,MAAM;AAC/B,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA,EAAiB,CAAC,CAAC,IAAA,IAAQ,CAAC,CAAC;AAAA,GAC/B;AACF;AC9FO,SAAS,OAAO,OAAA,EAAsC;AAC3D,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,YAAA,EAAa;AACnC,EAAA,MAAM,EAAE,OAAA,GAAU,IAAA,EAAM,OAAA,EAAS,GAAG,WAAU,GAAI,OAAA;AAElD,EAAA,MAAM,MAAA,GAASD,OAA4B,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIG,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAAkC,IAAI,CAAA;AAEtF,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAA,CAAO,OAAA,GAAU,UAAU,SAAS,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,MAAM,MAAA,CAAO,OAAA;AAEnB,EAAAD,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,GAAA,CAAI,EAAA,CAAG,WAAA,EAAa,CAAC,GAAA,KAAQ;AAC3B,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,mBAAA,CAAoB,GAAG,CAAA;AAAA,MACzB,CAAC,CAAA;AAAA,MACD,GAAA,CAAI,EAAA,CAAG,OAAA,EAAS,MAAM;AACpB,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,MAC1B,CAAC,CAAA;AAAA,MACD,OAAA,GACI,GAAA,CAAI,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAQ,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,IAAA,EAAM,GAAG,CAAC,IAC1D,MAAM;AAAA,MAAC;AAAA,KACb;AAEA,IAAA,KAAK,IAAI,OAAA,EAAQ;AAEjB,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA;AACzB,MAAA,GAAA,CAAI,UAAA,EAAW;AACf,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,GAAA,EAAK,OAAA,EAAS,OAAO,CAAC,CAAA;AAE1B,EAAA,MAAM,OAAA,GAAUD,YAAY,MAAM,KAAK,IAAI,OAAA,EAAQ,EAAG,CAAC,GAAG,CAAC,CAAA;AAC3D,EAAA,MAAM,UAAA,GAAaA,YAAY,MAAM,GAAA,CAAI,YAAW,EAAG,CAAC,GAAG,CAAC,CAAA;AAE5D,EAAA,MAAM,IAAA,GAAOA,WAAAA;AAAA,IACX,CAAC,OAAA,EAAiB,KAAA,EAAe,OAAA,KAC/B,GAAA,CAAI,IAAA,CAAK,OAAA,EAAS,KAAA,EAAO,CAAC,IAAA,KAAS,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,IAClD,CAAC,GAAG;AAAA,GACN;AAEA,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA,EAAc,IAAI,eAAA,EAAgB;AAAA,IAClC,gBAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF","file":"index.js","sourcesContent":["export const DEFAULT_BASE_URL = 'https://ark-notify-933303906015.europe-north1.run.app'\n\nlet configuredBaseUrl: string | undefined\n\nexport interface ArkNotifyGlobalConfig {\n baseUrl?: string\n}\n\n/** Set the default base URL once at application startup. */\nexport function configureArkNotify(config: ArkNotifyGlobalConfig): void {\n if (config.baseUrl !== undefined) {\n configuredBaseUrl = config.baseUrl\n }\n}\n\nexport function resolveBaseUrl(baseUrl?: string): string {\n return (baseUrl ?? configuredBaseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '')\n}\n","import type { ApiError } from './types'\n\nexport class ArkNotifyError extends Error {\n readonly status: number\n readonly code: string\n readonly retryAfterSec?: number\n readonly reason?: string\n\n constructor(status: number, body: ApiError) {\n super(body.message)\n this.name = 'ArkNotifyError'\n this.status = status\n this.code = body.error\n this.retryAfterSec = body.retryAfterSec\n this.reason = body.reason\n }\n}\n\nexport function toWebSocketUrl(baseUrl: string, path: string): string {\n const normalizedBase = baseUrl.replace(/\\/$/, '')\n const normalizedPath = path.startsWith('/') ? path : `/${path}`\n const httpUrl = `${normalizedBase}${normalizedPath}`\n // Avoid URL.protocol — not supported in React Native and some runtimes.\n return httpUrl.replace(/^https:/i, 'wss:').replace(/^http:/i, 'ws:')\n}\n\n/** Append query params without URLSearchParams (unsupported in React Native). */\nexport function appendQueryParams(\n url: string,\n params: Record<string, string | undefined | null | false>\n): string {\n const query = Object.entries(params)\n .filter((entry): entry is [string, string] => {\n const value = entry[1]\n return value !== undefined && value !== null && value !== false && value !== ''\n })\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)\n .join('&')\n\n if (!query) return url\n\n const separator = url.includes('?') ? '&' : '?'\n return `${url}${separator}${query}`\n}\n\nexport function resolveValue<T>(value: T | (() => T)): T {\n return typeof value === 'function' ? (value as () => T)() : value\n}\n\nexport function isPrivateChannel(channel: string): boolean {\n return channel.startsWith('private-')\n}\n","import { resolveBaseUrl } from './config'\nimport type { AppCredentials, ConnectionTokenInput, ConnectionTokenResponse } from './types'\nimport { ArkNotifyError } from './utils'\n\nexport interface FetchConnectionTokenOptions extends ConnectionTokenInput {\n baseUrl?: string\n appKey: string\n /** Required unless the application has a serverAuthUrl (or one is passed in the request). */\n credentials?: AppCredentials\n fetch?: typeof fetch\n}\n\nfunction requiresAppSecret(options: FetchConnectionTokenOptions): boolean {\n if ('serverAuthUrl' in options) {\n const value = options.serverAuthUrl\n return value === null || value === ''\n }\n if ('server_auth_url' in options) {\n const value = options.server_auth_url\n return value === null || value === ''\n }\n return false\n}\n\nfunction buildConnectionTokenRequest(\n options: FetchConnectionTokenOptions\n): {\n url: string\n headers: Record<string, string>\n body: ConnectionTokenInput\n} {\n const {\n baseUrl,\n appKey,\n credentials,\n client_id,\n clientId,\n user_data,\n userData,\n ttl,\n capabilities,\n server_auth_url,\n serverAuthUrl,\n } = options\n\n const resolvedClientId = client_id ?? clientId\n if (!resolvedClientId) {\n throw new Error('client_id is required to fetch a connection token')\n }\n\n if (requiresAppSecret(options) && !credentials) {\n throw new Error('credentials are required when serverAuthUrl is explicitly set to null')\n }\n\n const body: ConnectionTokenInput = {\n client_id: resolvedClientId,\n user_data: user_data ?? userData,\n ttl,\n capabilities,\n }\n\n if ('serverAuthUrl' in options) {\n body.serverAuthUrl = serverAuthUrl\n } else if ('server_auth_url' in options) {\n body.server_auth_url = server_auth_url\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n }\n\n if (credentials) {\n headers['X-App-Key'] = credentials.appKey\n headers['X-App-Secret'] = credentials.secret\n }\n\n return {\n url: `${resolveBaseUrl(baseUrl)}/api/v1/apps/${appKey}/connection-token`,\n headers,\n body,\n }\n}\n\n/**\n * Request a signed connection token from the Ark Notify API.\n *\n * Authentication depends on server auth configuration:\n * - Application or request has a `serverAuthUrl`: public `appKey` only (frontend-safe).\n * - No `serverAuthUrl`: `credentials` with app key + secret (backend-only).\n */\nexport async function fetchConnectionToken(\n options: FetchConnectionTokenOptions\n): Promise<ConnectionTokenResponse> {\n const { fetch: fetchFn = globalThis.fetch.bind(globalThis) } = options\n const { url, headers, body } = buildConnectionTokenRequest(options)\n\n const response = await fetchFn(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n })\n\n if (!response.ok) {\n let errorBody: { error: string; message: string; reason?: string; retryAfterSec?: number }\n try {\n errorBody = await response.json()\n } catch {\n errorBody = { error: 'request_failed', message: response.statusText }\n }\n throw new ArkNotifyError(response.status, errorBody)\n }\n\n return response.json() as Promise<ConnectionTokenResponse>\n}\n","import { resolveBaseUrl } from './config'\nimport { fetchConnectionToken } from './connection-token'\nimport { ArkNotifyError, resolveValue } from './utils'\nimport type {\n Application,\n ArkNotifyClientConfig,\n AppCredentials,\n AuthResponse,\n ChannelAuthInput,\n ChannelAuthResponse,\n ConnectionTokenInput,\n ConnectionTokenResponse,\n CreateApplicationInput,\n HealthResponse,\n LoginInput,\n PublishEventInput,\n PublishEventResponse,\n UpdateApplicationInput,\n User,\n} from './types'\n\ntype RequestOptions = {\n method?: string\n body?: unknown\n headers?: Record<string, string>\n credentials?: AppCredentials\n}\n\nexport class ArkNotifyClient {\n private readonly baseUrl: string\n private readonly fetchFn: typeof fetch\n private token?: string | (() => string | null | undefined)\n\n constructor(config: Readonly<ArkNotifyClientConfig> = {}) {\n this.baseUrl = resolveBaseUrl(config?.baseUrl)\n this.token = config.token\n this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis)\n }\n\n setToken(token: string | null): void {\n this.token = token ?? undefined\n }\n\n private getAuthHeader(): string | undefined {\n const token = resolveValue(this.token)\n return token ? `Bearer ${token}` : undefined\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...options.headers,\n }\n\n const auth = this.getAuthHeader()\n if (auth) {\n headers.Authorization = auth\n }\n\n if (options.credentials) {\n headers['X-App-Key'] = options.credentials.appKey\n headers['X-App-Secret'] = options.credentials.secret\n }\n\n const response = await this.fetchFn(`${this.baseUrl}${path}`, {\n method: options.method ?? 'GET',\n headers,\n body: options.body !== undefined ? JSON.stringify(options.body) : undefined,\n })\n\n if (!response.ok) {\n let body: { error: string; message: string; reason?: string; retryAfterSec?: number }\n try {\n body = await response.json()\n } catch {\n body = { error: 'request_failed', message: response.statusText }\n }\n throw new ArkNotifyError(response.status, body)\n }\n\n if (response.status === 204) {\n return undefined as T\n }\n\n return response.json() as Promise<T>\n }\n\n // ── Health ──────────────────────────────────────────────────────────────\n\n health(): Promise<HealthResponse> {\n return this.request('/health')\n }\n\n // ── Platform auth ───────────────────────────────────────────────────────\n\n login(input: LoginInput): Promise<AuthResponse> {\n return this.request('/api/v1/auth/login', { method: 'POST', body: input })\n }\n\n me(): Promise<{ user: User }> {\n return this.request('/api/v1/auth/me')\n }\n\n // ── Applications ────────────────────────────────────────────────────────\n\n listApplications(): Promise<{ apps: Application[] }> {\n return this.request('/api/v1/applications')\n }\n\n createApplication(input: CreateApplicationInput): Promise<{ app: Application }> {\n return this.request('/api/v1/applications', { method: 'POST', body: input })\n }\n\n getApplication(id: string): Promise<{ app: Application }> {\n return this.request(`/api/v1/applications/${id}`)\n }\n\n updateApplication(id: string, input: UpdateApplicationInput): Promise<{ app: Application }> {\n return this.request(`/api/v1/applications/${id}`, { method: 'PUT', body: input })\n }\n\n deleteApplication(id: string): Promise<{ deleted: boolean; id: string }> {\n return this.request(`/api/v1/applications/${id}`, { method: 'DELETE' })\n }\n\n regenerateSecret(id: string): Promise<{ app: Application }> {\n return this.request(`/api/v1/applications/${id}/regenerate-secret`, {\n method: 'POST',\n })\n }\n\n // ── Data plane ──────────────────────────────────────────────────────────\n\n publishEvent(\n appKey: string,\n credentials: AppCredentials,\n input: PublishEventInput\n ): Promise<PublishEventResponse> {\n return this.request(`/api/v1/apps/${appKey}/events`, {\n method: 'POST',\n body: input,\n credentials,\n })\n }\n\n authorizeChannel(\n appKey: string,\n credentials: AppCredentials,\n input: ChannelAuthInput\n ): Promise<ChannelAuthResponse> {\n return this.request(`/api/v1/apps/${appKey}/auth`, {\n method: 'POST',\n body: input,\n credentials,\n })\n }\n\n issueConnectionToken(\n appKey: string,\n input: ConnectionTokenInput,\n credentials?: AppCredentials\n ): Promise<ConnectionTokenResponse> {\n return fetchConnectionToken({\n baseUrl: this.baseUrl,\n appKey,\n credentials,\n ...input,\n fetch: this.fetchFn,\n })\n }\n}\n","import { resolveBaseUrl } from './config'\nimport { fetchConnectionToken } from './connection-token'\nimport type {\n ArkNotifyConnectionConfig,\n ChannelEventHandler,\n ConnectedMessage,\n ConnectionState,\n EventMessage,\n PresenceMessage,\n ServerMessage,\n SubscribeOptions,\n} from './types'\nimport { isPrivateChannel, appendQueryParams, resolveValue, toWebSocketUrl } from './utils'\n\ntype EventMap = {\n state: (state: ConnectionState) => void\n connected: (message: ConnectedMessage) => void\n event: (message: EventMessage) => void\n presence: (message: PresenceMessage) => void\n message: (message: ServerMessage) => void\n error: (error: { code: string; message: string }) => void\n close: (event: { code: number; reason: string }) => void\n}\n\ntype EventName = keyof EventMap\n\nexport class ArkNotifyConnection {\n private readonly config: Required<\n Pick<\n ArkNotifyConnectionConfig,\n 'baseUrl' | 'appKey' | 'autoReconnect' | 'reconnectDelayMs' | 'maxReconnectDelayMs'\n >\n > &\n ArkNotifyConnectionConfig\n\n private ws: WebSocket | null = null\n private state: ConnectionState = 'disconnected'\n private connectionId: string | null = null\n private clientId: string | null = null\n private authenticated = false\n private readonly subscribedChannels = new Set<string>()\n private readonly pendingSubscriptions = new Map<string, SubscribeOptions>()\n private readonly listeners = new Map<EventName, Set<EventMap[EventName]>>()\n private reconnectAttempt = 0\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null\n private intentionalClose = false\n private connectPromise: Promise<void> | null = null\n private readonly WebSocketCtor: typeof WebSocket\n\n constructor(config: ArkNotifyConnectionConfig) {\n this.config = {\n autoReconnect: true,\n reconnectDelayMs: 1000,\n maxReconnectDelayMs: 30000,\n ...config,\n baseUrl: resolveBaseUrl(config.baseUrl),\n }\n this.WebSocketCtor = config.WebSocket ?? globalThis.WebSocket\n }\n\n getConnectionState(): ConnectionState {\n return this.state\n }\n\n getConnectionId(): string | null {\n return this.connectionId\n }\n\n getClientId(): string | null {\n return this.clientId\n }\n\n isAuthenticated(): boolean {\n return this.authenticated\n }\n\n getSubscribedChannels(): string[] {\n return [...this.subscribedChannels]\n }\n\n on<E extends EventName>(event: E, handler: EventMap[E]): () => void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set())\n }\n this.listeners.get(event)!.add(handler)\n return () => this.off(event, handler)\n }\n\n off<E extends EventName>(event: E, handler: EventMap[E]): void {\n this.listeners.get(event)?.delete(handler)\n }\n\n private emit<E extends EventName>(event: E, ...args: Parameters<EventMap[E]>): void {\n for (const handler of this.listeners.get(event) ?? []) {\n ;(handler as (...a: Parameters<EventMap[E]>) => void)(...args)\n }\n }\n\n private setState(state: ConnectionState): void {\n if (this.state !== state) {\n this.state = state\n this.emit('state', state)\n }\n }\n\n connect(): Promise<void> {\n if (this.ws?.readyState === WebSocket.OPEN || this.ws?.readyState === WebSocket.CONNECTING) {\n return Promise.resolve()\n }\n\n if (this.connectPromise) {\n return this.connectPromise\n }\n\n this.connectPromise = this.doConnect().finally(() => {\n this.connectPromise = null\n })\n\n return this.connectPromise\n }\n\n private async doConnect(): Promise<void> {\n this.intentionalClose = false\n this.clearReconnectTimer()\n this.setState(this.reconnectAttempt > 0 ? 'reconnecting' : 'connecting')\n\n let wsUrl = toWebSocketUrl(this.config.baseUrl, `/app/${this.config.appKey}`)\n\n let token = resolveValue(this.config.token)\n if (!token && this.config.clientId) {\n const result = await fetchConnectionToken({\n baseUrl: this.config.baseUrl,\n appKey: this.config.appKey,\n credentials: this.config.credentials,\n client_id: this.config.clientId,\n user_data: this.config.userData,\n serverAuthUrl: this.config.serverAuthUrl,\n fetch: this.config.fetch,\n })\n token = result.token\n }\n\n if (token) {\n wsUrl = appendQueryParams(wsUrl, { token })\n } else if (this.config.clientId) {\n wsUrl = appendQueryParams(wsUrl, { clientId: this.config.clientId })\n }\n\n this.ws = new this.WebSocketCtor(wsUrl)\n\n this.ws.onopen = () => {\n this.reconnectAttempt = 0\n }\n\n this.ws.onmessage = (event) => {\n this.handleMessage(event.data as string)\n }\n\n this.ws.onerror = () => {\n this.emit('error', { code: 'websocket_error', message: 'WebSocket error' })\n }\n\n this.ws.onclose = (event) => {\n this.ws = null\n this.connectionId = null\n this.emit('close', { code: event.code, reason: event.reason })\n\n if (!this.intentionalClose && this.config.autoReconnect) {\n this.scheduleReconnect()\n } else {\n this.setState('failed')\n }\n }\n }\n\n disconnect(): void {\n this.intentionalClose = true\n this.clearReconnectTimer()\n this.subscribedChannels.clear()\n this.pendingSubscriptions.clear()\n if (this.ws) {\n this.ws.close()\n this.ws = null\n }\n this.setState('disconnected')\n }\n\n private scheduleReconnect(): void {\n this.setState('reconnecting')\n const delay = Math.min(\n this.config.reconnectDelayMs * 2 ** this.reconnectAttempt,\n this.config.maxReconnectDelayMs\n )\n this.reconnectAttempt++\n this.reconnectTimer = setTimeout(() => void this.connect(), delay)\n }\n\n private clearReconnectTimer(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer)\n this.reconnectTimer = null\n }\n }\n\n private send(payload: Record<string, unknown>): void {\n if (this.ws?.readyState !== WebSocket.OPEN) {\n throw new Error('WebSocket is not connected')\n }\n this.ws.send(JSON.stringify(payload))\n }\n\n private handleMessage(raw: string): void {\n let message: ServerMessage\n try {\n message = JSON.parse(raw) as ServerMessage\n } catch {\n this.emit('error', { code: 'invalid_json', message: 'Invalid JSON from server' })\n return\n }\n\n this.emit('message', message)\n\n switch (message.type) {\n case 'connected': {\n this.connectionId = message.connection_id\n this.clientId = message.client_id\n this.authenticated = message.authenticated\n this.setState('connected')\n this.emit('connected', message)\n this.resubscribeAll()\n break\n }\n case 'event':\n this.emit('event', message)\n break\n case 'presence':\n this.emit('presence', message)\n break\n case 'subscribed':\n this.subscribedChannels.add(message.channel)\n break\n case 'unsubscribed':\n this.subscribedChannels.delete(message.channel)\n break\n case 'error':\n this.emit('error', { code: message.code, message: message.message })\n break\n case 'ping':\n this.send({ action: 'ping' })\n break\n default:\n break\n }\n }\n\n private resubscribeAll(): void {\n for (const [channel, options] of this.pendingSubscriptions) {\n void this.subscribe(channel, options)\n }\n }\n\n async subscribe(channel: string, options: SubscribeOptions = {}): Promise<void> {\n this.pendingSubscriptions.set(channel, options)\n\n if (this.state !== 'connected' || !this.connectionId) {\n return\n }\n\n const payload: Record<string, unknown> = {\n action: 'subscribe',\n channel,\n }\n\n if (options.history) payload.history = true\n if (options.presence) {\n payload.presence = true\n if (options.presence_data) payload.presence_data = options.presence_data\n }\n\n if (isPrivateChannel(channel)) {\n if (options.auth) {\n payload.auth = options.auth\n } else if (this.config.onPrivateChannelAuth) {\n payload.auth = await this.config.onPrivateChannelAuth(channel, this.connectionId)\n } else {\n throw new Error(\n `Private channel \"${channel}\" requires auth. Provide options.auth or onPrivateChannelAuth.`\n )\n }\n }\n\n this.send(payload)\n }\n\n unsubscribe(channel: string): void {\n this.pendingSubscriptions.delete(channel)\n this.subscribedChannels.delete(channel)\n if (this.state === 'connected') {\n this.send({ action: 'unsubscribe', channel })\n }\n }\n\n publish(channel: string, event: string, data?: unknown): void {\n this.send({ action: 'publish', channel, event, data })\n }\n\n presenceEnter(channel: string, data: Record<string, unknown>): void {\n this.send({ action: 'presence_enter', channel, data })\n }\n\n presenceUpdate(channel: string, data: Record<string, unknown>): void {\n this.send({ action: 'presence_update', channel, data })\n }\n\n presenceLeave(channel: string): void {\n this.send({ action: 'presence_leave', channel })\n }\n\n presenceSync(channel: string): void {\n this.send({ action: 'presence_sync', channel })\n }\n\n ping(): void {\n this.send({ action: 'ping' })\n }\n\n bind(channel: string, event: string, handler: ChannelEventHandler): () => void {\n const listener = (message: EventMessage) => {\n if (message.channel === channel && message.event === event) {\n handler(message.data, message)\n }\n }\n return this.on('event', listener)\n }\n\n bindAll(channel: string, handler: ChannelEventHandler): () => void {\n const listener = (message: EventMessage) => {\n if (message.channel === channel) {\n handler(message.data, message)\n }\n }\n return this.on('event', listener)\n }\n}\n","import { resolveBaseUrl } from './config'\nimport type {\n ArkNotifySSEConfig,\n ConnectedMessage,\n EventMessage,\n PresenceMessage,\n ServerMessage,\n} from './types'\nimport { isPrivateChannel, appendQueryParams, resolveValue } from './utils'\n\ntype SSEEventMap = {\n connected: (message: ConnectedMessage) => void\n event: (message: EventMessage) => void\n presence: (message: PresenceMessage) => void\n message: (message: ServerMessage) => void\n error: (error: Error) => void\n close: () => void\n}\n\ntype SSEEventName = keyof SSEEventMap\n\nexport class ArkNotifySSE {\n private readonly config: ArkNotifySSEConfig & { baseUrl: string }\n private es: EventSource | null = null\n private connectionId: string | null = null\n private readonly listeners = new Map<SSEEventName, Set<SSEEventMap[SSEEventName]>>()\n private readonly EventSourceCtor: typeof EventSource\n\n constructor(config: ArkNotifySSEConfig) {\n this.config = { ...config, baseUrl: resolveBaseUrl(config.baseUrl) }\n this.EventSourceCtor = config.EventSource ?? globalThis.EventSource\n }\n\n getConnectionId(): string | null {\n return this.connectionId\n }\n\n on<E extends SSEEventName>(event: E, handler: SSEEventMap[E]): () => void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set())\n }\n this.listeners.get(event)!.add(handler)\n return () => this.off(event, handler)\n }\n\n off<E extends SSEEventName>(event: E, handler: SSEEventMap[E]): void {\n this.listeners.get(event)?.delete(handler)\n }\n\n private emit<E extends SSEEventName>(event: E, ...args: Parameters<SSEEventMap[E]>): void {\n for (const handler of this.listeners.get(event) ?? []) {\n ;(handler as (...a: Parameters<SSEEventMap[E]>) => void)(...args)\n }\n }\n\n async connect(): Promise<void> {\n if (this.es) return\n\n const base = this.config.baseUrl.replace(/\\/$/, '')\n const authMap = this.config.auth ? { ...this.config.auth } : {}\n\n const privateChannels = this.config.channels.filter(isPrivateChannel)\n if (privateChannels.length > 0 && this.config.onPrivateChannelAuth && !this.config.auth) {\n // Private SSE channels need auth tokens in the query before connect.\n // Fetch tokens server-side and pass them via the `auth` option, or use WebSocket instead.\n }\n\n const token = resolveValue(this.config.token)\n const streamUrl = appendQueryParams(`${base}/app/${this.config.appKey}/stream`, {\n channels: this.config.channels.join(','),\n token: token || undefined,\n clientId: !token && this.config.clientId ? this.config.clientId : undefined,\n history: this.config.history ? 'true' : undefined,\n user_data: this.config.user_data ? JSON.stringify(this.config.user_data) : undefined,\n auth: Object.keys(authMap).length > 0 ? JSON.stringify(authMap) : undefined,\n })\n\n this.es = new this.EventSourceCtor(streamUrl)\n\n this.es.addEventListener('connected', (e) => {\n const message = JSON.parse(e.data) as ConnectedMessage\n this.connectionId = message.connection_id\n this.emit('connected', message)\n this.emit('message', message)\n })\n\n this.es.addEventListener('event', (e) => {\n const message = JSON.parse(e.data) as EventMessage\n this.emit('event', message)\n this.emit('message', message)\n })\n\n this.es.addEventListener('presence', (e) => {\n const message = JSON.parse(e.data) as PresenceMessage\n this.emit('presence', message)\n this.emit('message', message)\n })\n\n this.es.onerror = () => {\n this.emit('error', new Error('SSE connection error'))\n }\n }\n\n disconnect(): void {\n if (this.es) {\n this.es.close()\n this.es = null\n this.connectionId = null\n this.emit('close')\n }\n }\n\n bind(\n channel: string,\n event: string,\n handler: (data: unknown, message: EventMessage) => void\n ): () => void {\n const listener = (message: EventMessage) => {\n if (message.channel === channel && message.event === event) {\n handler(message.data, message)\n }\n }\n return this.on('event', listener)\n }\n\n bindAll(channel: string, handler: (data: unknown, message: EventMessage) => void): () => void {\n const listener = (message: EventMessage) => {\n if (message.channel === channel) {\n handler(message.data, message)\n }\n }\n return this.on('event', listener)\n }\n}\n","import { createContext, useContext } from 'react'\nimport type { ArkNotifyClient } from '../client'\nimport type { ArkNotifyConnection } from '../connection'\nimport type { ArkNotifySSE } from '../sse'\nimport type { ArkNotifyConnectionConfig, ArkNotifySSEConfig } from '../types'\n\nexport interface ArkNotifyContextValue {\n baseUrl: string\n client: ArkNotifyClient\n createConnection: (config: Omit<ArkNotifyConnectionConfig, 'baseUrl'>) => ArkNotifyConnection\n createSSE: (config: Omit<ArkNotifySSEConfig, 'baseUrl'>) => ArkNotifySSE\n}\n\nexport const ArkNotifyContext = createContext<ArkNotifyContextValue | null>(null)\n\nexport function useArkNotifyContext(): ArkNotifyContextValue {\n const ctx = useContext(ArkNotifyContext)\n if (!ctx) {\n throw new Error('useArkNotify must be used within an ArkNotifyProvider')\n }\n return ctx\n}\n","import { useCallback, useEffect, useMemo, useRef, type ReactNode } from 'react'\nimport { ArkNotifyClient } from '../client'\nimport { resolveBaseUrl } from '../config'\nimport { ArkNotifyConnection } from '../connection'\nimport { ArkNotifySSE } from '../sse'\nimport type { ArkNotifyClientConfig, ArkNotifyConnectionConfig, ArkNotifySSEConfig } from '../types'\nimport { ArkNotifyContext } from './context'\n\nexport interface ArkNotifyProviderProps {\n children: ReactNode\n baseUrl?: string\n token?: ArkNotifyClientConfig['token']\n fetch?: ArkNotifyClientConfig['fetch']\n}\n\nexport function ArkNotifyProvider({\n children,\n baseUrl,\n token,\n fetch: fetchFn,\n}: Readonly<ArkNotifyProviderProps>) {\n const resolvedBaseUrl = useMemo(() => resolveBaseUrl(baseUrl), [baseUrl])\n const clientRef = useRef<ArkNotifyClient | null>(null)\n\n clientRef.current ??= new ArkNotifyClient({ baseUrl, token, fetch: fetchFn })\n\n const client = clientRef.current\n\n useEffect(() => {\n if (token === undefined) return\n const resolved = typeof token === 'function' ? (token() ?? null) : (token ?? null)\n client.setToken(resolved)\n }, [client, token])\n\n const createConnection = useCallback(\n (config: Omit<ArkNotifyConnectionConfig, 'baseUrl'>) =>\n new ArkNotifyConnection({ baseUrl: resolvedBaseUrl, ...config }),\n [resolvedBaseUrl]\n )\n\n const createSSE = useCallback(\n (config: Omit<ArkNotifySSEConfig, 'baseUrl'>) =>\n new ArkNotifySSE({ baseUrl: resolvedBaseUrl, ...config }),\n [resolvedBaseUrl]\n )\n\n const value = useMemo(\n () => ({ baseUrl: resolvedBaseUrl, client, createConnection, createSSE }),\n [resolvedBaseUrl, client, createConnection, createSSE]\n )\n\n return <ArkNotifyContext.Provider value={value}>{children}</ArkNotifyContext.Provider>\n}\n","import { useArkNotifyContext } from './context'\n\nexport function useArkNotify() {\n return useArkNotifyContext()\n}\n","import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react'\nimport type { ArkNotifyConnection } from '../connection'\nimport type {\n ArkNotifyConnectionConfig,\n ChannelEventHandler,\n ConnectedMessage,\n ConnectionState,\n EventMessage,\n PresenceMemberInfo,\n PresenceMessage,\n SubscribeOptions,\n} from '../types'\nimport { useArkNotify } from './useArkNotify'\n\nexport interface UseConnectionOptions\n extends Omit<ArkNotifyConnectionConfig, 'baseUrl'> {\n enabled?: boolean\n}\n\nexport interface UseConnectionResult {\n connection: ArkNotifyConnection | null\n state: ConnectionState\n connectionId: string | null\n clientId: string | null\n authenticated: boolean\n connectedMessage: ConnectedMessage | null\n connect: () => Promise<void>\n disconnect: () => void\n}\n\nexport function useConnection(options: UseConnectionOptions): UseConnectionResult {\n const { createConnection } = useArkNotify()\n const { enabled = true, ...connectionConfig } = options\n\n const connectionRef = useRef<ArkNotifyConnection | null>(null)\n const [connectedMessage, setConnectedMessage] = useState<ConnectedMessage | null>(null)\n\n if (!connectionRef.current) {\n connectionRef.current = createConnection(connectionConfig)\n }\n\n const connection = connectionRef.current!\n\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n const unsubscribers = [\n connection.on('state', onStoreChange),\n connection.on('connected', (msg) => {\n setConnectedMessage(msg)\n onStoreChange()\n }),\n ]\n return () => unsubscribers.forEach((u) => u())\n },\n [connection]\n )\n\n const getSnapshot = useCallback(() => connection.getConnectionState(), [connection])\n const state = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n\n useEffect(() => {\n if (enabled) {\n connection.connect()\n }\n return () => connection.disconnect()\n }, [connection, enabled])\n\n const connect = useCallback(() => connection.connect(), [connection])\n const disconnect = useCallback(() => connection.disconnect(), [connection])\n\n return {\n connection,\n state,\n connectionId: connection.getConnectionId(),\n clientId: connection.getClientId(),\n authenticated: connection.isAuthenticated(),\n connectedMessage,\n connect,\n disconnect,\n }\n}\n\nexport interface UseChannelOptions extends SubscribeOptions {\n enabled?: boolean\n onEvent?: (event: string, data: unknown, message: EventMessage) => void\n}\n\nexport interface UseChannelResult {\n subscribed: boolean\n subscribe: (opts?: SubscribeOptions) => Promise<void>\n unsubscribe: () => void\n publish: (event: string, data?: unknown) => void\n bind: (event: string, handler: ChannelEventHandler) => () => void\n}\n\nexport function useChannel(\n connection: ArkNotifyConnection | null,\n channel: string,\n options: UseChannelOptions = {}\n): UseChannelResult {\n const { enabled = true, onEvent, ...subscribeOptions } = options\n const [subscribed, setSubscribed] = useState(false)\n const subscribeOptionsRef = useRef(subscribeOptions)\n subscribeOptionsRef.current = subscribeOptions\n\n const subscribe = useCallback(\n async (opts?: SubscribeOptions) => {\n if (!connection) return\n await connection.subscribe(channel, { ...subscribeOptionsRef.current, ...opts })\n setSubscribed(true)\n },\n [connection, channel]\n )\n\n const unsubscribe = useCallback(() => {\n connection?.unsubscribe(channel)\n setSubscribed(false)\n }, [connection, channel])\n\n const publish = useCallback(\n (event: string, data?: unknown) => {\n connection?.publish(channel, event, data)\n },\n [connection, channel]\n )\n\n const bind = useCallback(\n (event: string, handler: ChannelEventHandler) => {\n if (!connection) return () => {}\n return connection.bind(channel, event, handler)\n },\n [connection, channel]\n )\n\n useEffect(() => {\n if (!connection || !enabled || !channel) return\n\n const unsubSubscribed = connection.on('message', (msg) => {\n if (msg.type === 'subscribed' && msg.channel === channel) {\n setSubscribed(true)\n }\n if (msg.type === 'unsubscribed' && msg.channel === channel) {\n setSubscribed(false)\n }\n })\n\n const unsubEvent = onEvent\n ? connection.on('event', (msg) => {\n if (msg.channel === channel) {\n onEvent(msg.event, msg.data, msg)\n }\n })\n : () => {}\n\n void subscribe()\n\n return () => {\n unsubSubscribed()\n unsubEvent()\n connection.unsubscribe(channel)\n setSubscribed(false)\n }\n }, [connection, channel, enabled, subscribe, onEvent])\n\n return { subscribed, subscribe, unsubscribe, publish, bind }\n}\n\nexport interface UsePresenceResult {\n members: PresenceMemberInfo[]\n enter: (data: Record<string, unknown>) => void\n update: (data: Record<string, unknown>) => void\n leave: () => void\n sync: () => void\n}\n\nexport function usePresence(\n connection: ArkNotifyConnection | null,\n channel: string,\n options: { enabled?: boolean; initialData?: Record<string, unknown> } = {}\n): UsePresenceResult {\n const { enabled = true, initialData } = options\n const [members, setMembers] = useState<PresenceMemberInfo[]>([])\n\n useEffect(() => {\n if (!connection || !enabled || !channel) return\n\n const unsubscribe = connection.on('presence', (msg: PresenceMessage) => {\n if (msg.channel !== channel) return\n\n if (msg.action === 'sync' && msg.members) {\n setMembers(msg.members)\n } else if (msg.action === 'enter' && msg.member) {\n setMembers((prev) => {\n const filtered = prev.filter((m) => m.clientId !== msg.member!.clientId)\n return [...filtered, msg.member!]\n })\n } else if (msg.action === 'leave' && msg.member) {\n setMembers((prev) => prev.filter((m) => m.clientId !== msg.member!.clientId))\n } else if (msg.action === 'update' && msg.member) {\n setMembers((prev) =>\n prev.map((m) => (m.clientId === msg.member!.clientId ? msg.member! : m))\n )\n }\n })\n\n if (initialData) {\n connection.presenceEnter(channel, initialData)\n }\n\n return unsubscribe\n }, [connection, channel, enabled, initialData])\n\n const enter = useCallback(\n (data: Record<string, unknown>) => connection?.presenceEnter(channel, data),\n [connection, channel]\n )\n const update = useCallback(\n (data: Record<string, unknown>) => connection?.presenceUpdate(channel, data),\n [connection, channel]\n )\n const leave = useCallback(() => connection?.presenceLeave(channel), [connection, channel])\n const sync = useCallback(() => connection?.presenceSync(channel), [connection, channel])\n\n return { members, enter, update, leave, sync }\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport type {\n Application,\n CreateApplicationInput,\n UpdateApplicationInput,\n} from '../types'\nimport { ArkNotifyError } from '../utils'\nimport { useArkNotify } from './useArkNotify'\n\nexport interface UseApplicationsResult {\n apps: Application[]\n loading: boolean\n error: ArkNotifyError | null\n refresh: () => Promise<void>\n create: (input: CreateApplicationInput) => Promise<Application>\n update: (id: string, input: UpdateApplicationInput) => Promise<Application>\n remove: (id: string) => Promise<void>\n regenerateSecret: (id: string) => Promise<Application>\n getById: (id: string) => Promise<Application>\n}\n\nexport function useApplications(): UseApplicationsResult {\n const { client } = useArkNotify()\n const [apps, setApps] = useState<Application[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<ArkNotifyError | null>(null)\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const { apps: list } = await client.listApplications()\n setApps(list)\n } catch (err) {\n if (err instanceof ArkNotifyError) setError(err)\n } finally {\n setLoading(false)\n }\n }, [client])\n\n useEffect(() => {\n void refresh()\n }, [refresh])\n\n const create = useCallback(\n async (input: CreateApplicationInput) => {\n const { app } = await client.createApplication(input)\n setApps((prev) => [...prev, app])\n return app\n },\n [client]\n )\n\n const update = useCallback(\n async (id: string, input: UpdateApplicationInput) => {\n const { app } = await client.updateApplication(id, input)\n setApps((prev) => prev.map((a) => (a.id === id ? app : a)))\n return app\n },\n [client]\n )\n\n const remove = useCallback(\n async (id: string) => {\n await client.deleteApplication(id)\n setApps((prev) => prev.filter((a) => a.id !== id))\n },\n [client]\n )\n\n const regenerateSecret = useCallback(\n async (id: string) => {\n const { app } = await client.regenerateSecret(id)\n setApps((prev) => prev.map((a) => (a.id === id ? app : a)))\n return app\n },\n [client]\n )\n\n const getById = useCallback(\n async (id: string) => {\n const { app } = await client.getApplication(id)\n return app\n },\n [client]\n )\n\n return { apps, loading, error, refresh, create, update, remove, regenerateSecret, getById }\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport type { LoginInput, User } from '../types'\nimport { ArkNotifyError } from '../utils'\nimport { useArkNotify } from './useArkNotify'\n\nconst TOKEN_STORAGE_KEY = 'ark-notify-js-token'\n\nexport interface UsePlatformAuthOptions {\n storageKey?: string\n persist?: boolean\n}\n\nexport interface UsePlatformAuthResult {\n user: User | null\n token: string | null\n loading: boolean\n error: ArkNotifyError | null\n login: (input: LoginInput) => Promise<void>\n logout: () => void\n refreshUser: () => Promise<void>\n isAuthenticated: boolean\n}\n\nexport function usePlatformAuth(options: UsePlatformAuthOptions = {}): UsePlatformAuthResult {\n const { client } = useArkNotify()\n const storageKey = options.storageKey ?? TOKEN_STORAGE_KEY\n const persist = options.persist ?? true\n\n const [user, setUser] = useState<User | null>(null)\n const [token, setToken] = useState<string | null>(() => {\n if (!persist || typeof window === 'undefined') return null\n return localStorage.getItem(storageKey)\n })\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<ArkNotifyError | null>(null)\n\n const saveToken = useCallback(\n (newToken: string | null) => {\n setToken(newToken)\n client.setToken(newToken)\n if (persist && typeof window !== 'undefined') {\n if (newToken) {\n localStorage.setItem(storageKey, newToken)\n } else {\n localStorage.removeItem(storageKey)\n }\n }\n },\n [client, persist, storageKey]\n )\n\n const refreshUser = useCallback(async () => {\n if (!token) {\n setUser(null)\n return\n }\n setLoading(true)\n setError(null)\n try {\n client.setToken(token)\n const { user: fetched } = await client.me()\n setUser(fetched)\n } catch (err) {\n setUser(null)\n if (err instanceof ArkNotifyError) {\n setError(err)\n if (err.status === 401) saveToken(null)\n }\n } finally {\n setLoading(false)\n }\n }, [client, token, saveToken])\n\n useEffect(() => {\n if (token) {\n client.setToken(token)\n void refreshUser()\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n const login = useCallback(\n async (input: LoginInput) => {\n setLoading(true)\n setError(null)\n try {\n const res = await client.login(input)\n saveToken(res.token)\n setUser(res.user)\n } catch (err) {\n if (err instanceof ArkNotifyError) setError(err)\n throw err\n } finally {\n setLoading(false)\n }\n },\n [client, saveToken]\n )\n\n const logout = useCallback(() => {\n saveToken(null)\n setUser(null)\n setError(null)\n }, [saveToken])\n\n return {\n user,\n token,\n loading,\n error,\n login,\n logout,\n refreshUser,\n isAuthenticated: !!user && !!token,\n }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport type { ArkNotifySSE } from '../sse'\nimport type { ArkNotifySSEConfig, ConnectedMessage, EventMessage } from '../types'\nimport { useArkNotify } from './useArkNotify'\n\nexport interface UseSSEOptions extends Omit<ArkNotifySSEConfig, 'baseUrl'> {\n enabled?: boolean\n onEvent?: (event: string, data: unknown, message: EventMessage) => void\n}\n\nexport interface UseSSEResult {\n sse: ArkNotifySSE | null\n connected: boolean\n connectionId: string | null\n connectedMessage: ConnectedMessage | null\n connect: () => void\n disconnect: () => void\n bind: (channel: string, event: string, handler: (data: unknown) => void) => () => void\n}\n\nexport function useSSE(options: UseSSEOptions): UseSSEResult {\n const { createSSE } = useArkNotify()\n const { enabled = true, onEvent, ...sseConfig } = options\n\n const sseRef = useRef<ArkNotifySSE | null>(null)\n const [connected, setConnected] = useState(false)\n const [connectedMessage, setConnectedMessage] = useState<ConnectedMessage | null>(null)\n\n if (!sseRef.current) {\n sseRef.current = createSSE(sseConfig)\n }\n\n const sse = sseRef.current!\n\n useEffect(() => {\n if (!enabled) return\n\n const unsubs = [\n sse.on('connected', (msg) => {\n setConnected(true)\n setConnectedMessage(msg)\n }),\n sse.on('close', () => {\n setConnected(false)\n setConnectedMessage(null)\n }),\n onEvent\n ? sse.on('event', (msg) => onEvent(msg.event, msg.data, msg))\n : () => {},\n ]\n\n void sse.connect()\n\n return () => {\n unsubs.forEach((u) => u())\n sse.disconnect()\n setConnected(false)\n }\n }, [sse, enabled, onEvent])\n\n const connect = useCallback(() => void sse.connect(), [sse])\n const disconnect = useCallback(() => sse.disconnect(), [sse])\n\n const bind = useCallback(\n (channel: string, event: string, handler: (data: unknown) => void) =>\n sse.bind(channel, event, (data) => handler(data)),\n [sse]\n )\n\n return {\n sse,\n connected,\n connectionId: sse.getConnectionId(),\n connectedMessage,\n connect,\n disconnect,\n bind,\n }\n}\n"]}
|
|
@@ -119,7 +119,7 @@ declare class ArkNotifySSE {
|
|
|
119
119
|
private readonly config;
|
|
120
120
|
private es;
|
|
121
121
|
private connectionId;
|
|
122
|
-
private listeners;
|
|
122
|
+
private readonly listeners;
|
|
123
123
|
private readonly EventSourceCtor;
|
|
124
124
|
constructor(config: ArkNotifySSEConfig);
|
|
125
125
|
getConnectionId(): string | null;
|
|
@@ -140,7 +140,9 @@ declare class ArkNotifyError extends Error {
|
|
|
140
140
|
constructor(status: number, body: ApiError);
|
|
141
141
|
}
|
|
142
142
|
declare function toWebSocketUrl(baseUrl: string, path: string): string;
|
|
143
|
+
/** Append query params without URLSearchParams (unsupported in React Native). */
|
|
144
|
+
declare function appendQueryParams(url: string, params: Record<string, string | undefined | null | false>): string;
|
|
143
145
|
declare function resolveValue<T>(value: T | (() => T)): T;
|
|
144
146
|
declare function isPrivateChannel(channel: string): boolean;
|
|
145
147
|
|
|
146
|
-
export { ArkNotifyClient as A, DEFAULT_BASE_URL as D, ArkNotifyConnection as a, ArkNotifyError as b, type ArkNotifyGlobalConfig as c, ArkNotifySSE as d,
|
|
148
|
+
export { ArkNotifyClient as A, DEFAULT_BASE_URL as D, ArkNotifyConnection as a, ArkNotifyError as b, type ArkNotifyGlobalConfig as c, ArkNotifySSE as d, appendQueryParams as e, configureArkNotify as f, resolveValue as g, isPrivateChannel as i, resolveBaseUrl as r, toWebSocketUrl as t };
|
|
@@ -119,7 +119,7 @@ declare class ArkNotifySSE {
|
|
|
119
119
|
private readonly config;
|
|
120
120
|
private es;
|
|
121
121
|
private connectionId;
|
|
122
|
-
private listeners;
|
|
122
|
+
private readonly listeners;
|
|
123
123
|
private readonly EventSourceCtor;
|
|
124
124
|
constructor(config: ArkNotifySSEConfig);
|
|
125
125
|
getConnectionId(): string | null;
|
|
@@ -140,7 +140,9 @@ declare class ArkNotifyError extends Error {
|
|
|
140
140
|
constructor(status: number, body: ApiError);
|
|
141
141
|
}
|
|
142
142
|
declare function toWebSocketUrl(baseUrl: string, path: string): string;
|
|
143
|
+
/** Append query params without URLSearchParams (unsupported in React Native). */
|
|
144
|
+
declare function appendQueryParams(url: string, params: Record<string, string | undefined | null | false>): string;
|
|
143
145
|
declare function resolveValue<T>(value: T | (() => T)): T;
|
|
144
146
|
declare function isPrivateChannel(channel: string): boolean;
|
|
145
147
|
|
|
146
|
-
export { ArkNotifyClient as A, DEFAULT_BASE_URL as D, ArkNotifyConnection as a, ArkNotifyError as b, type ArkNotifyGlobalConfig as c, ArkNotifySSE as d,
|
|
148
|
+
export { ArkNotifyClient as A, DEFAULT_BASE_URL as D, ArkNotifyConnection as a, ArkNotifyError as b, type ArkNotifyGlobalConfig as c, ArkNotifySSE as d, appendQueryParams as e, configureArkNotify as f, resolveValue as g, isPrivateChannel as i, resolveBaseUrl as r, toWebSocketUrl as t };
|