@partylayer/sdk 0.2.5 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config.ts","../src/adapters.ts","../src/builtin-adapters.ts","../src/client.ts"],"names":["adapter","OriginNotAllowedError"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Configuration types for PartyLayer SDK\n */\n\nimport type { NetworkId, WalletId, WalletAdapter } from '@partylayer/core';\nimport type {\n StorageAdapter,\n CryptoAdapter,\n TelemetryAdapter,\n LoggerAdapter,\n} from '@partylayer/core';\n\n/**\n * Default registry URL for PartyLayer\n * This points to the official registry endpoint.\n */\nexport const DEFAULT_REGISTRY_URL = 'https://registry.partylayer.xyz';\n\n/**\n * Adapter class type (for instantiation)\n */\nexport type AdapterClass = new () => WalletAdapter;\n\n/**\n * PartyLayer configuration\n */\nexport interface PartyLayerConfig {\n /** \n * Registry URL (optional)\n * @default 'https://registry.partylayer.xyz/v1/wallets.json'\n */\n registryUrl?: string;\n /** Registry channel */\n channel?: 'stable' | 'beta';\n /** Default network */\n network: NetworkId;\n /** \n * Wallet adapters to register (OPTIONAL)\n * \n * By default, ALL built-in adapters are automatically registered:\n * - ConsoleAdapter (Console Wallet - browser extension)\n * - LoopAdapter (5N Loop - QR code / popup)\n * - Cantor8Adapter (Cantor8 - deep link transport)\n * \n * Note: BronAdapter requires OAuth config and is NOT included by default.\n * \n * Only provide this if you want to customize which adapters to use.\n * \n * @example\n * ```typescript\n * // Default: all adapters (recommended)\n * const client = createPartyLayer({\n * network: 'devnet',\n * app: { name: 'My dApp' },\n * // adapters not specified = all built-in adapters (Console, Loop, Cantor8)\n * });\n * \n * // Custom: only specific adapters\n * import { ConsoleAdapter } from '@partylayer/sdk';\n * const client = createPartyLayer({\n * adapters: [new ConsoleAdapter()], // Only Console Wallet\n * // ...\n * });\n * \n * // With Bron (enterprise wallet with OAuth)\n * import { BronAdapter, getBuiltinAdapters } from '@partylayer/sdk';\n * const client = createPartyLayer({\n * adapters: [\n * ...getBuiltinAdapters(),\n * new BronAdapter({ auth: {...}, api: {...} }),\n * ],\n * // ...\n * });\n * ```\n */\n adapters?: (WalletAdapter | AdapterClass)[];\n /** Storage adapter (default: browser localStorage-based encrypted) */\n storage?: StorageAdapter;\n /** Crypto adapter (default: WebCrypto) */\n crypto?: CryptoAdapter;\n /** Registry public keys for signature verification (ed25519) */\n registryPublicKeys?: string[];\n /** Telemetry adapter (optional) */\n telemetry?: TelemetryAdapter;\n /** Logger adapter (optional) */\n logger?: LoggerAdapter;\n /** Application metadata */\n app: {\n /** Application name */\n name: string;\n /** Origin (for origin binding checks, defaults to window.location.origin) */\n origin?: string;\n };\n}\n\n/**\n * Connect options\n */\nexport interface ConnectOptions {\n /** Specific wallet ID to connect to */\n walletId?: WalletId;\n /** Prefer installed wallets */\n preferInstalled?: boolean;\n /** Allow only specific wallets */\n allowWallets?: WalletId[];\n /** Required capabilities */\n requiredCapabilities?: string[];\n /** Timeout in milliseconds */\n timeoutMs?: number;\n}\n\n/**\n * Wallet filter options\n */\nexport interface WalletFilter {\n /** Required capabilities */\n requiredCapabilities?: string[];\n /** Include experimental wallets */\n includeExperimental?: boolean;\n}\n","/**\n * Default adapter implementations\n */\n\nimport type {\n StorageAdapter,\n CryptoAdapter,\n LoggerAdapter,\n TelemetryAdapter,\n} from '@partylayer/core';\n\n/**\n * Default logger (console-based)\n */\nexport class DefaultLogger implements LoggerAdapter {\n debug(message: string, ...args: unknown[]): void {\n if (typeof console !== 'undefined' && console.debug) {\n console.debug(`[PartyLayer] ${message}`, ...args);\n }\n }\n\n info(message: string, ...args: unknown[]): void {\n if (typeof console !== 'undefined' && console.info) {\n console.info(`[PartyLayer] ${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: unknown[]): void {\n if (typeof console !== 'undefined' && console.warn) {\n console.warn(`[PartyLayer] ${message}`, ...args);\n }\n }\n\n error(message: string, error?: unknown, ...args: unknown[]): void {\n if (typeof console !== 'undefined' && console.error) {\n console.error(`[PartyLayer] ${message}`, error, ...args);\n }\n }\n}\n\n/**\n * Default crypto adapter (Web Crypto API)\n */\nexport class DefaultCrypto implements CryptoAdapter {\n private async getKey(origin: string): Promise<CryptoKey> {\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n throw new Error('Web Crypto API not available');\n }\n\n const encoder = new TextEncoder();\n const data = encoder.encode(origin);\n const hash = await crypto.subtle.digest('SHA-256', data);\n return crypto.subtle.importKey(\n 'raw',\n hash.slice(0, 32),\n { name: 'AES-GCM' },\n false,\n ['encrypt', 'decrypt']\n );\n }\n\n async encrypt(data: string, key: string): Promise<string> {\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n // Fallback to base64\n return btoa(data);\n }\n\n try {\n const cryptoKey = await this.getKey(key);\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const encoder = new TextEncoder();\n const encoded = encoder.encode(data);\n\n const encrypted = await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv },\n cryptoKey,\n encoded\n );\n\n const combined = new Uint8Array(iv.length + encrypted.byteLength);\n combined.set(iv);\n combined.set(new Uint8Array(encrypted), iv.length);\n\n return btoa(String.fromCharCode(...combined));\n } catch {\n return btoa(data);\n }\n }\n\n async decrypt(encrypted: string, key: string): Promise<string> {\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n return atob(encrypted);\n }\n\n try {\n const cryptoKey = await this.getKey(key);\n const combined = Uint8Array.from(atob(encrypted), (c) => c.charCodeAt(0));\n\n const iv = combined.slice(0, 12);\n const data = combined.slice(12);\n\n const decrypted = await crypto.subtle.decrypt(\n { name: 'AES-GCM', iv },\n cryptoKey,\n data\n );\n\n const decoder = new TextDecoder();\n return decoder.decode(decrypted);\n } catch {\n return atob(encrypted);\n }\n }\n\n async generateKey(): Promise<string> {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n return Math.random().toString(36).substring(2, 15);\n }\n\n const array = new Uint8Array(32);\n crypto.getRandomValues(array);\n return Array.from(array, (b) => b.toString(16).padStart(2, '0')).join('');\n }\n}\n\n/**\n * Default storage adapter (localStorage-based)\n */\nexport class DefaultStorage implements StorageAdapter {\n private prefix: string;\n\n constructor(prefix = 'partylayer_') {\n this.prefix = prefix;\n }\n\n async get(key: string): Promise<string | null> {\n if (typeof window === 'undefined' || !window.localStorage) {\n return null;\n }\n\n try {\n return localStorage.getItem(`${this.prefix}${key}`);\n } catch {\n return null;\n }\n }\n\n async set(key: string, value: string): Promise<void> {\n if (typeof window === 'undefined' || !window.localStorage) {\n return;\n }\n\n try {\n localStorage.setItem(`${this.prefix}${key}`, value);\n } catch {\n // Ignore storage errors\n }\n }\n\n async remove(key: string): Promise<void> {\n if (typeof window === 'undefined' || !window.localStorage) {\n return;\n }\n\n try {\n localStorage.removeItem(`${this.prefix}${key}`);\n } catch {\n // Ignore storage errors\n }\n }\n\n async clear(): Promise<void> {\n if (typeof window === 'undefined' || !window.localStorage) {\n return;\n }\n\n try {\n const keys: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix)) {\n keys.push(key);\n }\n }\n\n for (const key of keys) {\n localStorage.removeItem(key);\n }\n } catch {\n // Ignore storage errors\n }\n }\n}\n\n/**\n * Default telemetry adapter (no-op)\n */\nexport class DefaultTelemetry implements TelemetryAdapter {\n track(_event: string, _properties?: Record<string, unknown>): void {\n // No-op\n }\n\n error(_error: Error, _properties?: Record<string, unknown>): void {\n // No-op\n }\n}\n","/**\n * Built-in wallet adapters\n * \n * These adapters are automatically registered when creating a PartyLayer client.\n * dApp developers don't need to install or configure these separately.\n */\n\nimport type { WalletAdapter } from '@partylayer/core';\nimport { ConsoleAdapter } from '@partylayer/adapter-console';\nimport { LoopAdapter } from '@partylayer/adapter-loop';\nimport { Cantor8Adapter } from '@partylayer/adapter-cantor8';\n\n// Note: BronAdapter requires OAuth config and is not included by default.\n// Import it separately: import { BronAdapter } from '@partylayer/adapter-bron';\n\n/**\n * Get all built-in adapters\n * \n * This function returns instances of all supported wallet adapters.\n * Called automatically by createPartyLayer() unless custom adapters are provided.\n * \n * Included adapters:\n * - ConsoleAdapter: Console Wallet browser extension\n * - LoopAdapter: 5N Loop mobile/web wallet\n * - Cantor8Adapter: Cantor8 wallet with deep link transport\n * \n * Note: BronAdapter is NOT included by default because it requires OAuth configuration.\n * To use Bron, install @partylayer/adapter-bron and register it manually.\n */\nexport function getBuiltinAdapters(): WalletAdapter[] {\n return [\n new ConsoleAdapter(), // Console Wallet - browser extension\n new LoopAdapter(), // 5N Loop - QR code / popup\n new Cantor8Adapter(), // Cantor8 - deep link transport\n ];\n}\n\n/**\n * Built-in adapter classes (for advanced usage)\n */\nexport { ConsoleAdapter, LoopAdapter, Cantor8Adapter };\n\n/**\n * Re-export BronAdapter for convenience (requires config)\n * \n * @example\n * ```typescript\n * import { BronAdapter } from '@partylayer/sdk';\n * \n * const client = createPartyLayer({\n * // ... config\n * adapters: [\n * ...getBuiltinAdapters(),\n * new BronAdapter({\n * auth: { clientId: '...', redirectUri: '...', ... },\n * api: { baseUrl: '...', getAccessToken: async () => '...' },\n * }),\n * ],\n * });\n * ```\n */\nexport { BronAdapter } from '@partylayer/adapter-bron';\nexport type { BronAdapterConfig, BronAuthConfig, BronApiConfig } from '@partylayer/adapter-bron';\n","/**\n * PartyLayer Client - Public API Implementation\n * \n * This is the main public API for PartyLayer SDK.\n * All dApps should use this API exclusively.\n * \n * References:\n * - Wallet Integration Guide: https://docs.digitalasset.com/integrate/devnet/index.html\n * - Signing transactions from dApps: https://docs.digitalasset.com/integrate/devnet/signing-transactions-from-dapps/index.html\n * - OpenRPC dApp API spec: https://github.com/hyperledger-labs/splice-wallet-kernel/blob/main/api-specs/openrpc-dapp-api.json\n */\n\nimport type {\n WalletId,\n SessionId,\n CapabilityKey,\n WalletInfo,\n Session,\n SignedMessage,\n SignedTransaction,\n TxReceipt,\n WalletAdapter,\n AdapterContext,\n} from '@partylayer/core';\nimport {\n toSessionId,\n WalletNotFoundError,\n CapabilityNotSupportedError,\n mapUnknownErrorToPartyLayerError,\n capabilityGuard,\n installGuard,\n} from '@partylayer/core';\nimport { RegistryClient } from '@partylayer/registry-client';\nimport type { RegistryStatus } from '@partylayer/registry-client';\nimport {\n DEFAULT_REGISTRY_URL,\n type PartyLayerConfig,\n type ConnectOptions,\n type WalletFilter,\n} from './config';\nimport type {\n PartyLayerEvent,\n EventHandler,\n} from './events';\nimport {\n DefaultLogger,\n DefaultCrypto,\n DefaultStorage,\n DefaultTelemetry,\n} from './adapters';\nimport { getBuiltinAdapters } from './builtin-adapters';\nimport type {\n SignMessageParams,\n SignTransactionParams,\n SubmitTransactionParams,\n} from '@partylayer/core';\n\n/**\n * PartyLayer Client\n * \n * Main client interface for dApps to interact with Canton wallets.\n */\nexport class PartyLayerClient {\n private config: PartyLayerConfig;\n private adapters = new Map<WalletId, WalletAdapter>();\n private eventHandlers = new Map<string, Set<EventHandler>>();\n private activeSession: Session | null = null;\n public readonly registryClient: RegistryClient; // Expose for React hooks\n private logger: import('@partylayer/core').LoggerAdapter;\n private crypto: import('@partylayer/core').CryptoAdapter;\n private storage: import('@partylayer/core').StorageAdapter;\n private telemetry?: import('@partylayer/core').TelemetryAdapter;\n private origin: string;\n\n constructor(config: PartyLayerConfig) {\n this.config = config;\n\n // Determine origin\n if (config.app.origin) {\n this.origin = config.app.origin;\n } else if (typeof window !== 'undefined') {\n this.origin = window.location.origin;\n } else {\n this.origin = 'unknown';\n }\n\n // Initialize service adapters\n this.logger = config.logger || new DefaultLogger();\n this.crypto = config.crypto || new DefaultCrypto();\n this.storage = config.storage || new DefaultStorage();\n this.telemetry = config.telemetry || new DefaultTelemetry();\n\n // Register wallet adapters\n // If no adapters provided, use all built-in adapters (Console, Loop, etc.)\n const adaptersToRegister = config.adapters ?? getBuiltinAdapters();\n \n for (const adapterOrClass of adaptersToRegister) {\n let adapter: import('@partylayer/core').WalletAdapter;\n \n // Check if it's a class (function) or instance (object)\n if (typeof adapterOrClass === 'function') {\n // It's a class - instantiate it\n adapter = new (adapterOrClass as new () => import('@partylayer/core').WalletAdapter)();\n } else {\n // It's already an instance\n adapter = adapterOrClass;\n }\n \n this.adapters.set(adapter.walletId, adapter);\n this.logger.debug('Registered wallet adapter', {\n walletId: adapter.walletId,\n name: adapter.name,\n capabilities: adapter.getCapabilities(),\n });\n }\n\n // Initialize registry client with signature verification\n this.registryClient = new RegistryClient({\n registryUrl: config.registryUrl || DEFAULT_REGISTRY_URL,\n channel: config.channel || 'stable',\n registryPublicKeys: config.registryPublicKeys,\n storage: this.storage,\n });\n\n // Emit initial registry status\n this.updateRegistryStatus();\n\n // Restore session on init\n this.restoreSession().catch((err) => {\n this.emit('error', {\n type: 'error',\n error: mapUnknownErrorToPartyLayerError(err, {\n phase: 'restore',\n }),\n });\n });\n }\n\n /**\n * Register a wallet adapter\n * \n * @internal\n * This is used internally by the SDK to register adapters.\n * In production, adapters would be auto-registered via registry.\n */\n registerAdapter(adapter: WalletAdapter): void {\n this.adapters.set(adapter.walletId, adapter);\n }\n\n /**\n * List available wallets\n */\n async listWallets(filter?: WalletFilter): Promise<WalletInfo[]> {\n try {\n // getWallets() already returns WalletInfo[]\n const allWalletInfos = await this.registryClient.getWallets();\n\n // Update registry status after successful fetch\n this.updateRegistryStatus();\n\n // Filter by capabilities\n if (filter?.requiredCapabilities) {\n return allWalletInfos.filter((walletInfo) =>\n filter.requiredCapabilities!.every((cap) =>\n walletInfo.capabilities.includes(cap as CapabilityKey)\n )\n );\n }\n\n // Filter experimental\n if (!filter?.includeExperimental) {\n return allWalletInfos.filter((walletInfo) => walletInfo.channel === 'stable');\n }\n\n return allWalletInfos;\n } catch (err) {\n // Update registry status even on error (may have fallback info)\n this.updateRegistryStatus();\n \n const error = mapUnknownErrorToPartyLayerError(err, {\n phase: 'connect',\n });\n this.emit('error', { type: 'error', error });\n throw error;\n }\n }\n\n /**\n * Connect to a wallet\n */\n async connect(options?: ConnectOptions): Promise<Session> {\n try {\n // Get available wallets\n const wallets = await this.listWallets({\n requiredCapabilities: options?.requiredCapabilities,\n includeExperimental: true,\n });\n\n // Filter by allowWallets\n let availableWallets = wallets;\n if (options?.allowWallets) {\n availableWallets = wallets.filter((w) =>\n options.allowWallets!.includes(w.walletId)\n );\n }\n\n // Prefer installed wallets\n if (options?.preferInstalled) {\n const installedWallets: WalletInfo[] = [];\n const notInstalledWallets: WalletInfo[] = [];\n\n for (const wallet of availableWallets) {\n const adapter = this.adapters.get(wallet.walletId);\n if (adapter) {\n const detect = await adapter.detectInstalled();\n if (detect.installed) {\n installedWallets.push(wallet);\n } else {\n notInstalledWallets.push(wallet);\n }\n } else {\n notInstalledWallets.push(wallet);\n }\n }\n\n availableWallets = [...installedWallets, ...notInstalledWallets];\n }\n\n // Select wallet\n let selectedWallet: WalletInfo;\n if (options?.walletId) {\n selectedWallet = availableWallets.find(\n (w) => w.walletId === options.walletId\n )!;\n if (!selectedWallet) {\n throw new WalletNotFoundError(String(options.walletId));\n }\n } else if (availableWallets.length === 0) {\n throw new WalletNotFoundError('No wallets available');\n } else {\n selectedWallet = availableWallets[0];\n }\n\n // Get adapter\n const adapter = this.adapters.get(selectedWallet.walletId);\n if (!adapter) {\n throw new WalletNotFoundError(String(selectedWallet.walletId));\n }\n\n // Check origin allowlist (if configured)\n const walletEntry = await this.registryClient.getWalletEntry(String(selectedWallet.walletId));\n if (walletEntry.originAllowlist && walletEntry.originAllowlist.length > 0) {\n if (!walletEntry.originAllowlist.includes(this.origin)) {\n const { OriginNotAllowedError } = await import('@partylayer/core');\n throw new OriginNotAllowedError(\n this.origin,\n walletEntry.originAllowlist\n );\n }\n }\n\n // Check capabilities\n if (options?.requiredCapabilities) {\n capabilityGuard(adapter, options.requiredCapabilities as CapabilityKey[]);\n }\n\n // Check installation\n await installGuard(adapter);\n\n // Create adapter context\n const ctx = this.createAdapterContext();\n\n // Connect\n // Default timeout: 2 minutes for QR code/popup based wallets\n const timeoutMs = options?.timeoutMs || 120000;\n const connectPromise = adapter.connect(ctx, {\n timeoutMs,\n partyId: undefined, // TODO: support party selection\n });\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => {\n reject(new Error(`Connection timed out after ${timeoutMs}ms - user did not complete wallet connection`));\n }, timeoutMs);\n });\n\n const result = await Promise.race([connectPromise, timeoutPromise]);\n\n // Create session\n const session: Session = {\n sessionId: toSessionId(`session_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`),\n walletId: selectedWallet.walletId,\n partyId: result.partyId,\n network: this.config.network,\n createdAt: Date.now(),\n expiresAt: result.session.expiresAt,\n origin: this.origin,\n capabilitiesSnapshot: result.capabilities,\n metadata: result.session.metadata as Record<string, string> | undefined,\n };\n\n // Persist session\n await this.persistSession(session);\n\n // Set active session\n this.activeSession = session;\n\n // Update registry status (may have changed during fetch)\n this.updateRegistryStatus();\n\n // Emit event\n this.emit('session:connected', {\n type: 'session:connected',\n session,\n });\n\n return session;\n } catch (err) {\n const timeoutMs = options?.timeoutMs || 30000;\n const error = mapUnknownErrorToPartyLayerError(err, {\n phase: 'connect',\n walletId: options?.walletId ? String(options.walletId) : undefined,\n timeoutMs,\n });\n this.emit('error', { type: 'error', error });\n throw error;\n }\n }\n\n /**\n * Disconnect from wallet\n */\n async disconnect(): Promise<void> {\n if (!this.activeSession) {\n return;\n }\n\n try {\n const adapter = this.adapters.get(this.activeSession.walletId);\n if (adapter) {\n const ctx = this.createAdapterContext();\n await adapter.disconnect(ctx, this.activeSession);\n }\n\n const sessionId = this.activeSession.sessionId;\n await this.removeSession(sessionId);\n\n this.activeSession = null;\n\n this.emit('session:disconnected', {\n type: 'session:disconnected',\n sessionId,\n });\n } catch (err) {\n const error = mapUnknownErrorToPartyLayerError(err, {\n phase: 'connect', // Use connect as default phase\n });\n this.emit('error', { type: 'error', error });\n throw error;\n }\n }\n\n /**\n * Get active session\n */\n async getActiveSession(): Promise<Session | null> {\n if (this.activeSession) {\n // Check expiration\n if (this.activeSession.expiresAt && Date.now() >= this.activeSession.expiresAt) {\n await this.disconnect();\n this.emit('session:expired', {\n type: 'session:expired',\n sessionId: this.activeSession.sessionId,\n });\n return null;\n }\n return this.activeSession;\n }\n\n // Try to restore from storage\n return this.restoreSession();\n }\n\n /**\n * Sign a message\n */\n async signMessage(params: SignMessageParams): Promise<SignedMessage> {\n const session = await this.getActiveSession();\n if (!session) {\n throw new Error('No active session');\n }\n\n const adapter = this.adapters.get(session.walletId);\n if (!adapter || !adapter.signMessage) {\n throw new CapabilityNotSupportedError(\n session.walletId,\n 'signMessage'\n );\n }\n\n try {\n const ctx = this.createAdapterContext();\n return await adapter.signMessage(ctx, session, params);\n } catch (err) {\n const error = mapUnknownErrorToPartyLayerError(err, {\n phase: 'signMessage',\n walletId: String(session.walletId),\n });\n this.emit('error', { type: 'error', error });\n throw error;\n }\n }\n\n /**\n * Sign a transaction\n */\n async signTransaction(params: SignTransactionParams): Promise<SignedTransaction> {\n const session = await this.getActiveSession();\n if (!session) {\n throw new Error('No active session');\n }\n\n const adapter = this.adapters.get(session.walletId);\n if (!adapter || !adapter.signTransaction) {\n throw new CapabilityNotSupportedError(\n session.walletId,\n 'signTransaction'\n );\n }\n\n try {\n const ctx = this.createAdapterContext();\n const result = await adapter.signTransaction(ctx, session, params);\n \n // Emit transaction status\n this.emit('tx:status', {\n type: 'tx:status',\n sessionId: session.sessionId,\n txId: result.transactionHash,\n status: 'pending',\n raw: result.signedTx,\n });\n\n return result;\n } catch (err) {\n const error = mapUnknownErrorToPartyLayerError(err, {\n phase: 'signTransaction',\n walletId: String(session.walletId),\n });\n this.emit('error', { type: 'error', error });\n throw error;\n }\n }\n\n /**\n * Submit a transaction\n */\n async submitTransaction(params: SubmitTransactionParams): Promise<TxReceipt> {\n const session = await this.getActiveSession();\n if (!session) {\n throw new Error('No active session');\n }\n\n const adapter = this.adapters.get(session.walletId);\n if (!adapter || !adapter.submitTransaction) {\n throw new CapabilityNotSupportedError(\n session.walletId,\n 'submitTransaction'\n );\n }\n\n try {\n const ctx = this.createAdapterContext();\n const result = await adapter.submitTransaction(ctx, session, params);\n\n // Emit transaction status\n this.emit('tx:status', {\n type: 'tx:status',\n sessionId: session.sessionId,\n txId: result.transactionHash,\n status: 'submitted',\n raw: result,\n });\n\n return result;\n } catch (err) {\n const error = mapUnknownErrorToPartyLayerError(err, {\n phase: 'submitTransaction',\n walletId: String(session.walletId),\n });\n this.emit('error', { type: 'error', error });\n throw error;\n }\n }\n\n /**\n * Subscribe to events\n */\n on<T extends PartyLayerEvent>(\n event: T['type'],\n handler: EventHandler<T>\n ): () => void {\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, new Set());\n }\n this.eventHandlers.get(event)!.add(handler as EventHandler);\n\n // Return unsubscribe function\n return () => {\n this.off(event, handler);\n };\n }\n\n /**\n * Unsubscribe from events\n */\n off<T extends PartyLayerEvent>(\n event: T['type'],\n handler: EventHandler<T>\n ): void {\n const handlers = this.eventHandlers.get(event);\n if (handlers) {\n handlers.delete(handler as EventHandler);\n }\n }\n\n /**\n * Destroy client and cleanup\n */\n destroy(): void {\n this.eventHandlers.clear();\n this.activeSession = null;\n }\n\n /**\n * Create adapter context\n */\n private createAdapterContext(): AdapterContext {\n return {\n appName: this.config.app.name,\n origin: this.origin,\n network: this.config.network,\n logger: this.logger,\n telemetry: this.telemetry,\n registry: {\n getWallet: async (walletId: WalletId) => {\n return this.registryClient.getWallet(String(walletId));\n },\n },\n crypto: this.crypto,\n storage: this.storage,\n timeout: (ms: number) => {\n return new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Timeout')), ms);\n });\n },\n };\n }\n\n\n /**\n * Persist session to storage\n */\n private async persistSession(session: Session): Promise<void> {\n try {\n const data = JSON.stringify(session);\n const encrypted = await this.crypto.encrypt(data, this.origin);\n await this.storage.set(`session_${session.sessionId}`, encrypted);\n } catch (err) {\n this.logger.warn('Failed to persist session', err);\n }\n }\n\n /**\n * Remove session from storage\n */\n private async removeSession(sessionId: SessionId): Promise<void> {\n try {\n await this.storage.remove(`session_${sessionId}`);\n } catch (err) {\n this.logger.warn('Failed to remove session', err);\n }\n }\n\n /**\n * Restore session from storage\n */\n private async restoreSession(): Promise<Session | null> {\n try {\n const encrypted = await this.storage.get('active_session');\n if (!encrypted) {\n return null;\n }\n\n const decrypted = await this.crypto.decrypt(encrypted, this.origin);\n const session = JSON.parse(decrypted) as Session;\n\n // Check expiration\n if (session.expiresAt && Date.now() >= session.expiresAt) {\n await this.removeSession(session.sessionId);\n return null;\n }\n\n // Check origin\n if (session.origin !== this.origin) {\n return null;\n }\n\n // Try to restore with adapter\n const adapter = this.adapters.get(session.walletId);\n if (adapter?.restore) {\n const ctx = this.createAdapterContext();\n const restored = await adapter.restore(ctx, {\n ...session,\n encrypted,\n });\n\n if (restored) {\n this.activeSession = restored;\n // Persist restored session (may have updated metadata)\n await this.persistSession(restored);\n // Emit session:connected event with reason=\"restore\"\n this.emit('session:connected', {\n type: 'session:connected',\n session: restored,\n });\n return restored;\n } else {\n // Restore failed - clear session\n await this.removeSession(session.sessionId);\n this.emit('session:expired', {\n type: 'session:expired',\n sessionId: session.sessionId,\n });\n return null;\n }\n }\n\n // If restore not supported, use stored session as-is\n // (Some adapters don't support restore but session metadata is still valid)\n this.activeSession = session;\n return session;\n } catch (err) {\n this.logger.warn('Failed to restore session', err);\n return null;\n }\n }\n\n /**\n * Update registry status and emit event\n */\n private updateRegistryStatus(): void {\n const status = this.registryClient.getStatus();\n if (status) {\n this.emit('registry:status', {\n type: 'registry:status',\n status: {\n source: status.source,\n verified: status.verified,\n channel: status.channel,\n sequence: status.sequence,\n stale: status.stale,\n fetchedAt: status.fetchedAt,\n etag: status.etag,\n error: status.error,\n },\n });\n }\n }\n\n /**\n * Get registry status\n */\n getRegistryStatus(): RegistryStatus | null {\n return this.registryClient.getStatus();\n }\n\n /**\n * Emit event to handlers\n */\n private emit<T extends PartyLayerEvent>(\n event: T['type'],\n payload: T\n ): void {\n const handlers = this.eventHandlers.get(event);\n if (handlers) {\n for (const handler of handlers) {\n try {\n handler(payload);\n } catch (err) {\n this.logger.error('Error in event handler', err);\n }\n }\n }\n }\n}\n\n/**\n * Create PartyLayer client\n * \n * This is the main entry point for dApps.\n * \n * @example\n * ```typescript\n * const client = createPartyLayer({\n * registryUrl: 'https://registry.partylayer.xyz',\n * channel: 'stable',\n * network: 'devnet',\n * app: { name: 'My dApp' }\n * });\n * \n * const session = await client.connect();\n * ```\n */\nexport function createPartyLayer(\n config: PartyLayerConfig\n): PartyLayerClient {\n return new PartyLayerClient(config);\n}\n"]}
1
+ {"version":3,"sources":["../src/config.ts","../src/adapters.ts","../src/builtin-adapters.ts","../src/metrics-telemetry.ts","../src/client.ts"],"names":["OriginNotAllowedError","createProviderBridge"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Configuration types for PartyLayer SDK\n */\n\nimport type { NetworkId, WalletId, WalletAdapter } from '@partylayer/core';\nimport type {\n StorageAdapter,\n CryptoAdapter,\n TelemetryAdapter,\n LoggerAdapter,\n} from '@partylayer/core';\n\n/**\n * Default registry URL for PartyLayer\n * This points to the official registry endpoint.\n */\nexport const DEFAULT_REGISTRY_URL = 'https://registry.partylayer.xyz';\n\n/**\n * Telemetry configuration for opt-in metrics collection\n * \n * @since 0.3.0\n */\nexport interface TelemetryConfig {\n /** \n * Enable telemetry collection\n * @default false\n */\n enabled: boolean;\n \n /** \n * Metrics backend endpoint URL\n * If not provided, metrics are collected but not sent\n */\n endpoint?: string;\n \n /**\n * Sampling rate (0.0 to 1.0)\n * @default 1.0 (100% of events)\n */\n sampleRate?: number;\n \n /**\n * Application identifier (will be hashed for privacy)\n * Used to calculate Monthly Active dApps (MAD)\n */\n appId?: string;\n \n /**\n * Include hashed origin in metrics\n * @default false\n */\n includeOrigin?: boolean;\n \n /**\n * Number of events to buffer before sending\n * @default 10\n */\n batchSize?: number;\n \n /**\n * Interval to flush metrics in milliseconds\n * @default 30000 (30 seconds)\n */\n flushIntervalMs?: number;\n \n /**\n * Network to include in metrics\n * If not provided, uses the SDK's configured network\n */\n network?: NetworkId;\n}\n\n/**\n * Adapter class type (for instantiation)\n */\nexport type AdapterClass = new () => WalletAdapter;\n\n/**\n * PartyLayer configuration\n */\nexport interface PartyLayerConfig {\n /** \n * Registry URL (optional)\n * @default 'https://registry.partylayer.xyz/v1/wallets.json'\n */\n registryUrl?: string;\n /** Registry channel */\n channel?: 'stable' | 'beta';\n /** Default network */\n network: NetworkId;\n /** \n * Wallet adapters to register (OPTIONAL)\n * \n * By default, ALL built-in adapters are automatically registered:\n * - ConsoleAdapter (Console Wallet - browser extension)\n * - LoopAdapter (5N Loop - QR code / popup)\n * - Cantor8Adapter (Cantor8 - deep link transport)\n * \n * Note: BronAdapter requires OAuth config and is NOT included by default.\n * \n * Only provide this if you want to customize which adapters to use.\n * \n * @example\n * ```typescript\n * // Default: all adapters (recommended)\n * const client = createPartyLayer({\n * network: 'devnet',\n * app: { name: 'My dApp' },\n * // adapters not specified = all built-in adapters (Console, Loop, Cantor8)\n * });\n * \n * // Custom: only specific adapters\n * import { ConsoleAdapter } from '@partylayer/sdk';\n * const client = createPartyLayer({\n * adapters: [new ConsoleAdapter()], // Only Console Wallet\n * // ...\n * });\n * \n * // With Bron (enterprise wallet with OAuth)\n * import { BronAdapter, getBuiltinAdapters } from '@partylayer/sdk';\n * const client = createPartyLayer({\n * adapters: [\n * ...getBuiltinAdapters(),\n * new BronAdapter({ auth: {...}, api: {...} }),\n * ],\n * // ...\n * });\n * ```\n */\n adapters?: (WalletAdapter | AdapterClass)[];\n /** Storage adapter (default: browser localStorage-based encrypted) */\n storage?: StorageAdapter;\n /** Crypto adapter (default: WebCrypto) */\n crypto?: CryptoAdapter;\n /** Registry public keys for signature verification (ed25519) */\n registryPublicKeys?: string[];\n /** \n * Telemetry configuration or adapter\n * \n * Can be either:\n * - TelemetryConfig object for built-in metrics collection\n * - TelemetryAdapter instance for custom telemetry\n * \n * @default undefined (telemetry disabled)\n * @since 0.3.0 - Added TelemetryConfig support\n */\n telemetry?: TelemetryAdapter | TelemetryConfig;\n /** Logger adapter (optional) */\n logger?: LoggerAdapter;\n /** Application metadata */\n app: {\n /** Application name */\n name: string;\n /** Origin (for origin binding checks, defaults to window.location.origin) */\n origin?: string;\n };\n}\n\n/**\n * Connect options\n */\nexport interface ConnectOptions {\n /** Specific wallet ID to connect to */\n walletId?: WalletId;\n /** Prefer installed wallets */\n preferInstalled?: boolean;\n /** Allow only specific wallets */\n allowWallets?: WalletId[];\n /** Required capabilities */\n requiredCapabilities?: string[];\n /** Timeout in milliseconds */\n timeoutMs?: number;\n}\n\n/**\n * Wallet filter options\n */\nexport interface WalletFilter {\n /** Required capabilities */\n requiredCapabilities?: string[];\n /** Include experimental wallets */\n includeExperimental?: boolean;\n}\n","/**\n * Default adapter implementations\n */\n\nimport type {\n StorageAdapter,\n CryptoAdapter,\n LoggerAdapter,\n TelemetryAdapter,\n} from '@partylayer/core';\n\n/**\n * Default logger (console-based)\n */\nexport class DefaultLogger implements LoggerAdapter {\n debug(message: string, ...args: unknown[]): void {\n if (typeof console !== 'undefined' && console.debug) {\n console.debug(`[PartyLayer] ${message}`, ...args);\n }\n }\n\n info(message: string, ...args: unknown[]): void {\n if (typeof console !== 'undefined' && console.info) {\n console.info(`[PartyLayer] ${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: unknown[]): void {\n if (typeof console !== 'undefined' && console.warn) {\n console.warn(`[PartyLayer] ${message}`, ...args);\n }\n }\n\n error(message: string, error?: unknown, ...args: unknown[]): void {\n if (typeof console !== 'undefined' && console.error) {\n console.error(`[PartyLayer] ${message}`, error, ...args);\n }\n }\n}\n\n/**\n * Default crypto adapter (Web Crypto API)\n */\nexport class DefaultCrypto implements CryptoAdapter {\n private async getKey(origin: string): Promise<CryptoKey> {\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n throw new Error('Web Crypto API not available');\n }\n\n const encoder = new TextEncoder();\n const data = encoder.encode(origin);\n const hash = await crypto.subtle.digest('SHA-256', data);\n return crypto.subtle.importKey(\n 'raw',\n hash.slice(0, 32),\n { name: 'AES-GCM' },\n false,\n ['encrypt', 'decrypt']\n );\n }\n\n async encrypt(data: string, key: string): Promise<string> {\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n // Fallback to base64\n return btoa(data);\n }\n\n try {\n const cryptoKey = await this.getKey(key);\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const encoder = new TextEncoder();\n const encoded = encoder.encode(data);\n\n const encrypted = await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv },\n cryptoKey,\n encoded\n );\n\n const combined = new Uint8Array(iv.length + encrypted.byteLength);\n combined.set(iv);\n combined.set(new Uint8Array(encrypted), iv.length);\n\n return btoa(String.fromCharCode(...combined));\n } catch {\n return btoa(data);\n }\n }\n\n async decrypt(encrypted: string, key: string): Promise<string> {\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n return atob(encrypted);\n }\n\n try {\n const cryptoKey = await this.getKey(key);\n const combined = Uint8Array.from(atob(encrypted), (c) => c.charCodeAt(0));\n\n const iv = combined.slice(0, 12);\n const data = combined.slice(12);\n\n const decrypted = await crypto.subtle.decrypt(\n { name: 'AES-GCM', iv },\n cryptoKey,\n data\n );\n\n const decoder = new TextDecoder();\n return decoder.decode(decrypted);\n } catch {\n return atob(encrypted);\n }\n }\n\n async generateKey(): Promise<string> {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n return Math.random().toString(36).substring(2, 15);\n }\n\n const array = new Uint8Array(32);\n crypto.getRandomValues(array);\n return Array.from(array, (b) => b.toString(16).padStart(2, '0')).join('');\n }\n}\n\n/**\n * Default storage adapter (localStorage-based)\n */\nexport class DefaultStorage implements StorageAdapter {\n private prefix: string;\n\n constructor(prefix = 'partylayer_') {\n this.prefix = prefix;\n }\n\n async get(key: string): Promise<string | null> {\n if (typeof window === 'undefined' || !window.localStorage) {\n return null;\n }\n\n try {\n return localStorage.getItem(`${this.prefix}${key}`);\n } catch {\n return null;\n }\n }\n\n async set(key: string, value: string): Promise<void> {\n if (typeof window === 'undefined' || !window.localStorage) {\n return;\n }\n\n try {\n localStorage.setItem(`${this.prefix}${key}`, value);\n } catch {\n // Ignore storage errors\n }\n }\n\n async remove(key: string): Promise<void> {\n if (typeof window === 'undefined' || !window.localStorage) {\n return;\n }\n\n try {\n localStorage.removeItem(`${this.prefix}${key}`);\n } catch {\n // Ignore storage errors\n }\n }\n\n async clear(): Promise<void> {\n if (typeof window === 'undefined' || !window.localStorage) {\n return;\n }\n\n try {\n const keys: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix)) {\n keys.push(key);\n }\n }\n\n for (const key of keys) {\n localStorage.removeItem(key);\n }\n } catch {\n // Ignore storage errors\n }\n }\n}\n\n/**\n * Default telemetry adapter (no-op)\n */\nexport class DefaultTelemetry implements TelemetryAdapter {\n track(_event: string, _properties?: Record<string, unknown>): void {\n // No-op\n }\n\n error(_error: Error, _properties?: Record<string, unknown>): void {\n // No-op\n }\n}\n","/**\n * Built-in wallet adapters\n * \n * These adapters are automatically registered when creating a PartyLayer client.\n * dApp developers don't need to install or configure these separately.\n */\n\nimport type { WalletAdapter } from '@partylayer/core';\nimport { ConsoleAdapter } from '@partylayer/adapter-console';\nimport { LoopAdapter } from '@partylayer/adapter-loop';\nimport { Cantor8Adapter } from '@partylayer/adapter-cantor8';\nimport { NightlyAdapter } from '@partylayer/adapter-nightly';\n\n// Note: BronAdapter requires OAuth config and is not included by default.\n// Import it separately: import { BronAdapter } from '@partylayer/adapter-bron';\n\n/**\n * Get all built-in adapters\n * \n * This function returns instances of all supported wallet adapters.\n * Called automatically by createPartyLayer() unless custom adapters are provided.\n * \n * Included adapters:\n * - ConsoleAdapter: Console Wallet browser extension\n * - LoopAdapter: 5N Loop mobile/web wallet\n * - Cantor8Adapter: Cantor8 wallet with deep link transport\n * - NightlyAdapter: Nightly multichain wallet with Canton support\n *\n * Note: BronAdapter is NOT included by default because it requires OAuth configuration.\n * To use Bron, install @partylayer/adapter-bron and register it manually.\n */\nexport function getBuiltinAdapters(): WalletAdapter[] {\n return [\n new ConsoleAdapter(), // Console Wallet - browser extension\n new LoopAdapter(), // 5N Loop - QR code / popup\n new Cantor8Adapter(), // Cantor8 - deep link transport\n new NightlyAdapter(), // Nightly - multichain wallet (injected)\n ];\n}\n\n/**\n * Built-in adapter classes (for advanced usage)\n */\nexport { ConsoleAdapter, LoopAdapter, Cantor8Adapter, NightlyAdapter };\n\n/**\n * Re-export BronAdapter for convenience (requires config)\n * \n * @example\n * ```typescript\n * import { BronAdapter } from '@partylayer/sdk';\n * \n * const client = createPartyLayer({\n * // ... config\n * adapters: [\n * ...getBuiltinAdapters(),\n * new BronAdapter({\n * auth: { clientId: '...', redirectUri: '...', ... },\n * api: { baseUrl: '...', getAccessToken: async () => '...' },\n * }),\n * ],\n * });\n * ```\n */\nexport { BronAdapter } from '@partylayer/adapter-bron';\nexport type { BronAdapterConfig, BronAuthConfig, BronApiConfig } from '@partylayer/adapter-bron';\n","/**\n * Metrics Telemetry Adapter\n * \n * A privacy-safe telemetry adapter that collects metrics for\n * ecosystem health monitoring and usage reporting.\n * \n * Features:\n * - Opt-in by default (disabled unless explicitly enabled)\n * - Privacy-safe payloads (no PII, hashed identifiers)\n * - Batched sending to reduce network overhead\n * - Configurable sampling rate\n * - Automatic flush on interval or batch size\n * \n * @since 0.3.0\n */\n\nimport type { TelemetryAdapter } from '@partylayer/core';\nimport {\n createMetricsPayload,\n hashForPrivacy,\n} from '@partylayer/core';\nimport type { TelemetryConfig } from './config';\n\n/** SDK Version - should match package.json */\nconst SDK_VERSION = '0.3.0';\n\n/**\n * Internal metric event for buffering\n */\ninterface MetricEvent {\n type: 'increment' | 'gauge';\n metric: string;\n value: number;\n timestamp: number;\n}\n\n/**\n * Metrics Telemetry Adapter\n * \n * Implements TelemetryAdapter interface with metrics-specific functionality.\n */\nexport class MetricsTelemetryAdapter implements TelemetryAdapter {\n private config: TelemetryConfig;\n private metrics: Map<string, number> = new Map();\n private buffer: MetricEvent[] = [];\n private flushTimer: ReturnType<typeof setInterval> | null = null;\n private appIdHash: string | null = null;\n private originHash: string | null = null;\n private initialized = false;\n \n constructor(config: TelemetryConfig) {\n this.config = {\n enabled: config.enabled ?? false,\n endpoint: config.endpoint,\n sampleRate: config.sampleRate ?? 1.0,\n appId: config.appId,\n includeOrigin: config.includeOrigin ?? false,\n batchSize: config.batchSize ?? 10,\n flushIntervalMs: config.flushIntervalMs ?? 30000,\n network: config.network,\n };\n \n // Initialize async hashing\n this.initialize();\n }\n \n /**\n * Initialize async components (hashing)\n */\n private async initialize(): Promise<void> {\n if (this.initialized) return;\n \n if (this.config.appId) {\n this.appIdHash = await hashForPrivacy(this.config.appId);\n }\n \n if (this.config.includeOrigin && typeof window !== 'undefined') {\n this.originHash = await hashForPrivacy(window.location.origin);\n }\n \n // Start flush timer\n if (this.config.enabled && this.config.flushIntervalMs) {\n this.flushTimer = setInterval(() => {\n this.flush().catch(console.error);\n }, this.config.flushIntervalMs);\n }\n \n this.initialized = true;\n }\n \n /**\n * Check if telemetry is enabled\n */\n isEnabled(): boolean {\n return this.config.enabled;\n }\n \n /**\n * Track a named event (TelemetryAdapter interface)\n */\n track(event: string, properties?: Record<string, unknown>): void {\n if (!this.config.enabled) return;\n \n // Apply sampling (sampleRate of 0 means no events, 1 means all events)\n const sampleRate = this.config.sampleRate ?? 1.0;\n if (sampleRate < 1.0 && Math.random() >= sampleRate) {\n return;\n }\n \n // Convert event to increment - bypass the increment sampling since we already checked\n const current = this.metrics.get(`event_${event}`) ?? 0;\n this.metrics.set(`event_${event}`, current + 1);\n this.bufferEvent({ type: 'increment', metric: `event_${event}`, value: 1, timestamp: Date.now() });\n \n // Track any numeric properties as gauges\n if (properties) {\n for (const [key, value] of Object.entries(properties)) {\n if (typeof value === 'number') {\n this.gauge(`${event}_${key}`, value);\n }\n }\n }\n }\n \n /**\n * Track an error (TelemetryAdapter interface)\n */\n error(error: Error, properties?: Record<string, unknown>): void {\n if (!this.config.enabled) return;\n \n // Extract error code if available\n const code = (error as { code?: string }).code ?? 'UNKNOWN';\n this.increment(`error_${code}`);\n \n // Track properties\n if (properties) {\n this.track('error', properties);\n }\n }\n \n /**\n * Increment a metric counter\n */\n increment(metric: string, value: number = 1): void {\n if (!this.config.enabled) return;\n \n // Apply sampling (sampleRate of 0 means no events, 1 means all events)\n const sampleRate = this.config.sampleRate ?? 1.0;\n if (sampleRate < 1.0 && Math.random() >= sampleRate) {\n return;\n }\n \n const current = this.metrics.get(metric) ?? 0;\n this.metrics.set(metric, current + value);\n \n this.bufferEvent({\n type: 'increment',\n metric,\n value,\n timestamp: Date.now(),\n });\n }\n \n /**\n * Set a gauge metric value\n */\n gauge(metric: string, value: number): void {\n if (!this.config.enabled) return;\n \n this.metrics.set(metric, value);\n \n this.bufferEvent({\n type: 'gauge',\n metric,\n value,\n timestamp: Date.now(),\n });\n }\n \n /**\n * Buffer an event for batched sending\n */\n private bufferEvent(event: MetricEvent): void {\n this.buffer.push(event);\n \n // Flush if batch size reached\n if (this.config.batchSize && this.buffer.length >= this.config.batchSize) {\n this.flush().catch(console.error);\n }\n }\n \n /**\n * Flush buffered metrics to backend\n */\n async flush(): Promise<void> {\n if (!this.config.enabled) return;\n if (this.metrics.size === 0) return;\n if (!this.config.endpoint) {\n // No endpoint configured - just clear the buffer\n this.buffer = [];\n return;\n }\n \n // Wait for initialization\n if (!this.initialized) {\n await this.initialize();\n }\n \n try {\n const payload = createMetricsPayload({\n sdkVersion: SDK_VERSION,\n network: this.config.network ?? 'unknown',\n metrics: Object.fromEntries(this.metrics),\n appIdHash: this.appIdHash ?? undefined,\n originHash: this.originHash ?? undefined,\n });\n \n await fetch(this.config.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n });\n \n // Clear buffer on success\n this.buffer = [];\n // Note: We don't clear metrics - they accumulate until next flush\n // This allows calculating rates (e.g., errors per session)\n } catch (error) {\n // Silent fail - don't break the app for telemetry failures\n console.debug('[PartyLayer Telemetry] Flush failed:', error);\n }\n }\n \n /**\n * Get current metrics snapshot (for testing/debugging)\n */\n getMetrics(): Record<string, number> {\n return Object.fromEntries(this.metrics);\n }\n \n /**\n * Reset all metrics (for testing)\n */\n reset(): void {\n this.metrics.clear();\n this.buffer = [];\n }\n \n /**\n * Destroy the adapter (cleanup timers)\n */\n destroy(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n \n // Final flush\n this.flush().catch(console.error);\n }\n}\n\n/**\n * Check if a value is a TelemetryConfig object\n */\nexport function isTelemetryConfig(value: unknown): value is TelemetryConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'enabled' in value &&\n typeof (value as TelemetryConfig).enabled === 'boolean'\n );\n}\n\n/**\n * Create a TelemetryAdapter from config\n * \n * If config is already a TelemetryAdapter, returns it.\n * If config is a TelemetryConfig, creates a MetricsTelemetryAdapter.\n */\nexport function createTelemetryAdapter(\n config: TelemetryAdapter | TelemetryConfig | undefined\n): TelemetryAdapter | undefined {\n if (!config) return undefined;\n \n if (isTelemetryConfig(config)) {\n return new MetricsTelemetryAdapter(config);\n }\n \n return config;\n}\n","/**\n * PartyLayer Client - Public API Implementation\n * \n * This is the main public API for PartyLayer SDK.\n * All dApps should use this API exclusively.\n * \n * References:\n * - Wallet Integration Guide: https://docs.digitalasset.com/integrate/devnet/index.html\n * - Signing transactions from dApps: https://docs.digitalasset.com/integrate/devnet/signing-transactions-from-dapps/index.html\n * - OpenRPC dApp API spec: https://github.com/hyperledger-labs/splice-wallet-kernel/blob/main/api-specs/openrpc-dapp-api.json\n */\n\nimport type {\n WalletId,\n SessionId,\n CapabilityKey,\n WalletInfo,\n Session,\n SignedMessage,\n SignedTransaction,\n TxReceipt,\n WalletAdapter,\n AdapterContext,\n} from '@partylayer/core';\nimport {\n toSessionId,\n WalletNotFoundError,\n CapabilityNotSupportedError,\n mapUnknownErrorToPartyLayerError,\n capabilityGuard,\n installGuard,\n} from '@partylayer/core';\nimport { RegistryClient } from '@partylayer/registry-client';\nimport type { RegistryStatus } from '@partylayer/registry-client';\nimport {\n DEFAULT_REGISTRY_URL,\n type PartyLayerConfig,\n type ConnectOptions,\n type WalletFilter,\n} from './config';\nimport type {\n PartyLayerEvent,\n EventHandler,\n} from './events';\nimport {\n DefaultLogger,\n DefaultCrypto,\n DefaultStorage,\n DefaultTelemetry,\n} from './adapters';\nimport { getBuiltinAdapters } from './builtin-adapters';\nimport { createTelemetryAdapter } from './metrics-telemetry';\nimport { METRICS, errorMetricName } from '@partylayer/core';\nimport type {\n SignMessageParams,\n SignTransactionParams,\n SubmitTransactionParams,\n LedgerApiParams,\n LedgerApiResult,\n} from '@partylayer/core';\n\n/**\n * PartyLayer Client\n * \n * Main client interface for dApps to interact with Canton wallets.\n */\nexport class PartyLayerClient {\n private config: PartyLayerConfig;\n private adapters = new Map<WalletId, WalletAdapter>();\n private eventHandlers = new Map<string, Set<EventHandler>>();\n private activeSession: Session | null = null;\n public readonly registryClient: RegistryClient; // Expose for React hooks\n private logger: import('@partylayer/core').LoggerAdapter;\n private crypto: import('@partylayer/core').CryptoAdapter;\n private storage: import('@partylayer/core').StorageAdapter;\n private telemetry?: import('@partylayer/core').TelemetryAdapter;\n private origin: string;\n\n constructor(config: PartyLayerConfig) {\n this.config = config;\n\n // Determine origin\n if (config.app.origin) {\n this.origin = config.app.origin;\n } else if (typeof window !== 'undefined') {\n this.origin = window.location.origin;\n } else {\n this.origin = 'unknown';\n }\n\n // Initialize service adapters\n this.logger = config.logger || new DefaultLogger();\n this.crypto = config.crypto || new DefaultCrypto();\n this.storage = config.storage || new DefaultStorage();\n \n // Initialize telemetry - supports both TelemetryAdapter and TelemetryConfig\n const telemetryAdapter = createTelemetryAdapter(config.telemetry);\n this.telemetry = telemetryAdapter || new DefaultTelemetry();\n\n // Register wallet adapters\n // If no adapters provided, use all built-in adapters (Console, Loop, etc.)\n const adaptersToRegister = config.adapters ?? getBuiltinAdapters();\n \n for (const adapterOrClass of adaptersToRegister) {\n let adapter: import('@partylayer/core').WalletAdapter;\n \n // Check if it's a class (function) or instance (object)\n if (typeof adapterOrClass === 'function') {\n // It's a class - instantiate it\n adapter = new (adapterOrClass as new () => import('@partylayer/core').WalletAdapter)();\n } else {\n // It's already an instance\n adapter = adapterOrClass;\n }\n \n this.adapters.set(adapter.walletId, adapter);\n this.logger.debug('Registered wallet adapter', {\n walletId: adapter.walletId,\n name: adapter.name,\n capabilities: adapter.getCapabilities(),\n });\n }\n\n // Initialize registry client with signature verification\n this.registryClient = new RegistryClient({\n registryUrl: config.registryUrl || DEFAULT_REGISTRY_URL,\n channel: config.channel || 'stable',\n registryPublicKeys: config.registryPublicKeys,\n storage: this.storage,\n });\n\n // Emit initial registry status\n this.updateRegistryStatus();\n\n // Restore session on init\n this.restoreSession().catch((err) => {\n this.emit('error', {\n type: 'error',\n error: mapUnknownErrorToPartyLayerError(err, {\n phase: 'restore',\n }),\n });\n });\n }\n\n /**\n * Register a wallet adapter\n * \n * @internal\n * This is used internally by the SDK to register adapters.\n * In production, adapters would be auto-registered via registry.\n */\n registerAdapter(adapter: WalletAdapter): void {\n this.adapters.set(adapter.walletId, adapter);\n }\n\n /**\n * List available wallets\n */\n async listWallets(filter?: WalletFilter): Promise<WalletInfo[]> {\n let registryWallets: WalletInfo[];\n\n try {\n // getWallets() already returns WalletInfo[]\n registryWallets = await this.registryClient.getWallets();\n\n // Update registry status after successful fetch\n this.updateRegistryStatus();\n } catch (err) {\n // Update registry status even on error (may have fallback info)\n this.updateRegistryStatus();\n\n this.logger.warn('Registry fetch failed, using registered adapters only', {\n error: err instanceof Error ? err.message : String(err),\n });\n\n registryWallets = [];\n }\n\n // Merge: include registered adapters that are NOT in the registry\n // (e.g. NightlyAdapter is builtin but may not have a registry entry yet)\n const registryIds = new Set(registryWallets.map((w) => String(w.walletId)));\n for (const [, adapter] of this.adapters) {\n if (registryIds.has(String(adapter.walletId))) continue;\n\n registryWallets.push({\n walletId: adapter.walletId,\n name: adapter.name,\n website: '',\n icons: {},\n capabilities: adapter.getCapabilities(),\n adapter: { packageName: 'builtin', versionRange: '*' },\n docs: [],\n networks: [this.config.network || 'devnet'],\n channel: 'stable',\n } as WalletInfo);\n }\n\n // Filter by capabilities\n if (filter?.requiredCapabilities) {\n return registryWallets.filter((walletInfo) =>\n filter.requiredCapabilities!.every((cap) =>\n walletInfo.capabilities.includes(cap as CapabilityKey)\n )\n );\n }\n\n // Filter experimental\n if (!filter?.includeExperimental) {\n return registryWallets.filter((walletInfo) => walletInfo.channel === 'stable');\n }\n\n return registryWallets;\n }\n\n /**\n * Connect to a wallet\n */\n async connect(options?: ConnectOptions): Promise<Session> {\n // Track connect attempt\n this.telemetry?.increment?.(METRICS.WALLET_CONNECT_ATTEMPTS);\n \n try {\n // Get available wallets\n const wallets = await this.listWallets({\n requiredCapabilities: options?.requiredCapabilities,\n includeExperimental: true,\n });\n\n // Filter by allowWallets\n let availableWallets = wallets;\n if (options?.allowWallets) {\n availableWallets = wallets.filter((w) =>\n options.allowWallets!.includes(w.walletId)\n );\n }\n\n // Select wallet\n let selectedWallet: WalletInfo;\n let isNativeWallet = false;\n if (options?.walletId) {\n const found = availableWallets.find(\n (w) => w.walletId === options.walletId\n );\n if (found) {\n selectedWallet = found;\n } else {\n // Fallback: check if a native CIP-0103 adapter is registered\n const nativeAdapter = this.adapters.get(options.walletId);\n if (nativeAdapter) {\n isNativeWallet = true;\n selectedWallet = {\n walletId: options.walletId,\n name: nativeAdapter.name,\n website: '',\n icons: {},\n capabilities: nativeAdapter.getCapabilities(),\n adapter: { packageName: 'native-cip0103', versionRange: '*' },\n docs: [],\n networks: [this.config.network],\n channel: 'stable' as const,\n metadata: { source: 'native-cip0103' },\n };\n } else {\n throw new WalletNotFoundError(String(options.walletId));\n }\n }\n } else if (availableWallets.length === 0) {\n throw new WalletNotFoundError('No wallets available');\n } else {\n selectedWallet = availableWallets[0];\n }\n\n // Get adapter\n const adapter = this.adapters.get(selectedWallet.walletId);\n if (!adapter) {\n throw new WalletNotFoundError(String(selectedWallet.walletId));\n }\n\n // Check origin allowlist (skip for native CIP-0103 wallets and\n // adapter-merged wallets that aren't in the registry)\n if (!isNativeWallet) {\n try {\n const walletEntry = await this.registryClient.getWalletEntry(String(selectedWallet.walletId));\n if (walletEntry.originAllowlist && walletEntry.originAllowlist.length > 0) {\n if (!walletEntry.originAllowlist.includes(this.origin)) {\n const { OriginNotAllowedError } = await import('@partylayer/core');\n throw new OriginNotAllowedError(\n this.origin,\n walletEntry.originAllowlist\n );\n }\n }\n } catch (e) {\n // Wallet not in registry (adapter-merged) — skip origin check\n if (!(e instanceof WalletNotFoundError)) {\n throw e;\n }\n }\n }\n\n // Check capabilities\n if (options?.requiredCapabilities) {\n capabilityGuard(adapter, options.requiredCapabilities as CapabilityKey[]);\n }\n\n // Check installation\n await installGuard(adapter);\n\n // Create adapter context\n const ctx = this.createAdapterContext();\n\n // Connect\n // Default timeout: 2 minutes for QR code/popup based wallets\n const timeoutMs = options?.timeoutMs || 120000;\n const connectPromise = adapter.connect(ctx, {\n timeoutMs,\n partyId: undefined, // TODO: support party selection\n });\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => {\n reject(new Error(`Connection timed out after ${timeoutMs}ms - user did not complete wallet connection`));\n }, timeoutMs);\n });\n\n const result = await Promise.race([connectPromise, timeoutPromise]);\n\n // Create session\n const session: Session = {\n sessionId: toSessionId(`session_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`),\n walletId: selectedWallet.walletId,\n partyId: result.partyId,\n network: this.config.network,\n createdAt: Date.now(),\n expiresAt: result.session.expiresAt,\n origin: this.origin,\n capabilitiesSnapshot: result.capabilities,\n metadata: result.session.metadata as Record<string, string> | undefined,\n };\n\n // Persist session\n await this.persistSession(session);\n\n // Set active session\n this.activeSession = session;\n\n // Update registry status (may have changed during fetch)\n this.updateRegistryStatus();\n\n // Track successful connection\n this.telemetry?.increment?.(METRICS.WALLET_CONNECT_SUCCESS);\n this.telemetry?.increment?.(METRICS.SESSIONS_CREATED);\n\n // Emit event\n this.emit('session:connected', {\n type: 'session:connected',\n session,\n });\n\n return session;\n } catch (err) {\n const timeoutMs = options?.timeoutMs || 30000;\n const error = mapUnknownErrorToPartyLayerError(err, {\n phase: 'connect',\n walletId: options?.walletId ? String(options.walletId) : undefined,\n timeoutMs,\n });\n this.emit('error', { type: 'error', error });\n throw error;\n }\n }\n\n /**\n * Disconnect from wallet\n */\n async disconnect(): Promise<void> {\n if (!this.activeSession) {\n return;\n }\n\n try {\n const adapter = this.adapters.get(this.activeSession.walletId);\n if (adapter) {\n const ctx = this.createAdapterContext();\n await adapter.disconnect(ctx, this.activeSession);\n }\n\n const sessionId = this.activeSession.sessionId;\n await this.removeSession(sessionId);\n\n this.activeSession = null;\n\n this.emit('session:disconnected', {\n type: 'session:disconnected',\n sessionId,\n });\n } catch (err) {\n const error = mapUnknownErrorToPartyLayerError(err, {\n phase: 'connect', // Use connect as default phase\n });\n this.emit('error', { type: 'error', error });\n throw error;\n }\n }\n\n /**\n * Get active session\n */\n async getActiveSession(): Promise<Session | null> {\n if (this.activeSession) {\n // Check expiration\n if (this.activeSession.expiresAt && Date.now() >= this.activeSession.expiresAt) {\n await this.disconnect();\n this.emit('session:expired', {\n type: 'session:expired',\n sessionId: this.activeSession.sessionId,\n });\n return null;\n }\n return this.activeSession;\n }\n\n // Try to restore from storage\n return this.restoreSession();\n }\n\n /**\n * Sign a message\n */\n async signMessage(params: SignMessageParams): Promise<SignedMessage> {\n const session = await this.getActiveSession();\n if (!session) {\n throw new Error('No active session');\n }\n\n const adapter = this.adapters.get(session.walletId);\n if (!adapter || !adapter.signMessage) {\n throw new CapabilityNotSupportedError(\n session.walletId,\n 'signMessage'\n );\n }\n\n try {\n const ctx = this.createAdapterContext();\n return await adapter.signMessage(ctx, session, params);\n } catch (err) {\n const error = mapUnknownErrorToPartyLayerError(err, {\n phase: 'signMessage',\n walletId: String(session.walletId),\n });\n this.emit('error', { type: 'error', error });\n throw error;\n }\n }\n\n /**\n * Sign a transaction\n */\n async signTransaction(params: SignTransactionParams): Promise<SignedTransaction> {\n const session = await this.getActiveSession();\n if (!session) {\n throw new Error('No active session');\n }\n\n const adapter = this.adapters.get(session.walletId);\n if (!adapter || !adapter.signTransaction) {\n throw new CapabilityNotSupportedError(\n session.walletId,\n 'signTransaction'\n );\n }\n\n try {\n const ctx = this.createAdapterContext();\n const result = await adapter.signTransaction(ctx, session, params);\n \n // Emit transaction status\n this.emit('tx:status', {\n type: 'tx:status',\n sessionId: session.sessionId,\n txId: result.transactionHash,\n status: 'pending',\n raw: result.signedTx,\n });\n\n return result;\n } catch (err) {\n const error = mapUnknownErrorToPartyLayerError(err, {\n phase: 'signTransaction',\n walletId: String(session.walletId),\n });\n this.emit('error', { type: 'error', error });\n throw error;\n }\n }\n\n /**\n * Submit a transaction\n */\n async submitTransaction(params: SubmitTransactionParams): Promise<TxReceipt> {\n const session = await this.getActiveSession();\n if (!session) {\n throw new Error('No active session');\n }\n\n const adapter = this.adapters.get(session.walletId);\n if (!adapter || !adapter.submitTransaction) {\n throw new CapabilityNotSupportedError(\n session.walletId,\n 'submitTransaction'\n );\n }\n\n try {\n const ctx = this.createAdapterContext();\n const result = await adapter.submitTransaction(ctx, session, params);\n\n // Emit transaction status\n this.emit('tx:status', {\n type: 'tx:status',\n sessionId: session.sessionId,\n txId: result.transactionHash,\n status: 'submitted',\n raw: result,\n });\n\n return result;\n } catch (err) {\n const error = mapUnknownErrorToPartyLayerError(err, {\n phase: 'submitTransaction',\n walletId: String(session.walletId),\n });\n this.emit('error', { type: 'error', error });\n throw error;\n }\n }\n\n /**\n * Proxy a JSON Ledger API request through the active wallet adapter\n */\n async ledgerApi(params: LedgerApiParams): Promise<LedgerApiResult> {\n const session = await this.getActiveSession();\n if (!session) {\n throw new Error('No active session');\n }\n\n const adapter = this.adapters.get(session.walletId);\n if (!adapter || !adapter.ledgerApi) {\n throw new CapabilityNotSupportedError(\n session.walletId,\n 'ledgerApi'\n );\n }\n\n try {\n const ctx = this.createAdapterContext();\n return await adapter.ledgerApi(ctx, session, params);\n } catch (err) {\n const error = mapUnknownErrorToPartyLayerError(err, {\n phase: 'ledgerApi',\n walletId: String(session.walletId),\n });\n this.emit('error', { type: 'error', error });\n throw error;\n }\n }\n\n /**\n * Subscribe to events\n */\n on<T extends PartyLayerEvent>(\n event: T['type'],\n handler: EventHandler<T>\n ): () => void {\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, new Set());\n }\n this.eventHandlers.get(event)!.add(handler as EventHandler);\n\n // Return unsubscribe function\n return () => {\n this.off(event, handler);\n };\n }\n\n /**\n * Unsubscribe from events\n */\n off<T extends PartyLayerEvent>(\n event: T['type'],\n handler: EventHandler<T>\n ): void {\n const handlers = this.eventHandlers.get(event);\n if (handlers) {\n handlers.delete(handler as EventHandler);\n }\n }\n\n /**\n * Get a CIP-0103 Provider backed by this client.\n *\n * This bridge routes all request() calls through the existing\n * PartyLayerClient methods and maps events to CIP-0103 format.\n *\n * The bridge implements the full CIP-0103 specification:\n * - All 10 mandatory methods including `ledgerApi` (when adapter supports it)\n * - Full transaction lifecycle: pending -> signed -> executed/failed\n * - All CIP-0103 events: statusChanged, accountsChanged, txChanged, connected\n *\n * **Note:** Async wallets (userUrl pattern) are not supported through the\n * bridge. For async wallet support, use `PartyLayerProvider` directly.\n *\n * @returns CIP-0103 compliant Provider\n */\n asProvider(): import('@partylayer/core').CIP0103Provider {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { createProviderBridge } = require('@partylayer/provider') as typeof import('@partylayer/provider');\n return createProviderBridge(this);\n }\n\n /**\n * Destroy client and cleanup\n */\n destroy(): void {\n // Flush and destroy telemetry if it supports it\n if (this.telemetry && 'destroy' in this.telemetry && typeof this.telemetry.destroy === 'function') {\n (this.telemetry as { destroy: () => void }).destroy();\n } else if (this.telemetry?.flush) {\n this.telemetry.flush().catch(() => {});\n }\n \n this.eventHandlers.clear();\n this.activeSession = null;\n }\n\n /**\n * Create adapter context\n */\n private createAdapterContext(): AdapterContext {\n return {\n appName: this.config.app.name,\n origin: this.origin,\n network: this.config.network,\n logger: this.logger,\n telemetry: this.telemetry,\n registry: {\n getWallet: async (walletId: WalletId) => {\n return this.registryClient.getWallet(String(walletId));\n },\n },\n crypto: this.crypto,\n storage: this.storage,\n timeout: (ms: number) => {\n return new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Timeout')), ms);\n });\n },\n };\n }\n\n\n /**\n * Persist session to storage\n */\n private async persistSession(session: Session): Promise<void> {\n try {\n const data = JSON.stringify(session);\n const encrypted = await this.crypto.encrypt(data, this.origin);\n await this.storage.set(`session_${session.sessionId}`, encrypted);\n } catch (err) {\n this.logger.warn('Failed to persist session', err);\n }\n }\n\n /**\n * Remove session from storage\n */\n private async removeSession(sessionId: SessionId): Promise<void> {\n try {\n await this.storage.remove(`session_${sessionId}`);\n } catch (err) {\n this.logger.warn('Failed to remove session', err);\n }\n }\n\n /**\n * Restore session from storage\n */\n private async restoreSession(): Promise<Session | null> {\n // Track restore attempt\n this.telemetry?.increment?.(METRICS.RESTORE_ATTEMPTS);\n \n try {\n const encrypted = await this.storage.get('active_session');\n if (!encrypted) {\n return null;\n }\n\n const decrypted = await this.crypto.decrypt(encrypted, this.origin);\n const session = JSON.parse(decrypted) as Session;\n\n // Check expiration\n if (session.expiresAt && Date.now() >= session.expiresAt) {\n await this.removeSession(session.sessionId);\n return null;\n }\n\n // Check origin\n if (session.origin !== this.origin) {\n return null;\n }\n\n // Try to restore with adapter\n const adapter = this.adapters.get(session.walletId);\n if (adapter?.restore) {\n const ctx = this.createAdapterContext();\n const restored = await adapter.restore(ctx, {\n ...session,\n encrypted,\n });\n\n if (restored) {\n this.activeSession = restored;\n // Persist restored session (may have updated metadata)\n await this.persistSession(restored);\n \n // Track successful restore\n this.telemetry?.increment?.(METRICS.SESSIONS_RESTORED);\n this.telemetry?.increment?.(METRICS.WALLET_CONNECT_SUCCESS);\n \n // Emit session:connected event with reason=\"restore\"\n this.emit('session:connected', {\n type: 'session:connected',\n session: restored,\n });\n return restored;\n } else {\n // Restore failed - clear session\n await this.removeSession(session.sessionId);\n this.emit('session:expired', {\n type: 'session:expired',\n sessionId: session.sessionId,\n });\n return null;\n }\n }\n\n // If restore not supported, use stored session as-is\n // (Some adapters don't support restore but session metadata is still valid)\n this.activeSession = session;\n return session;\n } catch (err) {\n this.logger.warn('Failed to restore session', err);\n return null;\n }\n }\n\n /**\n * Update registry status and emit event\n */\n private updateRegistryStatus(): void {\n const status = this.registryClient.getStatus();\n if (status) {\n // Track registry metrics\n if (status.source === 'network') {\n this.telemetry?.increment?.(METRICS.REGISTRY_FETCH);\n } else if (status.source === 'cache') {\n this.telemetry?.increment?.(METRICS.REGISTRY_CACHE_HIT);\n }\n if (status.stale) {\n this.telemetry?.increment?.(METRICS.REGISTRY_STALE);\n }\n \n this.emit('registry:status', {\n type: 'registry:status',\n status: {\n source: status.source,\n verified: status.verified,\n channel: status.channel,\n sequence: status.sequence,\n stale: status.stale,\n fetchedAt: status.fetchedAt,\n etag: status.etag,\n error: status.error,\n },\n });\n }\n }\n\n /**\n * Get registry status\n */\n getRegistryStatus(): RegistryStatus | null {\n return this.registryClient.getStatus();\n }\n\n /**\n * Emit event to handlers\n */\n private emit<T extends PartyLayerEvent>(\n event: T['type'],\n payload: T\n ): void {\n // Track error metrics\n if (event === 'error' && 'error' in payload) {\n const error = payload.error as { code?: string };\n if (error.code) {\n this.telemetry?.increment?.(errorMetricName(error.code));\n }\n }\n \n const handlers = this.eventHandlers.get(event);\n if (handlers) {\n for (const handler of handlers) {\n try {\n handler(payload);\n } catch (err) {\n this.logger.error('Error in event handler', err);\n }\n }\n }\n }\n}\n\n/**\n * Create PartyLayer client\n * \n * This is the main entry point for dApps.\n * \n * @example\n * ```typescript\n * const client = createPartyLayer({\n * registryUrl: 'https://registry.partylayer.xyz',\n * channel: 'stable',\n * network: 'devnet',\n * app: { name: 'My dApp' }\n * });\n * \n * const session = await client.connect();\n * ```\n */\nexport function createPartyLayer(\n config: PartyLayerConfig\n): PartyLayerClient {\n return new PartyLayerClient(config);\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@partylayer/sdk",
3
- "version": "0.2.5",
4
- "description": "Main SDK for PartyLayer - WalletConnect-like experience for Canton Network",
3
+ "version": "0.2.7",
4
+ "description": "Main SDK for PartyLayer - Unified wallet integration for Canton Network",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
7
7
  "types": "./dist/index.d.ts",
@@ -15,6 +15,13 @@
15
15
  "files": [
16
16
  "dist"
17
17
  ],
18
+ "scripts": {
19
+ "build": "tsup",
20
+ "clean": "rm -rf dist",
21
+ "lint": "eslint src --ext .ts",
22
+ "typecheck": "tsc --noEmit",
23
+ "test": "vitest run"
24
+ },
18
25
  "keywords": [
19
26
  "canton",
20
27
  "wallet",
@@ -25,29 +32,25 @@
25
32
  "license": "MIT",
26
33
  "repository": {
27
34
  "type": "git",
28
- "url": "https://github.com/cayvox/PartyLayer.git",
35
+ "url": "https://github.com/PartyLayer/PartyLayer.git",
29
36
  "directory": "packages/sdk"
30
37
  },
31
- "homepage": "https://github.com/cayvox/PartyLayer#readme",
38
+ "homepage": "https://partylayer.xyz",
32
39
  "bugs": {
33
- "url": "https://github.com/cayvox/PartyLayer/issues"
40
+ "url": "https://github.com/PartyLayer/PartyLayer/issues"
34
41
  },
35
42
  "dependencies": {
36
- "@partylayer/adapter-console": "0.2.3",
37
- "@partylayer/adapter-loop": "0.2.3",
38
- "@partylayer/core": "0.2.3",
39
- "@partylayer/registry-client": "0.2.3",
40
- "@partylayer/adapter-cantor8": "0.2.3",
41
- "@partylayer/adapter-bron": "0.2.3"
43
+ "@partylayer/core": "workspace:*",
44
+ "@partylayer/registry-client": "workspace:*",
45
+ "@partylayer/adapter-console": "workspace:*",
46
+ "@partylayer/adapter-loop": "workspace:*",
47
+ "@partylayer/adapter-cantor8": "workspace:*",
48
+ "@partylayer/adapter-bron": "workspace:*",
49
+ "@partylayer/adapter-nightly": "workspace:*",
50
+ "@partylayer/provider": "workspace:*"
42
51
  },
43
52
  "devDependencies": {
44
53
  "@types/node": "^20.11.0",
45
54
  "typescript": "^5.3.3"
46
- },
47
- "scripts": {
48
- "build": "tsup",
49
- "clean": "rm -rf dist",
50
- "lint": "eslint src --ext .ts",
51
- "typecheck": "tsc --noEmit"
52
55
  }
53
- }
56
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 CantonConnect
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.