@partylayer/sdk 0.2.4 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -138,7 +138,7 @@ const client = createPartyLayer({
138
138
  },
139
139
 
140
140
  // Optional
141
- registryUrl: 'https://registry.cantonconnect.xyz/v1/wallets.json', // Default
141
+ registryUrl: 'https://registry.partylayer.xyz/v1/wallets.json', // Default
142
142
  channel: 'stable', // 'stable' | 'beta'
143
143
 
144
144
  // Advanced: Custom adapters
package/dist/index.d.mts CHANGED
@@ -48,7 +48,7 @@ interface PartyLayerConfig {
48
48
  * @example
49
49
  * ```typescript
50
50
  * // Default: all adapters (recommended)
51
- * const client = createCantonConnect({
51
+ * const client = createPartyLayer({
52
52
  * network: 'devnet',
53
53
  * app: { name: 'My dApp' },
54
54
  * // adapters not specified = all built-in adapters (Console, Loop, Cantor8)
@@ -63,7 +63,7 @@ interface PartyLayerConfig {
63
63
  *
64
64
  * // With Bron (enterprise wallet with OAuth)
65
65
  * import { BronAdapter, getBuiltinAdapters } from '@partylayer/sdk';
66
- * const client = createCantonConnect({
66
+ * const client = createPartyLayer({
67
67
  * adapters: [
68
68
  * ...getBuiltinAdapters(),
69
69
  * new BronAdapter({ auth: {...}, api: {...} }),
@@ -299,7 +299,7 @@ declare class PartyLayerClient {
299
299
  private emit;
300
300
  }
301
301
  /**
302
- * Create CantonConnect client
302
+ * Create PartyLayer client
303
303
  *
304
304
  * This is the main entry point for dApps.
305
305
  *
package/dist/index.d.ts CHANGED
@@ -48,7 +48,7 @@ interface PartyLayerConfig {
48
48
  * @example
49
49
  * ```typescript
50
50
  * // Default: all adapters (recommended)
51
- * const client = createCantonConnect({
51
+ * const client = createPartyLayer({
52
52
  * network: 'devnet',
53
53
  * app: { name: 'My dApp' },
54
54
  * // adapters not specified = all built-in adapters (Console, Loop, Cantor8)
@@ -63,7 +63,7 @@ interface PartyLayerConfig {
63
63
  *
64
64
  * // With Bron (enterprise wallet with OAuth)
65
65
  * import { BronAdapter, getBuiltinAdapters } from '@partylayer/sdk';
66
- * const client = createCantonConnect({
66
+ * const client = createPartyLayer({
67
67
  * adapters: [
68
68
  * ...getBuiltinAdapters(),
69
69
  * new BronAdapter({ auth: {...}, api: {...} }),
@@ -299,7 +299,7 @@ declare class PartyLayerClient {
299
299
  private emit;
300
300
  }
301
301
  /**
302
- * Create CantonConnect client
302
+ * Create PartyLayer client
303
303
  *
304
304
  * This is the main entry point for dApps.
305
305
  *
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config.ts","../src/adapters.ts","../src/builtin-adapters.ts","../src/client.ts"],"names":["ConsoleAdapter","LoopAdapter","Cantor8Adapter","RegistryClient","mapUnknownErrorToPartyLayerError","adapter","WalletNotFoundError","OriginNotAllowedError","capabilityGuard","installGuard","toSessionId","CapabilityNotSupportedError"],"mappings":"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","file":"index.js","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 = createCantonConnect({\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 = createCantonConnect({\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 CantonConnect 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/client.ts"],"names":["ConsoleAdapter","LoopAdapter","Cantor8Adapter","RegistryClient","mapUnknownErrorToPartyLayerError","adapter","WalletNotFoundError","OriginNotAllowedError","capabilityGuard","installGuard","toSessionId","CapabilityNotSupportedError"],"mappings":"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","file":"index.js","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 +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 = createCantonConnect({\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 = createCantonConnect({\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 CantonConnect 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/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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@partylayer/sdk",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "description": "Main SDK for PartyLayer - WalletConnect-like experience for Canton Network",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -33,12 +33,12 @@
33
33
  "url": "https://github.com/cayvox/PartyLayer/issues"
34
34
  },
35
35
  "dependencies": {
36
- "@partylayer/core": "0.2.2",
37
- "@partylayer/registry-client": "0.2.2",
38
- "@partylayer/adapter-loop": "0.2.2",
39
- "@partylayer/adapter-bron": "0.2.2",
40
- "@partylayer/adapter-cantor8": "0.2.2",
41
- "@partylayer/adapter-console": "0.2.2"
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"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/node": "^20.11.0",