@partylayer/provider 0.1.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/event-bus.ts","../src/errors.ts","../src/error-map.ts","../src/method-router.ts","../src/async-wallet.ts","../src/provider.ts","../src/network.ts","../src/bridge.ts","../src/discovery.ts"],"names":["CIP0103_EVENTS","match"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * CIP-0103 Event Bus\n *\n * Minimal, spec-compliant event emitter.\n * - on() and removeListener() return the Provider (for chaining)\n * - emit() returns boolean (true if any listener was called)\n * - Listener errors are swallowed to prevent one handler from\n * breaking others\n */\n\nimport type { CIP0103Provider, CIP0103EventListener } from '@partylayer/core';\n\nexport class CIP0103EventBus {\n private listeners = new Map<string, Set<CIP0103EventListener>>();\n private owner: CIP0103Provider | null = null;\n\n /** Set the owning Provider instance (for chaining returns) */\n setOwner(owner: CIP0103Provider): void {\n this.owner = owner;\n }\n\n on<T = unknown>(\n event: string,\n listener: CIP0103EventListener<T>,\n ): CIP0103Provider {\n let set = this.listeners.get(event);\n if (!set) {\n set = new Set();\n this.listeners.set(event, set);\n }\n set.add(listener as CIP0103EventListener);\n return this.owner!;\n }\n\n emit<T = unknown>(event: string, ...args: T[]): boolean {\n const set = this.listeners.get(event);\n if (!set || set.size === 0) return false;\n\n for (const fn of set) {\n try {\n (fn as CIP0103EventListener<T>)(...args);\n } catch {\n // Swallow listener errors per spec behavior\n }\n }\n return true;\n }\n\n removeListener<T = unknown>(\n event: string,\n listenerToRemove: CIP0103EventListener<T>,\n ): CIP0103Provider {\n const set = this.listeners.get(event);\n if (set) {\n set.delete(listenerToRemove as CIP0103EventListener);\n if (set.size === 0) this.listeners.delete(event);\n }\n return this.owner!;\n }\n\n /** Remove all listeners, optionally scoped to a single event */\n removeAllListeners(event?: string): void {\n if (event) {\n this.listeners.delete(event);\n } else {\n this.listeners.clear();\n }\n }\n\n /** Number of listeners for a given event */\n listenerCount(event: string): number {\n return this.listeners.get(event)?.size ?? 0;\n }\n}\n","/**\n * CIP-0103 / EIP-1193 / EIP-1474 Error Model\n *\n * All errors on the Provider surface MUST be ProviderRpcError instances\n * with numeric codes. No PartyLayer string-based ErrorCode is ever exposed.\n *\n * Reference: https://eips.ethereum.org/EIPS/eip-1193\n * Reference: https://eips.ethereum.org/EIPS/eip-1474\n */\n\n// ─── ProviderRpcError ────────────────────────────────────────────────────────\n\nexport class ProviderRpcError extends Error {\n public readonly code: number;\n public readonly data?: unknown;\n\n constructor(message: string, code: number, data?: unknown) {\n super(message);\n this.name = 'ProviderRpcError';\n this.code = code;\n this.data = data;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ProviderRpcError);\n }\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n data: this.data,\n };\n }\n}\n\n// ─── EIP-1193 Standard Error Codes ──────────────────────────────────────────\n\nexport const RPC_ERRORS = {\n /** User rejected the request */\n USER_REJECTED: 4001,\n /** The requested method/account is not authorized */\n UNAUTHORIZED: 4100,\n /** Provider does not support the requested method */\n UNSUPPORTED_METHOD: 4200,\n /** Provider is disconnected from all chains */\n DISCONNECTED: 4900,\n /** Provider is not connected to the requested chain */\n CHAIN_DISCONNECTED: 4901,\n} as const;\n\n// ─── EIP-1474 JSON-RPC Error Codes ─────────────────────────────────────────\n\nexport const JSON_RPC_ERRORS = {\n /** Invalid JSON (parse error) */\n PARSE_ERROR: -32700,\n /** Invalid request object */\n INVALID_REQUEST: -32600,\n /** Method not found */\n METHOD_NOT_FOUND: -32601,\n /** Invalid method parameters */\n INVALID_PARAMS: -32602,\n /** Internal JSON-RPC error */\n INTERNAL_ERROR: -32603,\n /** Invalid input / missing or invalid parameters */\n INVALID_INPUT: -32000,\n /** Resource not found */\n RESOURCE_NOT_FOUND: -32001,\n /** Resource unavailable */\n RESOURCE_UNAVAILABLE: -32002,\n /** Transaction rejected */\n TRANSACTION_REJECTED: -32003,\n /** Method not supported */\n METHOD_NOT_SUPPORTED: -32004,\n /** Rate limit exceeded */\n RATE_LIMIT_EXCEEDED: -32005,\n} as const;\n\n// ─── Convenience Constructors ───────────────────────────────────────────────\n\nexport function userRejected(\n message = 'User Rejected Request',\n data?: unknown,\n): ProviderRpcError {\n return new ProviderRpcError(message, RPC_ERRORS.USER_REJECTED, data);\n}\n\nexport function unauthorized(\n message = 'Unauthorized',\n data?: unknown,\n): ProviderRpcError {\n return new ProviderRpcError(message, RPC_ERRORS.UNAUTHORIZED, data);\n}\n\nexport function unsupportedMethod(method: string): ProviderRpcError {\n return new ProviderRpcError(\n `Unsupported Method: \"${method}\"`,\n RPC_ERRORS.UNSUPPORTED_METHOD,\n { method },\n );\n}\n\nexport function disconnected(\n message = 'Disconnected',\n): ProviderRpcError {\n return new ProviderRpcError(message, RPC_ERRORS.DISCONNECTED);\n}\n\nexport function chainDisconnected(\n message = 'Chain Disconnected',\n): ProviderRpcError {\n return new ProviderRpcError(message, RPC_ERRORS.CHAIN_DISCONNECTED);\n}\n\nexport function internalError(\n message: string,\n data?: unknown,\n): ProviderRpcError {\n return new ProviderRpcError(message, JSON_RPC_ERRORS.INTERNAL_ERROR, data);\n}\n\nexport function invalidParams(\n message: string,\n data?: unknown,\n): ProviderRpcError {\n return new ProviderRpcError(message, JSON_RPC_ERRORS.INVALID_PARAMS, data);\n}\n\nexport function methodNotFound(method: string): ProviderRpcError {\n return new ProviderRpcError(\n `Method not found: \"${method}\"`,\n JSON_RPC_ERRORS.METHOD_NOT_FOUND,\n { method },\n );\n}\n\nexport function resourceNotFound(\n message: string,\n data?: unknown,\n): ProviderRpcError {\n return new ProviderRpcError(message, JSON_RPC_ERRORS.RESOURCE_NOT_FOUND, data);\n}\n\nexport function resourceUnavailable(\n message: string,\n data?: unknown,\n): ProviderRpcError {\n return new ProviderRpcError(message, JSON_RPC_ERRORS.RESOURCE_UNAVAILABLE, data);\n}\n\nexport function transactionRejected(\n message = 'Transaction rejected',\n data?: unknown,\n): ProviderRpcError {\n return new ProviderRpcError(message, JSON_RPC_ERRORS.TRANSACTION_REJECTED, data);\n}\n","/**\n * Bidirectional error mapping between PartyLayer ErrorCode and CIP-0103 numeric codes\n *\n * This module ensures no PartyLayer internals leak through the Provider surface,\n * and provides a reverse path for the bridge.\n */\n\nimport { PartyLayerError, type ErrorCode } from '@partylayer/core';\nimport { ProviderRpcError, RPC_ERRORS, JSON_RPC_ERRORS } from './errors';\n\n// ─── PartyLayer ErrorCode → CIP-0103 numeric code ──────────────────────────\n\nconst ERROR_CODE_TO_RPC: Record<ErrorCode, number> = {\n USER_REJECTED: RPC_ERRORS.USER_REJECTED,\n WALLET_NOT_FOUND: JSON_RPC_ERRORS.RESOURCE_NOT_FOUND,\n WALLET_NOT_INSTALLED: JSON_RPC_ERRORS.RESOURCE_UNAVAILABLE,\n ORIGIN_NOT_ALLOWED: RPC_ERRORS.UNAUTHORIZED,\n SESSION_EXPIRED: RPC_ERRORS.DISCONNECTED,\n CAPABILITY_NOT_SUPPORTED: RPC_ERRORS.UNSUPPORTED_METHOD,\n TRANSPORT_ERROR: JSON_RPC_ERRORS.INTERNAL_ERROR,\n REGISTRY_FETCH_FAILED: JSON_RPC_ERRORS.RESOURCE_UNAVAILABLE,\n REGISTRY_VERIFICATION_FAILED: JSON_RPC_ERRORS.INTERNAL_ERROR,\n REGISTRY_SCHEMA_INVALID: JSON_RPC_ERRORS.INTERNAL_ERROR,\n INTERNAL_ERROR: JSON_RPC_ERRORS.INTERNAL_ERROR,\n TIMEOUT: JSON_RPC_ERRORS.INVALID_INPUT,\n};\n\n// ─── CIP-0103 numeric code → PartyLayer ErrorCode (best-effort reverse) ────\n\nconst RPC_TO_ERROR_CODE: Partial<Record<number, ErrorCode>> = {\n [RPC_ERRORS.USER_REJECTED]: 'USER_REJECTED',\n [RPC_ERRORS.UNAUTHORIZED]: 'ORIGIN_NOT_ALLOWED',\n [RPC_ERRORS.UNSUPPORTED_METHOD]: 'CAPABILITY_NOT_SUPPORTED',\n [RPC_ERRORS.DISCONNECTED]: 'SESSION_EXPIRED',\n [RPC_ERRORS.CHAIN_DISCONNECTED]: 'TRANSPORT_ERROR',\n [JSON_RPC_ERRORS.INTERNAL_ERROR]: 'INTERNAL_ERROR',\n [JSON_RPC_ERRORS.METHOD_NOT_FOUND]: 'CAPABILITY_NOT_SUPPORTED',\n [JSON_RPC_ERRORS.RESOURCE_NOT_FOUND]: 'WALLET_NOT_FOUND',\n [JSON_RPC_ERRORS.RESOURCE_UNAVAILABLE]: 'WALLET_NOT_INSTALLED',\n [JSON_RPC_ERRORS.TRANSACTION_REJECTED]: 'USER_REJECTED',\n [JSON_RPC_ERRORS.INVALID_INPUT]: 'TIMEOUT',\n};\n\n/**\n * Convert any error into a ProviderRpcError for the CIP-0103 surface.\n *\n * This is the single normalization point — every error that escapes\n * the Provider MUST pass through this function.\n */\nexport function toProviderRpcError(err: unknown): ProviderRpcError {\n // Already a ProviderRpcError — pass through\n if (err instanceof ProviderRpcError) {\n return err;\n }\n\n // PartyLayerError — map code\n if (err instanceof PartyLayerError) {\n const code = ERROR_CODE_TO_RPC[err.code] ?? JSON_RPC_ERRORS.INTERNAL_ERROR;\n return new ProviderRpcError(err.message, code, {\n originalCode: err.code,\n details: err.details,\n });\n }\n\n // RPC-shaped error from a wallet provider (has numeric code)\n if (isRpcShaped(err)) {\n return new ProviderRpcError(err.message, err.code, err.data);\n }\n\n // Standard Error\n if (err instanceof Error) {\n return new ProviderRpcError(err.message, JSON_RPC_ERRORS.INTERNAL_ERROR);\n }\n\n // Unknown\n return new ProviderRpcError(String(err), JSON_RPC_ERRORS.INTERNAL_ERROR);\n}\n\n/**\n * Convert ProviderRpcError back to a PartyLayerError.\n *\n * Used by the bridge path when errors from the Provider surface\n * need to flow back into the PartyLayerClient world.\n */\nexport function toPartyLayerError(err: ProviderRpcError): PartyLayerError {\n const code = RPC_TO_ERROR_CODE[err.code] ?? 'INTERNAL_ERROR';\n return new PartyLayerError(err.message, code, {\n details: { rpcCode: err.code, data: err.data },\n });\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nfunction isRpcShaped(\n err: unknown,\n): err is { message: string; code: number; data?: unknown } {\n if (typeof err !== 'object' || err === null) return false;\n const e = err as Record<string, unknown>;\n return typeof e.message === 'string' && typeof e.code === 'number';\n}\n","/**\n * CIP-0103 Method Router\n *\n * Routes request({ method, params }) calls to the correct handler function.\n * By default, all 10 mandatory CIP-0103 methods are registered as passthrough\n * handlers that delegate to the native wallet Provider.\n *\n * Forward-compatible: unknown methods are passed through to the wallet provider\n * rather than rejected, allowing support for future CIP extensions.\n */\n\nimport type {\n CIP0103Provider,\n CIP0103RequestPayload,\n CIP0103RequestParams,\n} from '@partylayer/core';\nimport { unsupportedMethod, disconnected } from './errors';\nimport { toProviderRpcError } from './error-map';\n\nexport type MethodHandler<T = unknown> = (\n walletProvider: CIP0103Provider,\n params?: CIP0103RequestParams,\n) => Promise<T>;\n\nexport class MethodRouter {\n private handlers = new Map<string, MethodHandler>();\n private walletProvider: CIP0103Provider | null = null;\n\n constructor() {\n this.registerDefaults();\n }\n\n /** Set / swap the underlying native wallet provider */\n setWalletProvider(provider: CIP0103Provider | null): void {\n this.walletProvider = provider;\n }\n\n /** Get the current wallet provider */\n getWalletProvider(): CIP0103Provider | null {\n return this.walletProvider;\n }\n\n /** Register (or override) a handler for a method name */\n register<T>(method: string, handler: MethodHandler<T>): void {\n this.handlers.set(method, handler as MethodHandler);\n }\n\n /** Route a request to the appropriate handler */\n async route<T>(payload: CIP0103RequestPayload): Promise<T> {\n const { method, params } = payload;\n\n const handler = this.handlers.get(method);\n\n if (!handler) {\n // Forward-compatible: pass unknown methods through to the wallet provider\n if (this.walletProvider) {\n try {\n return await this.walletProvider.request<T>(payload);\n } catch (err) {\n throw toProviderRpcError(err);\n }\n }\n throw unsupportedMethod(method);\n }\n\n // connect and isConnected can operate without a wallet provider\n if (!this.walletProvider && method !== 'connect' && method !== 'isConnected') {\n throw disconnected('No wallet provider connected');\n }\n\n try {\n return (await handler(this.walletProvider!, params)) as T;\n } catch (err) {\n throw toProviderRpcError(err);\n }\n }\n\n /** Check whether a handler is registered for a given method */\n hasHandler(method: string): boolean {\n return this.handlers.has(method);\n }\n\n // ─── Default passthrough handlers ───────────────────────────────────────\n\n private registerDefaults(): void {\n const passthrough = (method: string): MethodHandler => {\n return async (wp, params) => {\n return wp.request({ method, params });\n };\n };\n\n this.register('connect', passthrough('connect'));\n this.register('disconnect', passthrough('disconnect'));\n this.register('isConnected', passthrough('isConnected'));\n this.register('status', passthrough('status'));\n this.register('getActiveNetwork', passthrough('getActiveNetwork'));\n this.register('listAccounts', passthrough('listAccounts'));\n this.register('getPrimaryAccount', passthrough('getPrimaryAccount'));\n this.register('signMessage', passthrough('signMessage'));\n this.register('prepareExecute', passthrough('prepareExecute'));\n this.register('ledgerApi', passthrough('ledgerApi'));\n }\n}\n","/**\n * Async Wallet Handling\n *\n * CIP-0103 async wallet extensions allow methods like `connect` and\n * `prepareExecute` to return a `{ userUrl }` instead of completing\n * synchronously. The user must visit the URL (e.g., mobile wallet\n * approval screen), and the wallet provider emits an event when the\n * operation completes.\n *\n * This module provides helpers that abstract the wait-for-event pattern\n * so the Provider implementation can offer a unified surface to dApps.\n */\n\nimport type {\n CIP0103Provider,\n CIP0103ConnectResult,\n CIP0103TxChangedEvent,\n CIP0103TxStatus,\n} from '@partylayer/core';\nimport { CIP0103_EVENTS } from '@partylayer/core';\nimport { ProviderRpcError, JSON_RPC_ERRORS } from './errors';\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface AsyncConnectOptions {\n /** Timeout for waiting for the async connect event (ms) */\n timeoutMs?: number;\n /** Callback when userUrl is available (for UI to redirect / show QR) */\n onUserUrl?: (url: string) => void;\n}\n\nexport interface AsyncPrepareExecuteOptions {\n timeoutMs?: number;\n onUserUrl?: (url: string) => void;\n}\n\n// ─── Async Connect ──────────────────────────────────────────────────────────\n\n/**\n * Handle an async connect flow:\n *\n * 1. If connectResult is already isConnected (sync wallet), return immediately.\n * 2. If connectResult has userUrl, invoke onUserUrl callback for UI.\n * 3. Wait for 'connected' event from the wallet provider.\n * 4. Return the final ConnectResult.\n */\nexport async function handleAsyncConnect(\n walletProvider: CIP0103Provider,\n connectResult: CIP0103ConnectResult,\n options: AsyncConnectOptions = {},\n): Promise<CIP0103ConnectResult> {\n // Sync wallet — already connected\n if (connectResult.isConnected && !connectResult.userUrl) {\n return connectResult;\n }\n\n // Notify UI of the userUrl\n if (connectResult.userUrl) {\n options.onUserUrl?.(connectResult.userUrl);\n }\n\n const timeoutMs = options.timeoutMs ?? 300_000; // 5-minute default\n\n return new Promise<CIP0103ConnectResult>((resolve, reject) => {\n let settled = false;\n\n const timer = setTimeout(() => {\n if (!settled) {\n settled = true;\n walletProvider.removeListener(CIP0103_EVENTS.CONNECTED, onConnected);\n reject(\n new ProviderRpcError(\n 'Async connect timed out',\n JSON_RPC_ERRORS.INVALID_INPUT,\n { timeoutMs },\n ),\n );\n }\n }, timeoutMs);\n\n const onConnected = (result: CIP0103ConnectResult) => {\n if (!settled) {\n settled = true;\n clearTimeout(timer);\n walletProvider.removeListener(CIP0103_EVENTS.CONNECTED, onConnected);\n resolve(result);\n }\n };\n\n walletProvider.on(CIP0103_EVENTS.CONNECTED, onConnected);\n });\n}\n\n// ─── Async PrepareExecute ───────────────────────────────────────────────────\n\nconst TERMINAL_TX_STATUSES: CIP0103TxStatus[] = ['executed', 'failed'];\n\n/**\n * Handle an async prepareExecute flow:\n *\n * 1. If result has userUrl, invoke onUserUrl callback for UI.\n * 2. Wait for 'txChanged' event with matching commandId.\n * 3. Return when txChanged reaches a terminal state (executed / failed).\n */\nexport async function handleAsyncPrepareExecute(\n walletProvider: CIP0103Provider,\n commandId: string,\n userUrl: string | undefined,\n options: AsyncPrepareExecuteOptions = {},\n): Promise<CIP0103TxChangedEvent> {\n if (userUrl) {\n options.onUserUrl?.(userUrl);\n }\n\n const timeoutMs = options.timeoutMs ?? 300_000;\n\n return new Promise<CIP0103TxChangedEvent>((resolve, reject) => {\n let settled = false;\n\n const timer = setTimeout(() => {\n if (!settled) {\n settled = true;\n walletProvider.removeListener(CIP0103_EVENTS.TX_CHANGED, onTxChanged);\n reject(\n new ProviderRpcError(\n 'Async prepareExecute timed out',\n JSON_RPC_ERRORS.INVALID_INPUT,\n { commandId, timeoutMs },\n ),\n );\n }\n }, timeoutMs);\n\n const onTxChanged = (event: CIP0103TxChangedEvent) => {\n // Ignore events for other commands\n if (event.commandId !== commandId) return;\n\n if (TERMINAL_TX_STATUSES.includes(event.status)) {\n if (!settled) {\n settled = true;\n clearTimeout(timer);\n walletProvider.removeListener(\n CIP0103_EVENTS.TX_CHANGED,\n onTxChanged,\n );\n\n if (event.status === 'failed') {\n reject(\n new ProviderRpcError(\n 'Transaction failed',\n JSON_RPC_ERRORS.TRANSACTION_REJECTED,\n { commandId },\n ),\n );\n } else {\n resolve(event);\n }\n }\n }\n };\n\n walletProvider.on(CIP0103_EVENTS.TX_CHANGED, onTxChanged);\n });\n}\n","/**\n * PartyLayerProvider — CIP-0103 Native Provider Implementation\n *\n * This is the core Provider class. It wraps a single native CIP-0103\n * wallet provider and adds:\n *\n * - Method routing with orchestrated overrides (connect, disconnect, etc.)\n * - Event forwarding from the native wallet to the dApp\n * - Async wallet support (userUrl flows)\n * - Error normalization to ProviderRpcError\n * - Forward compatibility for unknown methods and events\n *\n * IMPORTANT: No wallet-specific logic lives here. The Provider is purely\n * a router and normalizer.\n */\n\nimport type {\n CIP0103Provider,\n CIP0103RequestPayload,\n CIP0103EventListener,\n CIP0103ConnectResult,\n CIP0103StatusEvent,\n} from '@partylayer/core';\nimport { CIP0103_EVENTS } from '@partylayer/core';\nimport { CIP0103EventBus } from './event-bus';\nimport { MethodRouter } from './method-router';\nimport { handleAsyncConnect } from './async-wallet';\nimport type { DiscoveredProvider } from './discovery';\n\n// ─── Configuration ──────────────────────────────────────────────────────────\n\nexport interface PartyLayerProviderOptions {\n /** Discovered wallet provider to wrap */\n walletProvider?: DiscoveredProvider;\n /** Timeout for async operations (ms). Default 300_000 (5 min). */\n asyncTimeoutMs?: number;\n /** Callback when a userUrl is available (for async wallets) */\n onUserUrl?: (url: string) => void;\n}\n\n// ─── Provider ───────────────────────────────────────────────────────────────\n\nexport class PartyLayerProvider implements CIP0103Provider {\n private readonly eventBus: CIP0103EventBus;\n private readonly router: MethodRouter;\n private readonly options: PartyLayerProviderOptions;\n private nativeProvider: CIP0103Provider | null;\n private connected = false;\n\n /** Event forwarders from the native provider, keyed by event name */\n private nativeForwarders = new Map<string, CIP0103EventListener>();\n\n constructor(options: PartyLayerProviderOptions = {}) {\n this.options = options;\n this.eventBus = new CIP0103EventBus();\n this.eventBus.setOwner(this);\n this.router = new MethodRouter();\n\n this.nativeProvider = options.walletProvider?.provider ?? null;\n\n if (this.nativeProvider) {\n this.router.setWalletProvider(this.nativeProvider);\n this.forwardNativeEvents();\n }\n\n // Override default passthrough handlers with orchestrated versions\n this.registerOrchestratedMethods();\n }\n\n // ─── CIP-0103 Provider Interface ─────────────────────────────────────────\n\n async request<T = unknown>(args: CIP0103RequestPayload): Promise<T> {\n return this.router.route<T>(args);\n }\n\n on<T = unknown>(\n event: string,\n listener: CIP0103EventListener<T>,\n ): this {\n this.eventBus.on(event, listener);\n return this;\n }\n\n emit<T = unknown>(event: string, ...args: T[]): boolean {\n return this.eventBus.emit(event, ...args);\n }\n\n removeListener<T = unknown>(\n event: string,\n listenerToRemove: CIP0103EventListener<T>,\n ): this {\n this.eventBus.removeListener(event, listenerToRemove);\n return this;\n }\n\n // ─── Public Management ────────────────────────────────────────────────────\n\n /** Whether the provider is currently in a connected state */\n get isConnected(): boolean {\n return this.connected;\n }\n\n /** Switch the underlying wallet provider (e.g. user selects a different wallet) */\n setWalletProvider(discovered: DiscoveredProvider): void {\n this.unforwardNativeEvents();\n\n this.nativeProvider = discovered.provider;\n this.router.setWalletProvider(this.nativeProvider);\n this.forwardNativeEvents();\n }\n\n /** Get the currently attached native provider (if any) */\n getNativeProvider(): CIP0103Provider | null {\n return this.nativeProvider;\n }\n\n /** Tear down: unsubscribe all events and release the native provider */\n destroy(): void {\n this.unforwardNativeEvents();\n this.eventBus.removeAllListeners();\n this.nativeProvider = null;\n this.router.setWalletProvider(null);\n this.connected = false;\n }\n\n // ─── Orchestrated Method Overrides ────────────────────────────────────────\n\n private registerOrchestratedMethods(): void {\n // connect: handle async wallets, emit statusChanged\n this.router.register<CIP0103ConnectResult>(\n 'connect',\n async (wp, params) => {\n const result = await wp.request<CIP0103ConnectResult>({\n method: 'connect',\n params,\n });\n\n // Handle async wallet flow (userUrl returned, not yet connected)\n if (result.userUrl && !result.isConnected) {\n const final = await handleAsyncConnect(wp, result, {\n timeoutMs: this.options.asyncTimeoutMs,\n onUserUrl: this.options.onUserUrl,\n });\n this.connected = final.isConnected;\n this.emitStatusChanged();\n return final;\n }\n\n this.connected = result.isConnected;\n this.emitStatusChanged();\n return result;\n },\n );\n\n // disconnect: update state, emit statusChanged\n this.router.register<void>('disconnect', async (wp, params) => {\n await wp.request<void>({ method: 'disconnect', params });\n this.connected = false;\n this.emitStatusChanged();\n });\n\n // isConnected: can work without a wallet provider\n this.router.register<CIP0103ConnectResult>(\n 'isConnected',\n async (wp, params) => {\n if (!wp) {\n return {\n isConnected: false,\n reason: 'No wallet provider connected',\n };\n }\n return wp.request<CIP0103ConnectResult>({\n method: 'isConnected',\n params,\n });\n },\n );\n\n // prepareExecute: the wallet provider MUST emit txChanged per spec.\n // We forward those events through our event bus (via forwardNativeEvents).\n // This handler just passes through to the wallet.\n this.router.register('prepareExecute', async (wp, params) => {\n return wp.request({ method: 'prepareExecute', params });\n });\n }\n\n // ─── Native Event Forwarding ──────────────────────────────────────────────\n\n private forwardNativeEvents(): void {\n if (!this.nativeProvider) return;\n\n const eventsToForward = [\n CIP0103_EVENTS.STATUS_CHANGED,\n CIP0103_EVENTS.ACCOUNTS_CHANGED,\n CIP0103_EVENTS.TX_CHANGED,\n CIP0103_EVENTS.CONNECTED,\n ];\n\n for (const event of eventsToForward) {\n const forwarder: CIP0103EventListener = (...args: unknown[]) => {\n this.eventBus.emit(event, ...args);\n };\n this.nativeForwarders.set(event, forwarder);\n this.nativeProvider.on(event, forwarder);\n }\n }\n\n private unforwardNativeEvents(): void {\n if (!this.nativeProvider) return;\n for (const [event, forwarder] of this.nativeForwarders) {\n this.nativeProvider.removeListener(event, forwarder);\n }\n this.nativeForwarders.clear();\n }\n\n // ─── Helpers ──────────────────────────────────────────────────────────────\n\n /** Emit statusChanged by querying the current wallet provider status */\n private async emitStatusChanged(): Promise<void> {\n if (!this.nativeProvider) return;\n try {\n const status = await this.nativeProvider.request<CIP0103StatusEvent>({\n method: 'status',\n });\n this.eventBus.emit(CIP0103_EVENTS.STATUS_CHANGED, status);\n } catch {\n // Best-effort: status emission should not break the connect flow\n }\n }\n}\n","/**\n * CAIP-2 Network Identity Utilities\n *\n * All CIP-0103 network identifiers use CAIP-2 format: \"namespace:reference\"\n * e.g. \"canton:da-mainnet\", \"canton:da-devnet\"\n *\n * Reference: https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md\n */\n\nimport type { CIP0103Network } from '@partylayer/core';\n\n// ─── Well-known Canton CAIP-2 Network IDs ───────────────────────────────────\n\nexport const CANTON_NETWORKS: Record<string, string> = {\n mainnet: 'canton:da-mainnet',\n testnet: 'canton:da-testnet',\n devnet: 'canton:da-devnet',\n local: 'canton:da-local',\n};\n\n// ─── Reverse lookup ─────────────────────────────────────────────────────────\n\nconst CAIP2_TO_SHORT: Record<string, string> = Object.fromEntries(\n Object.entries(CANTON_NETWORKS).map(([short, full]) => [full, short]),\n);\n\n/**\n * Convert a legacy PartyLayer NetworkId (e.g. \"devnet\") or already-CAIP-2\n * string to a CIP-0103 Network object.\n *\n * @throws {Error} if the resulting network ID is not valid CAIP-2\n */\nexport function toCAIP2Network(networkId: string): CIP0103Network {\n let result: string;\n\n if (networkId.includes(':')) {\n // Already CAIP-2 format\n result = networkId;\n } else {\n // Map well-known short names\n const caip2 = CANTON_NETWORKS[networkId];\n result = caip2 ?? `canton:${networkId}`;\n }\n\n if (!isValidCAIP2(result)) {\n throw new Error(\n `Invalid CAIP-2 network identifier: \"${result}\". Expected format: \"namespace:reference\"`,\n );\n }\n\n return { networkId: result };\n}\n\n/**\n * Extract the short network name from a CAIP-2 ID.\n * Returns the original string if no reverse mapping exists.\n */\nexport function fromCAIP2Network(caip2: string): string {\n const short = CAIP2_TO_SHORT[caip2];\n if (short) return short;\n\n // Extract reference part after ':'\n const colonIndex = caip2.indexOf(':');\n return colonIndex >= 0 ? caip2.slice(colonIndex + 1) : caip2;\n}\n\n/**\n * Validate that a string conforms to CAIP-2 format.\n *\n * CAIP-2 format: namespace:reference\n * - namespace: [-a-z0-9]{3,8}\n * - reference: [-_a-zA-Z0-9]{1,32}\n */\nexport function isValidCAIP2(networkId: string): boolean {\n return /^[-a-z0-9]{3,8}:[-_a-zA-Z0-9]{1,32}$/.test(networkId);\n}\n","/**\n * PartyLayerClient → CIP-0103 Provider Bridge\n *\n * Creates a CIP-0103-compliant Provider backed by an existing\n * PartyLayerClient instance. This is the backward-compatibility path:\n * existing dApps using PartyLayerClient can obtain a standard Provider\n * without rewiring their wallet adapter stack.\n *\n * Usage:\n * const provider = createProviderBridge(client);\n * // or (added to PartyLayerClient):\n * const provider = client.asProvider();\n */\n\nimport type {\n CIP0103Provider,\n CIP0103RequestPayload,\n CIP0103RequestParams,\n CIP0103EventListener,\n CIP0103ConnectResult,\n CIP0103StatusEvent,\n CIP0103Account,\n CIP0103Network,\n CIP0103TxChangedEvent,\n CIP0103TxStatus,\n CIP0103LedgerApiResponse,\n} from '@partylayer/core';\nimport { CIP0103_EVENTS } from '@partylayer/core';\nimport { CIP0103EventBus } from './event-bus';\nimport { unsupportedMethod, disconnected } from './errors';\nimport { toProviderRpcError } from './error-map';\nimport { toCAIP2Network } from './network';\n\n/** Injected at build time by tsup from package.json version */\ndeclare const __PROVIDER_VERSION__: string;\nconst PROVIDER_VERSION = typeof __PROVIDER_VERSION__ !== 'undefined'\n ? __PROVIDER_VERSION__\n : '0.1.0';\n\n// ─── Bridge Client Interface ────────────────────────────────────────────────\n\n/**\n * Minimal interface for the PartyLayerClient consumed by the bridge.\n * Using an interface avoids importing the full SDK (prevents circular deps).\n */\nexport interface BridgeableClient {\n connect(options?: unknown): Promise<{\n sessionId: unknown;\n walletId: unknown;\n partyId: unknown;\n network: string;\n expiresAt?: number;\n capabilitiesSnapshot?: string[];\n }>;\n disconnect(): Promise<void>;\n getActiveSession(): Promise<{\n sessionId: unknown;\n walletId: unknown;\n partyId: unknown;\n network: string;\n expiresAt?: number;\n capabilitiesSnapshot?: string[];\n } | null>;\n signMessage(params: {\n message: string;\n nonce?: string;\n domain?: string;\n }): Promise<{ signature: unknown }>;\n signTransaction(params: { tx: unknown }): Promise<{\n transactionHash: unknown;\n signedTx?: unknown;\n partyId?: unknown;\n }>;\n submitTransaction(params: {\n signedTx: unknown;\n }): Promise<{\n transactionHash: unknown;\n submittedAt?: number;\n commandId?: string;\n updateId?: string;\n }>;\n ledgerApi?(params: {\n requestMethod: string;\n resource: string;\n body?: string;\n }): Promise<{ response: string }>;\n getRegistryStatus(): unknown;\n on(event: string, handler: (event: unknown) => void | Promise<void>): () => void;\n}\n\n// ─── Bridge Factory ─────────────────────────────────────────────────────────\n\n/**\n * Create a CIP-0103 Provider backed by a PartyLayerClient.\n *\n * All `request()` calls are mapped to PartyLayerClient methods.\n * PartyLayer events are forwarded as CIP-0103 events.\n */\nexport function createProviderBridge(client: BridgeableClient): CIP0103Provider {\n const eventBus = new CIP0103EventBus();\n // Track commandIds that already emitted 'pending' to avoid double-emission\n const pendingEmitted = new Set<string>();\n\n const bridge: CIP0103Provider = {\n async request<T>(args: CIP0103RequestPayload): Promise<T> {\n return handleRequest(client, args, eventBus, pendingEmitted) as Promise<T>;\n },\n on<T>(event: string, listener: CIP0103EventListener<T>): CIP0103Provider {\n eventBus.on(event, listener);\n return bridge;\n },\n emit<T>(event: string, ...args: T[]): boolean {\n return eventBus.emit(event, ...args);\n },\n removeListener<T>(\n event: string,\n listener: CIP0103EventListener<T>,\n ): CIP0103Provider {\n eventBus.removeListener(event, listener);\n return bridge;\n },\n };\n\n eventBus.setOwner(bridge);\n wireEvents(client, eventBus, pendingEmitted);\n\n return bridge;\n}\n\n// ─── Request Handler ────────────────────────────────────────────────────────\n\nasync function handleRequest(\n client: BridgeableClient,\n args: CIP0103RequestPayload,\n eventBus: CIP0103EventBus,\n pendingEmitted: Set<string>,\n): Promise<unknown> {\n const { method, params } = args;\n\n try {\n switch (method) {\n case 'connect': {\n await client.connect();\n return {\n isConnected: true,\n } satisfies CIP0103ConnectResult;\n }\n\n case 'disconnect': {\n await client.disconnect();\n return undefined;\n }\n\n case 'isConnected': {\n const session = await client.getActiveSession();\n return {\n isConnected: session !== null,\n reason: session ? undefined : 'No active session',\n } satisfies CIP0103ConnectResult;\n }\n\n case 'status': {\n const session = await client.getActiveSession();\n return {\n connection: {\n isConnected: session !== null,\n },\n provider: {\n id: 'partylayer',\n version: PROVIDER_VERSION,\n providerType: 'browser',\n },\n network: session\n ? toCAIP2Network(session.network)\n : undefined,\n session: session\n ? {\n accessToken: '',\n userId: String(session.partyId),\n }\n : undefined,\n } satisfies CIP0103StatusEvent;\n }\n\n case 'getActiveNetwork': {\n const session = await client.getActiveSession();\n return toCAIP2Network(\n session?.network ?? 'devnet',\n ) satisfies CIP0103Network;\n }\n\n case 'listAccounts': {\n const session = await client.getActiveSession();\n if (!session) return [] as CIP0103Account[];\n return [\n sessionToAccount(session),\n ] satisfies CIP0103Account[];\n }\n\n case 'getPrimaryAccount': {\n const session = await client.getActiveSession();\n if (!session) throw disconnected('No active session');\n return sessionToAccount(session) satisfies CIP0103Account;\n }\n\n case 'signMessage': {\n const p = normalizeParams(params);\n const result = await client.signMessage({\n message: String(p.message ?? ''),\n nonce: p.nonce ? String(p.nonce) : undefined,\n domain: p.domain ? String(p.domain) : undefined,\n });\n return String(result.signature);\n }\n\n case 'prepareExecute': {\n const p = normalizeParams(params);\n const cmdId = `cmd_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\n\n // 1. Emit 'pending'\n pendingEmitted.add(cmdId);\n eventBus.emit<CIP0103TxChangedEvent>(CIP0103_EVENTS.TX_CHANGED, {\n status: 'pending',\n commandId: cmdId,\n } as CIP0103TxChangedEvent);\n\n // 2. Sign transaction\n try {\n const signResult = await client.signTransaction({ tx: p });\n\n // 3. Emit 'signed' with signature metadata\n const session = await client.getActiveSession();\n const partyId = String(signResult.partyId ?? session?.partyId ?? 'unknown');\n eventBus.emit<CIP0103TxChangedEvent>(CIP0103_EVENTS.TX_CHANGED, {\n status: 'signed',\n commandId: cmdId,\n payload: {\n signature: String(signResult.transactionHash),\n signedBy: partyId,\n party: partyId,\n },\n } as CIP0103TxChangedEvent);\n\n // 4. Submit transaction\n try {\n const receipt = await client.submitTransaction({\n signedTx: signResult.signedTx ?? signResult.transactionHash,\n });\n\n // 5. Emit 'executed' with real receipt data\n pendingEmitted.delete(cmdId);\n eventBus.emit<CIP0103TxChangedEvent>(CIP0103_EVENTS.TX_CHANGED, {\n status: 'executed',\n commandId: cmdId,\n payload: {\n updateId: receipt.updateId ?? receipt.commandId ?? String(receipt.transactionHash),\n completionOffset: 0,\n },\n } as CIP0103TxChangedEvent);\n } catch (submitErr) {\n pendingEmitted.delete(cmdId);\n eventBus.emit<CIP0103TxChangedEvent>(CIP0103_EVENTS.TX_CHANGED, {\n status: 'failed',\n commandId: cmdId,\n } as CIP0103TxChangedEvent);\n throw submitErr;\n }\n } catch (signErr) {\n // Only emit 'failed' if not already emitted by submit catch above\n if (pendingEmitted.has(cmdId)) {\n pendingEmitted.delete(cmdId);\n eventBus.emit<CIP0103TxChangedEvent>(CIP0103_EVENTS.TX_CHANGED, {\n status: 'failed',\n commandId: cmdId,\n } as CIP0103TxChangedEvent);\n }\n throw signErr;\n }\n\n return undefined;\n }\n\n case 'ledgerApi': {\n if (!client.ledgerApi) {\n throw unsupportedMethod('ledgerApi');\n }\n const p = normalizeParams(params);\n const result = await client.ledgerApi({\n requestMethod: String(p.requestMethod ?? 'GET') as 'GET' | 'POST' | 'PUT' | 'DELETE',\n resource: String(p.resource ?? ''),\n body: p.body ? String(p.body) : undefined,\n });\n return result satisfies CIP0103LedgerApiResponse;\n }\n\n default:\n throw unsupportedMethod(method);\n }\n } catch (err) {\n throw toProviderRpcError(err);\n }\n}\n\n// ─── Event Wiring ───────────────────────────────────────────────────────────\n\n/**\n * Wire PartyLayer SDK events to CIP-0103 events.\n *\n * Direction: PartyLayerClient → CIP-0103 Provider (one-way only).\n * The bridge does NOT inject CIP-0103 events back into the client,\n * preventing circular event loops.\n */\nfunction wireEvents(\n client: BridgeableClient,\n eventBus: CIP0103EventBus,\n pendingEmitted: Set<string>,\n): void {\n // session:connected → statusChanged + accountsChanged\n client.on('session:connected', (event: unknown) => {\n const e = event as { type: string; session: BridgeableClient extends { getActiveSession(): Promise<infer S> } ? NonNullable<S> : never };\n if (!e || typeof e !== 'object' || !('session' in e)) return;\n const session = (e as { session: { partyId: unknown; network: string; expiresAt?: number } }).session;\n\n eventBus.emit(CIP0103_EVENTS.STATUS_CHANGED, {\n connection: { isConnected: true },\n provider: {\n id: 'partylayer',\n version: PROVIDER_VERSION,\n providerType: 'browser',\n },\n network: toCAIP2Network(session.network),\n session: {\n accessToken: '',\n userId: String(session.partyId),\n },\n } satisfies CIP0103StatusEvent);\n\n eventBus.emit(CIP0103_EVENTS.ACCOUNTS_CHANGED, [\n {\n primary: true,\n partyId: String(session.partyId),\n status: 'allocated' as const,\n hint: '',\n publicKey: '',\n namespace: '',\n networkId: toCAIP2Network(session.network).networkId,\n signingProviderId: '',\n },\n ] satisfies CIP0103Account[]);\n\n // Emit CIP-0103 'connected' event (async wallet completion signal)\n eventBus.emit(CIP0103_EVENTS.CONNECTED, {\n isConnected: true,\n } satisfies CIP0103ConnectResult);\n });\n\n // session:disconnected → statusChanged\n client.on('session:disconnected', () => {\n eventBus.emit(CIP0103_EVENTS.STATUS_CHANGED, {\n connection: { isConnected: false },\n provider: {\n id: 'partylayer',\n version: PROVIDER_VERSION,\n providerType: 'browser',\n },\n } satisfies CIP0103StatusEvent);\n });\n\n // tx:status → txChanged\n client.on('tx:status', (event: unknown) => {\n const e = event as {\n type: string;\n status: string;\n txId: unknown;\n raw?: unknown;\n };\n if (!e || typeof e !== 'object' || !('status' in e)) return;\n\n const statusMap: Record<string, CIP0103TxStatus> = {\n pending: 'pending',\n submitted: 'pending',\n signed: 'signed',\n committed: 'executed',\n rejected: 'failed',\n failed: 'failed',\n };\n\n const mappedStatus = statusMap[e.status] ?? 'pending';\n const commandId = String(e.txId);\n\n // Deduplicate: skip 'pending' if already emitted by prepareExecute handler\n if (mappedStatus === 'pending' && pendingEmitted.has(commandId)) {\n return;\n }\n\n // Clean up dedup tracking on terminal states\n if (mappedStatus === 'executed' || mappedStatus === 'failed') {\n pendingEmitted.delete(commandId);\n }\n\n // Build spec-compliant txChanged payload per CIP-0103 discriminated union\n let txEvent: CIP0103TxChangedEvent;\n switch (mappedStatus) {\n case 'signed':\n txEvent = {\n status: 'signed',\n commandId,\n payload: {\n signature: '',\n signedBy: '',\n party: '',\n },\n };\n break;\n case 'executed': {\n const raw = e.raw as { updateId?: string; commandId?: string } | undefined;\n txEvent = {\n status: 'executed',\n commandId,\n payload: {\n updateId: raw?.updateId ?? raw?.commandId ?? commandId,\n completionOffset: 0,\n },\n };\n break;\n }\n case 'failed':\n txEvent = { status: 'failed', commandId };\n break;\n default:\n txEvent = { status: 'pending', commandId };\n break;\n }\n\n eventBus.emit<CIP0103TxChangedEvent>(CIP0103_EVENTS.TX_CHANGED, txEvent);\n });\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nfunction normalizeParams(\n params?: CIP0103RequestParams,\n): Record<string, unknown> {\n if (!params) return {};\n if (Array.isArray(params)) return (params[0] as Record<string, unknown>) ?? {};\n return params;\n}\n\nfunction sessionToAccount(session: {\n partyId: unknown;\n network: string;\n}): CIP0103Account {\n return {\n primary: true,\n partyId: String(session.partyId),\n status: 'allocated',\n hint: '',\n publicKey: '',\n namespace: '',\n networkId: toCAIP2Network(session.network).networkId,\n signingProviderId: '',\n };\n}\n","/**\n * CIP-0103 Wallet Discovery\n *\n * Discovers CIP-0103-compliant wallet Providers from the global scope.\n * Wallet-agnostic: no hardcoded wallet logic, only duck-type checking\n * for the Provider interface shape.\n */\n\nimport type { CIP0103Provider } from '@partylayer/core';\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\n/** Metadata about a discovered CIP-0103 wallet provider */\nexport interface DiscoveredProvider {\n /** Identifier (e.g. \"canton.console\", \"consoleWallet\") */\n id: string;\n /** The native CIP-0103 Provider instance */\n provider: CIP0103Provider;\n /** How it was discovered */\n source: 'injected' | 'registry';\n /** Whether the provider supports async flows (userUrl) */\n isAsync?: boolean;\n /** Display name (if discoverable from status) */\n name?: string;\n}\n\n// ─── Well-known injection paths ─────────────────────────────────────────────\n\n/**\n * Well-known window property paths where Canton wallet providers\n * may inject themselves.\n *\n * This list is intentionally kept small and generic. New wallets\n * that follow the `window.canton.<wallet>` convention are discovered\n * automatically via namespace scanning.\n */\nconst KNOWN_INJECTION_PATHS = [\n 'canton',\n 'cantonWallet',\n 'consoleWallet',\n 'splice',\n] as const;\n\n// ─── Duck-type check ────────────────────────────────────────────────────────\n\n/**\n * Check if an object implements the CIP-0103 Provider interface.\n *\n * This is a structural (duck-type) check — it verifies the presence of\n * the four required methods without checking implementation correctness.\n */\nexport function isCIP0103Provider(obj: unknown): obj is CIP0103Provider {\n if (typeof obj !== 'object' || obj === null) return false;\n const p = obj as Record<string, unknown>;\n return (\n typeof p.request === 'function' &&\n typeof p.on === 'function' &&\n typeof p.emit === 'function' &&\n typeof p.removeListener === 'function'\n );\n}\n\n// ─── Discovery ──────────────────────────────────────────────────────────────\n\n/**\n * Discover all injected CIP-0103 providers from the global scope.\n *\n * Scans well-known window paths and their sub-properties for objects\n * that implement the Provider interface.\n */\nexport function discoverInjectedProviders(): DiscoveredProvider[] {\n if (typeof window === 'undefined') return [];\n\n const discovered: DiscoveredProvider[] = [];\n const seen = new Set<CIP0103Provider>();\n const win = window as unknown as Record<string, unknown>;\n\n for (const path of KNOWN_INJECTION_PATHS) {\n const candidate = win[path];\n if (candidate === undefined || candidate === null) continue;\n\n // Direct provider at top level (e.g., window.consoleWallet)\n if (isCIP0103Provider(candidate) && !seen.has(candidate)) {\n seen.add(candidate);\n discovered.push({\n id: path,\n provider: candidate,\n source: 'injected',\n });\n continue;\n }\n\n // Namespace object containing sub-providers\n // (e.g., window.canton.console, window.canton.loop)\n if (typeof candidate === 'object') {\n for (const [key, value] of Object.entries(\n candidate as Record<string, unknown>,\n )) {\n if (isCIP0103Provider(value) && !seen.has(value)) {\n seen.add(value);\n discovered.push({\n id: `${path}.${key}`,\n provider: value,\n source: 'injected',\n });\n }\n }\n }\n }\n\n return discovered;\n}\n\n/**\n * Wait for a specific provider to be injected (with timeout).\n *\n * Extensions may inject their provider after page load. This function\n * polls at 100ms intervals until the provider appears or the timeout\n * expires.\n *\n * @param id - Provider id to match (exact or suffix match)\n * @param timeoutMs - Maximum wait time (default 3000ms)\n */\nexport function waitForProvider(\n id: string,\n timeoutMs = 3000,\n): Promise<DiscoveredProvider | null> {\n return new Promise((resolve) => {\n // Check immediately\n const match = findById(id);\n if (match) {\n resolve(match);\n return;\n }\n\n const start = Date.now();\n const interval = setInterval(() => {\n const match = findById(id);\n if (match) {\n clearInterval(interval);\n resolve(match);\n return;\n }\n if (Date.now() - start >= timeoutMs) {\n clearInterval(interval);\n resolve(null);\n }\n }, 100);\n });\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nfunction findById(id: string): DiscoveredProvider | undefined {\n return discoverInjectedProviders().find(\n (p) => p.id === id || p.id.endsWith(`.${id}`),\n );\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@partylayer/provider",
3
+ "version": "0.1.1",
4
+ "description": "CIP-0103 native Provider implementation for PartyLayer",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "keywords": [
19
+ "canton",
20
+ "wallet",
21
+ "cip-0103",
22
+ "provider"
23
+ ],
24
+ "author": "PartyLayer Contributors",
25
+ "license": "MIT",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/PartyLayer/PartyLayer.git",
29
+ "directory": "packages/provider"
30
+ },
31
+ "homepage": "https://github.com/PartyLayer/PartyLayer#readme",
32
+ "bugs": {
33
+ "url": "https://github.com/PartyLayer/PartyLayer/issues"
34
+ },
35
+ "dependencies": {
36
+ "@partylayer/core": "0.2.4"
37
+ },
38
+ "devDependencies": {
39
+ "typescript": "^5.3.3",
40
+ "tsup": "^8.0.0",
41
+ "vitest": "^1.2.0",
42
+ "@vitest/ui": "^1.2.0"
43
+ },
44
+ "scripts": {
45
+ "build": "tsup",
46
+ "clean": "rm -rf dist",
47
+ "lint": "eslint src --ext .ts",
48
+ "typecheck": "tsc --noEmit",
49
+ "test": "vitest"
50
+ }
51
+ }