@razakalpha/convngx 0.2.5 → 0.2.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/fesm2022/razakalpha-convngx.mjs +9 -15
- package/fesm2022/razakalpha-convngx.mjs.map +1 -1
- package/package.json +8 -8
- package/types/razakalpha-convngx.d.ts +1018 -0
- package/index.d.ts +0 -2678
|
@@ -463,12 +463,11 @@ function convexLiveResource(query, a, b) {
|
|
|
463
463
|
args: argsSig(),
|
|
464
464
|
__r: reloadStamp(),
|
|
465
465
|
}), ...(ngDevMode ? [{ debugName: "request" }] : []));
|
|
466
|
-
const base = resource({
|
|
467
|
-
params: request,
|
|
466
|
+
const base = resource({ ...(ngDevMode ? { debugName: "base" } : {}), params: request,
|
|
468
467
|
stream: async ({ params, abortSignal }) => {
|
|
469
468
|
const s = signal({
|
|
470
469
|
value: keepMode === 'last' ? lastGlobal() : undefined,
|
|
471
|
-
}
|
|
470
|
+
});
|
|
472
471
|
if (!params || !params.args)
|
|
473
472
|
return s; // gated
|
|
474
473
|
const isReload = params.__r !== lastSeenReload;
|
|
@@ -513,8 +512,7 @@ function convexLiveResource(query, a, b) {
|
|
|
513
512
|
});
|
|
514
513
|
abortSignal.addEventListener('abort', () => off(), { once: true });
|
|
515
514
|
return s;
|
|
516
|
-
}
|
|
517
|
-
});
|
|
515
|
+
} });
|
|
518
516
|
// Wrap to bump reloadStamp only when user calls reload()
|
|
519
517
|
const origReload = base.reload.bind(base);
|
|
520
518
|
const wrapped = {
|
|
@@ -574,12 +572,11 @@ function convexMutationResource(mutation, opts) {
|
|
|
574
572
|
const inflight = signal(undefined, ...(ngDevMode ? [{ debugName: "inflight" }] : []));
|
|
575
573
|
const trigger = signal(undefined, ...(ngDevMode ? [{ debugName: "trigger" }] : []));
|
|
576
574
|
let seq = 0;
|
|
577
|
-
const state = resource({
|
|
578
|
-
params: computed(() => trigger()),
|
|
575
|
+
const state = resource({ ...(ngDevMode ? { debugName: "state" } : {}), params: computed(() => trigger()),
|
|
579
576
|
stream: async ({ params, abortSignal }) => {
|
|
580
577
|
const out = signal({
|
|
581
578
|
value: undefined,
|
|
582
|
-
}
|
|
579
|
+
});
|
|
583
580
|
if (!params)
|
|
584
581
|
return out;
|
|
585
582
|
const done = () => {
|
|
@@ -638,8 +635,7 @@ function convexMutationResource(mutation, opts) {
|
|
|
638
635
|
inflight.set(undefined);
|
|
639
636
|
}
|
|
640
637
|
return out;
|
|
641
|
-
}
|
|
642
|
-
});
|
|
638
|
+
} });
|
|
643
639
|
const data = computed(() => state.value(), ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
644
640
|
const error = computed(() => state.error(), ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
645
641
|
const run = (async (args) => {
|
|
@@ -674,12 +670,11 @@ function convexActionResource(action, opts) {
|
|
|
674
670
|
const pending = new Map();
|
|
675
671
|
const trigger = signal(undefined, ...(ngDevMode ? [{ debugName: "trigger" }] : []));
|
|
676
672
|
let seq = 0;
|
|
677
|
-
const state = resource({
|
|
678
|
-
params: computed(() => trigger()),
|
|
673
|
+
const state = resource({ ...(ngDevMode ? { debugName: "state" } : {}), params: computed(() => trigger()),
|
|
679
674
|
stream: async ({ params, abortSignal }) => {
|
|
680
675
|
const out = signal({
|
|
681
676
|
value: undefined,
|
|
682
|
-
}
|
|
677
|
+
});
|
|
683
678
|
if (!params)
|
|
684
679
|
return out;
|
|
685
680
|
const done = () => {
|
|
@@ -730,8 +725,7 @@ function convexActionResource(action, opts) {
|
|
|
730
725
|
inflight.set(undefined);
|
|
731
726
|
}
|
|
732
727
|
return out;
|
|
733
|
-
}
|
|
734
|
-
});
|
|
728
|
+
} });
|
|
735
729
|
const data = computed(() => state.value(), ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
736
730
|
const error = computed(() => state.error(), ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
737
731
|
const run = (async (args) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"razakalpha-convngx.mjs","sources":["../../../projects/convex-angular/src/lib/core/helpers.ts","../../../projects/convex-angular/src/lib/core/convex-angular-client.ts","../../../projects/convex-angular/src/lib/core/inject-convex.token.ts","../../../projects/convex-angular/src/lib/auth/auth-client.provider.ts","../../../projects/convex-angular/src/lib/auth/convex-better-auth.provider.ts","../../../projects/convex-angular/src/lib/resources/live.resource.ts","../../../projects/convex-angular/src/lib/setup/convex-angular.providers.ts","../../../projects/convex-angular/src/lib/resources/mutation.resource.ts","../../../projects/convex-angular/src/lib/resources/action.resource.ts","../../../projects/convex-angular/src/public-api.ts","../../../projects/convex-angular/src/razakalpha-convngx.ts"],"sourcesContent":["/**\r\n * Internal helpers for ConvexAngularClient.\r\n * NOTE: Pure refactor; functionality unchanged.\r\n */\r\n\r\nexport const AUTH_KEY = 'convex:jwt';\r\nexport const AUTH_CH = 'convex-auth';\r\n\r\n/** Decode JWT exp claim (ms). Returns 0 if invalid. */\r\nexport function jwtExpMs(jwt: string): number {\r\n try {\r\n const payload = JSON.parse(atob(jwt.split('.')[1] || ''));\r\n return typeof payload?.exp === 'number' ? payload.exp * 1000 : 0;\r\n } catch {\r\n return 0;\r\n }\r\n}\r\n\r\n/** Canonical JSON stringify for stable de-dupe keys. */\r\nexport function stableStringify(input: unknown): string {\r\n const seen = new WeakSet<object>();\r\n const norm = (v: any): any => {\r\n if (v === null || typeof v !== 'object') return v;\r\n if (seen.has(v)) return v;\r\n seen.add(v);\r\n if (Array.isArray(v)) return v.map(norm);\r\n return Object.keys(v)\r\n .sort()\r\n .reduce((acc: any, k) => {\r\n acc[k] = norm(v[k]);\r\n return acc;\r\n }, {});\r\n };\r\n return JSON.stringify(norm(input));\r\n}\r\n\r\n/** sessionStorage helpers (some browsers may throw on access) */\r\nexport const safeSession = {\r\n get: (k: string): string | null => {\r\n try {\r\n return typeof sessionStorage !== 'undefined' ? sessionStorage.getItem(k) : null;\r\n } catch {\r\n return null;\r\n }\r\n },\r\n set: (k: string, v: string) => {\r\n try {\r\n if (typeof sessionStorage !== 'undefined') sessionStorage.setItem(k, v);\r\n } catch {\r\n /* no-op */\r\n }\r\n },\r\n del: (k: string) => {\r\n try {\r\n if (typeof sessionStorage !== 'undefined') sessionStorage.removeItem(k);\r\n } catch {\r\n /* no-op */\r\n }\r\n },\r\n};","/**\r\n * ConvexAngularClient\r\n * - Wraps Convex BaseConvexClient + ConvexHttpClient\r\n * - Integrates Better Auth via pluggable fetcher (setAuth)\r\n * - Caches JWT in sessionStorage with BroadcastChannel sync\r\n * - Auto-refreshes auth token ahead of expiry with jitter\r\n * - Provides:\r\n * - watchQuery: live subscription with localQueryResult + onUpdate\r\n * - query: HTTP one-shot with in-flight de-dupe + 401 retry\r\n * - mutation: supports optimisticUpdate passthrough\r\n * - action: HTTP call with 401 retry\r\n * - Does not change any runtime behavior – documentation and structure only.\r\n */\r\n// src/app/convex-angular-client.ts\r\nimport {\r\n BaseConvexClient,\r\n type BaseConvexClientOptions,\r\n type OptimisticUpdate,\r\n ConvexHttpClient,\r\n} from 'convex/browser';\r\nimport {\r\n FunctionReference,\r\n FunctionArgs,\r\n FunctionReturnType,\r\n getFunctionName,\r\n} from 'convex/server';\r\nimport type { Value } from 'convex/values';\r\nimport type { FetchAccessToken, AuthSnapshot } from './types';\r\nexport type { FetchAccessToken, AuthSnapshot } from './types';\r\nimport { AUTH_KEY, AUTH_CH, jwtExpMs, stableStringify, safeSession } from './helpers';\r\n\r\ntype QueryToken = string;\r\n\r\ntype WatchHandle<Q extends FunctionReference<'query'>> = {\r\n localQueryResult(): FunctionReturnType<Q> | undefined;\r\n onUpdate(cb: () => void): () => void;\r\n unsubscribe(): void;\r\n};\r\n\r\ntype Entry = {\r\n name: string;\r\n args: Record<string, Value>;\r\n listeners: Set<() => void>;\r\n unsubscribe: () => void;\r\n};\r\n\r\ntype StoredToken = { value: string; exp: number };\r\n\r\n/* helpers moved to ./helpers (no behavior change) */\r\n\r\n\r\nconst bc =\r\n typeof BroadcastChannel !== 'undefined'\r\n ? new BroadcastChannel(AUTH_CH)\r\n : (null as BroadcastChannel | null);\r\n\r\nexport class ConvexAngularClient {\r\n private authListeners = new Set<(s: AuthSnapshot) => void>();\r\n private lastSnap?: AuthSnapshot;\r\n // ==== internals ====\r\n private emitAuth() {\r\n const snap = this.getAuthSnapshot();\r\n // de-dupe emissions\r\n if (\r\n this.lastSnap &&\r\n this.lastSnap.isAuthenticated === snap.isAuthenticated &&\r\n this.lastSnap.token === snap.token\r\n ) {\r\n return;\r\n }\r\n this.lastSnap = snap;\r\n for (const cb of this.authListeners) cb(snap);\r\n }\r\n\r\n private base: BaseConvexClient;\r\n private http: ConvexHttpClient;\r\n private byToken = new Map<QueryToken, Entry>();\r\n\r\n private fetchToken?: FetchAccessToken;\r\n private inflightToken?: Promise<string | null>;\r\n private token?: StoredToken;\r\n\r\n private refreshTimer?: number;\r\n private inflightHttp = new Map<string, Promise<any>>();\r\n private authLocked = false;\r\n\r\n private readonly skewMs: number;\r\n\r\n constructor(url: string, opts?: BaseConvexClientOptions & { authSkewMs?: number }) {\r\n this.skewMs = opts?.authSkewMs ?? 30_000;\r\n\r\n this.base = new BaseConvexClient(\r\n url,\r\n (updatedTokens: QueryToken[]) => {\r\n for (const t of updatedTokens) {\r\n const e = this.byToken.get(t);\r\n if (!e) continue;\r\n for (const cb of e.listeners) cb();\r\n }\r\n },\r\n opts,\r\n );\r\n\r\n this.http = new ConvexHttpClient(url);\r\n\r\n // pick up cached token\r\n const raw = safeSession.get(AUTH_KEY);\r\n if (raw) {\r\n try {\r\n const t: StoredToken = JSON.parse(raw);\r\n if (t?.value && t?.exp && Date.now() < t.exp - this.skewMs) {\r\n this.token = t;\r\n this.http.setAuth(t.value);\r\n this.scheduleRefresh();\r\n }\r\n } catch {}\r\n }\r\n // 3) BroadcastChannel: keep as-is (clear only on 'clear', set on 'set')\r\n bc?.addEventListener('message', (ev: MessageEvent) => {\r\n const d: any = ev.data;\r\n if (d?.type === 'set') {\r\n if (this.authLocked) return; // ignore while logging out\r\n this.applyToken(d.token?.value ?? null);\r\n } else if (d?.type === 'clear') {\r\n this.applyToken(null);\r\n }\r\n });\r\n\r\n // visibility/network pokes\r\n const poke = () => {\r\n if (!this.freshTokenInCache()) void this.getToken(true);\r\n };\r\n if (typeof window !== 'undefined') {\r\n window.addEventListener('online', poke);\r\n document.addEventListener?.('visibilitychange', () => {\r\n if (document.visibilityState === 'visible') poke();\r\n });\r\n }\r\n }\r\n\r\n setAuth(fetcher: FetchAccessToken) {\r\n this.fetchToken = fetcher;\r\n this.base.setAuth(\r\n async ({ forceRefreshToken }) => (this.authLocked ? null : this.getToken(forceRefreshToken)),\r\n () => {\r\n // identity changed (connect/reconnect). Do NOT clear token here.\r\n // If we're truly logged out, next HTTP/WS use will 401 and we clear then.\r\n this.inflightToken = undefined;\r\n this.emitAuth(); // soft notify, no flip to false\r\n },\r\n );\r\n }\r\n\r\n /** Optional: call once on app start */\r\n async warmAuth(): Promise<void> {\r\n await this.getToken(true);\r\n }\r\n\r\n private freshTokenInCache(): string | null {\r\n if (!this.token) return null;\r\n return Date.now() < this.token.exp - this.skewMs ? this.token.value : null;\r\n }\r\n\r\n // ==== public auth helpers ====\r\n onAuth(cb: (s: AuthSnapshot) => void): () => void {\r\n cb(this.getAuthSnapshot());\r\n this.authListeners.add(cb);\r\n return () => this.authListeners.delete(cb);\r\n }\r\n\r\n logoutLocal(lock = true) {\r\n if (lock) this.authLocked = true;\r\n this.inflightToken = undefined;\r\n this.applyToken(null); // this is the ONLY place we hard clear locally\r\n }\r\n\r\n // 5) snapshot uses token presence (not freshness)\r\n getAuthSnapshot() {\r\n return {\r\n isAuthenticated: !!this.token?.value,\r\n token: this.token?.value ?? null,\r\n exp: this.token?.exp,\r\n };\r\n }\r\n\r\n /** Allow re-auth then fetch a fresh token (use after successful sign-in) */\r\n async refreshAuth(): Promise<void> {\r\n this.authLocked = false;\r\n await this.getToken(true);\r\n }\r\n\r\n // 4) applyToken: always emit after mutation (you already fixed this)\r\n private applyToken(token: string | null) {\r\n if (!token) {\r\n this.token = undefined;\r\n this.http.clearAuth();\r\n safeSession.del(AUTH_KEY);\r\n bc?.postMessage({ type: 'clear' });\r\n if (this.refreshTimer) window.clearTimeout(this.refreshTimer);\r\n } else {\r\n if (this.authLocked) {\r\n this.emitAuth();\r\n return;\r\n }\r\n const exp = jwtExpMs(token);\r\n this.token = { value: token, exp };\r\n this.http.setAuth(token);\r\n safeSession.set(AUTH_KEY, JSON.stringify(this.token));\r\n bc?.postMessage({ type: 'set', token: this.token });\r\n this.scheduleRefresh();\r\n }\r\n this.emitAuth();\r\n }\r\n\r\n private scheduleRefresh() {\r\n if (!this.token) return;\r\n if (this.refreshTimer) window.clearTimeout(this.refreshTimer);\r\n const jitter = 2_000 + Math.floor(Math.random() * 2_000);\r\n const due = Math.max(0, this.token.exp - this.skewMs - Date.now() - jitter);\r\n this.refreshTimer = window.setTimeout(() => {\r\n void this.getToken(true);\r\n }, due);\r\n }\r\n\r\n private async getToken(force: boolean): Promise<string | null> {\r\n if (!this.fetchToken || this.authLocked) return null; // 🔒 deny any token\r\n const cached = this.freshTokenInCache();\r\n if (!force && cached) return cached;\r\n\r\n if (!this.inflightToken) {\r\n this.inflightToken = (async () => {\r\n const t = await this.fetchToken!({ forceRefreshToken: true });\r\n // ignore token if we got locked while waiting\r\n if (this.authLocked) {\r\n this.emitAuth(); // ensure listeners see current (likely false)\r\n return null;\r\n }\r\n this.applyToken(t ?? null);\r\n return t ?? null;\r\n })().finally(() => setTimeout(() => (this.inflightToken = undefined), 0));\r\n }\r\n return await this.inflightToken;\r\n }\r\n\r\n private async ensureHttpAuth(): Promise<void> {\r\n await this.getToken(false);\r\n }\r\n\r\n // ——— live query ———\r\n watchQuery<Q extends FunctionReference<'query'>>(q: Q, args: FunctionArgs<Q>): WatchHandle<Q> {\r\n const name = getFunctionName(q);\r\n const valueArgs = (args ?? {}) as unknown as Record<string, Value>;\r\n const { queryToken, unsubscribe } = this.base.subscribe(name, valueArgs);\r\n\r\n const entry: Entry = { name, args: valueArgs, listeners: new Set(), unsubscribe };\r\n this.byToken.set(queryToken, entry);\r\n\r\n return {\r\n localQueryResult: () =>\r\n this.base.localQueryResult(name, valueArgs) as FunctionReturnType<Q> | undefined,\r\n onUpdate: (cb) => {\r\n entry.listeners.add(cb);\r\n return () => entry.listeners.delete(cb);\r\n },\r\n unsubscribe: () => {\r\n entry.unsubscribe();\r\n this.byToken.delete(queryToken);\r\n },\r\n };\r\n }\r\n\r\n // ——— mutation ———\r\n async mutation<M extends FunctionReference<'mutation'>>(\r\n m: M,\r\n args: FunctionArgs<M>,\r\n opts?: { optimisticUpdate?: OptimisticUpdate<FunctionArgs<M>> },\r\n ): Promise<FunctionReturnType<M>> {\r\n const name = getFunctionName(m);\r\n return this.base.mutation(\r\n name,\r\n args as any,\r\n opts?.optimisticUpdate ? { optimisticUpdate: opts.optimisticUpdate as any } : undefined,\r\n );\r\n }\r\n // ——— action (no dedupe) ———\r\n async action<A extends FunctionReference<'action'> & { _args: Record<string, never> }>(\r\n a: A,\r\n ): Promise<FunctionReturnType<A>>;\r\n async action<A extends FunctionReference<'action'>>(\r\n a: A,\r\n args: FunctionArgs<A>,\r\n ): Promise<FunctionReturnType<A>>;\r\n async action<A extends FunctionReference<'action'>>(\r\n a: A,\r\n args?: FunctionArgs<A>,\r\n ): Promise<FunctionReturnType<A>> {\r\n await this.ensureHttpAuth();\r\n\r\n const call = () => this.http.action(a, ...(args ? ([args] as any) : []));\r\n\r\n try {\r\n return await call();\r\n } catch (e: any) {\r\n const status = e?.status ?? e?.response?.status;\r\n if (this.fetchToken && status === 401) {\r\n await this.getToken(true);\r\n return await call();\r\n }\r\n throw e;\r\n }\r\n }\r\n\r\n // ——— one-shot query (HTTP with de-dupe) ———\r\n async query<Q extends FunctionReference<'query'> & { _args: Record<string, never> }>(\r\n q: Q,\r\n ): Promise<FunctionReturnType<Q>>;\r\n async query<Q extends FunctionReference<'query'>>(\r\n q: Q,\r\n args: FunctionArgs<Q>,\r\n ): Promise<FunctionReturnType<Q>>;\r\n async query<Q extends FunctionReference<'query'>>(\r\n q: Q,\r\n args?: FunctionArgs<Q>,\r\n ): Promise<FunctionReturnType<Q>> {\r\n await this.ensureHttpAuth();\r\n\r\n const name = getFunctionName(q);\r\n const key = name + ':' + (args ? stableStringify(args) : '');\r\n\r\n if (!this.inflightHttp.has(key)) {\r\n this.inflightHttp.set(\r\n key,\r\n (async () => {\r\n try {\r\n return await this.http.query(q, ...(args ? ([args] as any) : []));\r\n } catch (e: any) {\r\n const status = e?.status ?? e?.response?.status;\r\n if (this.fetchToken && status === 401) {\r\n await this.getToken(true);\r\n return await this.http.query(q, ...(args ? ([args] as any) : []));\r\n }\r\n throw e;\r\n } finally {\r\n setTimeout(() => this.inflightHttp.delete(key), 0);\r\n }\r\n })(),\r\n );\r\n }\r\n return this.inflightHttp.get(key)!;\r\n }\r\n}\r\n","/**\r\n* Injection token and helper for accessing the Convex client from DI.\r\n* Keep this tiny and stable — many helpers rely on it.\r\n*/\r\nimport { inject, InjectionToken } from '@angular/core';\r\nimport { ConvexAngularClient } from './convex-angular-client';\r\n\r\n/** DI token for the configured ConvexAngularClient instance */\r\nexport const CONVEX = new InjectionToken<ConvexAngularClient>('CONVEX');\r\n\r\n/** Convenience helper to inject the Convex client */\r\nexport const injectConvex = () => inject(CONVEX);\r\n","import { InjectionToken, Provider } from '@angular/core';\r\nimport { createAuthClient } from 'better-auth/client';\r\nimport { convexClient, crossDomainClient } from '@convex-dev/better-auth/client/plugins';\r\n\r\ntype AuthConfig = {\r\n baseURL: string;\r\n plugins: [ReturnType<typeof convexClient>, ReturnType<typeof crossDomainClient>];\r\n fetchOptions: { credentials: 'include' };\r\n};\r\n\r\nexport type AuthClient = ReturnType<typeof createAuthClient<AuthConfig>>;\r\n\r\nexport interface ProvideAuthClientOptions {\r\n baseURL: string;\r\n fetchOptions?: RequestInit;\r\n}\r\n\r\n/**\r\n * Un-typed DI token. We don't re-export types; callers who create the client\r\n * get full type safety from better-auth directly.\r\n */\r\nexport const AUTH_CLIENT = new InjectionToken<AuthClient>('AUTH_CLIENT');\r\n\r\n/** Provide a configured Better Auth client via DI (default convex+crossDomain plugins) */\r\nexport function provideAuthClient(opts: ProvideAuthClientOptions): Provider {\r\n return {\r\n provide: AUTH_CLIENT,\r\n useFactory: () =>\r\n createAuthClient({\r\n baseURL: opts.baseURL,\r\n plugins: [convexClient(), crossDomainClient()],\r\n fetchOptions: { credentials: 'include', ...(opts.fetchOptions ?? {}) },\r\n }),\r\n };\r\n}\r\n","/**\r\n * Convex + Better Auth providers.\r\n * - provideConvexBetterAuth: Registers a ConvexAngularClient in DI and wires Better Auth token fetching.\r\n * - provideBetterAuthOttBootstrap: Optional environment initializer to handle cross-domain one-time-token.\r\n *\r\n * No functional changes—cleaned comments and added docs.\r\n */\r\nimport { inject, provideEnvironmentInitializer, Provider } from '@angular/core';\r\nimport { AUTH_CLIENT } from './auth-client.provider';\r\nimport { CONVEX } from '../core/inject-convex.token';\r\nimport { ConvexAngularClient, FetchAccessToken } from '../core/convex-angular-client';\r\n\r\n/** Minimal surface this library relies on from Better Auth client */\r\ninterface AuthClientRequired {\r\n convex: { token: () => Promise<{ data?: { token?: string } | null }> };\r\n crossDomain: {\r\n oneTimeToken: {\r\n verify: (args: { token: string }) => Promise<{ data?: { session?: { token?: string } } }>;\r\n };\r\n };\r\n getSession: (o?: { fetchOptions?: RequestInit }) => Promise<unknown>;\r\n updateSession: () => void;\r\n}\r\nexport interface ConvexBetterAuthOptions {\r\n /** Convex deployment URL, e.g. https://xxx.convex.cloud */\r\n convexUrl: string;\r\n /** Milliseconds before JWT expiry to refresh (default 45s in this provider) */\r\n authSkewMs?: number;\r\n\r\n authClient?: AuthClientRequired; // Optional user-provided Better Auth client\r\n}\r\n\r\n/**\r\n * Registers the Convex client in DI and connects it to Better Auth for JWT retrieval.\r\n * Consumers still need to provide the Better Auth HTTP client via provideAuthClient().\r\n */\r\nexport function provideConvexBetterAuth(opts: ConvexBetterAuthOptions): Provider[] {\r\n return [\r\n {\r\n provide: CONVEX,\r\n useFactory: () => {\r\n const client = new ConvexAngularClient(opts.convexUrl, {\r\n authSkewMs: opts.authSkewMs ?? 45_000,\r\n });\r\n\r\n const auth = inject(AUTH_CLIENT) as AuthClientRequired;\r\n\r\n const fetchAccessToken: FetchAccessToken = async ({ forceRefreshToken }) => {\r\n if (!forceRefreshToken) return null;\r\n\r\n // Retry logic for transient failures (e.g., session not fully propagated)\r\n let lastError: any;\r\n for (let attempt = 0; attempt < 3; attempt++) {\r\n try {\r\n if (attempt > 0) {\r\n // Wait before retry: 50ms, then 100ms\r\n const delay = attempt * 50;\r\n await new Promise((resolve) => setTimeout(resolve, delay));\r\n }\r\n\r\n const { data } = await auth.convex.token();\r\n return data?.token ?? null;\r\n } catch (err: any) {\r\n lastError = err;\r\n // Only retry on \"Failed to fetch\" errors\r\n if (attempt < 2 && err?.message === 'Failed to fetch') {\r\n continue;\r\n }\r\n throw err;\r\n }\r\n }\r\n throw lastError;\r\n };\r\n\r\n client.setAuth(fetchAccessToken);\r\n void client.warmAuth();\r\n return client;\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/**\r\n * Optional environment initializer to handle OTT (?ott=...) once and upgrade to a cookie session.\r\n * Keep separate from main provider for explicit opt-in.\r\n */\r\nexport function provideBetterAuthOttBootstrap() {\r\n return provideEnvironmentInitializer(() => {\r\n (async () => {\r\n const auth = inject(AUTH_CLIENT) as AuthClientRequired;\r\n const url = new URL(window.location.href);\r\n const ott = url.searchParams.get('ott');\r\n if (!ott) return;\r\n\r\n const result = await auth.crossDomain.oneTimeToken.verify({ token: ott });\r\n const session = result?.data?.session;\r\n if (session?.token) {\r\n await auth.getSession({\r\n fetchOptions: {\r\n credentials: 'include',\r\n headers: { Authorization: `Bearer ${session.token}` },\r\n },\r\n });\r\n auth.updateSession();\r\n }\r\n url.searchParams.delete('ott');\r\n window.history.replaceState({}, '', url.toString());\r\n })();\r\n });\r\n}\r\n","// convex-resource.ts\r\nimport {\r\n ResourceRef,\r\n ResourceStreamItem,\r\n computed,\r\n inject,\r\n resource,\r\n signal,\r\n InjectionToken,\r\n Provider,\r\n} from '@angular/core';\r\nimport { FunctionReference, FunctionReturnType } from 'convex/server';\r\nimport { injectConvex } from '../core/inject-convex.token';\r\n\r\nexport type QueryRef = FunctionReference<'query'>;\r\nexport type KeepMode = 'none' | 'last';\r\n\r\nexport interface ConvexResourceOptions {\r\n keep?: KeepMode;\r\n}\r\n\r\nconst DEFAULTS: Required<ConvexResourceOptions> = { keep: 'last' };\r\n\r\nexport const CONVEX_RESOURCE_OPTIONS = new InjectionToken<Required<ConvexResourceOptions>>(\r\n 'CONVEX_RESOURCE_OPTIONS',\r\n { factory: () => DEFAULTS },\r\n);\r\n\r\nexport function provideConvexResourceOptions(opts: Partial<ConvexResourceOptions>): Provider {\r\n return { provide: CONVEX_RESOURCE_OPTIONS, useValue: { ...DEFAULTS, ...opts } };\r\n}\r\n\r\n// “no-args” queries have `_args` compatible with {}\r\ntype NoArgsQuery = QueryRef & { _args: Record<string, never> };\r\n\r\n/** Overloads */\r\nexport function convexLiveResource<Q extends NoArgsQuery>(\r\n query: Q,\r\n opts?: ConvexResourceOptions,\r\n): ResourceRef<FunctionReturnType<Q> | undefined>;\r\nexport function convexLiveResource<Q extends NoArgsQuery>(\r\n query: Q,\r\n params: () => {} | undefined,\r\n opts?: ConvexResourceOptions,\r\n): ResourceRef<FunctionReturnType<Q> | undefined>;\r\nexport function convexLiveResource<Q extends QueryRef>(\r\n query: Q,\r\n params: () => Q['_args'] | undefined,\r\n opts?: ConvexResourceOptions,\r\n): ResourceRef<FunctionReturnType<Q> | undefined>;\r\n\r\n/** Impl */\r\nexport function convexLiveResource<Q extends QueryRef>(\r\n query: Q,\r\n a?: (() => Q['_args'] | undefined) | ConvexResourceOptions,\r\n b?: ConvexResourceOptions,\r\n): ResourceRef<FunctionReturnType<Q> | undefined> {\r\n const convex = injectConvex();\r\n const global = inject(CONVEX_RESOURCE_OPTIONS);\r\n const keepMode = (typeof a === 'function' ? b : a)?.keep ?? global.keep;\r\n\r\n const paramsFactory: (() => Q['_args'] | undefined) | undefined =\r\n typeof a === 'function' ? a : undefined;\r\n\r\n const lastGlobal = signal<FunctionReturnType<Q> | undefined>(undefined);\r\n\r\n const argsSig = computed<Q['_args'] | undefined>(() => {\r\n if (!paramsFactory) return {} as Q['_args']; // no-args: always enabled\r\n return paramsFactory();\r\n });\r\n\r\n // --- reload tagging ---\r\n const reloadStamp = signal(0); // increments only when .reload() is called\r\n let lastSeenReload = 0; // compared inside stream to detect reload\r\n\r\n type ParamEnvelope = { args: Q['_args'] | undefined; __r: number } | undefined;\r\n\r\n const request = computed<ParamEnvelope>(() => ({\r\n args: argsSig(),\r\n __r: reloadStamp(),\r\n }));\r\n\r\n const base = resource<FunctionReturnType<Q> | undefined, ParamEnvelope>({\r\n params: request,\r\n stream: async ({ params, abortSignal }) => {\r\n const s = signal<ResourceStreamItem<FunctionReturnType<Q> | undefined>>({\r\n value: keepMode === 'last' ? lastGlobal() : undefined,\r\n });\r\n\r\n if (!params || !params.args) return s; // gated\r\n const isReload = params.__r !== lastSeenReload;\r\n lastSeenReload = params.__r;\r\n\r\n // One-shot fetch: ONLY on reload\r\n if (isReload) {\r\n convex\r\n .query(query, params.args)\r\n .then((next) => {\r\n if (abortSignal.aborted) return;\r\n s.set({ value: next });\r\n lastGlobal.set(next);\r\n })\r\n .catch((err) => {\r\n if (abortSignal.aborted) return;\r\n s.set({ error: err as Error });\r\n });\r\n }\r\n\r\n // Live subscription (always)\r\n const w = convex.watchQuery(query, params.args as Q['_args']);\r\n\r\n try {\r\n const local = w.localQueryResult();\r\n if (local !== undefined) {\r\n s.set({ value: local });\r\n lastGlobal.set(local);\r\n }\r\n } catch (err) {\r\n s.set({ error: err as Error });\r\n }\r\n\r\n const off = w.onUpdate(() => {\r\n try {\r\n const next = w.localQueryResult();\r\n s.set({ value: next });\r\n lastGlobal.set(next);\r\n } catch (err) {\r\n s.set({ error: err as Error });\r\n }\r\n });\r\n\r\n abortSignal.addEventListener('abort', () => off(), { once: true });\r\n return s;\r\n },\r\n });\r\n\r\n // Wrap to bump reloadStamp only when user calls reload()\r\n const origReload = base.reload.bind(base);\r\n\r\n const wrapped: ResourceRef<FunctionReturnType<Q> | undefined> = {\r\n ...base,\r\n reload: () => {\r\n reloadStamp.set(reloadStamp() + 1);\r\n return origReload();\r\n },\r\n };\r\n\r\n return wrapped;\r\n}\r\n","import { Provider } from '@angular/core';\r\nimport { AUTH_CLIENT, provideAuthClient, type AuthClient } from '../auth/auth-client.provider';\r\nimport { provideConvexBetterAuth } from '../auth/convex-better-auth.provider';\r\nimport { provideConvexResourceOptions, type KeepMode } from '../resources/live.resource';\r\n\r\nexport interface ConvexAngularOptions {\r\n /** Convex deployment URL, e.g. https://xxx.convex.cloud */\r\n convexUrl: string;\r\n /** Better Auth base URL (convex site url), e.g. https://xxx.convex.site */\r\n authBaseURL: string;\r\n /** Skew before JWT expiry to refresh token */\r\n authSkewMs?: number;\r\n /** Default keep mode for live resources ('last' | 'none') */\r\n keep?: KeepMode;\r\n /**\r\n * Optional: user-provided Better Auth client.\r\n * Must include convexClient() and crossDomainClient() plugins.\r\n */\r\n authClient?: AuthClient;\r\n}\r\n\r\n/**\r\n * Single entry-point provider to wire Convex + Better Auth + resource defaults.\r\n * Behavior:\r\n * - If opts.authClient is provided, we use it (and verify required plugins).\r\n * - Else we create a default Better Auth client using authBaseURL with required plugins.\r\n */\r\nexport function provideConvexAngular(opts: ConvexAngularOptions): Provider[] {\r\n const providers: Provider[] = [];\r\n\r\n if (opts.authClient) {\r\n providers.push({\r\n provide: AUTH_CLIENT,\r\n useFactory: () => {\r\n const c = opts.authClient as AuthClient;\r\n const hasConvex = typeof c.convex?.token === 'function';\r\n const hasCross = typeof c.crossDomain?.oneTimeToken?.verify === 'function';\r\n if (!hasConvex || !hasCross) {\r\n throw new Error(\r\n 'Provided AUTH client is missing required plugins: convexClient() and crossDomainClient().',\r\n );\r\n }\r\n return c;\r\n },\r\n });\r\n } else {\r\n // Default client with known plugin set (convex + crossDomain)\r\n providers.push(\r\n provideAuthClient({\r\n baseURL: opts.authBaseURL,\r\n }),\r\n );\r\n }\r\n\r\n providers.push(\r\n ...provideConvexBetterAuth({\r\n convexUrl: opts.convexUrl,\r\n authSkewMs: opts.authSkewMs,\r\n }),\r\n );\r\n\r\n if (opts.keep) {\r\n providers.push(provideConvexResourceOptions({ keep: opts.keep }));\r\n }\r\n return providers;\r\n}\r\n","// convex-mutation-resource.ts\r\nimport {\r\n ResourceRef,\r\n ResourceStreamItem,\r\n computed,\r\n resource,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport type { OptimisticUpdate } from 'convex/browser';\r\nimport { FunctionArgs, FunctionReference, FunctionReturnType } from 'convex/server';\r\nimport { injectConvex } from '../core/inject-convex.token';\r\n\r\nexport type MutationRef = FunctionReference<'mutation'>;\r\ntype NoArgsMutation = MutationRef & { _args: Record<string, never> };\r\ntype IfEmptyArgs<M extends MutationRef, TIfEmpty, TIfNot> = keyof M['_args'] extends never\r\n ? TIfEmpty\r\n : TIfNot;\r\n\r\nexport interface ConvexMutationOptions<M extends MutationRef> {\r\n optimisticUpdate?: OptimisticUpdate<FunctionArgs<M>>;\r\n onSuccess?: (data: FunctionReturnType<M>) => void;\r\n onError?: (err: Error) => void;\r\n /** concurrency: queue = sequential, drop = ignore while inflight, replace = prefer latest */\r\n mode?: 'queue' | 'drop' | 'replace';\r\n /** simple retry */\r\n retries?: number;\r\n retryDelayMs?: (attempt: number) => number;\r\n}\r\n\r\ntype RunFn<M extends MutationRef> = IfEmptyArgs<\r\n M,\r\n (args?: FunctionArgs<M>) => Promise<FunctionReturnType<M>>,\r\n (args: FunctionArgs<M>) => Promise<FunctionReturnType<M>>\r\n>;\r\n\r\nexport interface ConvexMutationResource<M extends MutationRef> {\r\n /** imperative trigger */\r\n run: RunFn<M>;\r\n /** resource-shaped state (bind in templates if you like) */\r\n state: ResourceRef<FunctionReturnType<M> | undefined>;\r\n /** convenience signals */\r\n data: Signal<FunctionReturnType<M> | undefined>;\r\n error: Signal<Error | undefined>;\r\n isRunning: Signal<boolean>;\r\n reset(): void;\r\n}\r\n\r\n/** Overloads for nice run() arg ergonomics */\r\nexport function convexMutationResource<M extends NoArgsMutation>(\r\n mutation: M,\r\n opts?: ConvexMutationOptions<M>,\r\n): ConvexMutationResource<M>;\r\nexport function convexMutationResource<M extends MutationRef>(\r\n mutation: M,\r\n opts?: ConvexMutationOptions<M>,\r\n): ConvexMutationResource<M>;\r\n\r\n/** Single impl */\r\nexport function convexMutationResource<M extends MutationRef>(\r\n mutation: M,\r\n opts?: ConvexMutationOptions<M>,\r\n): ConvexMutationResource<M> {\r\n const convex = injectConvex();\r\n const isRunning = signal(false);\r\n const pending = new Map<number, { resolve: (v: any) => void; reject: (e: any) => void }>();\r\n const inflight = signal<Promise<unknown> | undefined>(undefined);\r\n const trigger = signal<{ id: number; args: FunctionArgs<M> } | undefined>(undefined);\r\n let seq = 0;\r\n\r\n const state = resource<\r\n FunctionReturnType<M> | undefined,\r\n { id: number; args: FunctionArgs<M> } | undefined\r\n >({\r\n params: computed(() => trigger()),\r\n stream: async ({ params, abortSignal }) => {\r\n const out = signal<ResourceStreamItem<FunctionReturnType<M> | undefined>>({\r\n value: undefined,\r\n });\r\n if (!params) return out;\r\n\r\n const done = () => {\r\n // clean out waiter if still present\r\n const w = pending.get(params.id);\r\n if (w) pending.delete(params.id);\r\n };\r\n\r\n const runOnce = async () => {\r\n let attempt = 0;\r\n const retries = opts?.retries ?? 0;\r\n const delay = (n: number) =>\r\n new Promise((r) => setTimeout(r, opts?.retryDelayMs?.(n) ?? 500 * n));\r\n\r\n // NB: Convex mutations don’t support abort; we still observe abortSignal to stop emitting.\r\n // We *do not* call mutation again on aborted; we just stop updating UI.\r\n // If you choose mode: 'replace', older runs get superseded by newer trigger()s.\r\n // That’s the main “cancellation” we can mimic here.\r\n while (true) {\r\n try {\r\n const res = await convex.mutation(mutation, params.args, {\r\n optimisticUpdate: opts?.optimisticUpdate,\r\n });\r\n if (!abortSignal.aborted) {\r\n out.set({ value: res });\r\n opts?.onSuccess?.(res);\r\n pending.get(params.id)?.resolve(res);\r\n }\r\n done();\r\n return;\r\n } catch (e) {\r\n const err = e instanceof Error ? e : new Error(String(e));\r\n if (!abortSignal.aborted) {\r\n out.set({ error: err });\r\n }\r\n if (attempt >= retries) {\r\n opts?.onError?.(err);\r\n pending.get(params.id)?.reject(err);\r\n done();\r\n return;\r\n }\r\n attempt++;\r\n await delay(attempt);\r\n }\r\n }\r\n };\r\n\r\n isRunning.set(true);\r\n try {\r\n const p = runOnce();\r\n inflight.set(p);\r\n await p;\r\n } finally {\r\n if (!abortSignal.aborted) isRunning.set(false);\r\n if (inflight() && (await inflight()) === undefined) inflight.set(undefined);\r\n }\r\n\r\n return out;\r\n },\r\n });\r\n\r\n const data = computed(() => state.value());\r\n const error = computed(() => state.error());\r\n\r\n const run: RunFn<M> = (async (args?: FunctionArgs<M>) => {\r\n const job = { id: ++seq, args: (args ?? ({} as any)) as FunctionArgs<M> };\r\n\r\n if (opts?.mode === 'drop' && inflight()) {\r\n // return the inflight promise if present (best-effort)\r\n return inflight() as Promise<any>;\r\n }\r\n\r\n if (opts?.mode === 'queue' && inflight()) {\r\n await inflight();\r\n }\r\n\r\n const promise = new Promise<FunctionReturnType<M>>((resolve, reject) => {\r\n pending.set(job.id, { resolve, reject });\r\n });\r\n\r\n // \"replace\": push new job; older job’s UI will be superseded by the next emission\r\n trigger.set(job);\r\n return promise;\r\n }) as RunFn<M>;\r\n\r\n const reset = () => {\r\n // clear UI state; does not affect in-flight promise\r\n (state as any).reset?.(); // safe if Angular adds reset later; otherwise ignore\r\n };\r\n\r\n return { run, state, data, error, isRunning: isRunning.asReadonly(), reset };\r\n}\r\n","// convex-action-resource.ts\r\nimport {\r\n ResourceRef,\r\n ResourceStreamItem,\r\n computed,\r\n resource,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport { FunctionArgs, FunctionReference, FunctionReturnType } from 'convex/server';\r\nimport { injectConvex } from '../core/inject-convex.token';\r\n\r\nexport type ActionRef = FunctionReference<'action'>;\r\ntype NoArgsAction = ActionRef & { _args: Record<string, never> };\r\ntype IfEmptyArgs<A extends ActionRef, TIfEmpty, TIfNot> = keyof A['_args'] extends never\r\n ? TIfEmpty\r\n : TIfNot;\r\n\r\nexport interface ConvexActionOptions<A extends ActionRef> {\r\n onSuccess?: (data: FunctionReturnType<A>) => void;\r\n onError?: (err: Error) => void;\r\n /** concurrency: queue = sequential, drop = ignore while inflight, replace = prefer latest */\r\n mode?: 'queue' | 'drop' | 'replace';\r\n /** simple retry */\r\n retries?: number;\r\n retryDelayMs?: (attempt: number) => number;\r\n}\r\n\r\ntype RunFn<A extends ActionRef> = IfEmptyArgs<\r\n A,\r\n (args?: FunctionArgs<A>) => Promise<FunctionReturnType<A>>,\r\n (args: FunctionArgs<A>) => Promise<FunctionReturnType<A>>\r\n>;\r\n\r\nexport interface ConvexActionResource<A extends ActionRef> {\r\n run: RunFn<A>;\r\n state: ResourceRef<FunctionReturnType<A> | undefined>;\r\n data: Signal<FunctionReturnType<A> | undefined>;\r\n error: Signal<Error | undefined>;\r\n isRunning: Signal<boolean>;\r\n reset(): void;\r\n}\r\n\r\n/** Overloads for nice run() arg ergonomics */\r\nexport function convexActionResource<A extends NoArgsAction>(\r\n action: A,\r\n opts?: ConvexActionOptions<A>,\r\n): ConvexActionResource<A>;\r\nexport function convexActionResource<A extends ActionRef>(\r\n action: A,\r\n opts?: ConvexActionOptions<A>,\r\n): ConvexActionResource<A>;\r\n\r\n/** Single impl */\r\nexport function convexActionResource<A extends ActionRef>(\r\n action: A,\r\n opts?: ConvexActionOptions<A>,\r\n): ConvexActionResource<A> {\r\n const convex = injectConvex();\r\n const isRunning = signal(false);\r\n const inflight = signal<Promise<unknown> | undefined>(undefined);\r\n const pending = new Map<number, { resolve: (v: any) => void; reject: (e: any) => void }>();\r\n const trigger = signal<{ id: number; args: FunctionArgs<A> } | undefined>(undefined);\r\n let seq = 0;\r\n\r\n const state = resource<\r\n FunctionReturnType<A> | undefined,\r\n { id: number; args: FunctionArgs<A> } | undefined\r\n >({\r\n params: computed(() => trigger()),\r\n stream: async ({ params, abortSignal }) => {\r\n const out = signal<ResourceStreamItem<FunctionReturnType<A> | undefined>>({\r\n value: undefined,\r\n });\r\n if (!params) return out;\r\n\r\n const done = () => {\r\n const w = pending.get(params.id);\r\n if (w) pending.delete(params.id);\r\n };\r\n\r\n const runOnce = async () => {\r\n let attempt = 0;\r\n const retries = opts?.retries ?? 0;\r\n const delay = (n: number) =>\r\n new Promise((r) => setTimeout(r, opts?.retryDelayMs?.(n) ?? 500 * n));\r\n\r\n while (true) {\r\n try {\r\n const res = await convex.action(action, params.args);\r\n if (!abortSignal.aborted) {\r\n out.set({ value: res });\r\n opts?.onSuccess?.(res);\r\n pending.get(params.id)?.resolve(res);\r\n }\r\n done();\r\n return;\r\n } catch (e) {\r\n const err = e instanceof Error ? e : new Error(String(e));\r\n if (!abortSignal.aborted) out.set({ error: err });\r\n if (attempt >= retries) {\r\n opts?.onError?.(err);\r\n pending.get(params.id)?.reject(err);\r\n done();\r\n return;\r\n }\r\n attempt++;\r\n await delay(attempt);\r\n }\r\n }\r\n };\r\n\r\n isRunning.set(true);\r\n try {\r\n const p = runOnce();\r\n inflight.set(p);\r\n await p;\r\n } finally {\r\n if (!abortSignal.aborted) isRunning.set(false);\r\n if (inflight() && (await inflight()) === undefined) inflight.set(undefined);\r\n }\r\n\r\n return out;\r\n },\r\n });\r\n\r\n const data = computed(() => state.value());\r\n const error = computed(() => state.error());\r\n\r\n const run: RunFn<A> = (async (args?: FunctionArgs<A>) => {\r\n const job = { id: ++seq, args: (args ?? ({} as any)) as FunctionArgs<A> };\r\n\r\n if (opts?.mode === 'drop' && inflight()) {\r\n return inflight() as Promise<FunctionReturnType<A>>;\r\n }\r\n if (opts?.mode === 'queue' && inflight()) {\r\n await inflight();\r\n }\r\n\r\n const promise = new Promise<FunctionReturnType<A>>((resolve, reject) => {\r\n pending.set(job.id, { resolve, reject });\r\n });\r\n\r\n trigger.set(job); // \"replace\" naturally supersedes older emissions\r\n return promise;\r\n }) as RunFn<A>;\r\n\r\n const reset = () => {\r\n (state as any).reset?.();\r\n };\r\n\r\n return { run, state, data, error, isRunning: isRunning.asReadonly(), reset };\r\n}\r\n","/*\r\n * Public API Surface of convex-angular\r\n */\r\n\r\n// Core client and DI token\r\nexport * from './lib/core/convex-angular-client';\r\nexport * from './lib/core/inject-convex.token';\r\n\r\n// One-call setup provider (combine common providers)\r\nexport * from './lib/setup/convex-angular.providers';\r\n\r\n// Better Auth + Convex provider\r\nexport * from './lib/auth/convex-better-auth.provider';\r\nexport * from './lib/auth/auth-client.provider';\r\n\r\n// Angular resource helpers for Convex\r\nexport * from './lib/resources/live.resource';\r\nexport * from './lib/resources/mutation.resource';\r\nexport * from './lib/resources/action.resource';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;AAAA;;;AAGG;AAEI,MAAM,QAAQ,GAAG,YAAY;AAC7B,MAAM,OAAO,GAAG,aAAa;AAEpC;AACM,SAAU,QAAQ,CAAC,GAAW,EAAA;AAClC,IAAA,IAAI;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACzD,QAAA,OAAO,OAAO,OAAO,EAAE,GAAG,KAAK,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;;AAChE,IAAA,MAAM;AACN,QAAA,OAAO,CAAC;;AAEZ;AAEA;AACM,SAAU,eAAe,CAAC,KAAc,EAAA;AAC5C,IAAA,MAAM,IAAI,GAAG,IAAI,OAAO,EAAU;AAClC,IAAA,MAAM,IAAI,GAAG,CAAC,CAAM,KAAS;AAC3B,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAC;AACjD,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACjB,aAAA,IAAI;AACJ,aAAA,MAAM,CAAC,CAAC,GAAQ,EAAE,CAAC,KAAI;YACtB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,YAAA,OAAO,GAAG;SACX,EAAE,EAAE,CAAC;AACV,KAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC;AAEA;AACO,MAAM,WAAW,GAAG;AACzB,IAAA,GAAG,EAAE,CAAC,CAAS,KAAmB;AAChC,QAAA,IAAI;AACF,YAAA,OAAO,OAAO,cAAc,KAAK,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;;AAC/E,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;;KAEd;AACD,IAAA,GAAG,EAAE,CAAC,CAAS,EAAE,CAAS,KAAI;AAC5B,QAAA,IAAI;YACF,IAAI,OAAO,cAAc,KAAK,WAAW;AAAE,gBAAA,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;;AACvE,QAAA,MAAM;;;KAGT;AACD,IAAA,GAAG,EAAE,CAAC,CAAS,KAAI;AACjB,QAAA,IAAI;YACF,IAAI,OAAO,cAAc,KAAK,WAAW;AAAE,gBAAA,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;;AACvE,QAAA,MAAM;;;KAGT;CACF;;AC3DD;;;;;;;;;;;;AAYG;AACH;AAmCA;AAGA,MAAM,EAAE,GACN,OAAO,gBAAgB,KAAK;AAC1B,MAAE,IAAI,gBAAgB,CAAC,OAAO;MAC3B,IAAgC;MAE1B,mBAAmB,CAAA;AACtB,IAAA,aAAa,GAAG,IAAI,GAAG,EAA6B;AACpD,IAAA,QAAQ;;IAER,QAAQ,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;;QAEnC,IACE,IAAI,CAAC,QAAQ;AACb,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe;YACtD,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAClC;YACA;;AAEF,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,aAAa;YAAE,EAAE,CAAC,IAAI,CAAC;;AAGvC,IAAA,IAAI;AACJ,IAAA,IAAI;AACJ,IAAA,OAAO,GAAG,IAAI,GAAG,EAAqB;AAEtC,IAAA,UAAU;AACV,IAAA,aAAa;AACb,IAAA,KAAK;AAEL,IAAA,YAAY;AACZ,IAAA,YAAY,GAAG,IAAI,GAAG,EAAwB;IAC9C,UAAU,GAAG,KAAK;AAET,IAAA,MAAM;IAEvB,WAAA,CAAY,GAAW,EAAE,IAAwD,EAAA;QAC/E,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,UAAU,IAAI,MAAM;QAExC,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAgB,CAC9B,GAAG,EACH,CAAC,aAA2B,KAAI;AAC9B,YAAA,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE;gBAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,gBAAA,IAAI,CAAC,CAAC;oBAAE;AACR,gBAAA,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS;AAAE,oBAAA,EAAE,EAAE;;SAErC,EACD,IAAI,CACL;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC;;QAGrC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QACrC,IAAI,GAAG,EAAE;AACP,YAAA,IAAI;gBACF,MAAM,CAAC,GAAgB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;gBACtC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AAC1D,oBAAA,IAAI,CAAC,KAAK,GAAG,CAAC;oBACd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;oBAC1B,IAAI,CAAC,eAAe,EAAE;;;YAExB,MAAM;;;QAGV,EAAE,EAAE,gBAAgB,CAAC,SAAS,EAAE,CAAC,EAAgB,KAAI;AACnD,YAAA,MAAM,CAAC,GAAQ,EAAE,CAAC,IAAI;AACtB,YAAA,IAAI,CAAC,EAAE,IAAI,KAAK,KAAK,EAAE;gBACrB,IAAI,IAAI,CAAC,UAAU;AAAE,oBAAA,OAAO;gBAC5B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC;;AAClC,iBAAA,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO,EAAE;AAC9B,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;;AAEzB,SAAC,CAAC;;QAGF,MAAM,IAAI,GAAG,MAAK;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAAE,gBAAA,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzD,SAAC;AACD,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC;AACvC,YAAA,QAAQ,CAAC,gBAAgB,GAAG,kBAAkB,EAAE,MAAK;AACnD,gBAAA,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;AAAE,oBAAA,IAAI,EAAE;AACpD,aAAC,CAAC;;;AAIN,IAAA,OAAO,CAAC,OAAyB,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAC5F,MAAK;;;AAGH,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAC9B,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,CACF;;;AAIH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;IAGnB,iBAAiB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;QAC5B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI;;;AAI5E,IAAA,MAAM,CAAC,EAA6B,EAAA;AAClC,QAAA,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;;IAG5C,WAAW,CAAC,IAAI,GAAG,IAAI,EAAA;AACrB,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;;;IAIxB,eAAe,GAAA;QACb,OAAO;AACL,YAAA,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK;AACpC,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI;AAChC,YAAA,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG;SACrB;;;AAIH,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;;AAInB,IAAA,UAAU,CAAC,KAAoB,EAAA;QACrC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACrB,YAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;YACzB,EAAE,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,YAAY;AAAE,gBAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;;aACxD;AACL,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,QAAQ,EAAE;gBACf;;AAEF,YAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACxB,YAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,YAAA,EAAE,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YACnD,IAAI,CAAC,eAAe,EAAE;;QAExB,IAAI,CAAC,QAAQ,EAAE;;IAGT,eAAe,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;QACjB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC7D,QAAA,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;QAC3E,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AACzC,YAAA,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;SACzB,EAAE,GAAG,CAAC;;IAGD,MAAM,QAAQ,CAAC,KAAc,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;AACrD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACvC,IAAI,CAAC,KAAK,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;AAEnC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,YAAW;AAC/B,gBAAA,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAW,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;;AAE7D,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,oBAAA,OAAO,IAAI;;AAEb,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC;gBAC1B,OAAO,CAAC,IAAI,IAAI;aACjB,GAAG,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,OAAO,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;;AAE3E,QAAA,OAAO,MAAM,IAAI,CAAC,aAAa;;AAGzB,IAAA,MAAM,cAAc,GAAA;AAC1B,QAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;IAI5B,UAAU,CAAuC,CAAI,EAAE,IAAqB,EAAA;AAC1E,QAAA,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC;AAC/B,QAAA,MAAM,SAAS,IAAI,IAAI,IAAI,EAAE,CAAqC;AAClE,QAAA,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC;AAExE,QAAA,MAAM,KAAK,GAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,WAAW,EAAE;QACjF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;QAEnC,OAAO;AACL,YAAA,gBAAgB,EAAE,MAChB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAsC;AAClF,YAAA,QAAQ,EAAE,CAAC,EAAE,KAAI;AACf,gBAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;aACxC;YACD,WAAW,EAAE,MAAK;gBAChB,KAAK,CAAC,WAAW,EAAE;AACnB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;aAChC;SACF;;;AAIH,IAAA,MAAM,QAAQ,CACZ,CAAI,EACJ,IAAqB,EACrB,IAA+D,EAAA;AAE/D,QAAA,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CACvB,IAAI,EACJ,IAAW,EACX,IAAI,EAAE,gBAAgB,GAAG,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAuB,EAAE,GAAG,SAAS,CACxF;;AAUH,IAAA,MAAM,MAAM,CACV,CAAI,EACJ,IAAsB,EAAA;AAEtB,QAAA,MAAM,IAAI,CAAC,cAAc,EAAE;AAE3B,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,GAAI,CAAC,IAAI,CAAS,GAAG,EAAE,CAAC,CAAC;AAExE,QAAA,IAAI;YACF,OAAO,MAAM,IAAI,EAAE;;QACnB,OAAO,CAAM,EAAE;YACf,MAAM,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM;YAC/C,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,KAAK,GAAG,EAAE;AACrC,gBAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACzB,OAAO,MAAM,IAAI,EAAE;;AAErB,YAAA,MAAM,CAAC;;;AAYX,IAAA,MAAM,KAAK,CACT,CAAI,EACJ,IAAsB,EAAA;AAEtB,QAAA,MAAM,IAAI,CAAC,cAAc,EAAE;AAE3B,QAAA,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAE5D,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,GAAG,EACH,CAAC,YAAW;AACV,gBAAA,IAAI;oBACF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,IAAI,GAAI,CAAC,IAAI,CAAS,GAAG,EAAE,CAAC,CAAC;;gBACjE,OAAO,CAAM,EAAE;oBACf,MAAM,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM;oBAC/C,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,KAAK,GAAG,EAAE;AACrC,wBAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;wBACzB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,IAAI,GAAI,CAAC,IAAI,CAAS,GAAG,EAAE,CAAC,CAAC;;AAEnE,oBAAA,MAAM,CAAC;;wBACC;AACR,oBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;aAErD,GAAG,CACL;;QAEH,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAE;;AAErC;;AC9VD;;;AAGE;AAIF;MACa,MAAM,GAAG,IAAI,cAAc,CAAsB,QAAQ;AAEtE;AACO,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM;;ACM/C;;;AAGG;MACU,WAAW,GAAG,IAAI,cAAc,CAAa,aAAa;AAEvE;AACM,SAAU,iBAAiB,CAAC,IAA8B,EAAA;IAC9D,OAAO;AACL,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,UAAU,EAAE,MACV,gBAAgB,CAAC;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,OAAO,EAAE,CAAC,YAAY,EAAE,EAAE,iBAAiB,EAAE,CAAC;AAC9C,YAAA,YAAY,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE;SACvE,CAAC;KACL;AACH;;AClCA;;;;;;AAMG;AA0BH;;;AAGG;AACG,SAAU,uBAAuB,CAAC,IAA6B,EAAA;IACnE,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,MAAK;gBACf,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE;AACrD,oBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,MAAM;AACtC,iBAAA,CAAC;AAEF,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAuB;gBAEtD,MAAM,gBAAgB,GAAqB,OAAO,EAAE,iBAAiB,EAAE,KAAI;AACzE,oBAAA,IAAI,CAAC,iBAAiB;AAAE,wBAAA,OAAO,IAAI;;AAGnC,oBAAA,IAAI,SAAc;AAClB,oBAAA,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE;AAC5C,wBAAA,IAAI;AACF,4BAAA,IAAI,OAAO,GAAG,CAAC,EAAE;;AAEf,gCAAA,MAAM,KAAK,GAAG,OAAO,GAAG,EAAE;AAC1B,gCAAA,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;;4BAG5D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC1C,4BAAA,OAAO,IAAI,EAAE,KAAK,IAAI,IAAI;;wBAC1B,OAAO,GAAQ,EAAE;4BACjB,SAAS,GAAG,GAAG;;4BAEf,IAAI,OAAO,GAAG,CAAC,IAAI,GAAG,EAAE,OAAO,KAAK,iBAAiB,EAAE;gCACrD;;AAEF,4BAAA,MAAM,GAAG;;;AAGb,oBAAA,MAAM,SAAS;AACjB,iBAAC;AAED,gBAAA,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAChC,gBAAA,KAAK,MAAM,CAAC,QAAQ,EAAE;AACtB,gBAAA,OAAO,MAAM;aACd;AACF,SAAA;KACF;AACH;AAEA;;;AAGG;SACa,6BAA6B,GAAA;IAC3C,OAAO,6BAA6B,CAAC,MAAK;QACxC,CAAC,YAAW;AACV,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAuB;YACtD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACzC,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,CAAC,GAAG;gBAAE;AAEV,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACzE,YAAA,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO;AACrC,YAAA,IAAI,OAAO,EAAE,KAAK,EAAE;gBAClB,MAAM,IAAI,CAAC,UAAU,CAAC;AACpB,oBAAA,YAAY,EAAE;AACZ,wBAAA,WAAW,EAAE,SAAS;wBACtB,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,CAAA,CAAE,EAAE;AACtD,qBAAA;AACF,iBAAA,CAAC;gBACF,IAAI,CAAC,aAAa,EAAE;;AAEtB,YAAA,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC;AAC9B,YAAA,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;SACpD,GAAG;AACN,KAAC,CAAC;AACJ;;AC7GA;AAqBA,MAAM,QAAQ,GAAoC,EAAE,IAAI,EAAE,MAAM,EAAE;AAE3D,MAAM,uBAAuB,GAAG,IAAI,cAAc,CACvD,yBAAyB,EACzB,EAAE,OAAO,EAAE,MAAM,QAAQ,EAAE;AAGvB,SAAU,4BAA4B,CAAC,IAAoC,EAAA;AAC/E,IAAA,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE;AACjF;AAqBA;SACgB,kBAAkB,CAChC,KAAQ,EACR,CAA0D,EAC1D,CAAyB,EAAA;AAEzB,IAAA,MAAM,MAAM,GAAG,YAAY,EAAE;AAC7B,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,uBAAuB,CAAC;IAC9C,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,KAAK,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI;AAEvE,IAAA,MAAM,aAAa,GACjB,OAAO,CAAC,KAAK,UAAU,GAAG,CAAC,GAAG,SAAS;AAEzC,IAAA,MAAM,UAAU,GAAG,MAAM,CAAoC,SAAS,sDAAC;AAEvE,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAyB,MAAK;AACpD,QAAA,IAAI,CAAC,aAAa;YAAE,OAAO,EAAgB,CAAC;QAC5C,OAAO,aAAa,EAAE;AACxB,KAAC,mDAAC;;IAGF,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;AAC9B,IAAA,IAAI,cAAc,GAAG,CAAC,CAAC;AAIvB,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAgB,OAAO;QAC7C,IAAI,EAAE,OAAO,EAAE;QACf,GAAG,EAAE,WAAW,EAAE;AACnB,KAAA,CAAC,mDAAC;IAEH,MAAM,IAAI,GAAG,QAAQ,CAAmD;AACtE,QAAA,MAAM,EAAE,OAAO;QACf,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAI;YACxC,MAAM,CAAC,GAAG,MAAM,CAAwD;AACtE,gBAAA,KAAK,EAAE,QAAQ,KAAK,MAAM,GAAG,UAAU,EAAE,GAAG,SAAS;AACtD,aAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEF,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAC;AACtC,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,KAAK,cAAc;AAC9C,YAAA,cAAc,GAAG,MAAM,CAAC,GAAG;;YAG3B,IAAI,QAAQ,EAAE;gBACZ;AACG,qBAAA,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI;AACxB,qBAAA,IAAI,CAAC,CAAC,IAAI,KAAI;oBACb,IAAI,WAAW,CAAC,OAAO;wBAAE;oBACzB,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACtB,oBAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,iBAAC;AACA,qBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;oBACb,IAAI,WAAW,CAAC,OAAO;wBAAE;oBACzB,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAY,EAAE,CAAC;AAChC,iBAAC,CAAC;;;AAIN,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAkB,CAAC;AAE7D,YAAA,IAAI;AACF,gBAAA,MAAM,KAAK,GAAG,CAAC,CAAC,gBAAgB,EAAE;AAClC,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;oBACvB,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACvB,oBAAA,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;;;YAEvB,OAAO,GAAG,EAAE;gBACZ,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAY,EAAE,CAAC;;AAGhC,YAAA,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAK;AAC1B,gBAAA,IAAI;AACF,oBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE;oBACjC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACtB,oBAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;;gBACpB,OAAO,GAAG,EAAE;oBACZ,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAY,EAAE,CAAC;;AAElC,aAAC,CAAC;AAEF,YAAA,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAClE,YAAA,OAAO,CAAC;SACT;AACF,KAAA,CAAC;;IAGF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAEzC,IAAA,MAAM,OAAO,GAAmD;AAC9D,QAAA,GAAG,IAAI;QACP,MAAM,EAAE,MAAK;YACX,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAClC,OAAO,UAAU,EAAE;SACpB;KACF;AAED,IAAA,OAAO,OAAO;AAChB;;AC/HA;;;;;AAKG;AACG,SAAU,oBAAoB,CAAC,IAA0B,EAAA;IAC7D,MAAM,SAAS,GAAe,EAAE;AAEhC,IAAA,IAAI,IAAI,CAAC,UAAU,EAAE;QACnB,SAAS,CAAC,IAAI,CAAC;AACb,YAAA,OAAO,EAAE,WAAW;YACpB,UAAU,EAAE,MAAK;AACf,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,UAAwB;gBACvC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK,UAAU;AACvD,gBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,KAAK,UAAU;AAC1E,gBAAA,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE;AAC3B,oBAAA,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F;;AAEH,gBAAA,OAAO,CAAC;aACT;AACF,SAAA,CAAC;;SACG;;AAEL,QAAA,SAAS,CAAC,IAAI,CACZ,iBAAiB,CAAC;YAChB,OAAO,EAAE,IAAI,CAAC,WAAW;AAC1B,SAAA,CAAC,CACH;;AAGH,IAAA,SAAS,CAAC,IAAI,CACZ,GAAG,uBAAuB,CAAC;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC5B,KAAA,CAAC,CACH;AAED,IAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,QAAA,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;;AAEnE,IAAA,OAAO,SAAS;AAClB;;ACjEA;AA0DA;AACM,SAAU,sBAAsB,CACpC,QAAW,EACX,IAA+B,EAAA;AAE/B,IAAA,MAAM,MAAM,GAAG,YAAY,EAAE;AAC7B,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AAC/B,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmE;AAC1F,IAAA,MAAM,QAAQ,GAAG,MAAM,CAA+B,SAAS,oDAAC;AAChE,IAAA,MAAM,OAAO,GAAG,MAAM,CAAoD,SAAS,mDAAC;IACpF,IAAI,GAAG,GAAG,CAAC;IAEX,MAAM,KAAK,GAAG,QAAQ,CAGpB;QACA,MAAM,EAAE,QAAQ,CAAC,MAAM,OAAO,EAAE,CAAC;QACjC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAI;YACxC,MAAM,GAAG,GAAG,MAAM,CAAwD;AACxE,gBAAA,KAAK,EAAE,SAAS;AACjB,aAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACF,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,GAAG;YAEvB,MAAM,IAAI,GAAG,MAAK;;gBAEhB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC;AAAE,oBAAA,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAClC,aAAC;AAED,YAAA,MAAM,OAAO,GAAG,YAAW;gBACzB,IAAI,OAAO,GAAG,CAAC;AACf,gBAAA,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,CAAC;AAClC,gBAAA,MAAM,KAAK,GAAG,CAAC,CAAS,KACtB,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;;;;;gBAMvE,OAAO,IAAI,EAAE;AACX,oBAAA,IAAI;AACF,wBAAA,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;4BACvD,gBAAgB,EAAE,IAAI,EAAE,gBAAgB;AACzC,yBAAA,CAAC;AACF,wBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;4BACxB,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACvB,4BAAA,IAAI,EAAE,SAAS,GAAG,GAAG,CAAC;AACtB,4BAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC;;AAEtC,wBAAA,IAAI,EAAE;wBACN;;oBACA,OAAO,CAAC,EAAE;wBACV,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACzD,wBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;4BACxB,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;;AAEzB,wBAAA,IAAI,OAAO,IAAI,OAAO,EAAE;AACtB,4BAAA,IAAI,EAAE,OAAO,GAAG,GAAG,CAAC;AACpB,4BAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;AACnC,4BAAA,IAAI,EAAE;4BACN;;AAEF,wBAAA,OAAO,EAAE;AACT,wBAAA,MAAM,KAAK,CAAC,OAAO,CAAC;;;AAG1B,aAAC;AAED,YAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI;AACF,gBAAA,MAAM,CAAC,GAAG,OAAO,EAAE;AACnB,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACf,gBAAA,MAAM,CAAC;;oBACC;gBACR,IAAI,CAAC,WAAW,CAAC,OAAO;AAAE,oBAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC9C,IAAI,QAAQ,EAAE,IAAI,CAAC,MAAM,QAAQ,EAAE,MAAM,SAAS;AAAE,oBAAA,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;;AAG7E,YAAA,OAAO,GAAG;SACX;AACF,KAAA,CAAC;AAEF,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC1C,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAE3C,IAAA,MAAM,GAAG,IAAc,OAAO,IAAsB,KAAI;AACtD,QAAA,MAAM,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,IAAK,EAAU,CAAoB,EAAE;QAEzE,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,QAAQ,EAAE,EAAE;;YAEvC,OAAO,QAAQ,EAAkB;;QAGnC,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,EAAE;YACxC,MAAM,QAAQ,EAAE;;QAGlB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,MAAM,KAAI;AACrE,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC1C,SAAC,CAAC;;AAGF,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAChB,QAAA,OAAO,OAAO;AAChB,KAAC,CAAa;IAEd,MAAM,KAAK,GAAG,MAAK;;AAEhB,QAAA,KAAa,CAAC,KAAK,IAAI,CAAC;AAC3B,KAAC;AAED,IAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE;AAC9E;;AC1KA;AAqDA;AACM,SAAU,oBAAoB,CAClC,MAAS,EACT,IAA6B,EAAA;AAE7B,IAAA,MAAM,MAAM,GAAG,YAAY,EAAE;AAC7B,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AAC/B,IAAA,MAAM,QAAQ,GAAG,MAAM,CAA+B,SAAS,oDAAC;AAChE,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmE;AAC1F,IAAA,MAAM,OAAO,GAAG,MAAM,CAAoD,SAAS,mDAAC;IACpF,IAAI,GAAG,GAAG,CAAC;IAEX,MAAM,KAAK,GAAG,QAAQ,CAGpB;QACA,MAAM,EAAE,QAAQ,CAAC,MAAM,OAAO,EAAE,CAAC;QACjC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAI;YACxC,MAAM,GAAG,GAAG,MAAM,CAAwD;AACxE,gBAAA,KAAK,EAAE,SAAS;AACjB,aAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACF,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,GAAG;YAEvB,MAAM,IAAI,GAAG,MAAK;gBAChB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC;AAAE,oBAAA,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAClC,aAAC;AAED,YAAA,MAAM,OAAO,GAAG,YAAW;gBACzB,IAAI,OAAO,GAAG,CAAC;AACf,gBAAA,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,CAAC;AAClC,gBAAA,MAAM,KAAK,GAAG,CAAC,CAAS,KACtB,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;gBAEvE,OAAO,IAAI,EAAE;AACX,oBAAA,IAAI;AACF,wBAAA,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;AACpD,wBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;4BACxB,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACvB,4BAAA,IAAI,EAAE,SAAS,GAAG,GAAG,CAAC;AACtB,4BAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC;;AAEtC,wBAAA,IAAI,EAAE;wBACN;;oBACA,OAAO,CAAC,EAAE;wBACV,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACzD,IAAI,CAAC,WAAW,CAAC,OAAO;4BAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACjD,wBAAA,IAAI,OAAO,IAAI,OAAO,EAAE;AACtB,4BAAA,IAAI,EAAE,OAAO,GAAG,GAAG,CAAC;AACpB,4BAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;AACnC,4BAAA,IAAI,EAAE;4BACN;;AAEF,wBAAA,OAAO,EAAE;AACT,wBAAA,MAAM,KAAK,CAAC,OAAO,CAAC;;;AAG1B,aAAC;AAED,YAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI;AACF,gBAAA,MAAM,CAAC,GAAG,OAAO,EAAE;AACnB,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACf,gBAAA,MAAM,CAAC;;oBACC;gBACR,IAAI,CAAC,WAAW,CAAC,OAAO;AAAE,oBAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC9C,IAAI,QAAQ,EAAE,IAAI,CAAC,MAAM,QAAQ,EAAE,MAAM,SAAS;AAAE,oBAAA,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;;AAG7E,YAAA,OAAO,GAAG;SACX;AACF,KAAA,CAAC;AAEF,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC1C,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAE3C,IAAA,MAAM,GAAG,IAAc,OAAO,IAAsB,KAAI;AACtD,QAAA,MAAM,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,IAAK,EAAU,CAAoB,EAAE;QAEzE,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,QAAQ,EAAE,EAAE;YACvC,OAAO,QAAQ,EAAoC;;QAErD,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,QAAQ,EAAE,EAAE;YACxC,MAAM,QAAQ,EAAE;;QAGlB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,MAAM,KAAI;AACrE,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC1C,SAAC,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,QAAA,OAAO,OAAO;AAChB,KAAC,CAAa;IAEd,MAAM,KAAK,GAAG,MAAK;AAChB,QAAA,KAAa,CAAC,KAAK,IAAI;AAC1B,KAAC;AAED,IAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE;AAC9E;;ACxJA;;AAEG;AAEH;;ACJA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"razakalpha-convngx.mjs","sources":["../../../projects/convex-angular/src/lib/core/helpers.ts","../../../projects/convex-angular/src/lib/core/convex-angular-client.ts","../../../projects/convex-angular/src/lib/core/inject-convex.token.ts","../../../projects/convex-angular/src/lib/auth/auth-client.provider.ts","../../../projects/convex-angular/src/lib/auth/convex-better-auth.provider.ts","../../../projects/convex-angular/src/lib/resources/live.resource.ts","../../../projects/convex-angular/src/lib/setup/convex-angular.providers.ts","../../../projects/convex-angular/src/lib/resources/mutation.resource.ts","../../../projects/convex-angular/src/lib/resources/action.resource.ts","../../../projects/convex-angular/src/public-api.ts","../../../projects/convex-angular/src/razakalpha-convngx.ts"],"sourcesContent":["/**\r\n * Internal helpers for ConvexAngularClient.\r\n * NOTE: Pure refactor; functionality unchanged.\r\n */\r\n\r\nexport const AUTH_KEY = 'convex:jwt';\r\nexport const AUTH_CH = 'convex-auth';\r\n\r\n/** Decode JWT exp claim (ms). Returns 0 if invalid. */\r\nexport function jwtExpMs(jwt: string): number {\r\n try {\r\n const payload = JSON.parse(atob(jwt.split('.')[1] || ''));\r\n return typeof payload?.exp === 'number' ? payload.exp * 1000 : 0;\r\n } catch {\r\n return 0;\r\n }\r\n}\r\n\r\n/** Canonical JSON stringify for stable de-dupe keys. */\r\nexport function stableStringify(input: unknown): string {\r\n const seen = new WeakSet<object>();\r\n const norm = (v: any): any => {\r\n if (v === null || typeof v !== 'object') return v;\r\n if (seen.has(v)) return v;\r\n seen.add(v);\r\n if (Array.isArray(v)) return v.map(norm);\r\n return Object.keys(v)\r\n .sort()\r\n .reduce((acc: any, k) => {\r\n acc[k] = norm(v[k]);\r\n return acc;\r\n }, {});\r\n };\r\n return JSON.stringify(norm(input));\r\n}\r\n\r\n/** sessionStorage helpers (some browsers may throw on access) */\r\nexport const safeSession = {\r\n get: (k: string): string | null => {\r\n try {\r\n return typeof sessionStorage !== 'undefined' ? sessionStorage.getItem(k) : null;\r\n } catch {\r\n return null;\r\n }\r\n },\r\n set: (k: string, v: string) => {\r\n try {\r\n if (typeof sessionStorage !== 'undefined') sessionStorage.setItem(k, v);\r\n } catch {\r\n /* no-op */\r\n }\r\n },\r\n del: (k: string) => {\r\n try {\r\n if (typeof sessionStorage !== 'undefined') sessionStorage.removeItem(k);\r\n } catch {\r\n /* no-op */\r\n }\r\n },\r\n};","/**\r\n * ConvexAngularClient\r\n * - Wraps Convex BaseConvexClient + ConvexHttpClient\r\n * - Integrates Better Auth via pluggable fetcher (setAuth)\r\n * - Caches JWT in sessionStorage with BroadcastChannel sync\r\n * - Auto-refreshes auth token ahead of expiry with jitter\r\n * - Provides:\r\n * - watchQuery: live subscription with localQueryResult + onUpdate\r\n * - query: HTTP one-shot with in-flight de-dupe + 401 retry\r\n * - mutation: supports optimisticUpdate passthrough\r\n * - action: HTTP call with 401 retry\r\n * - Does not change any runtime behavior – documentation and structure only.\r\n */\r\n// src/app/convex-angular-client.ts\r\nimport {\r\n BaseConvexClient,\r\n type BaseConvexClientOptions,\r\n type OptimisticUpdate,\r\n ConvexHttpClient,\r\n} from 'convex/browser';\r\nimport {\r\n FunctionReference,\r\n FunctionArgs,\r\n FunctionReturnType,\r\n getFunctionName,\r\n} from 'convex/server';\r\nimport type { Value } from 'convex/values';\r\nimport type { FetchAccessToken, AuthSnapshot } from './types';\r\nexport type { FetchAccessToken, AuthSnapshot } from './types';\r\nimport { AUTH_KEY, AUTH_CH, jwtExpMs, stableStringify, safeSession } from './helpers';\r\n\r\ntype QueryToken = string;\r\n\r\ntype WatchHandle<Q extends FunctionReference<'query'>> = {\r\n localQueryResult(): FunctionReturnType<Q> | undefined;\r\n onUpdate(cb: () => void): () => void;\r\n unsubscribe(): void;\r\n};\r\n\r\ntype Entry = {\r\n name: string;\r\n args: Record<string, Value>;\r\n listeners: Set<() => void>;\r\n unsubscribe: () => void;\r\n};\r\n\r\ntype StoredToken = { value: string; exp: number };\r\n\r\n/* helpers moved to ./helpers (no behavior change) */\r\n\r\n\r\nconst bc =\r\n typeof BroadcastChannel !== 'undefined'\r\n ? new BroadcastChannel(AUTH_CH)\r\n : (null as BroadcastChannel | null);\r\n\r\nexport class ConvexAngularClient {\r\n private authListeners = new Set<(s: AuthSnapshot) => void>();\r\n private lastSnap?: AuthSnapshot;\r\n // ==== internals ====\r\n private emitAuth() {\r\n const snap = this.getAuthSnapshot();\r\n // de-dupe emissions\r\n if (\r\n this.lastSnap &&\r\n this.lastSnap.isAuthenticated === snap.isAuthenticated &&\r\n this.lastSnap.token === snap.token\r\n ) {\r\n return;\r\n }\r\n this.lastSnap = snap;\r\n for (const cb of this.authListeners) cb(snap);\r\n }\r\n\r\n private base: BaseConvexClient;\r\n private http: ConvexHttpClient;\r\n private byToken = new Map<QueryToken, Entry>();\r\n\r\n private fetchToken?: FetchAccessToken;\r\n private inflightToken?: Promise<string | null>;\r\n private token?: StoredToken;\r\n\r\n private refreshTimer?: number;\r\n private inflightHttp = new Map<string, Promise<any>>();\r\n private authLocked = false;\r\n\r\n private readonly skewMs: number;\r\n\r\n constructor(url: string, opts?: BaseConvexClientOptions & { authSkewMs?: number }) {\r\n this.skewMs = opts?.authSkewMs ?? 30_000;\r\n\r\n this.base = new BaseConvexClient(\r\n url,\r\n (updatedTokens: QueryToken[]) => {\r\n for (const t of updatedTokens) {\r\n const e = this.byToken.get(t);\r\n if (!e) continue;\r\n for (const cb of e.listeners) cb();\r\n }\r\n },\r\n opts,\r\n );\r\n\r\n this.http = new ConvexHttpClient(url);\r\n\r\n // pick up cached token\r\n const raw = safeSession.get(AUTH_KEY);\r\n if (raw) {\r\n try {\r\n const t: StoredToken = JSON.parse(raw);\r\n if (t?.value && t?.exp && Date.now() < t.exp - this.skewMs) {\r\n this.token = t;\r\n this.http.setAuth(t.value);\r\n this.scheduleRefresh();\r\n }\r\n } catch {}\r\n }\r\n // 3) BroadcastChannel: keep as-is (clear only on 'clear', set on 'set')\r\n bc?.addEventListener('message', (ev: MessageEvent) => {\r\n const d: any = ev.data;\r\n if (d?.type === 'set') {\r\n if (this.authLocked) return; // ignore while logging out\r\n this.applyToken(d.token?.value ?? null);\r\n } else if (d?.type === 'clear') {\r\n this.applyToken(null);\r\n }\r\n });\r\n\r\n // visibility/network pokes\r\n const poke = () => {\r\n if (!this.freshTokenInCache()) void this.getToken(true);\r\n };\r\n if (typeof window !== 'undefined') {\r\n window.addEventListener('online', poke);\r\n document.addEventListener?.('visibilitychange', () => {\r\n if (document.visibilityState === 'visible') poke();\r\n });\r\n }\r\n }\r\n\r\n setAuth(fetcher: FetchAccessToken) {\r\n this.fetchToken = fetcher;\r\n this.base.setAuth(\r\n async ({ forceRefreshToken }) => (this.authLocked ? null : this.getToken(forceRefreshToken)),\r\n () => {\r\n // identity changed (connect/reconnect). Do NOT clear token here.\r\n // If we're truly logged out, next HTTP/WS use will 401 and we clear then.\r\n this.inflightToken = undefined;\r\n this.emitAuth(); // soft notify, no flip to false\r\n },\r\n );\r\n }\r\n\r\n /** Optional: call once on app start */\r\n async warmAuth(): Promise<void> {\r\n await this.getToken(true);\r\n }\r\n\r\n private freshTokenInCache(): string | null {\r\n if (!this.token) return null;\r\n return Date.now() < this.token.exp - this.skewMs ? this.token.value : null;\r\n }\r\n\r\n // ==== public auth helpers ====\r\n onAuth(cb: (s: AuthSnapshot) => void): () => void {\r\n cb(this.getAuthSnapshot());\r\n this.authListeners.add(cb);\r\n return () => this.authListeners.delete(cb);\r\n }\r\n\r\n logoutLocal(lock = true) {\r\n if (lock) this.authLocked = true;\r\n this.inflightToken = undefined;\r\n this.applyToken(null); // this is the ONLY place we hard clear locally\r\n }\r\n\r\n // 5) snapshot uses token presence (not freshness)\r\n getAuthSnapshot() {\r\n return {\r\n isAuthenticated: !!this.token?.value,\r\n token: this.token?.value ?? null,\r\n exp: this.token?.exp,\r\n };\r\n }\r\n\r\n /** Allow re-auth then fetch a fresh token (use after successful sign-in) */\r\n async refreshAuth(): Promise<void> {\r\n this.authLocked = false;\r\n await this.getToken(true);\r\n }\r\n\r\n // 4) applyToken: always emit after mutation (you already fixed this)\r\n private applyToken(token: string | null) {\r\n if (!token) {\r\n this.token = undefined;\r\n this.http.clearAuth();\r\n safeSession.del(AUTH_KEY);\r\n bc?.postMessage({ type: 'clear' });\r\n if (this.refreshTimer) window.clearTimeout(this.refreshTimer);\r\n } else {\r\n if (this.authLocked) {\r\n this.emitAuth();\r\n return;\r\n }\r\n const exp = jwtExpMs(token);\r\n this.token = { value: token, exp };\r\n this.http.setAuth(token);\r\n safeSession.set(AUTH_KEY, JSON.stringify(this.token));\r\n bc?.postMessage({ type: 'set', token: this.token });\r\n this.scheduleRefresh();\r\n }\r\n this.emitAuth();\r\n }\r\n\r\n private scheduleRefresh() {\r\n if (!this.token) return;\r\n if (this.refreshTimer) window.clearTimeout(this.refreshTimer);\r\n const jitter = 2_000 + Math.floor(Math.random() * 2_000);\r\n const due = Math.max(0, this.token.exp - this.skewMs - Date.now() - jitter);\r\n this.refreshTimer = window.setTimeout(() => {\r\n void this.getToken(true);\r\n }, due);\r\n }\r\n\r\n private async getToken(force: boolean): Promise<string | null> {\r\n if (!this.fetchToken || this.authLocked) return null; // 🔒 deny any token\r\n const cached = this.freshTokenInCache();\r\n if (!force && cached) return cached;\r\n\r\n if (!this.inflightToken) {\r\n this.inflightToken = (async () => {\r\n const t = await this.fetchToken!({ forceRefreshToken: true });\r\n // ignore token if we got locked while waiting\r\n if (this.authLocked) {\r\n this.emitAuth(); // ensure listeners see current (likely false)\r\n return null;\r\n }\r\n this.applyToken(t ?? null);\r\n return t ?? null;\r\n })().finally(() => setTimeout(() => (this.inflightToken = undefined), 0));\r\n }\r\n return await this.inflightToken;\r\n }\r\n\r\n private async ensureHttpAuth(): Promise<void> {\r\n await this.getToken(false);\r\n }\r\n\r\n // ——— live query ———\r\n watchQuery<Q extends FunctionReference<'query'>>(q: Q, args: FunctionArgs<Q>): WatchHandle<Q> {\r\n const name = getFunctionName(q);\r\n const valueArgs = (args ?? {}) as unknown as Record<string, Value>;\r\n const { queryToken, unsubscribe } = this.base.subscribe(name, valueArgs);\r\n\r\n const entry: Entry = { name, args: valueArgs, listeners: new Set(), unsubscribe };\r\n this.byToken.set(queryToken, entry);\r\n\r\n return {\r\n localQueryResult: () =>\r\n this.base.localQueryResult(name, valueArgs) as FunctionReturnType<Q> | undefined,\r\n onUpdate: (cb) => {\r\n entry.listeners.add(cb);\r\n return () => entry.listeners.delete(cb);\r\n },\r\n unsubscribe: () => {\r\n entry.unsubscribe();\r\n this.byToken.delete(queryToken);\r\n },\r\n };\r\n }\r\n\r\n // ——— mutation ———\r\n async mutation<M extends FunctionReference<'mutation'>>(\r\n m: M,\r\n args: FunctionArgs<M>,\r\n opts?: { optimisticUpdate?: OptimisticUpdate<FunctionArgs<M>> },\r\n ): Promise<FunctionReturnType<M>> {\r\n const name = getFunctionName(m);\r\n return this.base.mutation(\r\n name,\r\n args as any,\r\n opts?.optimisticUpdate ? { optimisticUpdate: opts.optimisticUpdate as any } : undefined,\r\n );\r\n }\r\n // ——— action (no dedupe) ———\r\n async action<A extends FunctionReference<'action'> & { _args: Record<string, never> }>(\r\n a: A,\r\n ): Promise<FunctionReturnType<A>>;\r\n async action<A extends FunctionReference<'action'>>(\r\n a: A,\r\n args: FunctionArgs<A>,\r\n ): Promise<FunctionReturnType<A>>;\r\n async action<A extends FunctionReference<'action'>>(\r\n a: A,\r\n args?: FunctionArgs<A>,\r\n ): Promise<FunctionReturnType<A>> {\r\n await this.ensureHttpAuth();\r\n\r\n const call = () => this.http.action(a, ...(args ? ([args] as any) : []));\r\n\r\n try {\r\n return await call();\r\n } catch (e: any) {\r\n const status = e?.status ?? e?.response?.status;\r\n if (this.fetchToken && status === 401) {\r\n await this.getToken(true);\r\n return await call();\r\n }\r\n throw e;\r\n }\r\n }\r\n\r\n // ——— one-shot query (HTTP with de-dupe) ———\r\n async query<Q extends FunctionReference<'query'> & { _args: Record<string, never> }>(\r\n q: Q,\r\n ): Promise<FunctionReturnType<Q>>;\r\n async query<Q extends FunctionReference<'query'>>(\r\n q: Q,\r\n args: FunctionArgs<Q>,\r\n ): Promise<FunctionReturnType<Q>>;\r\n async query<Q extends FunctionReference<'query'>>(\r\n q: Q,\r\n args?: FunctionArgs<Q>,\r\n ): Promise<FunctionReturnType<Q>> {\r\n await this.ensureHttpAuth();\r\n\r\n const name = getFunctionName(q);\r\n const key = name + ':' + (args ? stableStringify(args) : '');\r\n\r\n if (!this.inflightHttp.has(key)) {\r\n this.inflightHttp.set(\r\n key,\r\n (async () => {\r\n try {\r\n return await this.http.query(q, ...(args ? ([args] as any) : []));\r\n } catch (e: any) {\r\n const status = e?.status ?? e?.response?.status;\r\n if (this.fetchToken && status === 401) {\r\n await this.getToken(true);\r\n return await this.http.query(q, ...(args ? ([args] as any) : []));\r\n }\r\n throw e;\r\n } finally {\r\n setTimeout(() => this.inflightHttp.delete(key), 0);\r\n }\r\n })(),\r\n );\r\n }\r\n return this.inflightHttp.get(key)!;\r\n }\r\n}\r\n","/**\r\n* Injection token and helper for accessing the Convex client from DI.\r\n* Keep this tiny and stable — many helpers rely on it.\r\n*/\r\nimport { inject, InjectionToken } from '@angular/core';\r\nimport { ConvexAngularClient } from './convex-angular-client';\r\n\r\n/** DI token for the configured ConvexAngularClient instance */\r\nexport const CONVEX = new InjectionToken<ConvexAngularClient>('CONVEX');\r\n\r\n/** Convenience helper to inject the Convex client */\r\nexport const injectConvex = () => inject(CONVEX);\r\n","import { InjectionToken, Provider } from '@angular/core';\r\nimport { createAuthClient } from 'better-auth/client';\r\nimport { convexClient, crossDomainClient } from '@convex-dev/better-auth/client/plugins';\r\n\r\ntype AuthConfig = {\r\n baseURL: string;\r\n plugins: [ReturnType<typeof convexClient>, ReturnType<typeof crossDomainClient>];\r\n fetchOptions: { credentials: 'include' };\r\n};\r\n\r\nexport type AuthClient = ReturnType<typeof createAuthClient<AuthConfig>>;\r\n\r\nexport interface ProvideAuthClientOptions {\r\n baseURL: string;\r\n fetchOptions?: RequestInit;\r\n}\r\n\r\n/**\r\n * Un-typed DI token. We don't re-export types; callers who create the client\r\n * get full type safety from better-auth directly.\r\n */\r\nexport const AUTH_CLIENT = new InjectionToken<AuthClient>('AUTH_CLIENT');\r\n\r\n/** Provide a configured Better Auth client via DI (default convex+crossDomain plugins) */\r\nexport function provideAuthClient(opts: ProvideAuthClientOptions): Provider {\r\n return {\r\n provide: AUTH_CLIENT,\r\n useFactory: () =>\r\n createAuthClient({\r\n baseURL: opts.baseURL,\r\n plugins: [convexClient(), crossDomainClient()],\r\n fetchOptions: { credentials: 'include', ...(opts.fetchOptions ?? {}) },\r\n }),\r\n };\r\n}\r\n","/**\r\n * Convex + Better Auth providers.\r\n * - provideConvexBetterAuth: Registers a ConvexAngularClient in DI and wires Better Auth token fetching.\r\n * - provideBetterAuthOttBootstrap: Optional environment initializer to handle cross-domain one-time-token.\r\n *\r\n * No functional changes—cleaned comments and added docs.\r\n */\r\nimport { inject, provideEnvironmentInitializer, Provider } from '@angular/core';\r\nimport { AUTH_CLIENT } from './auth-client.provider';\r\nimport { CONVEX } from '../core/inject-convex.token';\r\nimport { ConvexAngularClient, FetchAccessToken } from '../core/convex-angular-client';\r\n\r\n/** Minimal surface this library relies on from Better Auth client */\r\ninterface AuthClientRequired {\r\n convex: { token: () => Promise<{ data?: { token?: string } | null }> };\r\n crossDomain: {\r\n oneTimeToken: {\r\n verify: (args: { token: string }) => Promise<{ data?: { session?: { token?: string } } }>;\r\n };\r\n };\r\n getSession: (o?: { fetchOptions?: RequestInit }) => Promise<unknown>;\r\n updateSession: () => void;\r\n}\r\nexport interface ConvexBetterAuthOptions {\r\n /** Convex deployment URL, e.g. https://xxx.convex.cloud */\r\n convexUrl: string;\r\n /** Milliseconds before JWT expiry to refresh (default 45s in this provider) */\r\n authSkewMs?: number;\r\n\r\n authClient?: AuthClientRequired; // Optional user-provided Better Auth client\r\n}\r\n\r\n/**\r\n * Registers the Convex client in DI and connects it to Better Auth for JWT retrieval.\r\n * Consumers still need to provide the Better Auth HTTP client via provideAuthClient().\r\n */\r\nexport function provideConvexBetterAuth(opts: ConvexBetterAuthOptions): Provider[] {\r\n return [\r\n {\r\n provide: CONVEX,\r\n useFactory: () => {\r\n const client = new ConvexAngularClient(opts.convexUrl, {\r\n authSkewMs: opts.authSkewMs ?? 45_000,\r\n });\r\n\r\n const auth = inject(AUTH_CLIENT) as AuthClientRequired;\r\n\r\n const fetchAccessToken: FetchAccessToken = async ({ forceRefreshToken }) => {\r\n if (!forceRefreshToken) return null;\r\n\r\n // Retry logic for transient failures (e.g., session not fully propagated)\r\n let lastError: any;\r\n for (let attempt = 0; attempt < 3; attempt++) {\r\n try {\r\n if (attempt > 0) {\r\n // Wait before retry: 50ms, then 100ms\r\n const delay = attempt * 50;\r\n await new Promise((resolve) => setTimeout(resolve, delay));\r\n }\r\n\r\n const { data } = await auth.convex.token();\r\n return data?.token ?? null;\r\n } catch (err: any) {\r\n lastError = err;\r\n // Only retry on \"Failed to fetch\" errors\r\n if (attempt < 2 && err?.message === 'Failed to fetch') {\r\n continue;\r\n }\r\n throw err;\r\n }\r\n }\r\n throw lastError;\r\n };\r\n\r\n client.setAuth(fetchAccessToken);\r\n void client.warmAuth();\r\n return client;\r\n },\r\n },\r\n ];\r\n}\r\n\r\n/**\r\n * Optional environment initializer to handle OTT (?ott=...) once and upgrade to a cookie session.\r\n * Keep separate from main provider for explicit opt-in.\r\n */\r\nexport function provideBetterAuthOttBootstrap() {\r\n return provideEnvironmentInitializer(() => {\r\n (async () => {\r\n const auth = inject(AUTH_CLIENT) as AuthClientRequired;\r\n const url = new URL(window.location.href);\r\n const ott = url.searchParams.get('ott');\r\n if (!ott) return;\r\n\r\n const result = await auth.crossDomain.oneTimeToken.verify({ token: ott });\r\n const session = result?.data?.session;\r\n if (session?.token) {\r\n await auth.getSession({\r\n fetchOptions: {\r\n credentials: 'include',\r\n headers: { Authorization: `Bearer ${session.token}` },\r\n },\r\n });\r\n auth.updateSession();\r\n }\r\n url.searchParams.delete('ott');\r\n window.history.replaceState({}, '', url.toString());\r\n })();\r\n });\r\n}\r\n","// convex-resource.ts\r\nimport {\r\n ResourceRef,\r\n ResourceStreamItem,\r\n computed,\r\n inject,\r\n resource,\r\n signal,\r\n InjectionToken,\r\n Provider,\r\n} from '@angular/core';\r\nimport { FunctionReference, FunctionReturnType } from 'convex/server';\r\nimport { injectConvex } from '../core/inject-convex.token';\r\n\r\nexport type QueryRef = FunctionReference<'query'>;\r\nexport type KeepMode = 'none' | 'last';\r\n\r\nexport interface ConvexResourceOptions {\r\n keep?: KeepMode;\r\n}\r\n\r\nconst DEFAULTS: Required<ConvexResourceOptions> = { keep: 'last' };\r\n\r\nexport const CONVEX_RESOURCE_OPTIONS = new InjectionToken<Required<ConvexResourceOptions>>(\r\n 'CONVEX_RESOURCE_OPTIONS',\r\n { factory: () => DEFAULTS },\r\n);\r\n\r\nexport function provideConvexResourceOptions(opts: Partial<ConvexResourceOptions>): Provider {\r\n return { provide: CONVEX_RESOURCE_OPTIONS, useValue: { ...DEFAULTS, ...opts } };\r\n}\r\n\r\n// “no-args” queries have `_args` compatible with {}\r\ntype NoArgsQuery = QueryRef & { _args: Record<string, never> };\r\n\r\n/** Overloads */\r\nexport function convexLiveResource<Q extends NoArgsQuery>(\r\n query: Q,\r\n opts?: ConvexResourceOptions,\r\n): ResourceRef<FunctionReturnType<Q> | undefined>;\r\nexport function convexLiveResource<Q extends NoArgsQuery>(\r\n query: Q,\r\n params: () => {} | undefined,\r\n opts?: ConvexResourceOptions,\r\n): ResourceRef<FunctionReturnType<Q> | undefined>;\r\nexport function convexLiveResource<Q extends QueryRef>(\r\n query: Q,\r\n params: () => Q['_args'] | undefined,\r\n opts?: ConvexResourceOptions,\r\n): ResourceRef<FunctionReturnType<Q> | undefined>;\r\n\r\n/** Impl */\r\nexport function convexLiveResource<Q extends QueryRef>(\r\n query: Q,\r\n a?: (() => Q['_args'] | undefined) | ConvexResourceOptions,\r\n b?: ConvexResourceOptions,\r\n): ResourceRef<FunctionReturnType<Q> | undefined> {\r\n const convex = injectConvex();\r\n const global = inject(CONVEX_RESOURCE_OPTIONS);\r\n const keepMode = (typeof a === 'function' ? b : a)?.keep ?? global.keep;\r\n\r\n const paramsFactory: (() => Q['_args'] | undefined) | undefined =\r\n typeof a === 'function' ? a : undefined;\r\n\r\n const lastGlobal = signal<FunctionReturnType<Q> | undefined>(undefined);\r\n\r\n const argsSig = computed<Q['_args'] | undefined>(() => {\r\n if (!paramsFactory) return {} as Q['_args']; // no-args: always enabled\r\n return paramsFactory();\r\n });\r\n\r\n // --- reload tagging ---\r\n const reloadStamp = signal(0); // increments only when .reload() is called\r\n let lastSeenReload = 0; // compared inside stream to detect reload\r\n\r\n type ParamEnvelope = { args: Q['_args'] | undefined; __r: number } | undefined;\r\n\r\n const request = computed<ParamEnvelope>(() => ({\r\n args: argsSig(),\r\n __r: reloadStamp(),\r\n }));\r\n\r\n const base = resource<FunctionReturnType<Q> | undefined, ParamEnvelope>({\r\n params: request,\r\n stream: async ({ params, abortSignal }) => {\r\n const s = signal<ResourceStreamItem<FunctionReturnType<Q> | undefined>>({\r\n value: keepMode === 'last' ? lastGlobal() : undefined,\r\n });\r\n\r\n if (!params || !params.args) return s; // gated\r\n const isReload = params.__r !== lastSeenReload;\r\n lastSeenReload = params.__r;\r\n\r\n // One-shot fetch: ONLY on reload\r\n if (isReload) {\r\n convex\r\n .query(query, params.args)\r\n .then((next) => {\r\n if (abortSignal.aborted) return;\r\n s.set({ value: next });\r\n lastGlobal.set(next);\r\n })\r\n .catch((err) => {\r\n if (abortSignal.aborted) return;\r\n s.set({ error: err as Error });\r\n });\r\n }\r\n\r\n // Live subscription (always)\r\n const w = convex.watchQuery(query, params.args as Q['_args']);\r\n\r\n try {\r\n const local = w.localQueryResult();\r\n if (local !== undefined) {\r\n s.set({ value: local });\r\n lastGlobal.set(local);\r\n }\r\n } catch (err) {\r\n s.set({ error: err as Error });\r\n }\r\n\r\n const off = w.onUpdate(() => {\r\n try {\r\n const next = w.localQueryResult();\r\n s.set({ value: next });\r\n lastGlobal.set(next);\r\n } catch (err) {\r\n s.set({ error: err as Error });\r\n }\r\n });\r\n\r\n abortSignal.addEventListener('abort', () => off(), { once: true });\r\n return s;\r\n },\r\n });\r\n\r\n // Wrap to bump reloadStamp only when user calls reload()\r\n const origReload = base.reload.bind(base);\r\n\r\n const wrapped: ResourceRef<FunctionReturnType<Q> | undefined> = {\r\n ...base,\r\n reload: () => {\r\n reloadStamp.set(reloadStamp() + 1);\r\n return origReload();\r\n },\r\n };\r\n\r\n return wrapped;\r\n}\r\n","import { Provider } from '@angular/core';\r\nimport { AUTH_CLIENT, provideAuthClient, type AuthClient } from '../auth/auth-client.provider';\r\nimport { provideConvexBetterAuth } from '../auth/convex-better-auth.provider';\r\nimport { provideConvexResourceOptions, type KeepMode } from '../resources/live.resource';\r\n\r\nexport interface ConvexAngularOptions {\r\n /** Convex deployment URL, e.g. https://xxx.convex.cloud */\r\n convexUrl: string;\r\n /** Better Auth base URL (convex site url), e.g. https://xxx.convex.site */\r\n authBaseURL: string;\r\n /** Skew before JWT expiry to refresh token */\r\n authSkewMs?: number;\r\n /** Default keep mode for live resources ('last' | 'none') */\r\n keep?: KeepMode;\r\n /**\r\n * Optional: user-provided Better Auth client.\r\n * Must include convexClient() and crossDomainClient() plugins.\r\n */\r\n authClient?: AuthClient;\r\n}\r\n\r\n/**\r\n * Single entry-point provider to wire Convex + Better Auth + resource defaults.\r\n * Behavior:\r\n * - If opts.authClient is provided, we use it (and verify required plugins).\r\n * - Else we create a default Better Auth client using authBaseURL with required plugins.\r\n */\r\nexport function provideConvexAngular(opts: ConvexAngularOptions): Provider[] {\r\n const providers: Provider[] = [];\r\n\r\n if (opts.authClient) {\r\n providers.push({\r\n provide: AUTH_CLIENT,\r\n useFactory: () => {\r\n const c = opts.authClient as AuthClient;\r\n const hasConvex = typeof c.convex?.token === 'function';\r\n const hasCross = typeof c.crossDomain?.oneTimeToken?.verify === 'function';\r\n if (!hasConvex || !hasCross) {\r\n throw new Error(\r\n 'Provided AUTH client is missing required plugins: convexClient() and crossDomainClient().',\r\n );\r\n }\r\n return c;\r\n },\r\n });\r\n } else {\r\n // Default client with known plugin set (convex + crossDomain)\r\n providers.push(\r\n provideAuthClient({\r\n baseURL: opts.authBaseURL,\r\n }),\r\n );\r\n }\r\n\r\n providers.push(\r\n ...provideConvexBetterAuth({\r\n convexUrl: opts.convexUrl,\r\n authSkewMs: opts.authSkewMs,\r\n }),\r\n );\r\n\r\n if (opts.keep) {\r\n providers.push(provideConvexResourceOptions({ keep: opts.keep }));\r\n }\r\n return providers;\r\n}\r\n","// convex-mutation-resource.ts\r\nimport {\r\n ResourceRef,\r\n ResourceStreamItem,\r\n computed,\r\n resource,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport type { OptimisticUpdate } from 'convex/browser';\r\nimport { FunctionArgs, FunctionReference, FunctionReturnType } from 'convex/server';\r\nimport { injectConvex } from '../core/inject-convex.token';\r\n\r\nexport type MutationRef = FunctionReference<'mutation'>;\r\ntype NoArgsMutation = MutationRef & { _args: Record<string, never> };\r\ntype IfEmptyArgs<M extends MutationRef, TIfEmpty, TIfNot> = keyof M['_args'] extends never\r\n ? TIfEmpty\r\n : TIfNot;\r\n\r\nexport interface ConvexMutationOptions<M extends MutationRef> {\r\n optimisticUpdate?: OptimisticUpdate<FunctionArgs<M>>;\r\n onSuccess?: (data: FunctionReturnType<M>) => void;\r\n onError?: (err: Error) => void;\r\n /** concurrency: queue = sequential, drop = ignore while inflight, replace = prefer latest */\r\n mode?: 'queue' | 'drop' | 'replace';\r\n /** simple retry */\r\n retries?: number;\r\n retryDelayMs?: (attempt: number) => number;\r\n}\r\n\r\ntype RunFn<M extends MutationRef> = IfEmptyArgs<\r\n M,\r\n (args?: FunctionArgs<M>) => Promise<FunctionReturnType<M>>,\r\n (args: FunctionArgs<M>) => Promise<FunctionReturnType<M>>\r\n>;\r\n\r\nexport interface ConvexMutationResource<M extends MutationRef> {\r\n /** imperative trigger */\r\n run: RunFn<M>;\r\n /** resource-shaped state (bind in templates if you like) */\r\n state: ResourceRef<FunctionReturnType<M> | undefined>;\r\n /** convenience signals */\r\n data: Signal<FunctionReturnType<M> | undefined>;\r\n error: Signal<Error | undefined>;\r\n isRunning: Signal<boolean>;\r\n reset(): void;\r\n}\r\n\r\n/** Overloads for nice run() arg ergonomics */\r\nexport function convexMutationResource<M extends NoArgsMutation>(\r\n mutation: M,\r\n opts?: ConvexMutationOptions<M>,\r\n): ConvexMutationResource<M>;\r\nexport function convexMutationResource<M extends MutationRef>(\r\n mutation: M,\r\n opts?: ConvexMutationOptions<M>,\r\n): ConvexMutationResource<M>;\r\n\r\n/** Single impl */\r\nexport function convexMutationResource<M extends MutationRef>(\r\n mutation: M,\r\n opts?: ConvexMutationOptions<M>,\r\n): ConvexMutationResource<M> {\r\n const convex = injectConvex();\r\n const isRunning = signal(false);\r\n const pending = new Map<number, { resolve: (v: any) => void; reject: (e: any) => void }>();\r\n const inflight = signal<Promise<unknown> | undefined>(undefined);\r\n const trigger = signal<{ id: number; args: FunctionArgs<M> } | undefined>(undefined);\r\n let seq = 0;\r\n\r\n const state = resource<\r\n FunctionReturnType<M> | undefined,\r\n { id: number; args: FunctionArgs<M> } | undefined\r\n >({\r\n params: computed(() => trigger()),\r\n stream: async ({ params, abortSignal }) => {\r\n const out = signal<ResourceStreamItem<FunctionReturnType<M> | undefined>>({\r\n value: undefined,\r\n });\r\n if (!params) return out;\r\n\r\n const done = () => {\r\n // clean out waiter if still present\r\n const w = pending.get(params.id);\r\n if (w) pending.delete(params.id);\r\n };\r\n\r\n const runOnce = async () => {\r\n let attempt = 0;\r\n const retries = opts?.retries ?? 0;\r\n const delay = (n: number) =>\r\n new Promise((r) => setTimeout(r, opts?.retryDelayMs?.(n) ?? 500 * n));\r\n\r\n // NB: Convex mutations don’t support abort; we still observe abortSignal to stop emitting.\r\n // We *do not* call mutation again on aborted; we just stop updating UI.\r\n // If you choose mode: 'replace', older runs get superseded by newer trigger()s.\r\n // That’s the main “cancellation” we can mimic here.\r\n while (true) {\r\n try {\r\n const res = await convex.mutation(mutation, params.args, {\r\n optimisticUpdate: opts?.optimisticUpdate,\r\n });\r\n if (!abortSignal.aborted) {\r\n out.set({ value: res });\r\n opts?.onSuccess?.(res);\r\n pending.get(params.id)?.resolve(res);\r\n }\r\n done();\r\n return;\r\n } catch (e) {\r\n const err = e instanceof Error ? e : new Error(String(e));\r\n if (!abortSignal.aborted) {\r\n out.set({ error: err });\r\n }\r\n if (attempt >= retries) {\r\n opts?.onError?.(err);\r\n pending.get(params.id)?.reject(err);\r\n done();\r\n return;\r\n }\r\n attempt++;\r\n await delay(attempt);\r\n }\r\n }\r\n };\r\n\r\n isRunning.set(true);\r\n try {\r\n const p = runOnce();\r\n inflight.set(p);\r\n await p;\r\n } finally {\r\n if (!abortSignal.aborted) isRunning.set(false);\r\n if (inflight() && (await inflight()) === undefined) inflight.set(undefined);\r\n }\r\n\r\n return out;\r\n },\r\n });\r\n\r\n const data = computed(() => state.value());\r\n const error = computed(() => state.error());\r\n\r\n const run: RunFn<M> = (async (args?: FunctionArgs<M>) => {\r\n const job = { id: ++seq, args: (args ?? ({} as any)) as FunctionArgs<M> };\r\n\r\n if (opts?.mode === 'drop' && inflight()) {\r\n // return the inflight promise if present (best-effort)\r\n return inflight() as Promise<any>;\r\n }\r\n\r\n if (opts?.mode === 'queue' && inflight()) {\r\n await inflight();\r\n }\r\n\r\n const promise = new Promise<FunctionReturnType<M>>((resolve, reject) => {\r\n pending.set(job.id, { resolve, reject });\r\n });\r\n\r\n // \"replace\": push new job; older job’s UI will be superseded by the next emission\r\n trigger.set(job);\r\n return promise;\r\n }) as RunFn<M>;\r\n\r\n const reset = () => {\r\n // clear UI state; does not affect in-flight promise\r\n (state as any).reset?.(); // safe if Angular adds reset later; otherwise ignore\r\n };\r\n\r\n return { run, state, data, error, isRunning: isRunning.asReadonly(), reset };\r\n}\r\n","// convex-action-resource.ts\r\nimport {\r\n ResourceRef,\r\n ResourceStreamItem,\r\n computed,\r\n resource,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport { FunctionArgs, FunctionReference, FunctionReturnType } from 'convex/server';\r\nimport { injectConvex } from '../core/inject-convex.token';\r\n\r\nexport type ActionRef = FunctionReference<'action'>;\r\ntype NoArgsAction = ActionRef & { _args: Record<string, never> };\r\ntype IfEmptyArgs<A extends ActionRef, TIfEmpty, TIfNot> = keyof A['_args'] extends never\r\n ? TIfEmpty\r\n : TIfNot;\r\n\r\nexport interface ConvexActionOptions<A extends ActionRef> {\r\n onSuccess?: (data: FunctionReturnType<A>) => void;\r\n onError?: (err: Error) => void;\r\n /** concurrency: queue = sequential, drop = ignore while inflight, replace = prefer latest */\r\n mode?: 'queue' | 'drop' | 'replace';\r\n /** simple retry */\r\n retries?: number;\r\n retryDelayMs?: (attempt: number) => number;\r\n}\r\n\r\ntype RunFn<A extends ActionRef> = IfEmptyArgs<\r\n A,\r\n (args?: FunctionArgs<A>) => Promise<FunctionReturnType<A>>,\r\n (args: FunctionArgs<A>) => Promise<FunctionReturnType<A>>\r\n>;\r\n\r\nexport interface ConvexActionResource<A extends ActionRef> {\r\n run: RunFn<A>;\r\n state: ResourceRef<FunctionReturnType<A> | undefined>;\r\n data: Signal<FunctionReturnType<A> | undefined>;\r\n error: Signal<Error | undefined>;\r\n isRunning: Signal<boolean>;\r\n reset(): void;\r\n}\r\n\r\n/** Overloads for nice run() arg ergonomics */\r\nexport function convexActionResource<A extends NoArgsAction>(\r\n action: A,\r\n opts?: ConvexActionOptions<A>,\r\n): ConvexActionResource<A>;\r\nexport function convexActionResource<A extends ActionRef>(\r\n action: A,\r\n opts?: ConvexActionOptions<A>,\r\n): ConvexActionResource<A>;\r\n\r\n/** Single impl */\r\nexport function convexActionResource<A extends ActionRef>(\r\n action: A,\r\n opts?: ConvexActionOptions<A>,\r\n): ConvexActionResource<A> {\r\n const convex = injectConvex();\r\n const isRunning = signal(false);\r\n const inflight = signal<Promise<unknown> | undefined>(undefined);\r\n const pending = new Map<number, { resolve: (v: any) => void; reject: (e: any) => void }>();\r\n const trigger = signal<{ id: number; args: FunctionArgs<A> } | undefined>(undefined);\r\n let seq = 0;\r\n\r\n const state = resource<\r\n FunctionReturnType<A> | undefined,\r\n { id: number; args: FunctionArgs<A> } | undefined\r\n >({\r\n params: computed(() => trigger()),\r\n stream: async ({ params, abortSignal }) => {\r\n const out = signal<ResourceStreamItem<FunctionReturnType<A> | undefined>>({\r\n value: undefined,\r\n });\r\n if (!params) return out;\r\n\r\n const done = () => {\r\n const w = pending.get(params.id);\r\n if (w) pending.delete(params.id);\r\n };\r\n\r\n const runOnce = async () => {\r\n let attempt = 0;\r\n const retries = opts?.retries ?? 0;\r\n const delay = (n: number) =>\r\n new Promise((r) => setTimeout(r, opts?.retryDelayMs?.(n) ?? 500 * n));\r\n\r\n while (true) {\r\n try {\r\n const res = await convex.action(action, params.args);\r\n if (!abortSignal.aborted) {\r\n out.set({ value: res });\r\n opts?.onSuccess?.(res);\r\n pending.get(params.id)?.resolve(res);\r\n }\r\n done();\r\n return;\r\n } catch (e) {\r\n const err = e instanceof Error ? e : new Error(String(e));\r\n if (!abortSignal.aborted) out.set({ error: err });\r\n if (attempt >= retries) {\r\n opts?.onError?.(err);\r\n pending.get(params.id)?.reject(err);\r\n done();\r\n return;\r\n }\r\n attempt++;\r\n await delay(attempt);\r\n }\r\n }\r\n };\r\n\r\n isRunning.set(true);\r\n try {\r\n const p = runOnce();\r\n inflight.set(p);\r\n await p;\r\n } finally {\r\n if (!abortSignal.aborted) isRunning.set(false);\r\n if (inflight() && (await inflight()) === undefined) inflight.set(undefined);\r\n }\r\n\r\n return out;\r\n },\r\n });\r\n\r\n const data = computed(() => state.value());\r\n const error = computed(() => state.error());\r\n\r\n const run: RunFn<A> = (async (args?: FunctionArgs<A>) => {\r\n const job = { id: ++seq, args: (args ?? ({} as any)) as FunctionArgs<A> };\r\n\r\n if (opts?.mode === 'drop' && inflight()) {\r\n return inflight() as Promise<FunctionReturnType<A>>;\r\n }\r\n if (opts?.mode === 'queue' && inflight()) {\r\n await inflight();\r\n }\r\n\r\n const promise = new Promise<FunctionReturnType<A>>((resolve, reject) => {\r\n pending.set(job.id, { resolve, reject });\r\n });\r\n\r\n trigger.set(job); // \"replace\" naturally supersedes older emissions\r\n return promise;\r\n }) as RunFn<A>;\r\n\r\n const reset = () => {\r\n (state as any).reset?.();\r\n };\r\n\r\n return { run, state, data, error, isRunning: isRunning.asReadonly(), reset };\r\n}\r\n","/*\r\n * Public API Surface of convex-angular\r\n */\r\n\r\n// Core client and DI token\r\nexport * from './lib/core/convex-angular-client';\r\nexport * from './lib/core/inject-convex.token';\r\n\r\n// One-call setup provider (combine common providers)\r\nexport * from './lib/setup/convex-angular.providers';\r\n\r\n// Better Auth + Convex provider\r\nexport * from './lib/auth/convex-better-auth.provider';\r\nexport * from './lib/auth/auth-client.provider';\r\n\r\n// Angular resource helpers for Convex\r\nexport * from './lib/resources/live.resource';\r\nexport * from './lib/resources/mutation.resource';\r\nexport * from './lib/resources/action.resource';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@razakalpha/convngx",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/common": "^
|
|
6
|
-
"@angular/core": "^
|
|
7
|
-
"convex": "^1.25.
|
|
8
|
-
"@convex-dev/better-auth": "^0.7.
|
|
9
|
-
"better-auth": "
|
|
5
|
+
"@angular/common": "^21.1.1",
|
|
6
|
+
"@angular/core": "^21.1.1",
|
|
7
|
+
"convex": "^1.25.4",
|
|
8
|
+
"@convex-dev/better-auth": "^0.7.18",
|
|
9
|
+
"better-auth": "1.3.8"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"tslib": "^2.3.0"
|
|
13
13
|
},
|
|
14
14
|
"sideEffects": false,
|
|
15
15
|
"module": "fesm2022/razakalpha-convngx.mjs",
|
|
16
|
-
"typings": "
|
|
16
|
+
"typings": "types/razakalpha-convngx.d.ts",
|
|
17
17
|
"exports": {
|
|
18
18
|
"./package.json": {
|
|
19
19
|
"default": "./package.json"
|
|
20
20
|
},
|
|
21
21
|
".": {
|
|
22
|
-
"types": "./
|
|
22
|
+
"types": "./types/razakalpha-convngx.d.ts",
|
|
23
23
|
"default": "./fesm2022/razakalpha-convngx.mjs"
|
|
24
24
|
}
|
|
25
25
|
}
|