@powerhousedao/reactor-browser 6.2.0-dev.5 → 6.2.0-dev.50

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.
Files changed (48) hide show
  1. package/dist/{client-CYhc2W1V.d.ts → client-09xv0Dq6.d.ts} +1 -1
  2. package/dist/{client-CYhc2W1V.d.ts.map → client-09xv0Dq6.d.ts.map} +1 -1
  3. package/dist/{client-CvgFU1Dv.js → client-_Gh2Uf0E.js} +1 -1
  4. package/dist/{client-CvgFU1Dv.js.map → client-_Gh2Uf0E.js.map} +1 -1
  5. package/dist/client-u13cr-Vg.js +51 -0
  6. package/dist/client-u13cr-Vg.js.map +1 -0
  7. package/dist/{document-by-id-BrIy0iHX.js → document-by-id-dLYFX-xz.js} +3 -3
  8. package/dist/{document-by-id-BrIy0iHX.js.map → document-by-id-dLYFX-xz.js.map} +1 -1
  9. package/dist/{index-Bz4MqX_j.d.ts → index-D3bV5rcl.d.ts} +1 -2
  10. package/dist/index-D3bV5rcl.d.ts.map +1 -0
  11. package/dist/{index-ZltD7u5Z.d.ts → index-DS4W07Y8.d.ts} +2 -45
  12. package/dist/index-DS4W07Y8.d.ts.map +1 -0
  13. package/dist/index.d.ts +43 -21
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +137 -131
  16. package/dist/index.js.map +1 -1
  17. package/dist/inspector-proxy-CvQDDxmT.d.ts +255 -0
  18. package/dist/inspector-proxy-CvQDDxmT.d.ts.map +1 -0
  19. package/dist/{make-ph-event-functions-DwiD1zH9.js → make-ph-event-functions-BHoLPif5.js} +2 -2
  20. package/dist/{make-ph-event-functions-DwiD1zH9.js.map → make-ph-event-functions-BHoLPif5.js.map} +1 -1
  21. package/dist/{relational-4_LVwp8p.js → relational-Dj06-YkI.js} +14 -2
  22. package/dist/relational-Dj06-YkI.js.map +1 -0
  23. package/dist/{renown-Dzmo1gJD.js → renown-D-1c_Bvx.js} +35 -48
  24. package/dist/renown-D-1c_Bvx.js.map +1 -0
  25. package/dist/src/analytics/index.d.ts +2 -2
  26. package/dist/src/analytics/index.js +2 -2
  27. package/dist/src/document-model.d.ts +8 -0
  28. package/dist/src/document-model.d.ts.map +1 -0
  29. package/dist/src/document-model.js +14 -0
  30. package/dist/src/document-model.js.map +1 -0
  31. package/dist/src/graphql/client.d.ts +1 -1
  32. package/dist/src/graphql/client.js +1 -1
  33. package/dist/src/relational/index.d.ts +46 -2
  34. package/dist/src/relational/index.d.ts.map +1 -0
  35. package/dist/src/relational/index.js +1 -1
  36. package/dist/src/renown/index.d.ts +1 -1
  37. package/dist/src/renown/index.js +1 -1
  38. package/dist/src/rpc/index.d.ts +240 -0
  39. package/dist/src/rpc/index.d.ts.map +1 -0
  40. package/dist/src/rpc/index.js +1250 -0
  41. package/dist/src/rpc/index.js.map +1 -0
  42. package/dist/{types-BmR60pPN.d.ts → types-CPV0Cnsy.d.ts} +1 -1
  43. package/dist/{types-BmR60pPN.d.ts.map → types-CPV0Cnsy.d.ts.map} +1 -1
  44. package/package.json +37 -11
  45. package/dist/index-Bz4MqX_j.d.ts.map +0 -1
  46. package/dist/index-ZltD7u5Z.d.ts.map +0 -1
  47. package/dist/relational-4_LVwp8p.js.map +0 -1
  48. package/dist/renown-Dzmo1gJD.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/rpc/listeners.ts","../../../src/rpc/op-channel.ts","../../../src/rpc/admin-client.ts","../../../src/rpc/error-info.ts","../../../src/rpc/paging.ts","../../../src/rpc/subscription.ts","../../../src/rpc/client-proxy.ts","../../../src/rpc/inspector-proxy.ts","../../../src/rpc/protocol.ts","../../../src/rpc/host-reply.ts","../../../src/rpc/live-query-proxy.ts","../../../src/rpc/relational-db-proxy.ts","../../../src/rpc/sync-manager-proxy.ts","../../../src/rpc/forwarded-events.ts","../../../src/rpc/event-bus-proxy.ts","../../../src/rpc/connect-reactor.ts","../../../src/rpc/host-server.ts","../../../src/rpc/transport.ts","../../../src/rpc/reactor-host.ts","../../../src/rpc/worker-package-loader.ts","../../../src/rpc/rpc-correlator.ts","../../../src/rpc/message-router.ts"],"sourcesContent":["export class KeyedListeners<K, A extends unknown[] = []> {\n private readonly map = new Map<K, Set<(...a: A) => void>>();\n\n add(key: K, fn: (...a: A) => void): () => void {\n let set = this.map.get(key);\n if (!set) {\n set = new Set();\n this.map.set(key, set);\n }\n set.add(fn);\n return () => {\n const current = this.map.get(key);\n if (!current) {\n return;\n }\n current.delete(fn);\n if (current.size === 0) {\n this.map.delete(key);\n }\n };\n }\n\n emit(key: K, ...a: A): void {\n const set = this.map.get(key);\n if (!set) {\n return;\n }\n for (const fn of [...set]) {\n fn(...a);\n }\n }\n\n emitAll(...a: A): void {\n for (const set of [...this.map.values()]) {\n for (const fn of [...set]) {\n fn(...a);\n }\n }\n }\n}\n\nexport class Listeners<A extends unknown[] = []> {\n private readonly keyed = new KeyedListeners<null, A>();\n\n add(fn: (...a: A) => void): () => void {\n return this.keyed.add(null, fn);\n }\n\n emit(...a: A): void {\n this.keyed.emit(null, ...a);\n }\n}\n","import type { MessageRouter } from \"./message-router.js\";\nimport type { ClientMessage, OpKind } from \"./protocol.js\";\n\nexport const RPC_DEFAULT_TIMEOUT_MS = 30_000;\n\nexport function toVoid(promise: Promise<unknown>): Promise<void> {\n return promise.then(() => undefined);\n}\n\nexport interface IOpChannel {\n call(method: string, args?: unknown[]): Promise<unknown>;\n callVoid(method: string, args?: unknown[]): Promise<void>;\n}\n\nexport function opChannel(\n router: MessageRouter,\n kind: OpKind,\n timeoutMs: number = RPC_DEFAULT_TIMEOUT_MS,\n): IOpChannel {\n const call = (method: string, args: unknown[] = []): Promise<unknown> =>\n router.request((id) => ({ k: kind, id, method, args }) as ClientMessage, {\n timeoutMs,\n });\n return {\n call,\n callVoid: (method, args) => toVoid(call(method, args)),\n };\n}\n","import { Listeners } from \"./listeners.js\";\nimport type { MessageRouter } from \"./message-router.js\";\nimport { RPC_DEFAULT_TIMEOUT_MS, toVoid } from \"./op-channel.js\";\nimport type { WorkerInspectorInfo, WorkerMigrationState } from \"./protocol.js\";\n\nexport interface IWorkerAdminClient {\n info(): Promise<WorkerInspectorInfo>;\n restart(): Promise<void>;\n clearStorage(): Promise<void>;\n migrate(): Promise<void>;\n getMigrationState(): WorkerMigrationState;\n subscribeMigration(callback: () => void): () => void;\n}\n\n/** Worker lifecycle channel (info/restart/clearStorage/migrate) over the shared router. */\nexport function createWorkerAdminClient(\n router: MessageRouter,\n): IWorkerAdminClient {\n let migrationState: WorkerMigrationState = { status: \"idle\" };\n const migrationListeners = new Listeners();\n\n router.on(\"migration\", (msg) => {\n migrationState = msg.state;\n migrationListeners.emit();\n });\n\n const send = (\n method: \"info\" | \"restart\" | \"clearStorage\" | \"migrate\",\n ): Promise<unknown> =>\n router.request((id) => ({ k: \"admin\", id, method }), {\n timeoutMs: RPC_DEFAULT_TIMEOUT_MS,\n });\n\n return {\n info: () => send(\"info\") as Promise<WorkerInspectorInfo>,\n restart: () => toVoid(send(\"restart\")),\n clearStorage: () => toVoid(send(\"clearStorage\")),\n migrate: () => toVoid(send(\"migrate\")),\n getMigrationState: () => migrationState,\n subscribeMigration: (callback) => migrationListeners.add(callback),\n };\n}\n","import type { ErrorInfo } from \"./protocol.js\";\n\nconst MAX_STACK_LENGTH = 8 * 1024;\nconst MAX_CAUSE_DEPTH = 8;\n\nexport function toErrorInfo(err: unknown, depth = 0): ErrorInfo {\n if (depth > MAX_CAUSE_DEPTH) {\n return { name: \"Error\", message: \"cause chain truncated\" };\n }\n if (err instanceof Error) {\n const info: ErrorInfo = { name: err.name || \"Error\", message: err.message };\n if (typeof err.stack === \"string\") {\n info.stack =\n err.stack.length > MAX_STACK_LENGTH\n ? err.stack.slice(0, MAX_STACK_LENGTH)\n : err.stack;\n }\n if (err.cause !== undefined) {\n info.cause = toErrorInfo(err.cause, depth + 1);\n }\n return info;\n }\n if (typeof err === \"string\") {\n return { name: \"Error\", message: err };\n }\n if (err && typeof err === \"object\") {\n const record = err as { name?: unknown; message?: unknown };\n return {\n name: typeof record.name === \"string\" ? record.name : \"Error\",\n message:\n typeof record.message === \"string\"\n ? record.message\n : safeStringify(err),\n };\n }\n return { name: \"Error\", message: safeStringify(err) };\n}\n\nfunction safeStringify(value: unknown): string {\n if (value === null || value === undefined) {\n return String(value);\n }\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return String(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return \"[unserializable]\";\n }\n}\n\nexport function fromErrorInfo(info: ErrorInfo): Error {\n const err = new Error(info.message);\n Object.defineProperty(err, \"name\", {\n value: info.name,\n configurable: true,\n writable: true,\n });\n if (info.stack !== undefined) {\n err.stack = info.stack;\n }\n if (info.cause !== undefined) {\n Object.defineProperty(err, \"cause\", {\n value: fromErrorInfo(info.cause),\n configurable: true,\n writable: true,\n });\n }\n return err;\n}\n","export type PageableResult = Record<string, unknown> & {\n next: () => Promise<unknown>;\n};\n\nexport type TokenizedPage = Record<string, unknown> & { nextToken: string };\n\nexport function isPageableResult(value: unknown): value is PageableResult {\n return (\n value !== null &&\n typeof value === \"object\" &&\n typeof (value as { next?: unknown }).next === \"function\"\n );\n}\n\nexport function hasNextToken(value: unknown): value is TokenizedPage {\n return (\n value !== null &&\n typeof value === \"object\" &&\n typeof (value as { nextToken?: unknown }).nextToken === \"string\"\n );\n}\n\nexport function dehydratePage(\n value: unknown,\n registerCursor: (next: () => Promise<unknown>) => string,\n): unknown {\n if (!isPageableResult(value)) {\n return value;\n }\n const { next, ...rest } = value;\n return { ...rest, nextToken: registerCursor(next) };\n}\n\nexport function rehydratePage(\n value: unknown,\n fetchPage: (token: string) => Promise<unknown>,\n): unknown {\n if (!hasNextToken(value)) {\n return value;\n }\n const { nextToken, ...rest } = value;\n return { ...rest, next: () => fetchPage(nextToken) };\n}\n","import type { MessageRouter } from \"./message-router.js\";\nimport type { ClientMessage, CorrelationId, OwnerMessage } from \"./protocol.js\";\n\nexport class SubscriptionStore {\n private readonly map = new Map<CorrelationId, () => void>();\n\n set(id: CorrelationId, unsubscribe: () => void): void {\n this.map.set(id, unsubscribe);\n }\n\n get(id: CorrelationId): (() => void) | undefined {\n return this.map.get(id);\n }\n\n delete(id: CorrelationId): void {\n this.map.delete(id);\n }\n\n end(id: CorrelationId): void {\n const unsubscribe = this.map.get(id);\n if (unsubscribe) {\n this.map.delete(id);\n unsubscribe();\n }\n }\n\n drain(): void {\n for (const unsubscribe of this.map.values()) {\n unsubscribe();\n }\n this.map.clear();\n }\n}\n\nexport interface ICorrelatedSubscriptions<Sub> {\n subscribe(sub: Sub, open: (id: CorrelationId) => ClientMessage): () => void;\n}\n\nexport interface CorrelatedConfig<\n Sub,\n EK extends OwnerMessage[\"k\"],\n ErrK extends OwnerMessage[\"k\"],\n> {\n idPrefix: string;\n eventKind: EK;\n errKind: ErrK;\n onEvent: (sub: Sub, message: Extract<OwnerMessage, { k: EK }>) => void;\n onError: (sub: Sub, message: Extract<OwnerMessage, { k: ErrK }>) => void;\n close: (id: CorrelationId) => ClientMessage;\n}\n\nexport function createCorrelatedSubscriptions<\n Sub,\n EK extends OwnerMessage[\"k\"],\n ErrK extends OwnerMessage[\"k\"],\n>(\n router: MessageRouter,\n config: CorrelatedConfig<Sub, EK, ErrK>,\n): ICorrelatedSubscriptions<Sub> {\n let counter = 0;\n const subs = new Map<CorrelationId, Sub>();\n\n router.on(config.eventKind, (message) => {\n const sub = subs.get((message as { id: CorrelationId }).id);\n if (sub) {\n config.onEvent(sub, message);\n }\n });\n router.on(config.errKind, (message) => {\n const id = (message as { id: CorrelationId }).id;\n const sub = subs.get(id);\n if (sub) {\n subs.delete(id);\n router.post(config.close(id));\n config.onError(sub, message);\n }\n });\n\n return {\n subscribe(sub, open) {\n const id: CorrelationId = `${config.idPrefix}${++counter}`;\n subs.set(id, sub);\n router.post(open(id));\n return () => {\n subs.delete(id);\n router.post(config.close(id));\n };\n },\n };\n}\n","import type {\n DocumentChangeEvent,\n IDocumentModelRegistry,\n IReactorClient,\n PagingOptions,\n SearchFilter,\n ViewFilter,\n} from \"@powerhousedao/reactor\";\nimport { fromErrorInfo } from \"./error-info.js\";\nimport type { MessageRouter } from \"./message-router.js\";\nimport { rehydratePage } from \"./paging.js\";\nimport { createCorrelatedSubscriptions } from \"./subscription.js\";\n\ntype Forwarder = (...args: unknown[]) => Promise<unknown>;\n\ntype ChangeCallback = (event: DocumentChangeEvent) => void;\n\nfunction isAbortSignal(value: unknown): value is AbortSignal {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as AbortSignal).aborted === \"boolean\" &&\n typeof (value as { addEventListener?: unknown }).addEventListener ===\n \"function\" &&\n // also require removeEventListener — call() attaches a listener it later detaches\n typeof (value as { removeEventListener?: unknown }).removeEventListener ===\n \"function\"\n );\n}\n\nexport type ReactorClientProxyOptions = {\n onReload?: (reason: string, workerGen?: string) => void;\n /** Tab-local registry for module lookups (reducers/editors can't cross the worker boundary). */\n registry?: IDocumentModelRegistry;\n};\n\nexport function createReactorClientProxy(\n router: MessageRouter,\n options: ReactorClientProxyOptions = {},\n): IReactorClient {\n const registry = options.registry;\n\n function fetchPage(token: string): Promise<unknown> {\n return router.request((id) => ({ k: \"page\", id, token }), {\n transform: rehydrate,\n });\n }\n\n function rehydrate(value: unknown): unknown {\n return rehydratePage(value, fetchPage);\n }\n\n const changeSubs = createCorrelatedSubscriptions<\n ChangeCallback,\n \"event\",\n \"sub-err\"\n >(router, {\n idPrefix: \"sub\",\n eventKind: \"event\",\n errKind: \"sub-err\",\n onEvent: (callback, msg) => callback(msg.change as DocumentChangeEvent),\n onError: (_callback, msg) =>\n console.error(\"Reactor subscription failed:\", fromErrorInfo(msg.error)),\n close: (id) => ({ k: \"unsub\", id }),\n });\n router.on(\"reload\", (msg) => {\n options.onReload?.(msg.reason, msg.workerGen);\n });\n\n const call = (method: string, args: unknown[]): Promise<unknown> => {\n let abortAt: number | undefined;\n for (let i = 0; i < args.length; i++) {\n if (isAbortSignal(args[i])) {\n abortAt = i;\n }\n }\n let wire = args;\n if (abortAt !== undefined) {\n wire = args.slice();\n wire[abortAt] = undefined;\n }\n return router.request(\n (id) => ({ k: \"req\", id, method, args: wire, abortAt }),\n {\n transform: rehydrate,\n setup: (id) => {\n if (abortAt === undefined) {\n return;\n }\n const signal = args[abortAt] as AbortSignal;\n const sendAbort = () => router.post({ k: \"abort\", targetId: id });\n if (signal.aborted) {\n sendAbort();\n return;\n }\n signal.addEventListener(\"abort\", sendAbort, { once: true });\n return () => signal.removeEventListener(\"abort\", sendAbort);\n },\n },\n );\n };\n\n const subscribe = (\n search: SearchFilter,\n callback: ChangeCallback,\n view?: ViewFilter,\n ): (() => void) =>\n changeSubs.subscribe(callback, (id) => ({ k: \"sub\", id, search, view }));\n\n const forwarders = new Map<string, Forwarder>();\n const forwarder = (method: string): Forwarder => {\n let fn = forwarders.get(method);\n if (!fn) {\n fn = (...args: unknown[]) => call(method, args);\n forwarders.set(method, fn);\n }\n return fn;\n };\n\n const drives = new Proxy(\n {},\n {\n get: (_target, prop) =>\n typeof prop === \"string\" ? forwarder(`drives.${prop}`) : undefined,\n },\n );\n\n const handler: ProxyHandler<Record<string, unknown>> = {\n get(_target, prop) {\n if (typeof prop !== \"string\" || prop === \"then\") {\n return undefined;\n }\n if (prop === \"drives\") {\n return drives;\n }\n if (prop === \"subscribe\") {\n return subscribe;\n }\n if (registry) {\n if (prop === \"getDocumentModelModule\") {\n return (documentType: string) =>\n Promise.resolve().then(() => registry.getModule(documentType));\n }\n if (prop === \"getDocumentModelModules\") {\n return (_namespace?: string, paging?: PagingOptions) =>\n Promise.resolve({\n results: registry.getAllModules(),\n options: paging ?? { cursor: \"\", limit: Number.MAX_SAFE_INTEGER },\n });\n }\n }\n return forwarder(prop);\n },\n };\n\n return new Proxy({}, handler) as unknown as IReactorClient;\n}\n","import type { MessageRouter } from \"./message-router.js\";\nimport { opChannel } from \"./op-channel.js\";\n\nexport interface IInspectorProxy {\n getQueueState(): Promise<unknown>;\n pauseQueue(): Promise<void>;\n resumeQueue(): Promise<void>;\n getProcessors(): Promise<unknown>;\n retryProcessor(processorId: string): Promise<void>;\n validateDocument(documentId: string, branch?: string): Promise<unknown>;\n rebuildKeyframes(documentId: string, branch?: string): Promise<unknown>;\n rebuildSnapshots(documentId: string, branch?: string): Promise<unknown>;\n queryReactorDb(sql: string, params?: unknown[]): Promise<unknown>;\n}\n\nexport function createInspectorProxy(router: MessageRouter): IInspectorProxy {\n const ops = opChannel(router, \"inspector-op\");\n\n return {\n getQueueState: () => ops.call(\"queue.getState\"),\n pauseQueue: () => ops.callVoid(\"queue.pause\"),\n resumeQueue: () => ops.callVoid(\"queue.resume\"),\n getProcessors: () => ops.call(\"processors.getAll\"),\n retryProcessor: (processorId) =>\n ops.callVoid(\"processors.retry\", [processorId]),\n validateDocument: (documentId, branch) =>\n ops.call(\"integrity.validate\", [documentId, branch]),\n rebuildKeyframes: (documentId, branch) =>\n ops.call(\"integrity.rebuildKeyframes\", [documentId, branch]),\n rebuildSnapshots: (documentId, branch) =>\n ops.call(\"integrity.rebuildSnapshots\", [documentId, branch]),\n queryReactorDb: (sql, params) => ops.call(\"db.query\", [sql, params ?? []]),\n };\n}\n","export type CorrelationId = string;\n\nexport type ErrorInfo = {\n name: string;\n message: string;\n stack?: string;\n cause?: ErrorInfo;\n};\n\nexport type RpcRequest = {\n k: \"req\";\n id: CorrelationId;\n method: string;\n args: unknown[];\n abortAt?: number;\n};\n\nexport type RpcResponse = { k: \"res\"; id: CorrelationId; value: unknown };\n\nexport type RpcError = { k: \"err\"; id: CorrelationId; error: ErrorInfo };\n\n/** Failed document subscribe; routed to the change-subscription registry. */\nexport type RpcSubError = { k: \"sub-err\"; id: CorrelationId; error: ErrorInfo };\n\n/** Failed live query; routed to the live-query registry. */\nexport type RpcLiveError = {\n k: \"live-err\";\n id: CorrelationId;\n error: ErrorInfo;\n};\n\nexport type RpcAbort = { k: \"abort\"; targetId: CorrelationId };\n\nexport type RpcSubscribe = {\n k: \"sub\";\n id: CorrelationId;\n search: unknown;\n view?: unknown;\n};\n\nexport type RpcEvent = { k: \"event\"; id: CorrelationId; change: unknown };\n\nexport type RpcUnsub = { k: \"unsub\"; id: CorrelationId };\n\nexport type RpcNextPage = { k: \"page\"; id: CorrelationId; token: string };\n\n// Bumped when the tab<->owner wire protocol changes incompatibly; a tab whose\n// version differs from the owner's baseline is told to reload.\nexport const RPC_PROTOCOL_VERSION = 2;\n\nexport type VersionFingerprint = {\n appBuildId: string;\n rpcProtocolVersion: number;\n models: { id: string; version: number }[];\n};\n\nexport type RpcHello = {\n k: \"hello\";\n id: CorrelationId;\n version: VersionFingerprint;\n construct?: unknown;\n packages?: string[];\n};\n\nexport type RpcRegisterPackages = {\n k: \"register-packages\";\n id: CorrelationId;\n specs: string[];\n};\n\nexport type RpcUnregisterPackages = {\n k: \"unregister-packages\";\n id: CorrelationId;\n names: string[];\n};\n\n// `workerGen` (present on restart-driven reloads) is the new SharedWorker name\n// suffix every tab should adopt so they converge on one fresh worker.\nexport type RpcReload = { k: \"reload\"; reason: string; workerGen?: string };\n\n// Worker lifecycle/admin channel, separate from the IReactorClient RPC surface.\nexport type RpcAdmin = {\n k: \"admin\";\n id: CorrelationId;\n method: \"info\" | \"restart\" | \"clearStorage\" | \"migrate\";\n};\n\nexport type WorkerMigrationState = {\n status: \"idle\" | \"needed\" | \"migrating\" | \"failed\";\n legacyMajor?: number;\n phase?: \"clone\" | \"dump\" | \"restore\";\n error?: string;\n};\n\n// Owner -> tab push of the worker's migration state (initial seed on connect +\n// on every change), so tabs can drive the migration banner from one flag.\nexport type RpcMigration = { k: \"migration\"; state: WorkerMigrationState };\n\nexport type WorkerInspectorInfo = {\n namespace: string;\n ownerId: string;\n bootedAtMs: number;\n connectedClients: number;\n appBuildId: string;\n rpcProtocolVersion: number;\n};\n\n// Cloneable subset of renown's user (matches UserActionSigner); token minting + attribution.\nexport type ReactorIdentity = {\n address: string;\n chainId: number;\n networkId: string;\n};\n\nexport type RpcIdentity = { k: \"identity\"; user: ReactorIdentity | null };\n\n// Distributed EventBus: worker -> all tabs, fire-and-forget. `eventType` is a\n// reactor IEventBus numeric type; `event` is the (cloneable) payload.\nexport type RpcBusEvent = { k: \"bus-event\"; eventType: number; event: unknown };\n\nexport type OpKind = \"sync-op\" | \"db-op\" | \"inspector-op\";\n\nexport type MethodCallMessage<K extends OpKind> = {\n k: K;\n id: CorrelationId;\n method: string;\n args: unknown[];\n};\n\n// syncManager commands (add/remove/triggerPull/list); the reply value is the\n// reactor's RemoteMeta (its DriveCollectionId degrades to plain\n// {driveId,branch} over postMessage and is rehydrated tab-side).\nexport type RpcSyncOp = MethodCallMessage<\"sync-op\">;\n\nexport type RpcDbOp = MethodCallMessage<\"db-op\">;\n\nexport type RpcInspectorOp = MethodCallMessage<\"inspector-op\">;\n\nexport type RpcLiveSubscribe = {\n k: \"sub-live\";\n id: CorrelationId;\n sql: string;\n params: unknown[];\n};\n\nexport type RpcLiveEvent = {\n k: \"event-live\";\n id: CorrelationId;\n results: unknown;\n};\n\nexport type RpcLiveUnsub = { k: \"unsub-live\"; id: CorrelationId };\n\n// Liveness heartbeat. The tab pings; the owner answers synchronously (even\n// mid-build/mid-migration) so a silently-evicted worker is detectable. The pong\n// echoes ownerId/bootedAtMs so a respawned (different) instance is identifiable.\nexport type RpcPing = { k: \"ping\"; id: CorrelationId };\n\nexport type RpcPong = {\n k: \"pong\";\n id: CorrelationId;\n ownerId: string;\n bootedAtMs: number;\n};\n\nexport type ClientMessage =\n | RpcRequest\n | RpcAbort\n | RpcSubscribe\n | RpcUnsub\n | RpcNextPage\n | RpcHello\n | RpcRegisterPackages\n | RpcUnregisterPackages\n | RpcIdentity\n | RpcAdmin\n | RpcSyncOp\n | RpcDbOp\n | RpcInspectorOp\n | RpcLiveSubscribe\n | RpcLiveUnsub\n | RpcPing;\n\nexport type OwnerMessage =\n | RpcResponse\n | RpcError\n | RpcSubError\n | RpcLiveError\n | RpcEvent\n | RpcReload\n | RpcBusEvent\n | RpcLiveEvent\n | RpcMigration\n | RpcPong;\n\nexport type RpcMessage = ClientMessage | OwnerMessage;\n\n/** Error reply kind for a client message kind, so it reaches the right registry. */\nexport function responseErrorKind(\n k: ClientMessage[\"k\"],\n): \"err\" | \"sub-err\" | \"live-err\" {\n if (k === \"sub\") {\n return \"sub-err\";\n }\n if (k === \"sub-live\") {\n return \"live-err\";\n }\n return \"err\";\n}\n","import { toErrorInfo } from \"./error-info.js\";\nimport { responseErrorKind } from \"./protocol.js\";\nimport type { ClientMessage, CorrelationId, OwnerMessage } from \"./protocol.js\";\nimport type { IRpcTransport } from \"./transport.js\";\n\nexport interface IHostResponder {\n ok(id: CorrelationId, value?: unknown): void;\n err(id: CorrelationId, error: unknown): void;\n errForKind(message: ClientMessage, error: unknown): void;\n run(\n id: CorrelationId,\n body: () => Promise<unknown>,\n mapOk?: (value: unknown) => unknown,\n ): Promise<void>;\n}\n\nconst defaultOk = (): unknown => ({ ok: true });\n\nexport function hostResponder(transport: IRpcTransport): IHostResponder {\n const ok = (id: CorrelationId, value: unknown = { ok: true }): void => {\n transport.post({ k: \"res\", id, value });\n };\n const err = (id: CorrelationId, error: unknown): void => {\n transport.post({ k: \"err\", id, error: toErrorInfo(error) });\n };\n return {\n ok,\n err,\n errForKind(message, error) {\n if (!(\"id\" in message)) {\n return;\n }\n transport.post({\n k: responseErrorKind(message.k),\n id: message.id,\n error: toErrorInfo(error),\n } as OwnerMessage);\n },\n async run(id, body, mapOk = defaultOk) {\n try {\n ok(id, mapOk(await body()));\n } catch (error) {\n err(id, error);\n }\n },\n };\n}\n","import { fromErrorInfo } from \"./error-info.js\";\nimport type { MessageRouter } from \"./message-router.js\";\nimport { createCorrelatedSubscriptions } from \"./subscription.js\";\n\nexport type LiveQueryResultsCallback = (results: unknown) => void;\nexport type LiveQueryErrorCallback = (error: unknown) => void;\n\nexport interface ILiveQueryProxy {\n query(\n sql: string,\n params: unknown[],\n onResults: LiveQueryResultsCallback,\n onError?: LiveQueryErrorCallback,\n ): () => void;\n}\n\ntype LiveSubscriber = {\n onResults: LiveQueryResultsCallback;\n onError?: LiveQueryErrorCallback;\n};\n\nexport function createLiveQueryProxy(router: MessageRouter): ILiveQueryProxy {\n const subs = createCorrelatedSubscriptions<\n LiveSubscriber,\n \"event-live\",\n \"live-err\"\n >(router, {\n idPrefix: \"live\",\n eventKind: \"event-live\",\n errKind: \"live-err\",\n onEvent: (sub, msg) => sub.onResults(msg.results),\n onError: (sub, msg) => sub.onError?.(fromErrorInfo(msg.error)),\n close: (id) => ({ k: \"unsub-live\", id }),\n });\n\n return {\n query(sql, params, onResults, onError) {\n return subs.subscribe({ onResults, onError }, (id) => ({\n k: \"sub-live\",\n id,\n sql,\n params,\n }));\n },\n };\n}\n","import type { PGliteWithLive } from \"@electric-sql/pglite/live\";\nimport { createLiveQueryProxy } from \"./live-query-proxy.js\";\nimport type { MessageRouter } from \"./message-router.js\";\nimport { opChannel } from \"./op-channel.js\";\n\nexport function createRelationalPgliteProxy(\n router: MessageRouter,\n): PGliteWithLive {\n const ops = opChannel(router, \"db-op\");\n const liveProxy = createLiveQueryProxy(router);\n\n const proxy = {\n query: async (sql: string, params?: unknown[]) => {\n const rows = await ops.call(\"query\", [sql, params ?? []]);\n return { rows };\n },\n live: {\n query: (\n sql: string,\n params: unknown[] | null | undefined,\n callback?: (results: unknown) => void,\n ) =>\n new Promise((resolve, reject) => {\n // Settle on the first result/error so a subscribe failure reaches the caller's retry path.\n let settled = false;\n const unsubscribe = liveProxy.query(\n sql,\n params ?? [],\n (results) => {\n if (!settled) {\n settled = true;\n resolve({ unsubscribe });\n }\n callback?.(results);\n },\n (error) => {\n if (!settled) {\n settled = true;\n reject(\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n },\n );\n }),\n },\n };\n\n return proxy as unknown as PGliteWithLive;\n}\n","import {\n DriveCollectionId,\n SyncEventTypes,\n type ChannelConfig,\n type ConnectionStateChangeCallback,\n type ConnectionStateChangedEvent,\n type ConnectionStateSnapshot,\n type IChannel,\n type IEventBus,\n type IMailbox,\n type ISyncManager,\n type Remote,\n type RemoteFilter,\n type RemoteMeta,\n type RemoteOptions,\n type ShutdownStatus,\n type SyncOperation,\n type SyncStatus,\n type SyncStatusChangeCallback,\n} from \"@powerhousedao/reactor\";\nimport { KeyedListeners, Listeners } from \"./listeners.js\";\nimport type { MessageRouter } from \"./message-router.js\";\nimport { opChannel, type IOpChannel } from \"./op-channel.js\";\n\n// Synthetic bus channel id for sync-status deltas (not a reactor IEventBus type).\nexport const SYNC_STATUS_CHANGED_EVENT = 90001;\n\nexport type SyncStatusChangedBusEvent = {\n documentId: string;\n status: SyncStatus;\n};\n\nconst SEED_MAX_ATTEMPTS = 3;\nconst SEED_RETRY_DELAY_MS = 500;\n\n// Wire shapes: DriveCollectionId arrives prototype-less over postMessage.\ntype WireDriveCollectionId = { driveId: string; branch: string };\ntype WireRemoteMeta = {\n id: string;\n name: string;\n collectionId: WireDriveCollectionId;\n channelConfig: ChannelConfig;\n filter: RemoteFilter;\n options: RemoteOptions;\n};\ntype WireRemote = {\n meta: WireRemoteMeta;\n connectionState: ConnectionStateSnapshot;\n};\n\nconst DEFAULT_SNAPSHOT: ConnectionStateSnapshot = {\n state: \"connecting\",\n failureCount: 0,\n lastSuccessUtcMs: 0,\n lastFailureUtcMs: 0,\n pushBlocked: false,\n pushFailureCount: 0,\n receivingPages: false,\n requiresAuth: false,\n};\n\n// Inert mailbox: a proxy remote carries no live sync operations tab-side.\nclass NoopMailbox implements IMailbox {\n get items(): readonly SyncOperation[] {\n return [];\n }\n get ackOrdinal(): number {\n return 0;\n }\n get latestOrdinal(): number {\n return 0;\n }\n init(): void {}\n advanceOrdinal(): void {}\n get(): undefined {\n return undefined;\n }\n add(): void {}\n remove(): void {}\n onAdded(): void {}\n onRemoved(): void {}\n pause(): void {}\n resume(): void {}\n flush(): void {}\n isPaused(): boolean {\n return false;\n }\n}\n\nconst NOOP_MAILBOX = new NoopMailbox();\n\nfunction rehydrateMeta(wire: WireRemoteMeta): RemoteMeta {\n return {\n id: wire.id,\n name: wire.name,\n collectionId: DriveCollectionId.forDrive(\n wire.collectionId.driveId,\n wire.collectionId.branch,\n ),\n channelConfig: wire.channelConfig,\n filter: wire.filter,\n options: wire.options,\n };\n}\n\nfunction channelUrl(meta: RemoteMeta): string | undefined {\n const url = meta.channelConfig.parameters.url;\n return typeof url === \"string\" ? url : undefined;\n}\n\n// Tab-side ISyncManager: cache-backed reads fed by the bus, ops over sync-op RPC.\nexport class SyncManagerProxy implements ISyncManager {\n private readonly ops: IOpChannel;\n private readonly connectionStates = new Map<\n string,\n ConnectionStateSnapshot\n >();\n private readonly connectionListeners = new KeyedListeners<string>();\n private readonly syncStatuses = new Map<string, SyncStatus>();\n private readonly syncStatusListeners = new Listeners<[string, SyncStatus]>();\n private remotes: Remote[] = [];\n private seedPromise: Promise<void> | null = null;\n\n constructor(router: MessageRouter, busProxy: IEventBus) {\n this.ops = opChannel(router, \"sync-op\");\n\n busProxy.subscribe(\n SyncEventTypes.CONNECTION_STATE_CHANGED,\n (_type, event) => {\n const e = event as ConnectionStateChangedEvent;\n this.connectionStates.set(e.remoteName, e.snapshot);\n this.notifyConnection(e.remoteName);\n },\n );\n\n busProxy.subscribe(SYNC_STATUS_CHANGED_EVENT, (_type, event) => {\n const e = event as SyncStatusChangedBusEvent;\n this.syncStatuses.set(e.documentId, e.status);\n this.syncStatusListeners.emit(e.documentId, e.status);\n });\n\n void this.ensureSeeded();\n }\n\n async startup(): Promise<void> {\n let lastError: unknown;\n for (let attempt = 0; attempt < SEED_MAX_ATTEMPTS; attempt++) {\n try {\n await this.ensureSeeded();\n return;\n } catch (error) {\n lastError = error;\n if (attempt < SEED_MAX_ATTEMPTS - 1) {\n await new Promise((resolve) =>\n setTimeout(resolve, SEED_RETRY_DELAY_MS),\n );\n }\n }\n }\n throw lastError;\n }\n\n shutdown(): ShutdownStatus {\n return { isShutdown: true, completed: Promise.resolve() };\n }\n\n getByName(name: string): Remote {\n const remote = this.remotes.find((r) => r.meta.name === name);\n if (!remote) {\n throw new Error(`Unknown remote: ${name}`);\n }\n return remote;\n }\n\n getById(id: string): Remote {\n const remote = this.remotes.find((r) => r.meta.id === id);\n if (!remote) {\n throw new Error(`Unknown remote id: ${id}`);\n }\n return remote;\n }\n\n async add(\n name: string,\n collectionId: DriveCollectionId,\n channelConfig: ChannelConfig,\n filter?: RemoteFilter,\n options?: RemoteOptions,\n ): Promise<Remote> {\n await this.callSyncOp(\"add\", [\n name,\n collectionId.key,\n channelConfig,\n filter,\n options,\n ]);\n await this.refreshRemotes();\n return this.getByName(name);\n }\n\n triggerPull(name: string): void {\n this.callSyncOp(\"triggerPull\", [name]).catch((error: unknown) => {\n console.error(`triggerPull failed for remote \"${name}\":`, error);\n });\n }\n\n async remove(name: string): Promise<void> {\n await this.callSyncOp(\"remove\", [name]);\n await this.refreshRemotes();\n }\n\n list(): Remote[] {\n return [...this.remotes];\n }\n\n waitForSync(): Promise<never> {\n return Promise.reject(\n new Error(\"waitForSync is not supported over the worker RPC boundary\"),\n );\n }\n\n getSyncStatus(documentId: string): SyncStatus | undefined {\n return this.syncStatuses.get(documentId);\n }\n\n onSyncStatusChange(callback: SyncStatusChangeCallback): () => void {\n return this.syncStatusListeners.add(callback);\n }\n\n private callSyncOp(method: string, args: unknown[]): Promise<unknown> {\n return this.ops.call(method, args);\n }\n\n private notifyConnection(remoteName?: string): void {\n if (remoteName !== undefined) {\n this.connectionListeners.emit(remoteName);\n return;\n }\n this.connectionListeners.emitAll();\n }\n\n private makeChannel(remoteName: string, url: string | undefined): IChannel {\n const channel: IChannel & { config: { url?: string } } = {\n inbox: NOOP_MAILBOX,\n outbox: NOOP_MAILBOX,\n deadLetter: NOOP_MAILBOX,\n init: () => Promise.resolve(),\n shutdown: () => Promise.resolve(),\n getConnectionState: () =>\n this.connectionStates.get(remoteName) ?? DEFAULT_SNAPSHOT,\n onConnectionStateChange: (callback: ConnectionStateChangeCallback) => {\n const listener = () =>\n callback(this.connectionStates.get(remoteName) ?? DEFAULT_SNAPSHOT);\n return this.connectionListeners.add(remoteName, listener);\n },\n\n triggerPull: () => {\n this.callSyncOp(\"triggerPull\", [remoteName]).catch((error: unknown) => {\n console.error(\n `triggerPull failed for remote \"${remoteName}\":`,\n error,\n );\n });\n },\n config: { url },\n };\n return channel;\n }\n\n private async refreshRemotes(): Promise<void> {\n const wire = (await this.callSyncOp(\"list\", [])) as WireRemote[];\n const names = new Set<string>();\n this.remotes = wire.map((w) => {\n const meta = rehydrateMeta(w.meta);\n names.add(meta.name);\n if (!this.connectionStates.has(meta.name)) {\n this.connectionStates.set(meta.name, w.connectionState);\n }\n return { meta, channel: this.makeChannel(meta.name, channelUrl(meta)) };\n });\n for (const name of [...this.connectionStates.keys()]) {\n if (!names.has(name)) {\n this.connectionStates.delete(name);\n }\n }\n this.notifyConnection();\n }\n\n // Shared in-flight seed so the eager kick-off and startup() share one list RPC.\n private ensureSeeded(): Promise<void> {\n if (!this.seedPromise) {\n const pending = this.refreshRemotes();\n this.seedPromise = pending;\n\n pending.catch(() => {\n if (this.seedPromise === pending) {\n this.seedPromise = null;\n }\n });\n }\n return this.seedPromise;\n }\n}\n\nexport function createSyncManagerProxy(\n router: MessageRouter,\n busProxy: IEventBus,\n): ISyncManager {\n return new SyncManagerProxy(router, busProxy);\n}\n","import { ReactorEventTypes, SyncEventTypes } from \"@powerhousedao/reactor\";\nimport { SYNC_STATUS_CHANGED_EVENT } from \"./sync-manager-proxy.js\";\n\nexport const FORWARDED_EVENT_TYPES = [\n SyncEventTypes.SYNC_PENDING,\n SyncEventTypes.SYNC_SUCCEEDED,\n SyncEventTypes.SYNC_FAILED,\n SyncEventTypes.DEAD_LETTER_ADDED,\n SyncEventTypes.CONNECTION_STATE_CHANGED,\n ReactorEventTypes.MODEL_LOADED,\n];\n\nexport const FORWARDED_BUS_EVENT_TYPES: number[] = [\n ...FORWARDED_EVENT_TYPES,\n SYNC_STATUS_CHANGED_EVENT,\n];\n","import type { IEventBus, Unsubscribe } from \"@powerhousedao/reactor\";\nimport { FORWARDED_BUS_EVENT_TYPES } from \"./forwarded-events.js\";\nimport { KeyedListeners } from \"./listeners.js\";\nimport type { MessageRouter } from \"./message-router.js\";\n\ntype BusSubscriber = (type: number, event: unknown) => void | Promise<void>;\n\n/** Tab-side IEventBus over bus-event; emit() is unsupported (the worker emits). */\nexport class ReactorEventBusProxy implements IEventBus {\n private readonly forwardedTypes = new Set<number>(FORWARDED_BUS_EVENT_TYPES);\n private readonly subscribers = new KeyedListeners<\n number,\n [number, unknown]\n >();\n\n constructor(router: MessageRouter) {\n router.on(\"bus-event\", (msg) => {\n this.subscribers.emit(msg.eventType, msg.eventType, msg.event);\n });\n }\n\n subscribe<K>(\n type: number,\n subscriber: (type: number, event: K) => void | Promise<void>,\n ): Unsubscribe {\n if (!this.forwardedTypes.has(type)) {\n throw new Error(\n `ReactorEventBusProxy cannot subscribe to event type ${type}: the worker forwards only [${[...this.forwardedTypes].join(\", \")}]`,\n );\n }\n const entry = subscriber as BusSubscriber;\n return this.subscribers.add(\n type,\n entry as (eventType: number, event: unknown) => void,\n );\n }\n\n emit(): Promise<void> {\n return Promise.reject(\n new Error(\n \"EventBus.emit is not supported tab-side; the reactor graph emits in the worker\",\n ),\n );\n }\n}\n\nexport function createReactorEventBusProxy(router: MessageRouter): IEventBus {\n return new ReactorEventBusProxy(router);\n}\n","import type {\n IDocumentModelRegistry,\n IReactorClient,\n} from \"@powerhousedao/reactor\";\nimport { createReactorClientProxy } from \"./client-proxy.js\";\nimport type { MessageRouter } from \"./message-router.js\";\nimport type { ReactorIdentity, VersionFingerprint } from \"./protocol.js\";\n\nexport type ReactorHello = {\n version: VersionFingerprint;\n construct?: unknown;\n packages?: string[];\n};\n\nexport function connectReactorClient(\n router: MessageRouter,\n hello: ReactorHello,\n onReload?: (reason: string, workerGen?: string) => void,\n registry?: IDocumentModelRegistry,\n): IReactorClient {\n const client = createReactorClientProxy(router, { onReload, registry });\n router.post({\n k: \"hello\",\n id: \"hello\",\n version: hello.version,\n construct: hello.construct,\n packages: hello.packages,\n });\n return client;\n}\n\n// Push the current renown identity (null on logout) to the worker; re-send on login/logout.\nexport function postReactorIdentity(\n router: MessageRouter,\n user: ReactorIdentity | null,\n): void {\n router.post({ k: \"identity\", user });\n}\n","import type {\n DocumentChangeEvent,\n IReactorClient,\n SearchFilter,\n ViewFilter,\n} from \"@powerhousedao/reactor\";\nimport { hostResponder, type IHostResponder } from \"./host-reply.js\";\nimport { dehydratePage } from \"./paging.js\";\nimport { SubscriptionStore } from \"./subscription.js\";\nimport type {\n ClientMessage,\n RpcNextPage,\n RpcRequest,\n RpcSubscribe,\n} from \"./protocol.js\";\nimport type { IRpcTransport } from \"./transport.js\";\n\ntype AnyMethod = (...args: unknown[]) => unknown;\ntype NextPage = () => Promise<unknown>;\n\n// Bound the page-continuation cache; an evicted token falls back to the \"expired cursor\" error.\nconst MAX_PENDING_PAGES = 1000;\n\nexport class ReactorHostServer {\n private readonly client: IReactorClient;\n private readonly transport: IRpcTransport;\n private readonly reply: IHostResponder;\n private readonly aborters = new Map<string, AbortController>();\n private readonly subscriptions = new SubscriptionStore();\n private readonly pages = new Map<string, NextPage>();\n private pageCounter = 0;\n private detach: () => void = () => {};\n\n constructor(client: IReactorClient, transport: IRpcTransport) {\n this.client = client;\n this.transport = transport;\n this.reply = hostResponder(transport);\n }\n\n start(): void {\n this.detach = this.transport.onMessage((message) => {\n void this.handleMessage(message as ClientMessage);\n });\n }\n\n stop(): void {\n this.detach();\n this.subscriptions.drain();\n this.aborters.clear();\n this.pages.clear();\n }\n\n async handleMessage(message: ClientMessage): Promise<void> {\n try {\n switch (message.k) {\n case \"req\":\n await this.handleRequest(message);\n return;\n case \"page\":\n await this.handlePage(message);\n return;\n case \"abort\":\n this.aborters.get(message.targetId)?.abort();\n return;\n case \"sub\":\n this.handleSubscribe(message);\n return;\n case \"unsub\":\n this.subscriptions.end(message.id);\n return;\n }\n } catch (error) {\n this.reply.errForKind(message, error);\n }\n }\n\n private async handleRequest(message: RpcRequest): Promise<void> {\n let args = message.args;\n let controller: AbortController | undefined;\n if (message.abortAt !== undefined) {\n controller = new AbortController();\n this.aborters.set(message.id, controller);\n args = message.args.slice();\n args[message.abortAt] = controller.signal;\n }\n try {\n const method = this.resolveMethod(message.method);\n const value = await method(...args);\n this.reply.ok(message.id, this.prepareResult(value));\n } catch (error) {\n this.reply.err(message.id, error);\n } finally {\n if (controller) {\n this.aborters.delete(message.id);\n }\n }\n }\n\n private async handlePage(message: RpcNextPage): Promise<void> {\n const next = this.pages.get(message.token);\n this.pages.delete(message.token);\n if (!next) {\n this.reply.err(\n message.id,\n new Error(\"Paged cursor already consumed or expired\"),\n );\n return;\n }\n try {\n const value = await next();\n this.reply.ok(message.id, this.prepareResult(value));\n } catch (error) {\n this.reply.err(message.id, error);\n }\n }\n\n private handleSubscribe(message: RpcSubscribe): void {\n const unsubscribe = this.client.subscribe(\n message.search as SearchFilter,\n (change: DocumentChangeEvent) =>\n this.transport.post({ k: \"event\", id: message.id, change }),\n message.view as ViewFilter | undefined,\n );\n this.subscriptions.set(message.id, unsubscribe);\n }\n\n private prepareResult(value: unknown): unknown {\n return dehydratePage(value, (next) => {\n const token = `p${++this.pageCounter}`;\n this.pages.set(token, next);\n if (this.pages.size > MAX_PENDING_PAGES) {\n const oldest = this.pages.keys().next().value;\n if (oldest !== undefined) {\n this.pages.delete(oldest);\n }\n }\n return token;\n });\n }\n\n private resolveMethod(path: string): AnyMethod {\n if (path.startsWith(\"drives.\")) {\n const name = path.slice(\"drives.\".length);\n const drives = this.client.drives as unknown as Record<string, AnyMethod>;\n const fn = drives[name];\n if (typeof fn !== \"function\") {\n throw new Error(`Unknown drive method: ${name}`);\n }\n return fn.bind(this.client.drives);\n }\n const client = this.client as unknown as Record<string, AnyMethod>;\n const fn = client[path];\n if (typeof fn !== \"function\") {\n throw new Error(`Unknown reactor method: ${path}`);\n }\n return fn.bind(this.client);\n }\n}\n","import type { RpcMessage } from \"./protocol.js\";\n\nexport interface IRpcTransport {\n post(message: RpcMessage): void;\n onMessage(listener: (message: RpcMessage) => void): () => void;\n close(): void;\n}\n\nexport function createPortTransport(port: MessagePort): IRpcTransport {\n port.start();\n port.addEventListener(\"messageerror\", (event) => {\n console.error(\"[rpc transport] failed to deserialize message\", event);\n });\n return {\n post(message) {\n port.postMessage(message);\n },\n onMessage(listener) {\n const handler = (event: MessageEvent) => {\n listener(event.data as RpcMessage);\n };\n port.addEventListener(\"message\", handler);\n return () => port.removeEventListener(\"message\", handler);\n },\n close() {\n port.close();\n },\n };\n}\n","import type { IReactorClient } from \"@powerhousedao/reactor\";\nimport { hostResponder, type IHostResponder } from \"./host-reply.js\";\nimport { ReactorHostServer } from \"./host-server.js\";\nimport { SubscriptionStore } from \"./subscription.js\";\nimport type {\n ClientMessage,\n CorrelationId,\n ReactorIdentity,\n RpcAdmin,\n RpcDbOp,\n RpcHello,\n RpcInspectorOp,\n RpcLiveSubscribe,\n RpcRegisterPackages,\n RpcSyncOp,\n RpcUnregisterPackages,\n VersionFingerprint,\n WorkerInspectorInfo,\n WorkerMigrationState,\n} from \"./protocol.js\";\nimport { RPC_PROTOCOL_VERSION } from \"./protocol.js\";\nimport { createPortTransport, type IRpcTransport } from \"./transport.js\";\n\nfunction isDataMessage(\n msg: ClientMessage,\n): msg is ClientMessage & { id: CorrelationId } {\n return (\n msg.k === \"req\" ||\n msg.k === \"sub\" ||\n msg.k === \"page\" ||\n msg.k === \"sync-op\" ||\n msg.k === \"db-op\" ||\n msg.k === \"inspector-op\" ||\n msg.k === \"sub-live\"\n );\n}\n\nexport type ReactorHostOptions = {\n client?: IReactorClient;\n build?: (construct: unknown) => Promise<IReactorClient>;\n registerPackages?: (specs: string[]) => Promise<void>;\n unregisterPackages?: (names: string[]) => Promise<void>;\n onIdentity?: (user: ReactorIdentity | null) => void;\n onSyncOp?: (method: string, args: unknown[]) => Promise<unknown>;\n onDbOp?: (method: string, args: unknown[]) => Promise<unknown>;\n onInspectorOp?: (method: string, args: unknown[]) => Promise<unknown>;\n onLiveQuery?: (\n sql: string,\n params: unknown[],\n onResults: (results: unknown) => void,\n ) => Promise<() => void>;\n // Worker identity + restart for the admin/inspector channel.\n namespace?: string;\n appBuildId?: string;\n ownerId?: string;\n bootedAtMs?: number;\n onAdminRestart?: () => void;\n onAdminClearStorage?: () => Promise<void>;\n onAdminMigrate?: () => Promise<void>;\n};\n\nfunction versionsCompatible(\n a: VersionFingerprint,\n b: VersionFingerprint,\n): boolean {\n return (\n a.appBuildId === b.appBuildId &&\n a.rpcProtocolVersion === b.rpcProtocolVersion\n );\n}\n\n// Deterministic per version so every new-build tab converges on one fresh worker.\nfunction workerGenForVersion(version: VersionFingerprint): string {\n return `v${version.rpcProtocolVersion}-${version.appBuildId}`;\n}\n\nexport class ReactorHost {\n private readonly options: ReactorHostOptions;\n private readonly disposers = new Set<() => void>();\n private readonly clients = new Set<IRpcTransport>();\n private clientPromise: Promise<IReactorClient> | null = null;\n private baseline: VersionFingerprint | null = null;\n private readonly ownerId: string;\n private readonly bootedAtMs: number;\n private migrationState: WorkerMigrationState | null = null;\n\n constructor(options: ReactorHostOptions) {\n this.options = options;\n this.ownerId = options.ownerId ?? crypto.randomUUID();\n this.bootedAtMs = options.bootedAtMs ?? Date.now();\n if (options.client) {\n this.clientPromise = Promise.resolve(options.client);\n }\n }\n\n connect(transport: IRpcTransport): () => void {\n let server: ReactorHostServer | null = null;\n let ready = false;\n const buffer: ClientMessage[] = [];\n const liveSubs = new SubscriptionStore();\n const reply = hostResponder(transport);\n\n const ensureServer = async (construct?: unknown): Promise<void> => {\n if (server) {\n return;\n }\n const client = await this.resolveClient(construct);\n server = new ReactorHostServer(client, transport);\n };\n\n // Drain only after init (server + package registration) completes, in order.\n // Messages arriving mid-drain stay buffered (ready flips last) so order holds.\n const drainBuffer = async (): Promise<void> => {\n while (buffer.length > 0) {\n const message = buffer.shift()!;\n await server!.handleMessage(message);\n }\n ready = true;\n };\n\n const detach = transport.onMessage((message) => {\n const msg = message as ClientMessage;\n if (msg.k === \"ping\") {\n transport.post({\n k: \"pong\",\n id: msg.id,\n ownerId: this.ownerId,\n bootedAtMs: this.bootedAtMs,\n });\n return;\n }\n if (this.migrationState?.status === \"migrating\" && isDataMessage(msg)) {\n // Route the rejection to the kind's owner (sub -> sub-err, etc.).\n reply.errForKind(msg, new Error(\"migration in progress\"));\n return;\n }\n if (msg.k === \"hello\") {\n void this.handleHello(msg, transport, reply, ensureServer, drainBuffer);\n return;\n }\n if (msg.k === \"register-packages\") {\n void this.handleRegister(msg, reply);\n return;\n }\n if (msg.k === \"unregister-packages\") {\n void this.handleUnregister(msg, reply);\n return;\n }\n if (msg.k === \"identity\") {\n this.options.onIdentity?.(msg.user);\n return;\n }\n if (msg.k === \"sync-op\") {\n void this.handleOp(msg, this.options.onSyncOp, \"sync\", reply);\n return;\n }\n if (msg.k === \"db-op\") {\n void this.handleOp(msg, this.options.onDbOp, \"db\", reply);\n return;\n }\n if (msg.k === \"inspector-op\") {\n void this.handleOp(msg, this.options.onInspectorOp, \"inspector\", reply);\n return;\n }\n if (msg.k === \"sub-live\") {\n void this.handleLiveSubscribe(msg, transport, reply, liveSubs);\n return;\n }\n if (msg.k === \"unsub-live\") {\n liveSubs.end(msg.id);\n return;\n }\n if (msg.k === \"admin\") {\n this.handleAdmin(msg, reply);\n return;\n }\n if (ready && server) {\n void server.handleMessage(msg);\n } else {\n buffer.push(msg);\n }\n });\n\n this.clients.add(transport);\n if (this.migrationState) {\n transport.post({ k: \"migration\", state: this.migrationState });\n }\n if (this.options.client) {\n void ensureServer()\n .then(drainBuffer)\n .catch((error) => {\n console.error(\"ReactorHost buffer drain failed\", error);\n });\n }\n\n const dispose = () => {\n server?.stop();\n detach();\n liveSubs.drain();\n this.clients.delete(transport);\n this.disposers.delete(dispose);\n };\n this.disposers.add(dispose);\n return dispose;\n }\n\n connectPort(port: MessagePort): () => void {\n return this.connect(createPortTransport(port));\n }\n\n // Fan out a reactor bus event to every connected tab, fire-and-forget.\n broadcastBusEvent(eventType: number, event: unknown): void {\n for (const transport of this.clients) {\n transport.post({ k: \"bus-event\", eventType, event });\n }\n }\n\n // Tell every connected tab to reload; `workerGen` makes them adopt one fresh worker name.\n broadcastReload(reason: string, workerGen?: string): void {\n for (const transport of this.clients) {\n transport.post({ k: \"reload\", reason, workerGen });\n }\n }\n\n // Cache + fan out the worker's migration state so tabs drive the banner from it.\n setMigrationState(state: WorkerMigrationState): void {\n this.migrationState = state;\n for (const transport of this.clients) {\n transport.post({ k: \"migration\", state });\n }\n }\n\n get connectionCount(): number {\n return this.disposers.size;\n }\n\n private handleAdmin(message: RpcAdmin, reply: IHostResponder): void {\n if (message.method === \"restart\") {\n this.options.onAdminRestart?.();\n reply.ok(message.id);\n return;\n }\n if (message.method === \"clearStorage\") {\n void this.handleAdminAsync(\n this.options.onAdminClearStorage,\n message,\n reply,\n );\n return;\n }\n if (message.method === \"migrate\") {\n void this.handleAdminAsync(this.options.onAdminMigrate, message, reply);\n return;\n }\n const info: WorkerInspectorInfo = {\n namespace: this.options.namespace ?? \"\",\n ownerId: this.ownerId,\n bootedAtMs: this.bootedAtMs,\n connectedClients: this.connectionCount,\n appBuildId:\n this.baseline?.appBuildId ?? this.options.appBuildId ?? \"unknown\",\n rpcProtocolVersion:\n this.baseline?.rpcProtocolVersion ?? RPC_PROTOCOL_VERSION,\n };\n reply.ok(message.id, info);\n }\n\n private async handleAdminAsync(\n handler: (() => Promise<void>) | undefined,\n message: RpcAdmin,\n reply: IHostResponder,\n ): Promise<void> {\n await reply.run(message.id, async () => {\n await handler?.();\n });\n }\n\n private resolveClient(construct?: unknown): Promise<IReactorClient> {\n if (!this.clientPromise) {\n const build = this.options.build;\n if (!build) {\n return Promise.reject(\n new Error(\"ReactorHost has no client or builder\"),\n );\n }\n const pending = build(construct);\n this.clientPromise = pending;\n pending.catch(() => {\n if (this.clientPromise === pending) {\n this.clientPromise = null;\n }\n });\n }\n return this.clientPromise;\n }\n\n private async awaitClientReady(): Promise<void> {\n if (this.clientPromise) {\n await this.clientPromise;\n }\n }\n\n private requireHandler<T>(\n handler: T | undefined,\n message: ClientMessage,\n reply: IHostResponder,\n label: string,\n ): handler is T {\n if (handler) {\n return true;\n }\n reply.errForKind(message, new Error(`ReactorHost has no ${label} handler`));\n return false;\n }\n\n private async handleHello(\n message: RpcHello,\n transport: IRpcTransport,\n reply: IHostResponder,\n ensureServer: (construct?: unknown) => Promise<void>,\n drainBuffer: () => Promise<void>,\n ): Promise<void> {\n if (this.baseline) {\n if (!versionsCompatible(this.baseline, message.version)) {\n transport.post({\n k: \"reload\",\n reason: \"reactor version mismatch\",\n workerGen: workerGenForVersion(message.version),\n });\n reply.ok(message.id, { ok: false });\n return;\n }\n } else {\n this.baseline = message.version;\n }\n await reply.run(message.id, async () => {\n await ensureServer(message.construct);\n if (message.packages && message.packages.length > 0) {\n await this.options.registerPackages?.(message.packages);\n }\n // Packages are registered; replay buffered data messages in order.\n await drainBuffer();\n });\n }\n\n private async handleRegister(\n message: RpcRegisterPackages,\n reply: IHostResponder,\n ): Promise<void> {\n await reply.run(message.id, async () => {\n await this.options.registerPackages?.(message.specs);\n });\n }\n\n private async handleUnregister(\n message: RpcUnregisterPackages,\n reply: IHostResponder,\n ): Promise<void> {\n await reply.run(message.id, async () => {\n await this.options.unregisterPackages?.(message.names);\n });\n }\n\n private async handleOp(\n message: RpcSyncOp | RpcDbOp | RpcInspectorOp,\n handler:\n | ((method: string, args: unknown[]) => Promise<unknown>)\n | undefined,\n label: string,\n reply: IHostResponder,\n ): Promise<void> {\n if (!this.requireHandler(handler, message, reply, label)) {\n return;\n }\n await reply.run(\n message.id,\n async () => {\n await this.awaitClientReady();\n return handler(message.method, message.args);\n },\n (value) => value,\n );\n }\n\n private async handleLiveSubscribe(\n message: RpcLiveSubscribe,\n transport: IRpcTransport,\n reply: IHostResponder,\n liveSubs: SubscriptionStore,\n ): Promise<void> {\n const handler = this.options.onLiveQuery;\n if (!this.requireHandler(handler, message, reply, \"live-query\")) {\n return;\n }\n const placeholder = () => undefined;\n liveSubs.set(message.id, placeholder);\n try {\n await this.awaitClientReady();\n const unsubscribe = await handler(\n message.sql,\n message.params,\n (results) => {\n transport.post({ k: \"event-live\", id: message.id, results });\n },\n );\n // unsub-live raced ahead during the await: tear down, don't leak.\n if (liveSubs.get(message.id) !== placeholder) {\n unsubscribe();\n return;\n }\n liveSubs.set(message.id, unsubscribe);\n } catch (error) {\n if (liveSubs.get(message.id) === placeholder) {\n liveSubs.delete(message.id);\n }\n reply.errForKind(message, error);\n }\n }\n}\n","import type { IDocumentModelLoader } from \"@powerhousedao/reactor\";\nimport type { DocumentModelModule } from \"@powerhousedao/shared/document-model\";\nimport { RegistryClient } from \"../registry/client.js\";\n\nexport type PackageImporter = (url: string) => Promise<Record<string, unknown>>;\n\nexport type WorkerPackageLoaderOptions = {\n cdnUrl: string;\n importPackage: PackageImporter;\n resolvePackages?: (documentType: string) => Promise<string[]>;\n};\n\nexport type PackageLoadFailure = {\n name: string;\n url: string;\n error: unknown;\n};\n\nfunction packageName(spec: string): string {\n const at = spec.lastIndexOf(\"@\");\n return at > 0 ? spec.slice(0, at) : spec;\n}\n\nfunction isDocumentModelModule(value: unknown): value is DocumentModelModule {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const candidate = value as {\n reducer?: unknown;\n documentModel?: { global?: { id?: unknown } };\n };\n return (\n typeof candidate.reducer === \"function\" &&\n typeof candidate.documentModel?.global?.id === \"string\"\n );\n}\n\nexport class WorkerPackageLoader implements IDocumentModelLoader {\n private readonly cdnUrl: string;\n private readonly importPackage: PackageImporter;\n private readonly resolvePackages: (documentType: string) => Promise<string[]>;\n private readonly modulesByType = new Map<string, DocumentModelModule>();\n private readonly loadedSpecs = new Set<string>();\n private readonly failures: PackageLoadFailure[] = [];\n\n constructor(options: WorkerPackageLoaderOptions) {\n this.cdnUrl = options.cdnUrl.replace(/\\/$/, \"\");\n this.importPackage = options.importPackage;\n const registryClient = new RegistryClient(options.cdnUrl);\n this.resolvePackages =\n options.resolvePackages ??\n ((documentType) =>\n registryClient.getPackagesByDocumentType(documentType));\n }\n\n async loadPackages(specs: string[]): Promise<DocumentModelModule[]> {\n await Promise.all(\n [...new Set(specs)].map((spec) => this.loadPackage(spec)),\n );\n return this.models;\n }\n\n // On a miss, discover the package(s) for the type and import them on demand.\n async load(documentType: string): Promise<DocumentModelModule> {\n const existing = this.modulesByType.get(documentType);\n if (existing) {\n return existing;\n }\n const packageNames = await this.resolvePackages(documentType);\n const failuresBefore = this.failures.length;\n await Promise.all(\n [...new Set(packageNames)].map((name) => this.loadPackage(name)),\n );\n const loaded = this.modulesByType.get(documentType);\n if (loaded) {\n return loaded;\n }\n throw this.notLoadedError(\n documentType,\n packageNames,\n this.failures.slice(failuresBefore),\n );\n }\n\n get models(): DocumentModelModule[] {\n return [...new Set(this.modulesByType.values())];\n }\n\n get loadFailures(): PackageLoadFailure[] {\n return [...this.failures];\n }\n\n private notLoadedError(\n documentType: string,\n packageNames: string[],\n failures: PackageLoadFailure[],\n ): Error {\n if (packageNames.length === 0) {\n return new Error(`No package found for document model: ${documentType}`);\n }\n if (failures.length === 0) {\n return new Error(\n `Imported [${packageNames.join(\", \")}] but document model not found: ${documentType}`,\n );\n }\n const cause =\n failures.length === 1\n ? failures[0].error\n : new AggregateError(failures.map((failure) => failure.error));\n return new Error(\n `Failed to import package(s) [${packageNames.join(\", \")}] for document model: ${documentType}`,\n { cause },\n );\n }\n\n private async loadPackage(spec: string): Promise<void> {\n if (this.loadedSpecs.has(spec)) {\n return;\n }\n const name = packageName(spec);\n const url = `${this.cdnUrl}/${name}/browser/document-models/index.js`;\n try {\n const namespace = await this.importPackage(url);\n for (const value of Object.values(namespace)) {\n if (isDocumentModelModule(value)) {\n this.modulesByType.set(value.documentModel.global.id, value);\n }\n }\n this.loadedSpecs.add(spec);\n } catch (error) {\n this.failures.push({ name, url, error });\n }\n }\n}\n","import { fromErrorInfo } from \"./error-info.js\";\nimport type { ClientMessage, CorrelationId, OwnerMessage } from \"./protocol.js\";\n\ntype Pending = {\n resolve: (value: unknown) => void;\n reject: (error: unknown) => void;\n timer?: ReturnType<typeof setTimeout>;\n cleanup?: () => void;\n transform?: (value: unknown) => unknown;\n};\n\nexport type RpcRequestOptions = {\n /** Reject if no response arrives within this many ms; omit for no timeout. */\n timeoutMs?: number;\n /** Maps a successful response value (e.g. paged-result rehydration). */\n transform?: (value: unknown) => unknown;\n /** Runs after the post; may return a cleanup invoked when the request settles. */\n setup?: (id: CorrelationId) => (() => void) | void;\n};\n\n/** Anything that can send a client message (the router). */\nexport type RpcPoster = { post(message: ClientMessage): void };\n\n/**\n * Request/response correlation shared by every RPC proxy: one pending map,\n * res/err settlement, and per-request timeout/transform/cleanup.\n */\nexport class RpcCorrelator {\n private counter = 0;\n private readonly pending = new Map<CorrelationId, Pending>();\n\n constructor(\n private readonly poster: RpcPoster,\n private readonly prefix = \"r\",\n ) {}\n\n nextId(): CorrelationId {\n return `${this.prefix}${++this.counter}`;\n }\n\n /** Settle the pending request a res/err refers to; a missing id is a no-op. */\n handleMessage(message: OwnerMessage): void {\n if (message.k !== \"res\" && message.k !== \"err\") {\n return;\n }\n const entry = this.pending.get(message.id);\n if (!entry) {\n return;\n }\n this.pending.delete(message.id);\n if (entry.timer) {\n clearTimeout(entry.timer);\n }\n entry.cleanup?.();\n if (message.k === \"res\") {\n entry.resolve(\n entry.transform ? entry.transform(message.value) : message.value,\n );\n } else {\n entry.reject(fromErrorInfo(message.error));\n }\n }\n\n /** Send a request, resolving on its res/err. `build` stamps the generated id. */\n request(\n build: (id: CorrelationId) => ClientMessage,\n options: RpcRequestOptions = {},\n ): Promise<unknown> {\n const id = this.nextId();\n const message = build(id);\n const method = (message as { method?: unknown }).method;\n const label =\n typeof method === \"string\" ? `${message.k} \"${method}\"` : message.k;\n const promise = new Promise<unknown>((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n if (options.timeoutMs !== undefined) {\n const timeoutMs = options.timeoutMs;\n timer = setTimeout(() => {\n const entry = this.pending.get(id);\n if (entry) {\n this.pending.delete(id);\n entry.cleanup?.();\n reject(\n new Error(\n `Reactor worker did not respond to ${label} within ${timeoutMs}ms; the worker may have failed to load`,\n ),\n );\n }\n }, timeoutMs);\n }\n this.pending.set(id, {\n resolve,\n reject,\n timer,\n transform: options.transform,\n });\n });\n this.poster.post(message);\n const cleanup = options.setup?.(id);\n if (cleanup) {\n const entry = this.pending.get(id);\n if (entry) {\n entry.cleanup = cleanup;\n } else {\n cleanup();\n }\n }\n return promise;\n }\n}\n","import type { ClientMessage, CorrelationId, OwnerMessage } from \"./protocol.js\";\nimport { RpcCorrelator, type RpcRequestOptions } from \"./rpc-correlator.js\";\nimport type { IRpcTransport } from \"./transport.js\";\n\ntype OwnerKind = OwnerMessage[\"k\"];\ntype RouteHandler = (message: OwnerMessage) => void;\n\n/**\n * Owns the single transport.onMessage and dispatches each message to the one\n * consumer that owns its kind. Composes the shared RpcCorrelator (res/err) and\n * exposes request/nextId; attach/detach swap the transport for reconnect.\n */\nexport class MessageRouter {\n private readonly handlers = new Map<OwnerKind, RouteHandler>();\n private readonly correlator: RpcCorrelator;\n private transport: IRpcTransport | null = null;\n private detachTransport: () => void = () => {};\n\n constructor(prefix = \"r\") {\n this.correlator = new RpcCorrelator(this, prefix);\n const settle: RouteHandler = (message) =>\n this.correlator.handleMessage(message);\n this.handlers.set(\"res\", settle);\n this.handlers.set(\"err\", settle);\n }\n\n attach(transport: IRpcTransport): void {\n this.detachTransport();\n this.transport = transport;\n this.detachTransport = transport.onMessage((message) => {\n const msg = message as OwnerMessage;\n this.handlers.get(msg.k)?.(msg);\n });\n }\n\n detach(): void {\n this.detachTransport();\n this.detachTransport = () => {};\n this.transport = null;\n }\n\n post(message: ClientMessage): void {\n if (!this.transport) {\n throw new Error(\"MessageRouter.post called before attach\");\n }\n this.transport.post(message);\n }\n\n /** Register the sole owner of a message kind; throws on a duplicate. */\n on<K extends OwnerKind>(\n kind: K,\n handler: (message: Extract<OwnerMessage, { k: K }>) => void,\n ): () => void {\n if (this.handlers.has(kind)) {\n throw new Error(`MessageRouter already has a handler for \"${kind}\"`);\n }\n const route = handler as RouteHandler;\n this.handlers.set(kind, route);\n return () => {\n if (this.handlers.get(kind) === route) {\n this.handlers.delete(kind);\n }\n };\n }\n\n request(\n build: (id: CorrelationId) => ClientMessage,\n options?: RpcRequestOptions,\n ): Promise<unknown> {\n return this.correlator.request(build, options);\n }\n\n nextId(): CorrelationId {\n return this.correlator.nextId();\n }\n}\n"],"mappings":"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"}
@@ -19,4 +19,4 @@ type IPowerhouseAnalytics = {
19
19
  };
20
20
  //#endregion
21
21
  export { getAnalyticsStore as a, createAnalyticsStore as i, IPowerhouseAnalytics as n, CreateStoreOptions as r, IAnalyticsStoreOptions as t };
22
- //# sourceMappingURL=types-BmR60pPN.d.ts.map
22
+ //# sourceMappingURL=types-CPV0Cnsy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-BmR60pPN.d.ts","names":[],"sources":["../src/analytics/store.ts","../src/analytics/types.ts"],"mappings":";;;;KAMY,kBAAA,GAAqB,4BAAA;AAAA,iBAEX,oBAAA,CAAqB,OAAA,EAAS,kBAAA,GAAkB,OAAA;;;;;iBAYhD,iBAAA,CAAA,GAAqB,OAAA,CAAQ,eAAA;;;KCfvC,sBAAA,GAAyB,4BAAA;AAAA,KAEzB,oBAAA;EACV,KAAA,EAAO,eAAA;EACP,MAAA,EAAQ,oBAAA;EACR,OAAA,EAAS,sBAAA;AAAA"}
1
+ {"version":3,"file":"types-CPV0Cnsy.d.ts","names":[],"sources":["../src/analytics/store.ts","../src/analytics/types.ts"],"mappings":";;;;KAMY,kBAAA,GAAqB,4BAAA;AAAA,iBAEX,oBAAA,CAAqB,OAAA,EAAS,kBAAA,GAAkB,OAAA;;;;;iBAYhD,iBAAA,CAAA,GAAqB,OAAA,CAAQ,eAAA;;;KCfvC,sBAAA,GAAyB,4BAAA;AAAA,KAEzB,oBAAA;EACV,KAAA,EAAO,eAAA;EACP,MAAA,EAAQ,oBAAA;EACR,OAAA,EAAS,sBAAA;AAAA"}
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@powerhousedao/reactor-browser",
3
- "version": "6.2.0-dev.5",
3
+ "version": "6.2.0-dev.50",
4
4
  "license": "AGPL-3.0-only",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "https://github.com/powerhouse-inc/powerhouse"
8
+ "url": "https://github.com/powerhouse-inc/powerhouse",
9
+ "directory": "packages/reactor-browser"
9
10
  },
10
11
  "publishConfig": {
11
12
  "access": "public"
@@ -24,6 +25,11 @@
24
25
  "types": "./dist/src/analytics/index.d.ts",
25
26
  "import": "./dist/src/analytics/index.js"
26
27
  },
28
+ "./base-document-models": {
29
+ "source": "./src/document-model.ts",
30
+ "types": "./dist/src/document-model.d.ts",
31
+ "import": "./dist/src/document-model.js"
32
+ },
27
33
  "./graphql": {
28
34
  "source": "./src/graphql/client.ts",
29
35
  "types": "./dist/src/graphql/client.d.ts",
@@ -38,6 +44,11 @@
38
44
  "source": "./src/renown/index.ts",
39
45
  "types": "./dist/src/renown/index.d.ts",
40
46
  "import": "./dist/src/renown/index.js"
47
+ },
48
+ "./rpc": {
49
+ "source": "./src/rpc/index.ts",
50
+ "types": "./dist/src/rpc/index.d.ts",
51
+ "import": "./dist/src/rpc/index.js"
41
52
  }
42
53
  },
43
54
  "sideEffects": false,
@@ -55,14 +66,14 @@
55
66
  "slug": "^11.0.0",
56
67
  "usehooks-ts": "^3.1.1",
57
68
  "zod": "4.3.6",
58
- "@powerhousedao/analytics-engine-browser": "6.2.0-dev.5",
59
- "@powerhousedao/analytics-engine-core": "6.2.0-dev.5",
60
- "@powerhousedao/reactor": "6.2.0-dev.5",
61
- "@powerhousedao/reactor-attachments": "6.2.0-dev.5",
62
- "@powerhousedao/reactor-drive": "6.2.0-dev.5",
63
- "@powerhousedao/shared": "6.2.0-dev.5",
64
- "document-model": "6.2.0-dev.5",
65
- "@renown/sdk": "6.2.0-dev.5"
69
+ "@powerhousedao/analytics-engine-core": "6.2.0-dev.50",
70
+ "@powerhousedao/analytics-engine-browser": "6.2.0-dev.50",
71
+ "@powerhousedao/reactor": "6.2.0-dev.50",
72
+ "@powerhousedao/reactor-attachments": "6.2.0-dev.50",
73
+ "@powerhousedao/reactor-drive": "6.2.0-dev.50",
74
+ "@renown/sdk": "6.2.0-dev.50",
75
+ "@powerhousedao/shared": "6.2.0-dev.50",
76
+ "document-model": "6.2.0-dev.50"
66
77
  },
67
78
  "devDependencies": {
68
79
  "@electric-sql/pglite": "0.3.15",
@@ -88,7 +99,7 @@
88
99
  "tsdown": "0.21.1",
89
100
  "type-fest": "5.6.0",
90
101
  "viem": "~2.50.4",
91
- "vite": "8.0.8",
102
+ "vite": "8.0.10",
92
103
  "vitest": "4.1.1",
93
104
  "vitest-browser-react": "^1.0.1"
94
105
  },
@@ -98,6 +109,21 @@
98
109
  "react": ">=19.0.0",
99
110
  "react-dom": ">=19.0.0"
100
111
  },
112
+ "description": "Browser-side Powerhouse reactor — React hooks and IReactorClient for building editors and drive-apps inside Connect, Switchboard, or Vetra Studio.",
113
+ "keywords": [
114
+ "powerhouse",
115
+ "vetra",
116
+ "document-model",
117
+ "local-first",
118
+ "event-sourcing",
119
+ "reactor",
120
+ "react",
121
+ "hooks",
122
+ "editor",
123
+ "drive-app",
124
+ "browser"
125
+ ],
126
+ "homepage": "https://academy.vetra.io/academy/Reference/Reactor/ReactorClient",
101
127
  "scripts": {
102
128
  "tsc": "tsc",
103
129
  "lint": "eslint",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Bz4MqX_j.d.ts","names":[],"sources":["../src/renown/use-renown-auth.ts","../src/renown/utils.ts","../src/renown/components/RenownAuthButton.tsx","../src/renown/components/RenownLoginButton.tsx","../src/renown/components/RenownUserButton.tsx","../src/renown/components/icons.tsx","../src/renown/crypto.ts","../src/renown/constants.ts","../src/renown/use-renown-init.ts","../src/renown/renown-init.tsx"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-ZltD7u5Z.d.ts","names":["Modes","text","binary","Mode","BufferParameter","ArrayBuffer","ArrayBufferView","MessageName","BackendMessage","name","length","parseComplete","bindComplete","closeComplete","noData","portalSuspended","replicationStart","emptyQuery","copyDone","AuthenticationOk","constructor","AuthenticationCleartextPassword","AuthenticationMD5Password","Uint8Array","salt","AuthenticationSASL","mechanisms","AuthenticationSASLContinue","data","AuthenticationSASLFinal","AuthenticationMessage","NoticeOrError","message","severity","code","detail","hint","position","internalPosition","internalQuery","where","schema","table","column","dataType","constraint","file","line","routine","DatabaseError","Error","CopyDataMessage","chunk","CopyResponse","columnTypes","columnCount","Field","tableID","columnID","dataTypeID","dataTypeSize","dataTypeModifier","format","RowDescriptionMessage","fieldCount","fields","ParameterDescriptionMessage","parameterCount","dataTypeIDs","ParameterStatusMessage","parameterName","parameterValue","BackendKeyDataMessage","processID","secretKey","NotificationResponseMessage","processId","channel","payload","ReadyForQueryMessage","status","CommandCompleteMessage","DataRowMessage","NoticeMessage","messages_AuthenticationCleartextPassword","messages_AuthenticationMD5Password","messages_AuthenticationMessage","messages_AuthenticationOk","messages_AuthenticationSASL","messages_AuthenticationSASLContinue","messages_AuthenticationSASLFinal","messages_BackendKeyDataMessage","messages_BackendMessage","messages_CommandCompleteMessage","messages_CopyDataMessage","messages_CopyResponse","messages_DataRowMessage","messages_DatabaseError","messages_Field","messages_MessageName","messages_NoticeMessage","messages_NotificationResponseMessage","messages_ParameterDescriptionMessage","messages_ParameterStatusMessage","messages_ReadyForQueryMessage","messages_RowDescriptionMessage","messages_bindComplete","messages_closeComplete","messages_copyDone","messages_emptyQuery","messages_noData","messages_parseComplete","messages_portalSuspended","messages_replicationStart","messages","IDBFS","Emscripten","FileSystemType","IDBDatabase","Record","quit","dbs","FS","filesystems","MEMFS","NODEFS","PostgresMod","EmscriptenModule","Array","Blob","Promise","Omit","preInit","mod","preRun","postRun","FD_BUFFER_MAX","WASM_PREFIX","INITIAL_MEMORY","pg_extensions","_pgl_initdb","_pgl_backend","_pgl_shutdown","_interactive_write","msgLength","_interactive_one","peek","_set_read_write_cbs","read_cb","write_cb","addFunction","ptr","cb","signature","removeFunction","f","PostgresFactory","T","Partial","moduleOverrides","_default","postgresMod_FS","postgresMod_PostgresMod","postgresMod","default","DumpTarCompressionOptions","PGDATA","FsType","Filesystem","PGlite","File","init","pg","emscriptenOptions","emscriptenOpts","syncToFs","relaxedDurability","initialSyncFs","dumpTar","dbname","compression","closeFs","EmscriptenBuiltinFilesystem","dataDir","_relaxedDurability","BaseFilesystem","debug","FsStats","chmod","path","mode","close","fd","fstat","lstat","mkdir","recursive","options","open","flags","readdir","read","buffer","offset","rename","oldPath","newPath","rmdir","truncate","len","unlink","utimes","atime","mtime","writeFile","encoding","flag","write","dev","ino","nlink","uid","gid","rdev","size","blksize","blocks","ctime","ERRNO_CODES","EBADF","EBADFD","EEXIST","EINVAL","EISDIR","ENODEV","ENOENT","ENOTDIR","ENOTEMPTY","FilesystemType","DebugLevel","RowMode","ParserOptions","pgType","value","SerializerOptions","QueryOptions","rowMode","parsers","serializers","blob","onNotice","notice","paramTypes","ExecProtocolOptions","throwOnError","ExtensionSetupResult","TNamespace","URL","namespaceObj","bundlePath","ExtensionSetup","PGliteInterface","clientOnly","Extension","setup","ExtensionNamespace","Extensions","namespace","InitializedExtensions","TExtensions","K","ExecProtocolResult","DumpDataDirResult","tarball","extension","filename","PGliteOptions","WebAssembly","Module","username","database","fs","extensions","loadDataDir","initialMemory","wasmModule","fsBundle","Results","TemplateStringsArray","DescribeQueryResult","Transaction","waitReady","ready","closed","query","params","sql","sqlStrings","exec","describeQuery","transaction","tx","callback","execProtocolRaw","execProtocol","runExclusive","fn","listen","unlisten","onNotification","offNotification","dumpDataDir","refreshArrayTypes","PGliteInterfaceExtensions","E","ReturnType","Awaited","N","Row","key","rows","affectedRows","rollback","Serializer","Parser","queryParams","serializer","resultFields","parser","BOOL","BYTEA","CHAR","INT8","INT2","INT4","REGPROC","TEXT","OID","TID","XID","CID","JSON","XML","PG_NODE_TREE","SMGR","PATH","POLYGON","CIDR","FLOAT4","FLOAT8","ABSTIME","RELTIME","TINTERVAL","CIRCLE","MACADDR8","MONEY","MACADDR","INET","ACLITEM","BPCHAR","VARCHAR","DATE","TIME","TIMESTAMP","TIMESTAMPTZ","INTERVAL","TIMETZ","BIT","VARBIT","NUMERIC","REFCURSOR","REGPROCEDURE","REGOPER","REGOPERATOR","REGCLASS","REGTYPE","UUID","TXID_SNAPSHOT","PG_LSN","PG_NDISTINCT","PG_DEPENDENCIES","TSVECTOR","TSQUERY","GTSVECTOR","REGCONFIG","REGDICTIONARY","JSONB","REGNAMESPACE","REGROLE","types","Date","string","to","from","serialize","x","parse","number","bigint","json","boolean","date","bytea","typeId","TypeHandler","TypeHandlers","parseType","type","arraySerializer","xs","typarray","arrayParser","types$1_ABSTIME","types$1_ACLITEM","types$1_BIT","types$1_BOOL","types$1_BPCHAR","types$1_BYTEA","types$1_CHAR","types$1_CID","types$1_CIDR","types$1_CIRCLE","types$1_DATE","types$1_FLOAT4","types$1_FLOAT8","types$1_GTSVECTOR","types$1_INET","types$1_INT2","types$1_INT4","types$1_INT8","types$1_INTERVAL","types$1_JSON","types$1_JSONB","types$1_MACADDR","types$1_MACADDR8","types$1_MONEY","types$1_NUMERIC","types$1_OID","types$1_PATH","types$1_PG_DEPENDENCIES","types$1_PG_LSN","types$1_PG_NDISTINCT","types$1_PG_NODE_TREE","types$1_POLYGON","types$1_Parser","types$1_REFCURSOR","types$1_REGCLASS","types$1_REGCONFIG","types$1_REGDICTIONARY","types$1_REGNAMESPACE","types$1_REGOPER","types$1_REGOPERATOR","types$1_REGPROC","types$1_REGPROCEDURE","types$1_REGROLE","types$1_REGTYPE","types$1_RELTIME","types$1_SMGR","types$1_Serializer","types$1_TEXT","types$1_TID","types$1_TIME","types$1_TIMESTAMP","types$1_TIMESTAMPTZ","types$1_TIMETZ","types$1_TINTERVAL","types$1_TSQUERY","types$1_TSVECTOR","types$1_TXID_SNAPSHOT","types$1_TypeHandler","types$1_TypeHandlers","types$1_UUID","types$1_VARBIT","types$1_VARCHAR","types$1_XID","types$1_XML","types$1_arrayParser","types$1_arraySerializer","types$1_parseType","types$1_parsers","types$1_serializers","types$1_types","types$1","BasePGlite","force","Pick","private","execProtocolStream","_handleBlob","_getWrittenBlob","_cleanupBlob","_checkReady","_runExclusiveQuery","_runExclusiveTransaction","_initArrayTypes","O","Symbol","asyncDispose","AsyncDisposable","DEFAULT_RECV_BUF_SIZE","MAX_BUFFER_SIZE","create","execProtocolRawSync","isInTransaction","clone","_runExclusiveListen","A","B","C","D","F","G","I","M","P","Q","R","S","W","a","b","c","d","e","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","y","z","R","Results","d","PGliteInterface","LiveQueryOptions","T","AbortSignal","key","query","params","offset","limit","callback","results","signal","LiveChangesOptions","Change","Array","changes","LiveIncrementalQueryOptions","LiveNamespace","LiveQuery","Promise","LiveChanges","options","incrementalQuery","LiveQueryResults","totalCount","initialResults","subscribe","unsubscribe","refresh","fields","name","dataTypeID","initialChanges","ChangeInsert","__changed_columns__","__op__","__after__","ChangeDelete","ChangeUpdate","ChangeReset","live","setup","pg","_emscriptenOpts","namespaceObj","PGliteWithLive"],"sources":["../../../node_modules/.pnpm/@electric-sql+pglite@0.3.15/node_modules/@electric-sql/pglite/dist/pglite-CntadC_p.d.ts","../../../node_modules/.pnpm/@electric-sql+pglite@0.3.15/node_modules/@electric-sql/pglite/dist/live/index.d.ts","../src/relational/hooks/useRelationalDb.ts","../src/relational/hooks/useRelationalQuery.ts","../src/relational/utils/createProcessorQuery.ts"],"x_google_ignoreList":[0,1],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"relational-4_LVwp8p.js","names":[],"sources":["../src/pglite/usePGlite.ts","../src/relational/hooks/useRelationalDb.ts","../src/relational/hooks/useRelationalQuery.ts","../src/relational/utils/createProcessorQuery.ts"],"sourcesContent":["import type { PGliteWithLive } from \"@electric-sql/pglite/live\";\nimport { useEffect, useState } from \"react\";\n\nexport const PGLITE_UPDATE_EVENT = \"ph:pglite-update\";\n\nexport interface PGliteState {\n db: PGliteWithLive | null;\n isLoading: boolean;\n error: Error | null;\n}\n\nconst defaultPGliteState: PGliteState = {\n db: null,\n isLoading: true,\n error: null,\n};\n\nexport const usePGliteDB = () => {\n const [state, setState] = useState<PGliteState>(\n () => window.powerhouse?.pglite ?? defaultPGliteState,\n );\n\n useEffect(() => {\n const handlePgliteUpdate = () =>\n setState(window.powerhouse?.pglite ?? defaultPGliteState);\n\n window.addEventListener(PGLITE_UPDATE_EVENT, handlePgliteUpdate);\n\n return () =>\n window.removeEventListener(PGLITE_UPDATE_EVENT, handlePgliteUpdate);\n }, []);\n\n return state;\n};\n\nexport const useSetPGliteDB = () => {\n const setPGliteState = (pglite: Partial<PGliteState>) => {\n const currentPowerhouse = window.powerhouse ?? {};\n const currentPGliteState = window.powerhouse?.pglite ?? defaultPGliteState;\n\n window.powerhouse = {\n ...currentPowerhouse,\n pglite: {\n ...currentPGliteState,\n ...pglite,\n },\n };\n window.dispatchEvent(new CustomEvent(PGLITE_UPDATE_EVENT));\n };\n\n return setPGliteState;\n};\n\nexport const usePGlite = () => {\n const pglite = usePGliteDB();\n const setPGlite = useSetPGliteDB();\n\n return [pglite, setPGlite];\n};\n","import type { PGlite } from \"@electric-sql/pglite\";\nimport type { LiveNamespace, PGliteWithLive } from \"@electric-sql/pglite/live\";\nimport { createRelationalDb } from \"@powerhousedao/reactor\";\nimport type { IRelationalDb as IRelationalDbCore } from \"@powerhousedao/shared/processors\";\nimport { Kysely } from \"kysely\";\nimport { PGliteDialect } from \"kysely-pglite-dialect\";\nimport { useMemo } from \"react\";\nimport { usePGliteDB } from \"../../pglite/usePGlite.js\";\n\n// Type for Relational DB instance enhanced with live capabilities\nexport type RelationalDbWithLive<Schema> = IRelationalDbCore<Schema> & {\n live: LiveNamespace;\n};\n\ninterface IRelationalDbState<Schema> {\n db: RelationalDbWithLive<Schema> | null;\n isLoading: boolean;\n error: Error | null;\n}\n\n// Custom initializer that creates enhanced Kysely instance with live capabilities\nfunction createRelationalDbWithLive<Schema>(\n pgliteInstance: PGliteWithLive,\n): RelationalDbWithLive<Schema> {\n const baseDb = new Kysely<Schema>({\n dialect: new PGliteDialect(pgliteInstance as unknown as PGlite),\n });\n const relationalDb = createRelationalDb(baseDb);\n\n // Inject the live namespace with proper typing\n const relationalDBWithLive =\n relationalDb as unknown as RelationalDbWithLive<Schema>;\n relationalDBWithLive.live = pgliteInstance.live;\n\n return relationalDBWithLive;\n}\n\nexport const useRelationalDb = <Schema>(): IRelationalDbState<Schema> => {\n const pglite = usePGliteDB();\n\n const relationalDb = useMemo<IRelationalDbState<Schema>>(() => {\n if (!pglite.db || pglite.isLoading || pglite.error) {\n return {\n db: null,\n isLoading: pglite.isLoading,\n error: pglite.error,\n };\n }\n\n const db = createRelationalDbWithLive<Schema>(pglite.db);\n\n return {\n db,\n isLoading: false,\n error: null,\n };\n }, [pglite]);\n\n return relationalDb;\n};\n","import type { LiveQueryResults } from \"@electric-sql/pglite/live\";\nimport type {\n IRelationalQueryBuilder,\n RelationalDbProcessorClass,\n} from \"@powerhousedao/shared/processors\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useRelationalDb } from \"./useRelationalDb.js\";\n\nexport type QueryCallbackReturnType = {\n sql: string;\n parameters?: readonly unknown[];\n};\n\nexport type useRelationalQueryOptions = {\n // Whether to hash the namespace to avoid namespace size limit. True by default\n hashNamespace?: boolean;\n};\n\nconst MAX_RETRIES = 5;\nconst RETRY_DELAY = 200;\n\nconst isRelationNotExistError = (error: unknown): boolean => {\n const errorMessage =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : String(error);\n\n return (\n errorMessage.toLowerCase().includes(\"relation\") &&\n errorMessage.toLowerCase().includes(\"does not exist\")\n );\n};\n\ntype LiveQueryType = {\n unsubscribe: () => void;\n};\n\nexport function useRelationalQuery<Schema, T = unknown, TParams = undefined>(\n ProcessorClass: RelationalDbProcessorClass<Schema>,\n driveId: string,\n queryCallback: (\n db: IRelationalQueryBuilder<Schema>,\n parameters?: TParams,\n ) => QueryCallbackReturnType,\n parameters?: TParams,\n _options?: useRelationalQueryOptions,\n) {\n const [result, setResult] = useState<LiveQueryResults<T> | null>(null);\n const [queryLoading, setQueryLoading] = useState(true);\n const [error, setError] = useState<Error | undefined>(undefined);\n const retryCount = useRef(0);\n const retryTimeoutRef = useRef<NodeJS.Timeout>(null);\n\n const relationalDb = useRelationalDb<Schema>();\n\n const executeLiveQuery = async (\n sql: string,\n queryParameters: readonly unknown[] | undefined,\n retryAttempt = 0,\n ): Promise<LiveQueryType | null> => {\n if (!relationalDb.db) {\n return null;\n }\n\n try {\n const live = await relationalDb.db.live.query<T>(\n sql,\n queryParameters ? [...queryParameters] : [],\n (result) => {\n setResult(result);\n setQueryLoading(false);\n retryCount.current = 0; // Reset retry count on success\n },\n );\n\n return live as LiveQueryType;\n } catch (err: unknown) {\n if (isRelationNotExistError(err) && retryAttempt < MAX_RETRIES) {\n return new Promise((resolve) => {\n retryTimeoutRef.current = setTimeout(() => {\n resolve(executeLiveQuery(sql, queryParameters, retryAttempt + 1));\n }, RETRY_DELAY);\n });\n }\n\n setQueryLoading(false);\n setError(err instanceof Error ? err : new Error(String(err)));\n return null;\n }\n };\n\n useEffect(() => {\n setError(undefined);\n setQueryLoading(true);\n retryCount.current = 0;\n\n if (!relationalDb.db) {\n return;\n }\n\n // Use the processor helper to obtain a typed namespaced query builder\n const db = ProcessorClass.query(driveId, relationalDb.db);\n\n const compiledQuery = queryCallback(db, parameters);\n const { sql, parameters: queryParameters } = compiledQuery;\n\n const liveQueryPromise = executeLiveQuery(sql, queryParameters);\n\n return () => {\n if (retryTimeoutRef.current) {\n clearTimeout(retryTimeoutRef.current);\n }\n void liveQueryPromise.then((live) => {\n if (live?.unsubscribe) {\n live.unsubscribe();\n }\n });\n };\n }, [relationalDb.db, ProcessorClass, driveId, queryCallback, parameters]);\n\n return {\n isLoading: relationalDb.isLoading || queryLoading,\n error: error || relationalDb.error,\n result,\n } as const;\n}\n","import type { LiveQueryResults } from \"@electric-sql/pglite/live\";\nimport type {\n QueryCallbackReturnType,\n useRelationalQueryOptions,\n} from \"@powerhousedao/reactor-browser\";\nimport type {\n IRelationalQueryBuilder,\n RelationalDbProcessorClass,\n} from \"@powerhousedao/shared/processors\";\nimport type { CompiledQuery } from \"kysely\";\nimport deepEqual from \"lodash.isequal\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { useRelationalQuery } from \"../hooks/useRelationalQuery.js\";\n\n// Custom hook for parameter memoization\nfunction useStableParams<T>(params: T): T {\n const prevParamsRef = useRef<T>(null);\n\n return useMemo(() => {\n if (!deepEqual(prevParamsRef.current, params)) {\n prevParamsRef.current = params;\n }\n return prevParamsRef.current as T;\n }, [params]);\n}\n\nexport function createProcessorQuery<TSchema>(\n ProcessorClass: RelationalDbProcessorClass<TSchema>,\n) {\n // Overload for queries without parameters\n function useQuery<\n TQueryBuilder extends (\n db: IRelationalQueryBuilder<TSchema>,\n ) => QueryCallbackReturnType,\n >(\n driveId: string,\n queryCallback: TQueryBuilder,\n ): {\n isLoading: boolean;\n error: Error | null;\n result: LiveQueryResults<\n ReturnType<TQueryBuilder> extends CompiledQuery<infer R> ? R : any\n > | null;\n };\n\n // Overload for queries with parameters\n function useQuery<\n TParams,\n TQueryBuilder extends (\n db: IRelationalQueryBuilder<TSchema>,\n parameters: TParams,\n ) => QueryCallbackReturnType,\n >(\n driveId: string,\n queryCallback: TQueryBuilder,\n parameters: TParams,\n options?: useRelationalQueryOptions,\n ): {\n isLoading: boolean;\n error: Error | null;\n result: LiveQueryResults<\n ReturnType<TQueryBuilder> extends CompiledQuery<infer R> ? R : any\n > | null;\n };\n\n function useQuery<\n TParams,\n TQueryBuilder extends (\n db: IRelationalQueryBuilder<TSchema>,\n parameters?: TParams,\n ) => QueryCallbackReturnType,\n >(\n driveId: string,\n queryCallback: TQueryBuilder,\n parameters?: TParams,\n options?: useRelationalQueryOptions,\n ): {\n isLoading: boolean;\n error: Error | null;\n result: LiveQueryResults<\n ReturnType<TQueryBuilder> extends CompiledQuery<infer R> ? R : any\n > | null;\n } {\n type InferredResult =\n ReturnType<TQueryBuilder> extends CompiledQuery<infer R> ? R : any;\n\n // Automatically memoize parameters using deep comparison\n const stableParams = useStableParams(parameters);\n\n // Memoize the callback to prevent infinite loops, updating when parameters change\n const memoizedCallback = useCallback(queryCallback, [stableParams]);\n\n return useRelationalQuery<TSchema, InferredResult, TParams>(\n ProcessorClass,\n driveId,\n memoizedCallback,\n stableParams,\n options,\n ) as {\n isLoading: boolean;\n error: Error | null;\n result: LiveQueryResults<InferredResult> | null;\n };\n }\n\n return useQuery;\n}\n"],"mappings":";;;;;;AAGA,MAAa,sBAAsB;AAQnC,MAAM,qBAAkC;CACtC,IAAI;CACJ,WAAW;CACX,OAAO;CACR;AAED,MAAa,oBAAoB;CAC/B,MAAM,CAAC,OAAO,YAAY,eAClB,OAAO,YAAY,UAAU,mBACpC;AAED,iBAAgB;EACd,MAAM,2BACJ,SAAS,OAAO,YAAY,UAAU,mBAAmB;AAE3D,SAAO,iBAAiB,qBAAqB,mBAAmB;AAEhE,eACE,OAAO,oBAAoB,qBAAqB,mBAAmB;IACpE,EAAE,CAAC;AAEN,QAAO;;;;ACXT,SAAS,2BACP,gBAC8B;CAO9B,MAAM,uBAHe,mBAHN,IAAI,OAAe,EAChC,SAAS,IAAI,cAAc,eAAoC,EAChE,CAAC,CAC6C;AAK/C,sBAAqB,OAAO,eAAe;AAE3C,QAAO;;AAGT,MAAa,wBAA4D;CACvE,MAAM,SAAS,aAAa;AAoB5B,QAlBqB,cAA0C;AAC7D,MAAI,CAAC,OAAO,MAAM,OAAO,aAAa,OAAO,MAC3C,QAAO;GACL,IAAI;GACJ,WAAW,OAAO;GAClB,OAAO,OAAO;GACf;AAKH,SAAO;GACL,IAHS,2BAAmC,OAAO,GAAG;GAItD,WAAW;GACX,OAAO;GACR;IACA,CAAC,OAAO,CAAC;;;;ACtCd,MAAM,cAAc;AACpB,MAAM,cAAc;AAEpB,MAAM,2BAA2B,UAA4B;CAC3D,MAAM,eACJ,iBAAiB,QACb,MAAM,UACN,OAAO,UAAU,WACf,QACA,OAAO,MAAM;AAErB,QACE,aAAa,aAAa,CAAC,SAAS,WAAW,IAC/C,aAAa,aAAa,CAAC,SAAS,iBAAiB;;AAQzD,SAAgB,mBACd,gBACA,SACA,eAIA,YACA,UACA;CACA,MAAM,CAAC,QAAQ,aAAa,SAAqC,KAAK;CACtE,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CACtD,MAAM,CAAC,OAAO,YAAY,SAA4B,KAAA,EAAU;CAChE,MAAM,aAAa,OAAO,EAAE;CAC5B,MAAM,kBAAkB,OAAuB,KAAK;CAEpD,MAAM,eAAe,iBAAyB;CAE9C,MAAM,mBAAmB,OACvB,KACA,iBACA,eAAe,MACmB;AAClC,MAAI,CAAC,aAAa,GAChB,QAAO;AAGT,MAAI;AAWF,UAVa,MAAM,aAAa,GAAG,KAAK,MACtC,KACA,kBAAkB,CAAC,GAAG,gBAAgB,GAAG,EAAE,GAC1C,WAAW;AACV,cAAU,OAAO;AACjB,oBAAgB,MAAM;AACtB,eAAW,UAAU;KAExB;WAGM,KAAc;AACrB,OAAI,wBAAwB,IAAI,IAAI,eAAe,YACjD,QAAO,IAAI,SAAS,YAAY;AAC9B,oBAAgB,UAAU,iBAAiB;AACzC,aAAQ,iBAAiB,KAAK,iBAAiB,eAAe,EAAE,CAAC;OAChE,YAAY;KACf;AAGJ,mBAAgB,MAAM;AACtB,YAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,CAAC;AAC7D,UAAO;;;AAIX,iBAAgB;AACd,WAAS,KAAA,EAAU;AACnB,kBAAgB,KAAK;AACrB,aAAW,UAAU;AAErB,MAAI,CAAC,aAAa,GAChB;EAOF,MAAM,EAAE,KAAK,YAAY,oBADH,cAFX,eAAe,MAAM,SAAS,aAAa,GAAG,EAEjB,WAAW;EAGnD,MAAM,mBAAmB,iBAAiB,KAAK,gBAAgB;AAE/D,eAAa;AACX,OAAI,gBAAgB,QAClB,cAAa,gBAAgB,QAAQ;AAElC,oBAAiB,MAAM,SAAS;AACnC,QAAI,MAAM,YACR,MAAK,aAAa;KAEpB;;IAEH;EAAC,aAAa;EAAI;EAAgB;EAAS;EAAe;EAAW,CAAC;AAEzE,QAAO;EACL,WAAW,aAAa,aAAa;EACrC,OAAO,SAAS,aAAa;EAC7B;EACD;;;;AC/GH,SAAS,gBAAmB,QAAc;CACxC,MAAM,gBAAgB,OAAU,KAAK;AAErC,QAAO,cAAc;AACnB,MAAI,CAAC,UAAU,cAAc,SAAS,OAAO,CAC3C,eAAc,UAAU;AAE1B,SAAO,cAAc;IACpB,CAAC,OAAO,CAAC;;AAGd,SAAgB,qBACd,gBACA;CAqCA,SAAS,SAOP,SACA,eACA,YACA,SAOA;EAKA,MAAM,eAAe,gBAAgB,WAAW;AAKhD,SAAO,mBACL,gBACA,SAJuB,YAAY,eAAe,CAAC,aAAa,CAAC,EAMjE,cACA,QACD;;AAOH,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"renown-Dzmo1gJD.js","names":["truncateAddress","logoutUtil","styles","defaultLogout"],"sources":["../src/hooks/loading.ts","../src/hooks/renown.ts","../src/renown/constants.ts","../src/renown/utils.ts","../src/renown/use-renown-auth.ts","../src/renown/components/icons.tsx","../src/renown/components/slot.tsx","../src/renown/components/RenownLoginButton.tsx","../src/renown/components/RenownUserButton.tsx","../src/renown/components/RenownAuthButton.tsx","../src/renown/crypto.ts","../src/renown/use-renown-init.ts","../src/renown/renown-init.tsx"],"sourcesContent":["import type { LOADING } from \"../types/global.js\";\nimport { makePHEventFunctions } from \"./make-ph-event-functions.js\";\n\nexport const {\n useValue: useLoading,\n setValue: setLoading,\n addEventHandler: addLoadingEventHandler,\n} = makePHEventFunctions(\"loading\");\n\nexport const loading: LOADING = null;\n","import type { IRenown, LoginStatus, User } from \"@renown/sdk\";\nimport { useEffect, useState, useSyncExternalStore } from \"react\";\nimport type { LOADING } from \"../types/global.js\";\nimport { loading } from \"./loading.js\";\nimport { makePHEventFunctions } from \"./make-ph-event-functions.js\";\n\nconst renownEventFunctions = makePHEventFunctions(\"renown\");\n\n/** Adds an event handler for the renown instance */\nexport const addRenownEventHandler: () => void =\n renownEventFunctions.addEventHandler;\n\n/** Returns the renown instance */\nexport const useRenown: () => IRenown | LOADING | undefined =\n renownEventFunctions.useValue;\n\n/** Sets the renown instance */\nexport const setRenown: (value: IRenown | LOADING | undefined) => void =\n renownEventFunctions.setValue;\n\n/** Returns the DID from the renown instance */\nexport function useDid() {\n const renown = useRenown();\n return renown?.did;\n}\n\n/** Returns the current user from the renown instance, subscribing to user events */\nexport function useUser(): User | undefined {\n const renown = useRenown();\n const [user, setUser] = useState<User | undefined>(renown?.user);\n\n useEffect(() => {\n setUser(renown?.user);\n if (!renown) return;\n return renown.on(\"user\", setUser);\n }, [renown]);\n\n return user;\n}\n\n/** Returns the login status, subscribing to renown status events */\nexport function useLoginStatus(): LoginStatus | \"loading\" | undefined {\n const renown = useRenown();\n return useSyncExternalStore(\n (cb) => {\n if (!renown) {\n return () => {};\n }\n return renown.on(\"status\", cb);\n },\n () => (renown === loading ? \"loading\" : renown?.status),\n () => undefined,\n );\n}\n","export const RENOWN_URL = \"https://www.renown.id\";\nexport const RENOWN_NETWORK_ID = \"eip155\";\nexport const RENOWN_CHAIN_ID = \"1\";\n\n// EIP-712 credential types are canonical in @renown/sdk; re-export to avoid drift.\nexport {\n CREDENTIAL_TYPES,\n DOMAIN_TYPE,\n VERIFIABLE_CREDENTIAL_EIP712_TYPE,\n CREDENTIAL_SCHEMA_EIP712_TYPE,\n CREDENTIAL_SUBJECT_TYPE,\n ISSUER_TYPE,\n} from \"@renown/sdk\";\n","import type { IRenown, User } from \"@renown/sdk\";\nimport { logger } from \"document-model\";\nimport { RENOWN_CHAIN_ID, RENOWN_NETWORK_ID, RENOWN_URL } from \"./constants.js\";\n\nexport function openRenown(documentId?: string) {\n const renown = window.ph?.renown;\n let renownUrl = renown?.baseUrl;\n if (!renownUrl) {\n logger.warn(\"Renown instance not found, falling back to: @url\", RENOWN_URL);\n renownUrl = RENOWN_URL;\n }\n\n if (documentId) {\n window.open(`${renownUrl}/profile/${documentId}`, \"_blank\")?.focus();\n return;\n }\n\n const url = new URL(renownUrl);\n url.searchParams.set(\"app\", renown?.did ?? \"\");\n url.searchParams.set(\"connect\", renown?.did ?? \"\");\n url.searchParams.set(\"network\", RENOWN_NETWORK_ID);\n url.searchParams.set(\"chain\", RENOWN_CHAIN_ID);\n\n const returnUrl = new URL(window.location.pathname, window.location.origin);\n url.searchParams.set(\"returnUrl\", returnUrl.toJSON());\n window.open(url, \"_self\")?.focus();\n}\n\n/**\n * Reads the `?user=` DID from the URL if present.\n * Returns the DID and cleans up the URL parameter.\n */\nfunction consumeDidFromUrl(): string | undefined {\n if (typeof window === \"undefined\") return;\n\n const urlParams = new URLSearchParams(window.location.search);\n const userParam = urlParams.get(\"user\");\n if (!userParam) return;\n\n const userDid = decodeURIComponent(userParam);\n\n // Clean up the URL parameter\n const cleanUrl = new URL(window.location.href);\n cleanUrl.searchParams.delete(\"user\");\n window.history.replaceState({}, \"\", cleanUrl.toString());\n\n return userDid;\n}\n\n/**\n * Log in the user. Resolves the user DID from (in order):\n * 1. Explicit `userDid` argument\n * 2. `?user=` URL parameter (from Renown portal redirect)\n * 3. Previously stored session in the Renown instance\n */\nexport async function login(\n userDid: string | undefined,\n renown: IRenown | undefined,\n): Promise<User | undefined> {\n if (!renown) {\n return;\n }\n\n const did = userDid ?? consumeDidFromUrl();\n\n try {\n const user = renown.user;\n\n if (user?.did && (user.did === did || !did)) {\n return user;\n }\n\n if (!did) {\n return;\n }\n\n return await renown.login(did);\n } catch (error) {\n logger.error(\n error instanceof Error ? error.message : JSON.stringify(error),\n );\n }\n}\n\nexport async function logout() {\n const renown = window.ph?.renown;\n await renown?.logout();\n\n // Clear the user parameter from URL to prevent auto-login on refresh\n const url = new URL(window.location.href);\n if (url.searchParams.has(\"user\")) {\n url.searchParams.delete(\"user\");\n window.history.replaceState(null, \"\", url.toString());\n }\n}\n","import type { LoginStatus, User } from \"@renown/sdk\";\nimport { useCallback } from \"react\";\nimport { useLoginStatus, useUser } from \"../hooks/renown.js\";\nimport { logout as logoutUtil, openRenown } from \"./utils.js\";\n\nexport type RenownAuthStatus = LoginStatus | \"loading\";\n\nexport interface RenownAuth {\n status: RenownAuthStatus | undefined;\n user: User | undefined;\n address: string | undefined;\n ensName: string | undefined;\n avatarUrl: string | undefined;\n profileId: string | undefined;\n displayName: string | undefined;\n displayAddress: string | undefined;\n login: () => void;\n logout: () => Promise<void>;\n openProfile: () => void;\n}\n\nfunction truncateAddress(address: string): string {\n if (address.length <= 13) return address;\n return `${address.slice(0, 7)}...${address.slice(-5)}`;\n}\n\nfunction toRenownAuthStatus(\n loginStatus: LoginStatus | \"loading\" | undefined,\n user: User | undefined,\n): RenownAuthStatus | undefined {\n if (loginStatus === \"authorized\") {\n return user ? \"authorized\" : \"checking\";\n }\n return loginStatus;\n}\n\nexport function useRenownAuth(): RenownAuth {\n const user = useUser();\n const loginStatus = useLoginStatus();\n\n // syncs user with login status\n const status = toRenownAuthStatus(loginStatus, user);\n\n const address = user?.address;\n const ensName = user?.ens?.name;\n const avatarUrl = user?.profile?.userImage ?? user?.ens?.avatarUrl;\n const profileId = user?.profile?.documentId;\n\n const displayName = ensName ?? user?.profile?.username ?? undefined;\n const displayAddress = address ? truncateAddress(address) : undefined;\n\n const login = useCallback(() => {\n openRenown();\n }, []);\n\n const logout = useCallback(async () => {\n await logoutUtil();\n }, []);\n\n const openProfile = useCallback(() => {\n if (profileId) {\n openRenown(profileId);\n }\n }, [profileId]);\n\n return {\n status,\n user,\n address,\n ensName,\n avatarUrl,\n profileId,\n displayName,\n displayAddress,\n login,\n logout,\n openProfile,\n };\n}\n","import type { CSSProperties } from \"react\";\n\ninterface IconProps {\n size?: number;\n width?: number;\n height?: number;\n color?: string;\n style?: CSSProperties;\n className?: string;\n}\n\ninterface RenownLogoProps extends IconProps {\n hovered?: boolean;\n}\n\nexport function RenownLogo({\n width = 71,\n height = 19,\n hovered = false,\n color = \"currentColor\",\n className,\n}: RenownLogoProps) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 71 19\"\n fill={color}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path d=\"M53.6211 18.4887V9.0342H56.435V10.8096H56.4923C56.7377 10.181 57.1085 9.70244 57.6047 9.37398C58.101 9.03986 58.6981 8.8728 59.3962 8.8728C60.4105 8.8728 61.2039 9.1871 61.7765 9.8157C62.3546 10.4443 62.6436 11.3164 62.6436 12.432V18.4887H59.7397V13.0776C59.7397 12.5283 59.6007 12.1007 59.3225 11.7949C59.0499 11.4835 58.6654 11.3277 58.1692 11.3277C57.6784 11.3277 57.2803 11.4976 56.9749 11.8374C56.6695 12.1772 56.5168 12.6161 56.5168 13.1541V18.4887H53.6211Z\" />\n <path d=\"M53.097 9.03394L50.7412 18.4884H47.6164L46.1522 12.075H46.0949L44.6389 18.4884H41.5632L39.1992 9.03394H42.1195L43.3056 15.7532H43.3628L44.7861 9.03394H47.551L48.9906 15.7532H49.0479L50.234 9.03394H53.097Z\" />\n <path d=\"M37.8661 17.3926C37.0427 18.2591 35.9084 18.6923 34.4632 18.6923C33.0181 18.6923 31.8838 18.2591 31.0604 17.3926C30.2369 16.5205 29.8252 15.3086 29.8252 13.7569C29.8252 12.2336 30.2424 11.033 31.0767 10.1552C31.9111 9.2718 33.0399 8.83008 34.4632 8.83008C35.892 8.83008 37.0208 9.26896 37.8497 10.1467C38.6841 11.0188 39.1013 12.2222 39.1013 13.7569C39.1013 15.3143 38.6896 16.5262 37.8661 17.3926ZM33.2117 15.7702C33.5116 16.2402 33.9288 16.4752 34.4632 16.4752C34.9977 16.4752 35.4148 16.2402 35.7148 15.7702C36.0147 15.2945 36.1647 14.6234 36.1647 13.7569C36.1647 12.9131 36.012 12.2506 35.7066 11.7692C35.4012 11.2878 34.9868 11.0472 34.4632 11.0472C33.9343 11.0472 33.5171 11.2878 33.2117 11.7692C32.9118 12.2449 32.7618 12.9075 32.7618 13.7569C32.7618 14.6234 32.9118 15.2945 33.2117 15.7702Z\" />\n <path d=\"M20.0088 18.4887V9.0342H22.8227V10.8096H22.88C23.1254 10.181 23.4962 9.70244 23.9924 9.37398C24.4887 9.03986 25.0858 8.8728 25.7838 8.8728C26.7982 8.8728 27.5916 9.1871 28.1642 9.8157C28.7423 10.4443 29.0313 11.3164 29.0313 12.432V18.4887H26.1274V13.0776C26.1274 12.5283 25.9883 12.1007 25.7102 11.7949C25.4376 11.4835 25.0531 11.3277 24.5569 11.3277C24.0661 11.3277 23.668 11.4976 23.3626 11.8374C23.0572 12.1772 22.9045 12.6161 22.9045 13.1541V18.4887H20.0088Z\" />\n <path d=\"M14.7486 10.9707C14.2851 10.9707 13.8952 11.1321 13.5789 11.4549C13.2626 11.7777 13.0854 12.1911 13.0472 12.6951H16.4337C16.4064 12.1741 16.2374 11.7579 15.9265 11.4464C15.6212 11.1293 15.2285 10.9707 14.7486 10.9707ZM16.4991 15.5153H19.1167C18.9749 16.4837 18.5141 17.2567 17.7343 17.8343C16.9599 18.4063 15.9838 18.6923 14.8059 18.6923C13.3662 18.6923 12.2374 18.2591 11.4194 17.3926C10.6014 16.5262 10.1924 15.3313 10.1924 13.8079C10.1924 12.2845 10.5987 11.0755 11.4112 10.1807C12.2237 9.28029 13.3226 8.83008 14.7077 8.83008C16.0656 8.83008 17.1481 9.26047 17.9552 10.1213C18.7677 10.9764 19.174 12.1231 19.174 13.5616V14.4195H13.0145V14.6064C13.0145 15.184 13.1835 15.6541 13.5216 16.0165C13.8597 16.3733 14.3015 16.5517 14.8468 16.5517C15.2503 16.5517 15.5993 16.461 15.8938 16.2798C16.1883 16.0929 16.3901 15.8381 16.4991 15.5153Z\" />\n <path d=\"M3.00205 8.58396V12.0667H4.7771C5.32789 12.0667 5.7587 11.911 6.06954 11.5995C6.38038 11.2881 6.5358 10.8662 6.5358 10.3338C6.5358 9.80718 6.37492 9.38528 6.05318 9.06815C5.73143 8.74535 5.30335 8.58396 4.76892 8.58396H3.00205ZM3.00205 14.1989V18.4886H0V6.23096H5.07158C6.53307 6.23096 7.65373 6.5849 8.43355 7.29278C9.21337 8.00066 9.60328 8.99453 9.60328 10.2744C9.60328 11.0446 9.42605 11.7439 9.07159 12.3725C8.71712 12.9955 8.2236 13.4514 7.59101 13.7402L9.94684 18.4886H6.5767L4.55624 14.1989H3.00205Z\" />\n <path\n d=\"M65.7255 0.211478C65.0841 2.46724 63.3737 4.2455 61.2041 4.90969C60.932 4.99366 60.932 5.39096 61.2041 5.47492C63.3725 6.13912 65.0841 7.91738 65.7255 10.1731C65.8056 10.4551 66.1932 10.4551 66.2745 10.1731C66.9159 7.91738 68.6263 6.13912 70.7959 5.47492C71.068 5.39096 71.068 4.99366 70.7959 4.90969C68.6276 4.2455 66.9159 2.46724 66.2745 0.211478C66.1944 -0.0704925 65.8068 -0.0704925 65.7255 0.211478Z\"\n fill={hovered ? \"#21FFB4\" : color}\n />\n </svg>\n );\n}\n\nexport function CopyIcon({ size = 14, color = \"#9EA0A1\" }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"5\"\n y=\"5\"\n width=\"9\"\n height=\"9\"\n rx=\"1\"\n stroke={color}\n strokeWidth=\"1.5\"\n />\n <path\n d=\"M11 5V3C11 2.44772 10.5523 2 10 2H3C2.44772 2 2 2.44772 2 3V10C2 10.5523 2.44772 11 3 11H5\"\n stroke={color}\n strokeWidth=\"1.5\"\n />\n </svg>\n );\n}\n\nexport function DisconnectIcon({ size = 14, color = \"#EA4335\" }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V3.33333C2 2.97971 2.14048 2.64057 2.39052 2.39052C2.64057 2.14048 2.97971 2 3.33333 2H6\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.6667 11.3333L14 8L10.6667 4.66667\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 8H6\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function SpinnerIcon({ size = 14, color = \"currentColor\" }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ animation: \"spin 1s linear infinite\" }}\n >\n <style>{`@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }`}</style>\n <path d=\"M8 1V4\" stroke={color} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <path\n d=\"M8 12V15\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n opacity=\"0.3\"\n />\n <path\n d=\"M3.05 3.05L5.17 5.17\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n opacity=\"0.9\"\n />\n <path\n d=\"M10.83 10.83L12.95 12.95\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n opacity=\"0.4\"\n />\n <path\n d=\"M1 8H4\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n opacity=\"0.8\"\n />\n <path\n d=\"M12 8H15\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n opacity=\"0.5\"\n />\n <path\n d=\"M3.05 12.95L5.17 10.83\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n opacity=\"0.7\"\n />\n <path\n d=\"M10.83 5.17L12.95 3.05\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n opacity=\"0.6\"\n />\n </svg>\n );\n}\n\nexport function ChevronDownIcon({\n size = 14,\n color = \"currentColor\",\n style,\n}: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={style}\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function UserIcon({ size = 24, color = \"#6366f1\" }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"12\" cy=\"8\" r=\"4\" stroke={color} strokeWidth=\"2\" />\n <path\n d=\"M4 20C4 16.6863 7.58172 14 12 14C16.4183 14 20 16.6863 20 20\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n","import {\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n} from \"react\";\n\ntype AnyProps = Record<string, unknown>;\n\nfunction mergeProps(parentProps: AnyProps, childProps: AnyProps): AnyProps {\n const merged: AnyProps = { ...parentProps };\n\n for (const key of Object.keys(childProps)) {\n const parentValue = parentProps[key];\n const childValue = childProps[key];\n\n if (key === \"style\") {\n merged[key] = { ...(parentValue as object), ...(childValue as object) };\n } else if (key === \"className\") {\n merged[key] = [parentValue, childValue].filter(Boolean).join(\" \");\n } else if (\n typeof parentValue === \"function\" &&\n typeof childValue === \"function\"\n ) {\n merged[key] = (...args: unknown[]) => {\n (childValue as (...a: unknown[]) => void)(...args);\n (parentValue as (...a: unknown[]) => void)(...args);\n };\n } else if (childValue !== undefined) {\n merged[key] = childValue;\n }\n }\n\n return merged;\n}\n\ninterface SlotProps extends HTMLAttributes<HTMLElement> {\n children?: ReactNode;\n ref?: Ref<HTMLElement>;\n}\n\nexport const Slot = forwardRef<HTMLElement, SlotProps>(\n ({ children, ...props }, ref) => {\n const child = Children.only(children);\n\n if (!isValidElement(child)) {\n return null;\n }\n\n const childElement = child as ReactElement<AnyProps>;\n const mergedProps = mergeProps(props, childElement.props);\n\n if (ref) {\n mergedProps.ref = ref;\n }\n\n return cloneElement(childElement, mergedProps);\n },\n);\n\nSlot.displayName = \"Slot\";\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { openRenown } from \"../utils.js\";\nimport { SpinnerIcon } from \"./icons.js\";\nimport { Slot } from \"./slot.js\";\n\nexport interface RenownLoginButtonProps {\n onLogin?: () => void;\n darkMode?: boolean;\n style?: CSSProperties;\n className?: string;\n asChild?: boolean;\n children?: ReactNode;\n}\n\nconst lightStyles = {\n trigger: {\n backgroundColor: \"#ffffff\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: \"#d1d5db\",\n color: \"#111827\",\n },\n triggerHover: {\n backgroundColor: \"#ecf3f8\",\n borderColor: \"#9ca3af\",\n },\n} as const;\n\nconst darkStyles = {\n trigger: {\n backgroundColor: \"#1f2937\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: \"#4b5563\",\n color: \"#ecf3f8\",\n },\n triggerHover: {\n backgroundColor: \"#374151\",\n borderColor: \"#6b7280\",\n },\n} as const;\n\nconst styles: Record<string, CSSProperties> = {\n wrapper: {\n position: \"relative\",\n display: \"inline-block\",\n },\n trigger: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\",\n padding: \"8px 32px\",\n borderRadius: \"8px\",\n cursor: \"pointer\",\n fontSize: \"14px\",\n fontWeight: 500,\n fontFamily: \"inherit\",\n lineHeight: \"20px\",\n transition: \"background-color 150ms, border-color 150ms\",\n },\n};\n\nexport function RenownLoginButton({\n onLogin: onLoginProp,\n darkMode = false,\n style,\n className,\n asChild = false,\n children,\n}: RenownLoginButtonProps) {\n const onLogin = onLoginProp ?? (() => openRenown());\n const [isLoading, setIsLoading] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => setIsHovered(true), []);\n const handleMouseLeave = useCallback(() => setIsHovered(false), []);\n\n const handleClick = () => {\n if (!isLoading) {\n setIsLoading(true);\n onLogin();\n }\n };\n\n const themeStyles = darkMode ? darkStyles : lightStyles;\n\n const triggerStyle: CSSProperties = {\n ...styles.trigger,\n ...themeStyles.trigger,\n ...(isHovered && !isLoading ? themeStyles.triggerHover : {}),\n cursor: isLoading ? \"wait\" : \"pointer\",\n ...style,\n };\n\n const triggerElement = asChild ? (\n <Slot\n onClick={handleClick}\n data-renown-state=\"login\"\n {...(isLoading ? { \"data-loading\": \"\" } : {})}\n >\n {children}\n </Slot>\n ) : (\n <button\n type=\"button\"\n style={triggerStyle}\n aria-label=\"Log in with Renown\"\n onClick={handleClick}\n data-renown-state=\"login\"\n {...(isLoading ? { \"data-loading\": \"\" } : {})}\n >\n {isLoading ? <SpinnerIcon size={16} /> : <span>Log in</span>}\n </button>\n );\n\n return (\n <div\n style={styles.wrapper}\n className={className}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {triggerElement}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useUser } from \"../../hooks/renown.js\";\nimport { logout as defaultLogout, openRenown } from \"../utils.js\";\nimport {\n ChevronDownIcon,\n CopyIcon,\n DisconnectIcon,\n UserIcon,\n} from \"./icons.js\";\nimport { Slot } from \"./slot.js\";\n\nconst POPOVER_GAP = 4;\nconst POPOVER_HEIGHT = 150;\n\nexport interface RenownUserButtonMenuItem {\n label: string;\n icon?: ReactNode;\n onClick: () => void;\n style?: CSSProperties;\n}\n\nexport interface RenownUserButtonProps {\n address?: string;\n username?: string;\n avatarUrl?: string;\n userId?: string;\n onDisconnect?: () => void;\n style?: CSSProperties;\n className?: string;\n asChild?: boolean;\n children?: ReactNode;\n menuItems?: RenownUserButtonMenuItem[];\n}\n\nconst styles: Record<string, CSSProperties> = {\n wrapper: {\n position: \"relative\",\n display: \"inline-block\",\n },\n trigger: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n padding: \"6px 12px\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: \"#e5e7eb\",\n backgroundColor: \"#ffffff\",\n cursor: \"pointer\",\n borderRadius: \"8px\",\n fontSize: \"12px\",\n fontWeight: 500,\n fontFamily: \"inherit\",\n color: \"#111827\",\n transition: \"background-color 150ms, border-color 150ms\",\n },\n triggerHover: {\n backgroundColor: \"#f9fafb\",\n borderColor: \"#9ca3af\",\n },\n avatar: {\n width: \"28px\",\n height: \"28px\",\n borderRadius: \"50%\",\n objectFit: \"cover\",\n flexShrink: 0,\n },\n avatarPlaceholder: {\n width: \"28px\",\n height: \"28px\",\n borderRadius: \"50%\",\n background: \"linear-gradient(135deg, #8b5cf6, #3b82f6)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n },\n avatarInitial: {\n fontSize: \"12px\",\n fontWeight: 700,\n color: \"#ffffff\",\n lineHeight: 1,\n },\n displayName: {\n maxWidth: \"120px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n chevron: {\n flexShrink: 0,\n transition: \"transform 150ms\",\n color: \"#6b7280\",\n },\n chevronOpen: {\n transform: \"rotate(180deg)\",\n },\n popoverBase: {\n position: \"absolute\",\n right: 0,\n backgroundColor: \"#ffffff\",\n borderRadius: \"8px\",\n boxShadow: \"0 4px 12px rgba(0, 0, 0, 0.12), 0 1px 3px rgba(0, 0, 0, 0.08)\",\n width: \"100%\",\n zIndex: 1000,\n color: \"#111827\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: \"#e5e7eb\",\n overflow: \"hidden\",\n },\n header: {\n padding: \"12px 16px\",\n borderBottom: \"1px solid #e5e7eb\",\n },\n headerUsername: {\n fontSize: \"14px\",\n fontWeight: 600,\n color: \"#111827\",\n margin: 0,\n },\n addressRow: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n marginTop: \"4px\",\n },\n addressButton: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: 0,\n border: \"none\",\n backgroundColor: \"transparent\",\n cursor: \"pointer\",\n fontSize: \"12px\",\n color: \"#6b7280\",\n fontFamily: \"inherit\",\n position: \"relative\",\n width: \"100%\",\n },\n copiedText: {\n fontSize: \"12px\",\n color: \"#059669\",\n position: \"absolute\",\n left: 0,\n transition: \"opacity 150ms\",\n fontWeight: 500,\n },\n addressText: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n transition: \"opacity 150ms\",\n },\n menuSection: {\n padding: \"4px 0\",\n },\n menuItem: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n width: \"100%\",\n padding: \"8px 16px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n cursor: \"pointer\",\n fontSize: \"14px\",\n color: \"#374151\",\n textDecoration: \"none\",\n fontFamily: \"inherit\",\n transition: \"background-color 150ms\",\n },\n menuItemHover: {\n backgroundColor: \"#f3f4f6\",\n },\n disconnectItem: {\n color: \"#dc2626\",\n },\n separator: {\n height: \"1px\",\n backgroundColor: \"#e5e7eb\",\n margin: 0,\n border: \"none\",\n },\n};\n\nfunction truncateAddress(address: string): string {\n if (address.length <= 13) return address;\n return `${address.slice(0, 7)}...${address.slice(-5)}`;\n}\n\nexport function RenownUserButton({\n address: addressProp,\n username: usernameProp,\n avatarUrl: avatarUrlProp,\n userId: userIdProp,\n onDisconnect: onDisconnectProp,\n style,\n className,\n asChild = false,\n children,\n menuItems,\n}: RenownUserButtonProps) {\n const user = useUser();\n\n const address = addressProp ?? user?.address ?? \"\";\n const username = usernameProp ?? user?.profile?.username ?? user?.ens?.name;\n const avatarUrl =\n avatarUrlProp ?? user?.profile?.userImage ?? user?.ens?.avatarUrl;\n const userId = userIdProp ?? user?.profile?.documentId;\n const onDisconnect = onDisconnectProp ?? (() => void defaultLogout());\n const displayName =\n username ?? (address ? truncateAddress(address) : \"Account\");\n const profileId = userId ?? address;\n\n const [isOpen, setIsOpen] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n const [isCopied, setIsCopied] = useState(false);\n const [showAbove, setShowAbove] = useState(true);\n const [hoveredItem, setHoveredItem] = useState<string | null>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const calculatePosition = useCallback(() => {\n if (!wrapperRef.current) return;\n const rect = wrapperRef.current.getBoundingClientRect();\n const spaceAbove = rect.top;\n setShowAbove(spaceAbove >= POPOVER_HEIGHT + POPOVER_GAP);\n }, []);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current);\n closeTimeoutRef.current = null;\n }\n calculatePosition();\n setIsOpen(true);\n }, [calculatePosition]);\n\n const handleMouseLeave = useCallback(() => {\n closeTimeoutRef.current = setTimeout(() => {\n setIsOpen(false);\n setIsHovered(false);\n setHoveredItem(null);\n }, 150);\n }, []);\n\n useEffect(() => {\n return () => {\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current);\n }\n };\n }, []);\n\n const copyToClipboard = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(address);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy address:\", err);\n }\n }, [address]);\n\n const triggerElement = asChild ? (\n <Slot data-renown-state=\"authenticated\">{children}</Slot>\n ) : (\n <button\n type=\"button\"\n style={{\n ...styles.trigger,\n ...(isHovered ? styles.triggerHover : {}),\n ...style,\n }}\n aria-label=\"Open account menu\"\n data-renown-state=\"authenticated\"\n >\n {avatarUrl ? (\n <img src={avatarUrl} alt=\"Avatar\" style={styles.avatar} />\n ) : (\n <div style={styles.avatarPlaceholder}>\n <span style={styles.avatarInitial}>\n {(displayName || \"U\")[0].toUpperCase()}\n </span>\n </div>\n )}\n <span style={styles.displayName}>{displayName}</span>\n <ChevronDownIcon\n size={14}\n style={{\n ...styles.chevron,\n ...(isOpen ? styles.chevronOpen : {}),\n }}\n />\n </button>\n );\n\n return (\n <div\n ref={wrapperRef}\n style={styles.wrapper}\n className={className}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {triggerElement}\n {isOpen && (\n <div\n style={{\n ...styles.popoverBase,\n ...(showAbove\n ? { bottom: `calc(100% + ${POPOVER_GAP}px)` }\n : { top: `calc(100% + ${POPOVER_GAP}px)` }),\n }}\n >\n <div style={styles.header}>\n {username && <div style={styles.headerUsername}>{username}</div>}\n {address && (\n <div style={styles.addressRow}>\n <button\n type=\"button\"\n onClick={() => void copyToClipboard()}\n style={styles.addressButton}\n >\n <div\n style={{\n position: \"relative\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n width: \"100%\",\n }}\n >\n <div\n style={{\n ...styles.addressText,\n opacity: isCopied ? 0 : 1,\n }}\n >\n <span>{truncateAddress(address)}</span>\n <CopyIcon size={12} color=\"#9ca3af\" />\n </div>\n <div\n style={{\n ...styles.copiedText,\n opacity: isCopied ? 1 : 0,\n }}\n >\n Copied!\n </div>\n </div>\n </button>\n </div>\n )}\n </div>\n <div style={styles.menuSection}>\n {profileId && (\n <button\n type=\"button\"\n onClick={() => openRenown(profileId)}\n onMouseEnter={() => setHoveredItem(\"profile\")}\n onMouseLeave={() => setHoveredItem(null)}\n style={{\n ...styles.menuItem,\n ...(hoveredItem === \"profile\" ? styles.menuItemHover : {}),\n }}\n >\n <UserIcon size={14} color=\"#6b7280\" />\n View Profile\n </button>\n )}\n {menuItems?.map((item) => (\n <button\n key={item.label}\n type=\"button\"\n onClick={item.onClick}\n onMouseEnter={() => setHoveredItem(item.label)}\n onMouseLeave={() => setHoveredItem(null)}\n style={{\n ...styles.menuItem,\n ...(hoveredItem === item.label ? styles.menuItemHover : {}),\n ...item.style,\n }}\n >\n {item.icon}\n {item.label}\n </button>\n ))}\n </div>\n <hr style={styles.separator} />\n <div style={styles.menuSection}>\n <button\n type=\"button\"\n onClick={onDisconnect}\n onMouseEnter={() => setHoveredItem(\"disconnect\")}\n onMouseLeave={() => setHoveredItem(null)}\n style={{\n ...styles.menuItem,\n ...styles.disconnectItem,\n ...(hoveredItem === \"disconnect\" ? styles.menuItemHover : {}),\n }}\n >\n <DisconnectIcon size={14} color=\"#dc2626\" />\n Log out\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { type RenownAuth, useRenownAuth } from \"../use-renown-auth.js\";\nimport { RenownLoginButton } from \"./RenownLoginButton.js\";\nimport { RenownUserButton } from \"./RenownUserButton.js\";\n\nexport interface RenownAuthButtonProps {\n className?: string;\n darkMode?: boolean;\n loginContent?: ReactNode;\n userContent?: ReactNode;\n loadingContent?: ReactNode;\n children?: (auth: RenownAuth) => ReactNode;\n}\n\nexport function RenownAuthButton({\n className = \"\",\n darkMode,\n loginContent,\n userContent,\n loadingContent,\n children,\n}: RenownAuthButtonProps) {\n const auth = useRenownAuth();\n\n if (children) {\n return <>{children(auth)}</>;\n }\n\n if (auth.status === \"loading\" || auth.status === \"checking\") {\n if (loadingContent) {\n return <div className={className}>{loadingContent}</div>;\n }\n\n return (\n <div className={className}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n padding: \"6px 12px\",\n borderRadius: \"8px\",\n border: \"1px solid #e5e7eb\",\n animation: \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\",\n }}\n >\n <div\n style={{\n width: \"28px\",\n height: \"28px\",\n borderRadius: \"50%\",\n backgroundColor: \"#e5e7eb\",\n }}\n />\n <div\n style={{\n width: \"80px\",\n height: \"14px\",\n borderRadius: \"4px\",\n backgroundColor: \"#e5e7eb\",\n }}\n />\n </div>\n <style>{`@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }`}</style>\n </div>\n );\n }\n\n if (auth.status === \"authorized\") {\n if (userContent) {\n return <div className={className}>{userContent}</div>;\n }\n\n return (\n <div className={className}>\n <RenownUserButton />\n </div>\n );\n }\n\n if (loginContent) {\n return <div className={className}>{loginContent}</div>;\n }\n\n return (\n <div className={className}>\n <RenownLoginButton darkMode={darkMode} />\n </div>\n );\n}\n","import { BrowserKeyStorage, RenownCryptoBuilder } from \"@renown/sdk\";\n\n/**\n * @deprecated Use {@link initRenownCrypto} instead\n *\n * Initialize ConnectCrypto\n * @returns ConnectCrypto instance\n */\nexport async function initConnectCrypto() {\n return initRenownCrypto();\n}\n\n/**\n * Initialize RenownCrypto\n * @returns RenownCrypto instance\n */\nexport async function initRenownCrypto() {\n const keyStorage = await BrowserKeyStorage.create();\n return await new RenownCryptoBuilder().withKeyPairStorage(keyStorage).build();\n}\n","import type { IRenown } from \"@renown/sdk\";\nimport { RenownBuilder } from \"@renown/sdk\";\nimport { useEffect, useRef } from \"react\";\nimport { loading } from \"../hooks/loading.js\";\nimport { addRenownEventHandler, setRenown } from \"../hooks/renown.js\";\nimport { login } from \"./utils.js\";\n\nexport interface RenownInitOptions {\n appName: string;\n /**\n * Prefix for localStorage keys, allowing multiple apps\n * to use Renown on the same domain without conflicts.\n */\n namespace?: string;\n url?: string;\n}\n\nasync function initRenown(\n appName: string,\n namespace: string | undefined,\n url: string | undefined,\n): Promise<IRenown> {\n addRenownEventHandler();\n setRenown(loading);\n\n const builder = new RenownBuilder(appName, {\n basename: namespace,\n baseUrl: url,\n });\n const renown = await builder.build();\n setRenown(renown);\n\n await login(undefined, renown);\n\n return renown;\n}\n\n/**\n * Hook that initializes the Renown SDK.\n * Call once at the top of your app. Options are read only on first mount.\n * Returns a promise that resolves with the Renown instance.\n *\n * @example\n * ```tsx\n * function App() {\n * const renownPromise = useRenownInit({ appName: \"my-app\" });\n * return <MyApp />;\n * }\n * ```\n */\nexport function useRenownInit({\n appName,\n namespace,\n url,\n}: RenownInitOptions): Promise<IRenown> {\n // Stable promise returned every render; resolved later by the init effect.\n const promiseRef = useRef<PromiseWithResolvers<IRenown> | null>(null);\n promiseRef.current ??= Promise.withResolvers<IRenown>();\n\n const initRef = useRef(false);\n\n // Init must run in an effect, not during render: setRenown() mutates the\n // useSyncExternalStore-backed store, which would update subscribers mid-render.\n useEffect(() => {\n if (initRef.current) return;\n initRef.current = true;\n\n initRenown(appName, namespace, url)\n .then(promiseRef.current!.resolve)\n .catch(promiseRef.current!.reject);\n }, []);\n\n return promiseRef.current.promise;\n}\n","import { type RenownInitOptions, useRenownInit } from \"./use-renown-init.js\";\n\nexport interface RenownProps extends RenownInitOptions {\n onError?: (error: unknown) => void;\n}\n\n/**\n * Side-effect component that initializes the Renown SDK.\n * Renders nothing — place it alongside your app tree.\n *\n * @example\n * ```tsx\n * function App() {\n * return (\n * <>\n * <Renown appName=\"my-app\" onError={console.error} />\n * <MyApp />\n * </>\n * );\n * }\n * ```\n */\nexport function Renown({ onError, ...initOptions }: RenownProps) {\n useRenownInit(initOptions).catch(onError ?? console.error);\n return null;\n}\n"],"mappings":"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"}