@partylayer/adapter-cantor8 0.2.7 → 0.2.9
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/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vendor.ts","../src/cantor8-adapter.ts"],"names":["toPartyId","toWalletId","MockTransport","DeepLinkTransport","UserRejectedError","mapUnknownErrorToPartyLayerError","toSignature","signedTx","toTransactionHash"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Cantor8 Vendor Integration Module\n * \n * This module abstracts vendor-specific endpoints and can be swapped\n * without breaking the adapter API.\n * \n * References:\n * - Cantor8 ecosystem: https://www.canton.network/ecosystem/cantor8\n * - Cantor8 site: https://cantor8.tech/about\n */\n\nimport type {\n ConnectRequest,\n ConnectResponse,\n SignRequest,\n SignResponse,\n JobStatus,\n} from '@partylayer/core';\nimport { toPartyId } from '@partylayer/core';\n\n/**\n * Vendor configuration\n */\nexport interface Cantor8VendorConfig {\n /** Deep link scheme (e.g., \"cantor8\") */\n deepLinkScheme?: string;\n /** Universal link base URL (e.g., \"https://app.cantor8.tech\") */\n universalLinkBase?: string;\n /** Connect endpoint path */\n connectEndpoint?: string;\n /** Sign endpoint path */\n signEndpoint?: string;\n /** Job status endpoint path (for async approvals) */\n statusEndpoint?: string;\n /** Redirect URI for callbacks */\n redirectUri?: string;\n}\n\n/**\n * Vendor module interface\n * \n * Implementations can be swapped without changing adapter code.\n */\nexport interface Cantor8VendorModule {\n /**\n * Create connect URL\n */\n createConnectUrl(request: ConnectRequest, config: Cantor8VendorConfig): string;\n\n /**\n * Parse connect callback\n */\n parseConnectCallback(\n callbackData: unknown,\n expectedState: string\n ): ConnectResponse;\n\n /**\n * Create sign URL\n */\n createSignUrl(request: SignRequest, config: Cantor8VendorConfig): string;\n\n /**\n * Parse sign callback\n */\n parseSignCallback(\n callbackData: unknown,\n expectedState: string\n ): SignResponse;\n\n /**\n * Poll job status (optional, for async approvals)\n */\n pollJobStatus?(\n jobId: string,\n statusUrl: string,\n timeoutMs: number\n ): Promise<JobStatus>;\n}\n\n/**\n * Default/stub vendor module\n * \n * This implementation provides a structured interface but throws\n * NotConfiguredError with clear instructions when vendor endpoints\n * are not configured.\n */\nexport class StubCantor8VendorModule implements Cantor8VendorModule {\n createConnectUrl(request: ConnectRequest, config: Cantor8VendorConfig): string {\n // Prefer universal link if configured\n if (config.universalLinkBase) {\n const endpoint = config.connectEndpoint || '/connect';\n const url = new URL(endpoint, config.universalLinkBase);\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return url.toString();\n }\n\n // Fallback to deep link scheme\n if (config.deepLinkScheme) {\n const params = new URLSearchParams();\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n params.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return `${config.deepLinkScheme}://connect?${params.toString()}`;\n }\n\n throw new Error(\n 'Cantor8 vendor not configured. Please set deepLinkScheme or universalLinkBase in adapter config.'\n );\n }\n\n parseConnectCallback(\n callbackData: unknown,\n expectedState: string\n ): ConnectResponse {\n // Parse callback data (could be URL params, postMessage, etc.)\n const data = callbackData as Record<string, unknown>;\n\n // Validate state\n if (data.state !== expectedState) {\n throw new Error('State mismatch in callback');\n }\n\n // Return response\n return {\n state: String(data.state),\n partyId: data.partyId ? toPartyId(String(data.partyId)) : undefined,\n sessionToken: data.sessionToken ? String(data.sessionToken) : undefined,\n expiresAt: data.expiresAt ? Number(data.expiresAt) : undefined,\n capabilities: data.capabilities\n ? (Array.isArray(data.capabilities) ? data.capabilities.map(String) : [])\n : undefined,\n error: data.error\n ? {\n code: String((data.error as Record<string, unknown>).code || 'UNKNOWN'),\n message: String((data.error as Record<string, unknown>).message || 'Unknown error'),\n }\n : undefined,\n };\n }\n\n createSignUrl(request: SignRequest, config: Cantor8VendorConfig): string {\n if (config.universalLinkBase) {\n const endpoint = config.signEndpoint || '/sign';\n const url = new URL(endpoint, config.universalLinkBase);\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return url.toString();\n }\n\n if (config.deepLinkScheme) {\n const params = new URLSearchParams();\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n params.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return `${config.deepLinkScheme}://sign?${params.toString()}`;\n }\n\n throw new Error('Cantor8 vendor not configured');\n }\n\n parseSignCallback(\n callbackData: unknown,\n expectedState: string\n ): SignResponse {\n const data = callbackData as Record<string, unknown>;\n\n if (data.state !== expectedState) {\n throw new Error('State mismatch in callback');\n }\n\n return {\n state: String(data.state),\n signature: data.signature ? String(data.signature) : undefined,\n transactionHash: data.transactionHash ? String(data.transactionHash) : undefined,\n jobId: data.jobId ? String(data.jobId) : undefined,\n error: data.error\n ? {\n code: String((data.error as Record<string, unknown>).code || 'UNKNOWN'),\n message: String((data.error as Record<string, unknown>).message || 'Unknown error'),\n }\n : undefined,\n };\n }\n}\n","/**\n * Cantor8 (C8) Wallet Adapter\n * \n * Implements WalletAdapter interface for Cantor8 wallet using deep link transport.\n * \n * References:\n * - Cantor8 ecosystem: https://www.canton.network/ecosystem/cantor8\n * - Cantor8 site: https://cantor8.tech/about\n * - Wallet Integration Guide: https://docs.digitalasset.com/integrate/devnet/index.html\n */\n\nimport type {\n WalletAdapter,\n AdapterContext,\n AdapterDetectResult,\n AdapterConnectResult,\n SignMessageParams,\n SignTransactionParams,\n} from '@partylayer/core';\nimport {\n toWalletId,\n toSignature,\n toTransactionHash,\n UserRejectedError,\n mapUnknownErrorToPartyLayerError,\n type CapabilityKey,\n} from '@partylayer/core';\nimport { DeepLinkTransport, MockTransport } from '@partylayer/core';\nimport type {\n Cantor8VendorModule,\n Cantor8VendorConfig,\n} from './vendor';\nimport {\n StubCantor8VendorModule,\n} from './vendor';\n\n/**\n * Cantor8 adapter configuration\n */\nexport interface Cantor8AdapterConfig {\n /** Vendor module (defaults to stub) */\n vendorModule?: Cantor8VendorModule;\n /** Vendor configuration */\n vendorConfig?: Cantor8VendorConfig;\n /** Use mock transport in development */\n useMockTransport?: boolean;\n}\n\n/**\n * Cantor8 Wallet Adapter\n */\nexport class Cantor8Adapter implements WalletAdapter {\n readonly walletId = toWalletId('cantor8');\n readonly name = 'Cantor8';\n\n private vendorModule: Cantor8VendorModule;\n private vendorConfig: Cantor8VendorConfig;\n private transport: DeepLinkTransport | MockTransport;\n\n constructor(config: Cantor8AdapterConfig = {}) {\n this.vendorModule = config.vendorModule || new StubCantor8VendorModule();\n this.vendorConfig = config.vendorConfig || {};\n \n // Use mock transport in development if configured\n if (config.useMockTransport || process.env.NODE_ENV === 'development') {\n this.transport = new MockTransport();\n } else {\n this.transport = new DeepLinkTransport();\n }\n }\n\n getCapabilities(): CapabilityKey[] {\n return [\n 'connect',\n 'disconnect',\n 'deeplink',\n 'signMessage',\n 'signTransaction',\n // restore depends on sessionToken support\n ];\n }\n\n detectInstalled(): Promise<AdapterDetectResult> {\n // Cantor8 is a mobile wallet - detection is not straightforward\n // We can check for deep link support or user agent hints\n if (typeof window === 'undefined') {\n return Promise.resolve({ installed: false, reason: 'Browser environment required' });\n }\n\n // Check if device supports deep links (mobile)\n const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n \n // For now, assume installed if mobile device\n // In production, might check for specific user agent or other hints\n return Promise.resolve({\n installed: isMobile,\n reason: isMobile ? undefined : 'Cantor8 is a mobile wallet',\n });\n }\n\n async connect(\n ctx: AdapterContext,\n opts?: {\n timeoutMs?: number;\n partyId?: import('@partylayer/core').PartyId;\n }\n ): Promise<AdapterConnectResult> {\n try {\n // Create connect request\n const state = this.generateState();\n const redirectUri = this.vendorConfig.redirectUri || `${ctx.origin}/callback`;\n const request: import('@partylayer/core').ConnectRequest = {\n appName: ctx.appName,\n origin: ctx.origin,\n network: ctx.network,\n requestedCapabilities: undefined, // Cantor8 doesn't support capability filtering yet\n state,\n redirectUri,\n };\n\n // Create connect URL using vendor module\n const connectUrl = this.vendorModule.createConnectUrl(request, this.vendorConfig);\n\n // Open via transport\n const transportOptions: import('@partylayer/core').TransportOptions = {\n timeoutMs: opts?.timeoutMs || 60000,\n allowedOrigins: [ctx.origin],\n origin: ctx.origin,\n };\n\n const response = await this.transport.openConnectRequest(\n connectUrl,\n request,\n transportOptions\n );\n\n // Check for error\n if (response.error) {\n if (response.error.code === 'USER_REJECTED' || response.error.code === 'CANCELLED') {\n throw new UserRejectedError('User rejected connection');\n }\n throw new Error(response.error.message || 'Connection failed');\n }\n\n if (!response.partyId) {\n throw new Error('No partyId in response');\n }\n\n // Return result\n return {\n partyId: response.partyId,\n session: {\n walletId: this.walletId,\n network: ctx.network,\n createdAt: Date.now(),\n expiresAt: response.expiresAt,\n capabilitiesSnapshot: (response.capabilities || ['connect', 'signMessage']) as CapabilityKey[],\n metadata: {\n sessionToken: response.sessionToken || '',\n },\n },\n capabilities: (response.capabilities || ['connect', 'signMessage']) as CapabilityKey[],\n };\n } catch (err) {\n throw mapUnknownErrorToPartyLayerError(err, {\n walletId: this.walletId,\n phase: 'connect',\n transport: 'deeplink',\n });\n }\n }\n\n disconnect(\n _ctx: AdapterContext,\n _session: import('@partylayer/core').Session\n ): Promise<void> {\n // Cantor8 doesn't have explicit disconnect - session expires naturally\n // Clear any stored session tokens\n if (_session.metadata?.sessionToken) {\n // In production, might call a logout endpoint\n }\n return Promise.resolve();\n }\n\n restore(\n _ctx: AdapterContext,\n persisted: import('@partylayer/core').PersistedSession\n ): Promise<import('@partylayer/core').Session | null> {\n // Check if we have a session token\n const sessionToken = persisted.metadata?.sessionToken;\n if (typeof sessionToken !== 'string') {\n return Promise.resolve(null); // No token to restore\n }\n\n // In production, might validate token with vendor API\n // For now, if token exists and session not expired, restore\n if (persisted.expiresAt && Date.now() >= persisted.expiresAt) {\n return Promise.resolve(null); // Expired\n }\n\n // Return restored session\n return Promise.resolve({\n ...persisted,\n walletId: this.walletId,\n });\n }\n\n async signMessage(\n ctx: AdapterContext,\n session: import('@partylayer/core').Session,\n params: SignMessageParams\n ): Promise<import('@partylayer/core').SignedMessage> {\n try {\n const state = this.generateState();\n const redirectUri = this.vendorConfig.redirectUri || `${ctx.origin}/callback`;\n const request: import('@partylayer/core').SignRequest = {\n message: params.message,\n state,\n redirectUri,\n };\n\n const signUrl = this.vendorModule.createSignUrl(request, this.vendorConfig);\n\n const transportOptions: import('@partylayer/core').TransportOptions = {\n timeoutMs: 60000,\n allowedOrigins: [ctx.origin],\n origin: ctx.origin,\n };\n\n const response = await this.transport.openSignRequest(\n signUrl,\n request,\n transportOptions\n );\n\n if (response.error) {\n if (response.error.code === 'USER_REJECTED') {\n throw new UserRejectedError('User rejected signing');\n }\n throw new Error(response.error.message || 'Signing failed');\n }\n\n if (!response.signature) {\n throw new Error('No signature in response');\n }\n\n return {\n message: params.message,\n signature: toSignature(response.signature),\n partyId: session.partyId,\n };\n } catch (err) {\n throw mapUnknownErrorToPartyLayerError(err, {\n walletId: this.walletId,\n phase: 'signMessage',\n transport: 'deeplink',\n });\n }\n }\n\n async signTransaction(\n ctx: AdapterContext,\n session: import('@partylayer/core').Session,\n params: SignTransactionParams\n ): Promise<import('@partylayer/core').SignedTransaction> {\n try {\n const state = this.generateState();\n const redirectUri = this.vendorConfig.redirectUri || `${ctx.origin}/callback`;\n const request: import('@partylayer/core').SignRequest = {\n transaction: params.tx,\n state,\n redirectUri,\n };\n\n const signUrl = this.vendorModule.createSignUrl(request, this.vendorConfig);\n\n const transportOptions: import('@partylayer/core').TransportOptions = {\n timeoutMs: 60000,\n allowedOrigins: [ctx.origin],\n origin: ctx.origin,\n };\n\n const response = await this.transport.openSignRequest(\n signUrl,\n request,\n transportOptions\n );\n\n if (response.error) {\n if (response.error.code === 'USER_REJECTED') {\n throw new UserRejectedError('User rejected signing');\n }\n throw new Error(response.error.message || 'Signing failed');\n }\n\n // Handle async approval (jobId)\n if (response.jobId && this.vendorModule.pollJobStatus) {\n const statusUrl = this.vendorConfig.statusEndpoint || '';\n const jobStatus = await this.vendorModule.pollJobStatus(\n response.jobId,\n statusUrl,\n 60000\n );\n\n if (jobStatus.status === 'denied') {\n throw new UserRejectedError('Transaction signing denied');\n }\n\n if (jobStatus.status === 'approved' && jobStatus.result?.signature) {\n const signedTx = typeof params.tx === 'object' && params.tx !== null\n ? { ...params.tx as Record<string, unknown>, signature: jobStatus.result.signature }\n : { tx: params.tx, signature: jobStatus.result.signature };\n return {\n signedTx,\n transactionHash: jobStatus.result.transactionHash\n ? toTransactionHash(jobStatus.result.transactionHash)\n : toTransactionHash('pending'),\n partyId: session.partyId,\n };\n }\n\n throw new Error('Job not completed');\n }\n\n if (!response.signature) {\n throw new Error('No signature in response');\n }\n\n const signedTx = typeof params.tx === 'object' && params.tx !== null\n ? { ...params.tx as Record<string, unknown>, signature: response.signature }\n : { tx: params.tx, signature: response.signature };\n return {\n signedTx,\n transactionHash: response.transactionHash\n ? toTransactionHash(response.transactionHash)\n : toTransactionHash('pending'),\n partyId: session.partyId,\n };\n } catch (err) {\n throw mapUnknownErrorToPartyLayerError(err, {\n walletId: this.walletId,\n phase: 'signTransaction',\n transport: 'deeplink',\n });\n }\n }\n\n /**\n * Generate random state nonce\n */\n private generateState(): string {\n const array = new Uint8Array(32);\n crypto.getRandomValues(array);\n return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/vendor.ts","../src/cantor8-adapter.ts"],"names":["toPartyId","toWalletId","MockTransport","DeepLinkTransport","UserRejectedError","mapUnknownErrorToPartyLayerError","toSignature","signedTx","toTransactionHash"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Cantor8 Vendor Integration Module\n * \n * This module abstracts vendor-specific endpoints and can be swapped\n * without breaking the adapter API.\n * \n * References:\n * - Cantor8 ecosystem: https://www.canton.network/ecosystem/cantor8\n * - Cantor8 site: https://cantor8.tech/about\n */\n\nimport type {\n ConnectRequest,\n ConnectResponse,\n SignRequest,\n SignResponse,\n JobStatus,\n} from '@partylayer/core';\nimport { toPartyId } from '@partylayer/core';\n\n/**\n * Vendor configuration\n */\nexport interface Cantor8VendorConfig {\n /** Deep link scheme (e.g., \"cantor8\") */\n deepLinkScheme?: string;\n /** Universal link base URL (e.g., \"https://app.cantor8.tech\") */\n universalLinkBase?: string;\n /** Connect endpoint path */\n connectEndpoint?: string;\n /** Sign endpoint path */\n signEndpoint?: string;\n /** Job status endpoint path (for async approvals) */\n statusEndpoint?: string;\n /** Redirect URI for callbacks */\n redirectUri?: string;\n}\n\n/**\n * Vendor module interface\n * \n * Implementations can be swapped without changing adapter code.\n */\nexport interface Cantor8VendorModule {\n /**\n * Create connect URL\n */\n createConnectUrl(request: ConnectRequest, config: Cantor8VendorConfig): string;\n\n /**\n * Parse connect callback\n */\n parseConnectCallback(\n callbackData: unknown,\n expectedState: string\n ): ConnectResponse;\n\n /**\n * Create sign URL\n */\n createSignUrl(request: SignRequest, config: Cantor8VendorConfig): string;\n\n /**\n * Parse sign callback\n */\n parseSignCallback(\n callbackData: unknown,\n expectedState: string\n ): SignResponse;\n\n /**\n * Poll job status (optional, for async approvals)\n */\n pollJobStatus?(\n jobId: string,\n statusUrl: string,\n timeoutMs: number\n ): Promise<JobStatus>;\n}\n\n/**\n * Default/stub vendor module\n * \n * This implementation provides a structured interface but throws\n * NotConfiguredError with clear instructions when vendor endpoints\n * are not configured.\n */\nexport class StubCantor8VendorModule implements Cantor8VendorModule {\n createConnectUrl(request: ConnectRequest, config: Cantor8VendorConfig): string {\n // Prefer universal link if configured\n if (config.universalLinkBase) {\n const endpoint = config.connectEndpoint || '/connect';\n const url = new URL(endpoint, config.universalLinkBase);\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return url.toString();\n }\n\n // Fallback to deep link scheme\n if (config.deepLinkScheme) {\n const params = new URLSearchParams();\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n params.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return `${config.deepLinkScheme}://connect?${params.toString()}`;\n }\n\n throw new Error(\n 'Cantor8 vendor not configured. Please set deepLinkScheme or universalLinkBase in adapter config.'\n );\n }\n\n parseConnectCallback(\n callbackData: unknown,\n expectedState: string\n ): ConnectResponse {\n // Parse callback data (could be URL params, postMessage, etc.)\n const data = callbackData as Record<string, unknown>;\n\n // Validate state\n if (data.state !== expectedState) {\n throw new Error('State mismatch in callback');\n }\n\n // Return response\n return {\n state: String(data.state),\n partyId: data.partyId ? toPartyId(String(data.partyId)) : undefined,\n sessionToken: data.sessionToken ? String(data.sessionToken) : undefined,\n expiresAt: data.expiresAt ? Number(data.expiresAt) : undefined,\n capabilities: data.capabilities\n ? (Array.isArray(data.capabilities) ? data.capabilities.map(String) : [])\n : undefined,\n error: data.error\n ? {\n code: String((data.error as Record<string, unknown>).code || 'UNKNOWN'),\n message: String((data.error as Record<string, unknown>).message || 'Unknown error'),\n }\n : undefined,\n };\n }\n\n createSignUrl(request: SignRequest, config: Cantor8VendorConfig): string {\n if (config.universalLinkBase) {\n const endpoint = config.signEndpoint || '/sign';\n const url = new URL(endpoint, config.universalLinkBase);\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return url.toString();\n }\n\n if (config.deepLinkScheme) {\n const params = new URLSearchParams();\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n params.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return `${config.deepLinkScheme}://sign?${params.toString()}`;\n }\n\n throw new Error('Cantor8 vendor not configured');\n }\n\n parseSignCallback(\n callbackData: unknown,\n expectedState: string\n ): SignResponse {\n const data = callbackData as Record<string, unknown>;\n\n if (data.state !== expectedState) {\n throw new Error('State mismatch in callback');\n }\n\n return {\n state: String(data.state),\n signature: data.signature ? String(data.signature) : undefined,\n transactionHash: data.transactionHash ? String(data.transactionHash) : undefined,\n jobId: data.jobId ? String(data.jobId) : undefined,\n error: data.error\n ? {\n code: String((data.error as Record<string, unknown>).code || 'UNKNOWN'),\n message: String((data.error as Record<string, unknown>).message || 'Unknown error'),\n }\n : undefined,\n };\n }\n}\n","/**\n * Cantor8 (C8) Wallet Adapter\n * \n * Implements WalletAdapter interface for Cantor8 wallet using deep link transport.\n * \n * References:\n * - Cantor8 ecosystem: https://www.canton.network/ecosystem/cantor8\n * - Cantor8 site: https://cantor8.tech/about\n * - Wallet Integration Guide: https://docs.digitalasset.com/integrate/devnet/index.html\n */\n\nimport type {\n WalletAdapter,\n AdapterContext,\n AdapterDetectResult,\n AdapterConnectResult,\n SignMessageParams,\n SignTransactionParams,\n} from '@partylayer/core';\nimport {\n toWalletId,\n toSignature,\n toTransactionHash,\n UserRejectedError,\n mapUnknownErrorToPartyLayerError,\n type CapabilityKey,\n} from '@partylayer/core';\nimport { DeepLinkTransport, MockTransport } from '@partylayer/core';\nimport type {\n Cantor8VendorModule,\n Cantor8VendorConfig,\n} from './vendor';\nimport {\n StubCantor8VendorModule,\n} from './vendor';\n\n/**\n * Cantor8 adapter configuration\n */\nexport interface Cantor8AdapterConfig {\n /** Vendor module (defaults to stub) */\n vendorModule?: Cantor8VendorModule;\n /** Vendor configuration */\n vendorConfig?: Cantor8VendorConfig;\n /** Use mock transport in development */\n useMockTransport?: boolean;\n}\n\n/**\n * Cantor8 Wallet Adapter\n */\nexport class Cantor8Adapter implements WalletAdapter {\n readonly walletId = toWalletId('cantor8');\n readonly name = 'Cantor8';\n\n private vendorModule: Cantor8VendorModule;\n private vendorConfig: Cantor8VendorConfig;\n private transport: DeepLinkTransport | MockTransport;\n\n constructor(config: Cantor8AdapterConfig = {}) {\n this.vendorModule = config.vendorModule || new StubCantor8VendorModule();\n this.vendorConfig = config.vendorConfig || {};\n \n // Use mock transport in development if configured\n if (config.useMockTransport || process.env.NODE_ENV === 'development') {\n this.transport = new MockTransport();\n } else {\n this.transport = new DeepLinkTransport();\n }\n }\n\n getCapabilities(): CapabilityKey[] {\n return [\n 'connect',\n 'disconnect',\n 'restore',\n 'deeplink',\n 'signMessage',\n 'signTransaction',\n ];\n }\n\n detectInstalled(): Promise<AdapterDetectResult> {\n // Cantor8 is a mobile wallet - detection is not straightforward\n // We can check for deep link support or user agent hints\n if (typeof window === 'undefined') {\n return Promise.resolve({ installed: false, reason: 'Browser environment required' });\n }\n\n // Check if device supports deep links (mobile)\n const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n \n // For now, assume installed if mobile device\n // In production, might check for specific user agent or other hints\n return Promise.resolve({\n installed: isMobile,\n reason: isMobile ? undefined : 'Cantor8 is a mobile wallet',\n });\n }\n\n async connect(\n ctx: AdapterContext,\n opts?: {\n timeoutMs?: number;\n partyId?: import('@partylayer/core').PartyId;\n }\n ): Promise<AdapterConnectResult> {\n try {\n // Create connect request\n const state = this.generateState();\n const redirectUri = this.vendorConfig.redirectUri || `${ctx.origin}/callback`;\n const request: import('@partylayer/core').ConnectRequest = {\n appName: ctx.appName,\n origin: ctx.origin,\n network: ctx.network,\n requestedCapabilities: undefined, // Cantor8 doesn't support capability filtering yet\n state,\n redirectUri,\n };\n\n // Create connect URL using vendor module\n const connectUrl = this.vendorModule.createConnectUrl(request, this.vendorConfig);\n\n // Open via transport\n const transportOptions: import('@partylayer/core').TransportOptions = {\n timeoutMs: opts?.timeoutMs || 60000,\n allowedOrigins: [ctx.origin],\n origin: ctx.origin,\n };\n\n const response = await this.transport.openConnectRequest(\n connectUrl,\n request,\n transportOptions\n );\n\n // Check for error\n if (response.error) {\n if (response.error.code === 'USER_REJECTED' || response.error.code === 'CANCELLED') {\n throw new UserRejectedError('User rejected connection');\n }\n throw new Error(response.error.message || 'Connection failed');\n }\n\n if (!response.partyId) {\n throw new Error('No partyId in response');\n }\n\n // Return result\n return {\n partyId: response.partyId,\n session: {\n walletId: this.walletId,\n network: ctx.network,\n createdAt: Date.now(),\n expiresAt: response.expiresAt,\n capabilitiesSnapshot: (response.capabilities || ['connect', 'signMessage']) as CapabilityKey[],\n metadata: {\n sessionToken: response.sessionToken || '',\n },\n },\n capabilities: (response.capabilities || ['connect', 'signMessage']) as CapabilityKey[],\n };\n } catch (err) {\n throw mapUnknownErrorToPartyLayerError(err, {\n walletId: this.walletId,\n phase: 'connect',\n transport: 'deeplink',\n });\n }\n }\n\n disconnect(\n _ctx: AdapterContext,\n _session: import('@partylayer/core').Session\n ): Promise<void> {\n // Cantor8 doesn't have explicit disconnect - session expires naturally\n // Clear any stored session tokens\n if (_session.metadata?.sessionToken) {\n // In production, might call a logout endpoint\n }\n return Promise.resolve();\n }\n\n restore(\n _ctx: AdapterContext,\n persisted: import('@partylayer/core').PersistedSession\n ): Promise<import('@partylayer/core').Session | null> {\n // Check if we have a session token\n const sessionToken = persisted.metadata?.sessionToken;\n if (typeof sessionToken !== 'string') {\n return Promise.resolve(null); // No token to restore\n }\n\n // In production, might validate token with vendor API\n // For now, if token exists and session not expired, restore\n if (persisted.expiresAt && Date.now() >= persisted.expiresAt) {\n return Promise.resolve(null); // Expired\n }\n\n // Return restored session\n return Promise.resolve({\n ...persisted,\n walletId: this.walletId,\n });\n }\n\n async signMessage(\n ctx: AdapterContext,\n session: import('@partylayer/core').Session,\n params: SignMessageParams\n ): Promise<import('@partylayer/core').SignedMessage> {\n try {\n const state = this.generateState();\n const redirectUri = this.vendorConfig.redirectUri || `${ctx.origin}/callback`;\n const request: import('@partylayer/core').SignRequest = {\n message: params.message,\n state,\n redirectUri,\n };\n\n const signUrl = this.vendorModule.createSignUrl(request, this.vendorConfig);\n\n const transportOptions: import('@partylayer/core').TransportOptions = {\n timeoutMs: 60000,\n allowedOrigins: [ctx.origin],\n origin: ctx.origin,\n };\n\n const response = await this.transport.openSignRequest(\n signUrl,\n request,\n transportOptions\n );\n\n if (response.error) {\n if (response.error.code === 'USER_REJECTED') {\n throw new UserRejectedError('User rejected signing');\n }\n throw new Error(response.error.message || 'Signing failed');\n }\n\n if (!response.signature) {\n throw new Error('No signature in response');\n }\n\n return {\n message: params.message,\n signature: toSignature(response.signature),\n partyId: session.partyId,\n };\n } catch (err) {\n throw mapUnknownErrorToPartyLayerError(err, {\n walletId: this.walletId,\n phase: 'signMessage',\n transport: 'deeplink',\n });\n }\n }\n\n async signTransaction(\n ctx: AdapterContext,\n session: import('@partylayer/core').Session,\n params: SignTransactionParams\n ): Promise<import('@partylayer/core').SignedTransaction> {\n try {\n const state = this.generateState();\n const redirectUri = this.vendorConfig.redirectUri || `${ctx.origin}/callback`;\n const request: import('@partylayer/core').SignRequest = {\n transaction: params.tx,\n state,\n redirectUri,\n };\n\n const signUrl = this.vendorModule.createSignUrl(request, this.vendorConfig);\n\n const transportOptions: import('@partylayer/core').TransportOptions = {\n timeoutMs: 60000,\n allowedOrigins: [ctx.origin],\n origin: ctx.origin,\n };\n\n const response = await this.transport.openSignRequest(\n signUrl,\n request,\n transportOptions\n );\n\n if (response.error) {\n if (response.error.code === 'USER_REJECTED') {\n throw new UserRejectedError('User rejected signing');\n }\n throw new Error(response.error.message || 'Signing failed');\n }\n\n // Handle async approval (jobId)\n if (response.jobId && this.vendorModule.pollJobStatus) {\n const statusUrl = this.vendorConfig.statusEndpoint || '';\n const jobStatus = await this.vendorModule.pollJobStatus(\n response.jobId,\n statusUrl,\n 60000\n );\n\n if (jobStatus.status === 'denied') {\n throw new UserRejectedError('Transaction signing denied');\n }\n\n if (jobStatus.status === 'approved' && jobStatus.result?.signature) {\n const signedTx = typeof params.tx === 'object' && params.tx !== null\n ? { ...params.tx as Record<string, unknown>, signature: jobStatus.result.signature }\n : { tx: params.tx, signature: jobStatus.result.signature };\n return {\n signedTx,\n transactionHash: jobStatus.result.transactionHash\n ? toTransactionHash(jobStatus.result.transactionHash)\n : toTransactionHash('pending'),\n partyId: session.partyId,\n };\n }\n\n throw new Error('Job not completed');\n }\n\n if (!response.signature) {\n throw new Error('No signature in response');\n }\n\n const signedTx = typeof params.tx === 'object' && params.tx !== null\n ? { ...params.tx as Record<string, unknown>, signature: response.signature }\n : { tx: params.tx, signature: response.signature };\n return {\n signedTx,\n transactionHash: response.transactionHash\n ? toTransactionHash(response.transactionHash)\n : toTransactionHash('pending'),\n partyId: session.partyId,\n };\n } catch (err) {\n throw mapUnknownErrorToPartyLayerError(err, {\n walletId: this.walletId,\n phase: 'signTransaction',\n transport: 'deeplink',\n });\n }\n }\n\n /**\n * Generate random state nonce\n */\n private generateState(): string {\n const array = new Uint8Array(32);\n crypto.getRandomValues(array);\n return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');\n }\n}\n"]}
|
package/dist/index.mjs
CHANGED
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vendor.ts","../src/cantor8-adapter.ts"],"names":["signedTx"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Cantor8 Vendor Integration Module\n * \n * This module abstracts vendor-specific endpoints and can be swapped\n * without breaking the adapter API.\n * \n * References:\n * - Cantor8 ecosystem: https://www.canton.network/ecosystem/cantor8\n * - Cantor8 site: https://cantor8.tech/about\n */\n\nimport type {\n ConnectRequest,\n ConnectResponse,\n SignRequest,\n SignResponse,\n JobStatus,\n} from '@partylayer/core';\nimport { toPartyId } from '@partylayer/core';\n\n/**\n * Vendor configuration\n */\nexport interface Cantor8VendorConfig {\n /** Deep link scheme (e.g., \"cantor8\") */\n deepLinkScheme?: string;\n /** Universal link base URL (e.g., \"https://app.cantor8.tech\") */\n universalLinkBase?: string;\n /** Connect endpoint path */\n connectEndpoint?: string;\n /** Sign endpoint path */\n signEndpoint?: string;\n /** Job status endpoint path (for async approvals) */\n statusEndpoint?: string;\n /** Redirect URI for callbacks */\n redirectUri?: string;\n}\n\n/**\n * Vendor module interface\n * \n * Implementations can be swapped without changing adapter code.\n */\nexport interface Cantor8VendorModule {\n /**\n * Create connect URL\n */\n createConnectUrl(request: ConnectRequest, config: Cantor8VendorConfig): string;\n\n /**\n * Parse connect callback\n */\n parseConnectCallback(\n callbackData: unknown,\n expectedState: string\n ): ConnectResponse;\n\n /**\n * Create sign URL\n */\n createSignUrl(request: SignRequest, config: Cantor8VendorConfig): string;\n\n /**\n * Parse sign callback\n */\n parseSignCallback(\n callbackData: unknown,\n expectedState: string\n ): SignResponse;\n\n /**\n * Poll job status (optional, for async approvals)\n */\n pollJobStatus?(\n jobId: string,\n statusUrl: string,\n timeoutMs: number\n ): Promise<JobStatus>;\n}\n\n/**\n * Default/stub vendor module\n * \n * This implementation provides a structured interface but throws\n * NotConfiguredError with clear instructions when vendor endpoints\n * are not configured.\n */\nexport class StubCantor8VendorModule implements Cantor8VendorModule {\n createConnectUrl(request: ConnectRequest, config: Cantor8VendorConfig): string {\n // Prefer universal link if configured\n if (config.universalLinkBase) {\n const endpoint = config.connectEndpoint || '/connect';\n const url = new URL(endpoint, config.universalLinkBase);\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return url.toString();\n }\n\n // Fallback to deep link scheme\n if (config.deepLinkScheme) {\n const params = new URLSearchParams();\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n params.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return `${config.deepLinkScheme}://connect?${params.toString()}`;\n }\n\n throw new Error(\n 'Cantor8 vendor not configured. Please set deepLinkScheme or universalLinkBase in adapter config.'\n );\n }\n\n parseConnectCallback(\n callbackData: unknown,\n expectedState: string\n ): ConnectResponse {\n // Parse callback data (could be URL params, postMessage, etc.)\n const data = callbackData as Record<string, unknown>;\n\n // Validate state\n if (data.state !== expectedState) {\n throw new Error('State mismatch in callback');\n }\n\n // Return response\n return {\n state: String(data.state),\n partyId: data.partyId ? toPartyId(String(data.partyId)) : undefined,\n sessionToken: data.sessionToken ? String(data.sessionToken) : undefined,\n expiresAt: data.expiresAt ? Number(data.expiresAt) : undefined,\n capabilities: data.capabilities\n ? (Array.isArray(data.capabilities) ? data.capabilities.map(String) : [])\n : undefined,\n error: data.error\n ? {\n code: String((data.error as Record<string, unknown>).code || 'UNKNOWN'),\n message: String((data.error as Record<string, unknown>).message || 'Unknown error'),\n }\n : undefined,\n };\n }\n\n createSignUrl(request: SignRequest, config: Cantor8VendorConfig): string {\n if (config.universalLinkBase) {\n const endpoint = config.signEndpoint || '/sign';\n const url = new URL(endpoint, config.universalLinkBase);\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return url.toString();\n }\n\n if (config.deepLinkScheme) {\n const params = new URLSearchParams();\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n params.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return `${config.deepLinkScheme}://sign?${params.toString()}`;\n }\n\n throw new Error('Cantor8 vendor not configured');\n }\n\n parseSignCallback(\n callbackData: unknown,\n expectedState: string\n ): SignResponse {\n const data = callbackData as Record<string, unknown>;\n\n if (data.state !== expectedState) {\n throw new Error('State mismatch in callback');\n }\n\n return {\n state: String(data.state),\n signature: data.signature ? String(data.signature) : undefined,\n transactionHash: data.transactionHash ? String(data.transactionHash) : undefined,\n jobId: data.jobId ? String(data.jobId) : undefined,\n error: data.error\n ? {\n code: String((data.error as Record<string, unknown>).code || 'UNKNOWN'),\n message: String((data.error as Record<string, unknown>).message || 'Unknown error'),\n }\n : undefined,\n };\n }\n}\n","/**\n * Cantor8 (C8) Wallet Adapter\n * \n * Implements WalletAdapter interface for Cantor8 wallet using deep link transport.\n * \n * References:\n * - Cantor8 ecosystem: https://www.canton.network/ecosystem/cantor8\n * - Cantor8 site: https://cantor8.tech/about\n * - Wallet Integration Guide: https://docs.digitalasset.com/integrate/devnet/index.html\n */\n\nimport type {\n WalletAdapter,\n AdapterContext,\n AdapterDetectResult,\n AdapterConnectResult,\n SignMessageParams,\n SignTransactionParams,\n} from '@partylayer/core';\nimport {\n toWalletId,\n toSignature,\n toTransactionHash,\n UserRejectedError,\n mapUnknownErrorToPartyLayerError,\n type CapabilityKey,\n} from '@partylayer/core';\nimport { DeepLinkTransport, MockTransport } from '@partylayer/core';\nimport type {\n Cantor8VendorModule,\n Cantor8VendorConfig,\n} from './vendor';\nimport {\n StubCantor8VendorModule,\n} from './vendor';\n\n/**\n * Cantor8 adapter configuration\n */\nexport interface Cantor8AdapterConfig {\n /** Vendor module (defaults to stub) */\n vendorModule?: Cantor8VendorModule;\n /** Vendor configuration */\n vendorConfig?: Cantor8VendorConfig;\n /** Use mock transport in development */\n useMockTransport?: boolean;\n}\n\n/**\n * Cantor8 Wallet Adapter\n */\nexport class Cantor8Adapter implements WalletAdapter {\n readonly walletId = toWalletId('cantor8');\n readonly name = 'Cantor8';\n\n private vendorModule: Cantor8VendorModule;\n private vendorConfig: Cantor8VendorConfig;\n private transport: DeepLinkTransport | MockTransport;\n\n constructor(config: Cantor8AdapterConfig = {}) {\n this.vendorModule = config.vendorModule || new StubCantor8VendorModule();\n this.vendorConfig = config.vendorConfig || {};\n \n // Use mock transport in development if configured\n if (config.useMockTransport || process.env.NODE_ENV === 'development') {\n this.transport = new MockTransport();\n } else {\n this.transport = new DeepLinkTransport();\n }\n }\n\n getCapabilities(): CapabilityKey[] {\n return [\n 'connect',\n 'disconnect',\n 'deeplink',\n 'signMessage',\n 'signTransaction',\n // restore depends on sessionToken support\n ];\n }\n\n detectInstalled(): Promise<AdapterDetectResult> {\n // Cantor8 is a mobile wallet - detection is not straightforward\n // We can check for deep link support or user agent hints\n if (typeof window === 'undefined') {\n return Promise.resolve({ installed: false, reason: 'Browser environment required' });\n }\n\n // Check if device supports deep links (mobile)\n const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n \n // For now, assume installed if mobile device\n // In production, might check for specific user agent or other hints\n return Promise.resolve({\n installed: isMobile,\n reason: isMobile ? undefined : 'Cantor8 is a mobile wallet',\n });\n }\n\n async connect(\n ctx: AdapterContext,\n opts?: {\n timeoutMs?: number;\n partyId?: import('@partylayer/core').PartyId;\n }\n ): Promise<AdapterConnectResult> {\n try {\n // Create connect request\n const state = this.generateState();\n const redirectUri = this.vendorConfig.redirectUri || `${ctx.origin}/callback`;\n const request: import('@partylayer/core').ConnectRequest = {\n appName: ctx.appName,\n origin: ctx.origin,\n network: ctx.network,\n requestedCapabilities: undefined, // Cantor8 doesn't support capability filtering yet\n state,\n redirectUri,\n };\n\n // Create connect URL using vendor module\n const connectUrl = this.vendorModule.createConnectUrl(request, this.vendorConfig);\n\n // Open via transport\n const transportOptions: import('@partylayer/core').TransportOptions = {\n timeoutMs: opts?.timeoutMs || 60000,\n allowedOrigins: [ctx.origin],\n origin: ctx.origin,\n };\n\n const response = await this.transport.openConnectRequest(\n connectUrl,\n request,\n transportOptions\n );\n\n // Check for error\n if (response.error) {\n if (response.error.code === 'USER_REJECTED' || response.error.code === 'CANCELLED') {\n throw new UserRejectedError('User rejected connection');\n }\n throw new Error(response.error.message || 'Connection failed');\n }\n\n if (!response.partyId) {\n throw new Error('No partyId in response');\n }\n\n // Return result\n return {\n partyId: response.partyId,\n session: {\n walletId: this.walletId,\n network: ctx.network,\n createdAt: Date.now(),\n expiresAt: response.expiresAt,\n capabilitiesSnapshot: (response.capabilities || ['connect', 'signMessage']) as CapabilityKey[],\n metadata: {\n sessionToken: response.sessionToken || '',\n },\n },\n capabilities: (response.capabilities || ['connect', 'signMessage']) as CapabilityKey[],\n };\n } catch (err) {\n throw mapUnknownErrorToPartyLayerError(err, {\n walletId: this.walletId,\n phase: 'connect',\n transport: 'deeplink',\n });\n }\n }\n\n disconnect(\n _ctx: AdapterContext,\n _session: import('@partylayer/core').Session\n ): Promise<void> {\n // Cantor8 doesn't have explicit disconnect - session expires naturally\n // Clear any stored session tokens\n if (_session.metadata?.sessionToken) {\n // In production, might call a logout endpoint\n }\n return Promise.resolve();\n }\n\n restore(\n _ctx: AdapterContext,\n persisted: import('@partylayer/core').PersistedSession\n ): Promise<import('@partylayer/core').Session | null> {\n // Check if we have a session token\n const sessionToken = persisted.metadata?.sessionToken;\n if (typeof sessionToken !== 'string') {\n return Promise.resolve(null); // No token to restore\n }\n\n // In production, might validate token with vendor API\n // For now, if token exists and session not expired, restore\n if (persisted.expiresAt && Date.now() >= persisted.expiresAt) {\n return Promise.resolve(null); // Expired\n }\n\n // Return restored session\n return Promise.resolve({\n ...persisted,\n walletId: this.walletId,\n });\n }\n\n async signMessage(\n ctx: AdapterContext,\n session: import('@partylayer/core').Session,\n params: SignMessageParams\n ): Promise<import('@partylayer/core').SignedMessage> {\n try {\n const state = this.generateState();\n const redirectUri = this.vendorConfig.redirectUri || `${ctx.origin}/callback`;\n const request: import('@partylayer/core').SignRequest = {\n message: params.message,\n state,\n redirectUri,\n };\n\n const signUrl = this.vendorModule.createSignUrl(request, this.vendorConfig);\n\n const transportOptions: import('@partylayer/core').TransportOptions = {\n timeoutMs: 60000,\n allowedOrigins: [ctx.origin],\n origin: ctx.origin,\n };\n\n const response = await this.transport.openSignRequest(\n signUrl,\n request,\n transportOptions\n );\n\n if (response.error) {\n if (response.error.code === 'USER_REJECTED') {\n throw new UserRejectedError('User rejected signing');\n }\n throw new Error(response.error.message || 'Signing failed');\n }\n\n if (!response.signature) {\n throw new Error('No signature in response');\n }\n\n return {\n message: params.message,\n signature: toSignature(response.signature),\n partyId: session.partyId,\n };\n } catch (err) {\n throw mapUnknownErrorToPartyLayerError(err, {\n walletId: this.walletId,\n phase: 'signMessage',\n transport: 'deeplink',\n });\n }\n }\n\n async signTransaction(\n ctx: AdapterContext,\n session: import('@partylayer/core').Session,\n params: SignTransactionParams\n ): Promise<import('@partylayer/core').SignedTransaction> {\n try {\n const state = this.generateState();\n const redirectUri = this.vendorConfig.redirectUri || `${ctx.origin}/callback`;\n const request: import('@partylayer/core').SignRequest = {\n transaction: params.tx,\n state,\n redirectUri,\n };\n\n const signUrl = this.vendorModule.createSignUrl(request, this.vendorConfig);\n\n const transportOptions: import('@partylayer/core').TransportOptions = {\n timeoutMs: 60000,\n allowedOrigins: [ctx.origin],\n origin: ctx.origin,\n };\n\n const response = await this.transport.openSignRequest(\n signUrl,\n request,\n transportOptions\n );\n\n if (response.error) {\n if (response.error.code === 'USER_REJECTED') {\n throw new UserRejectedError('User rejected signing');\n }\n throw new Error(response.error.message || 'Signing failed');\n }\n\n // Handle async approval (jobId)\n if (response.jobId && this.vendorModule.pollJobStatus) {\n const statusUrl = this.vendorConfig.statusEndpoint || '';\n const jobStatus = await this.vendorModule.pollJobStatus(\n response.jobId,\n statusUrl,\n 60000\n );\n\n if (jobStatus.status === 'denied') {\n throw new UserRejectedError('Transaction signing denied');\n }\n\n if (jobStatus.status === 'approved' && jobStatus.result?.signature) {\n const signedTx = typeof params.tx === 'object' && params.tx !== null\n ? { ...params.tx as Record<string, unknown>, signature: jobStatus.result.signature }\n : { tx: params.tx, signature: jobStatus.result.signature };\n return {\n signedTx,\n transactionHash: jobStatus.result.transactionHash\n ? toTransactionHash(jobStatus.result.transactionHash)\n : toTransactionHash('pending'),\n partyId: session.partyId,\n };\n }\n\n throw new Error('Job not completed');\n }\n\n if (!response.signature) {\n throw new Error('No signature in response');\n }\n\n const signedTx = typeof params.tx === 'object' && params.tx !== null\n ? { ...params.tx as Record<string, unknown>, signature: response.signature }\n : { tx: params.tx, signature: response.signature };\n return {\n signedTx,\n transactionHash: response.transactionHash\n ? toTransactionHash(response.transactionHash)\n : toTransactionHash('pending'),\n partyId: session.partyId,\n };\n } catch (err) {\n throw mapUnknownErrorToPartyLayerError(err, {\n walletId: this.walletId,\n phase: 'signTransaction',\n transport: 'deeplink',\n });\n }\n }\n\n /**\n * Generate random state nonce\n */\n private generateState(): string {\n const array = new Uint8Array(32);\n crypto.getRandomValues(array);\n return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/vendor.ts","../src/cantor8-adapter.ts"],"names":["signedTx"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Cantor8 Vendor Integration Module\n * \n * This module abstracts vendor-specific endpoints and can be swapped\n * without breaking the adapter API.\n * \n * References:\n * - Cantor8 ecosystem: https://www.canton.network/ecosystem/cantor8\n * - Cantor8 site: https://cantor8.tech/about\n */\n\nimport type {\n ConnectRequest,\n ConnectResponse,\n SignRequest,\n SignResponse,\n JobStatus,\n} from '@partylayer/core';\nimport { toPartyId } from '@partylayer/core';\n\n/**\n * Vendor configuration\n */\nexport interface Cantor8VendorConfig {\n /** Deep link scheme (e.g., \"cantor8\") */\n deepLinkScheme?: string;\n /** Universal link base URL (e.g., \"https://app.cantor8.tech\") */\n universalLinkBase?: string;\n /** Connect endpoint path */\n connectEndpoint?: string;\n /** Sign endpoint path */\n signEndpoint?: string;\n /** Job status endpoint path (for async approvals) */\n statusEndpoint?: string;\n /** Redirect URI for callbacks */\n redirectUri?: string;\n}\n\n/**\n * Vendor module interface\n * \n * Implementations can be swapped without changing adapter code.\n */\nexport interface Cantor8VendorModule {\n /**\n * Create connect URL\n */\n createConnectUrl(request: ConnectRequest, config: Cantor8VendorConfig): string;\n\n /**\n * Parse connect callback\n */\n parseConnectCallback(\n callbackData: unknown,\n expectedState: string\n ): ConnectResponse;\n\n /**\n * Create sign URL\n */\n createSignUrl(request: SignRequest, config: Cantor8VendorConfig): string;\n\n /**\n * Parse sign callback\n */\n parseSignCallback(\n callbackData: unknown,\n expectedState: string\n ): SignResponse;\n\n /**\n * Poll job status (optional, for async approvals)\n */\n pollJobStatus?(\n jobId: string,\n statusUrl: string,\n timeoutMs: number\n ): Promise<JobStatus>;\n}\n\n/**\n * Default/stub vendor module\n * \n * This implementation provides a structured interface but throws\n * NotConfiguredError with clear instructions when vendor endpoints\n * are not configured.\n */\nexport class StubCantor8VendorModule implements Cantor8VendorModule {\n createConnectUrl(request: ConnectRequest, config: Cantor8VendorConfig): string {\n // Prefer universal link if configured\n if (config.universalLinkBase) {\n const endpoint = config.connectEndpoint || '/connect';\n const url = new URL(endpoint, config.universalLinkBase);\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return url.toString();\n }\n\n // Fallback to deep link scheme\n if (config.deepLinkScheme) {\n const params = new URLSearchParams();\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n params.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return `${config.deepLinkScheme}://connect?${params.toString()}`;\n }\n\n throw new Error(\n 'Cantor8 vendor not configured. Please set deepLinkScheme or universalLinkBase in adapter config.'\n );\n }\n\n parseConnectCallback(\n callbackData: unknown,\n expectedState: string\n ): ConnectResponse {\n // Parse callback data (could be URL params, postMessage, etc.)\n const data = callbackData as Record<string, unknown>;\n\n // Validate state\n if (data.state !== expectedState) {\n throw new Error('State mismatch in callback');\n }\n\n // Return response\n return {\n state: String(data.state),\n partyId: data.partyId ? toPartyId(String(data.partyId)) : undefined,\n sessionToken: data.sessionToken ? String(data.sessionToken) : undefined,\n expiresAt: data.expiresAt ? Number(data.expiresAt) : undefined,\n capabilities: data.capabilities\n ? (Array.isArray(data.capabilities) ? data.capabilities.map(String) : [])\n : undefined,\n error: data.error\n ? {\n code: String((data.error as Record<string, unknown>).code || 'UNKNOWN'),\n message: String((data.error as Record<string, unknown>).message || 'Unknown error'),\n }\n : undefined,\n };\n }\n\n createSignUrl(request: SignRequest, config: Cantor8VendorConfig): string {\n if (config.universalLinkBase) {\n const endpoint = config.signEndpoint || '/sign';\n const url = new URL(endpoint, config.universalLinkBase);\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return url.toString();\n }\n\n if (config.deepLinkScheme) {\n const params = new URLSearchParams();\n Object.entries(request).forEach(([key, value]) => {\n if (value !== undefined) {\n params.set(key, typeof value === 'string' ? value : JSON.stringify(value));\n }\n });\n return `${config.deepLinkScheme}://sign?${params.toString()}`;\n }\n\n throw new Error('Cantor8 vendor not configured');\n }\n\n parseSignCallback(\n callbackData: unknown,\n expectedState: string\n ): SignResponse {\n const data = callbackData as Record<string, unknown>;\n\n if (data.state !== expectedState) {\n throw new Error('State mismatch in callback');\n }\n\n return {\n state: String(data.state),\n signature: data.signature ? String(data.signature) : undefined,\n transactionHash: data.transactionHash ? String(data.transactionHash) : undefined,\n jobId: data.jobId ? String(data.jobId) : undefined,\n error: data.error\n ? {\n code: String((data.error as Record<string, unknown>).code || 'UNKNOWN'),\n message: String((data.error as Record<string, unknown>).message || 'Unknown error'),\n }\n : undefined,\n };\n }\n}\n","/**\n * Cantor8 (C8) Wallet Adapter\n * \n * Implements WalletAdapter interface for Cantor8 wallet using deep link transport.\n * \n * References:\n * - Cantor8 ecosystem: https://www.canton.network/ecosystem/cantor8\n * - Cantor8 site: https://cantor8.tech/about\n * - Wallet Integration Guide: https://docs.digitalasset.com/integrate/devnet/index.html\n */\n\nimport type {\n WalletAdapter,\n AdapterContext,\n AdapterDetectResult,\n AdapterConnectResult,\n SignMessageParams,\n SignTransactionParams,\n} from '@partylayer/core';\nimport {\n toWalletId,\n toSignature,\n toTransactionHash,\n UserRejectedError,\n mapUnknownErrorToPartyLayerError,\n type CapabilityKey,\n} from '@partylayer/core';\nimport { DeepLinkTransport, MockTransport } from '@partylayer/core';\nimport type {\n Cantor8VendorModule,\n Cantor8VendorConfig,\n} from './vendor';\nimport {\n StubCantor8VendorModule,\n} from './vendor';\n\n/**\n * Cantor8 adapter configuration\n */\nexport interface Cantor8AdapterConfig {\n /** Vendor module (defaults to stub) */\n vendorModule?: Cantor8VendorModule;\n /** Vendor configuration */\n vendorConfig?: Cantor8VendorConfig;\n /** Use mock transport in development */\n useMockTransport?: boolean;\n}\n\n/**\n * Cantor8 Wallet Adapter\n */\nexport class Cantor8Adapter implements WalletAdapter {\n readonly walletId = toWalletId('cantor8');\n readonly name = 'Cantor8';\n\n private vendorModule: Cantor8VendorModule;\n private vendorConfig: Cantor8VendorConfig;\n private transport: DeepLinkTransport | MockTransport;\n\n constructor(config: Cantor8AdapterConfig = {}) {\n this.vendorModule = config.vendorModule || new StubCantor8VendorModule();\n this.vendorConfig = config.vendorConfig || {};\n \n // Use mock transport in development if configured\n if (config.useMockTransport || process.env.NODE_ENV === 'development') {\n this.transport = new MockTransport();\n } else {\n this.transport = new DeepLinkTransport();\n }\n }\n\n getCapabilities(): CapabilityKey[] {\n return [\n 'connect',\n 'disconnect',\n 'restore',\n 'deeplink',\n 'signMessage',\n 'signTransaction',\n ];\n }\n\n detectInstalled(): Promise<AdapterDetectResult> {\n // Cantor8 is a mobile wallet - detection is not straightforward\n // We can check for deep link support or user agent hints\n if (typeof window === 'undefined') {\n return Promise.resolve({ installed: false, reason: 'Browser environment required' });\n }\n\n // Check if device supports deep links (mobile)\n const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n \n // For now, assume installed if mobile device\n // In production, might check for specific user agent or other hints\n return Promise.resolve({\n installed: isMobile,\n reason: isMobile ? undefined : 'Cantor8 is a mobile wallet',\n });\n }\n\n async connect(\n ctx: AdapterContext,\n opts?: {\n timeoutMs?: number;\n partyId?: import('@partylayer/core').PartyId;\n }\n ): Promise<AdapterConnectResult> {\n try {\n // Create connect request\n const state = this.generateState();\n const redirectUri = this.vendorConfig.redirectUri || `${ctx.origin}/callback`;\n const request: import('@partylayer/core').ConnectRequest = {\n appName: ctx.appName,\n origin: ctx.origin,\n network: ctx.network,\n requestedCapabilities: undefined, // Cantor8 doesn't support capability filtering yet\n state,\n redirectUri,\n };\n\n // Create connect URL using vendor module\n const connectUrl = this.vendorModule.createConnectUrl(request, this.vendorConfig);\n\n // Open via transport\n const transportOptions: import('@partylayer/core').TransportOptions = {\n timeoutMs: opts?.timeoutMs || 60000,\n allowedOrigins: [ctx.origin],\n origin: ctx.origin,\n };\n\n const response = await this.transport.openConnectRequest(\n connectUrl,\n request,\n transportOptions\n );\n\n // Check for error\n if (response.error) {\n if (response.error.code === 'USER_REJECTED' || response.error.code === 'CANCELLED') {\n throw new UserRejectedError('User rejected connection');\n }\n throw new Error(response.error.message || 'Connection failed');\n }\n\n if (!response.partyId) {\n throw new Error('No partyId in response');\n }\n\n // Return result\n return {\n partyId: response.partyId,\n session: {\n walletId: this.walletId,\n network: ctx.network,\n createdAt: Date.now(),\n expiresAt: response.expiresAt,\n capabilitiesSnapshot: (response.capabilities || ['connect', 'signMessage']) as CapabilityKey[],\n metadata: {\n sessionToken: response.sessionToken || '',\n },\n },\n capabilities: (response.capabilities || ['connect', 'signMessage']) as CapabilityKey[],\n };\n } catch (err) {\n throw mapUnknownErrorToPartyLayerError(err, {\n walletId: this.walletId,\n phase: 'connect',\n transport: 'deeplink',\n });\n }\n }\n\n disconnect(\n _ctx: AdapterContext,\n _session: import('@partylayer/core').Session\n ): Promise<void> {\n // Cantor8 doesn't have explicit disconnect - session expires naturally\n // Clear any stored session tokens\n if (_session.metadata?.sessionToken) {\n // In production, might call a logout endpoint\n }\n return Promise.resolve();\n }\n\n restore(\n _ctx: AdapterContext,\n persisted: import('@partylayer/core').PersistedSession\n ): Promise<import('@partylayer/core').Session | null> {\n // Check if we have a session token\n const sessionToken = persisted.metadata?.sessionToken;\n if (typeof sessionToken !== 'string') {\n return Promise.resolve(null); // No token to restore\n }\n\n // In production, might validate token with vendor API\n // For now, if token exists and session not expired, restore\n if (persisted.expiresAt && Date.now() >= persisted.expiresAt) {\n return Promise.resolve(null); // Expired\n }\n\n // Return restored session\n return Promise.resolve({\n ...persisted,\n walletId: this.walletId,\n });\n }\n\n async signMessage(\n ctx: AdapterContext,\n session: import('@partylayer/core').Session,\n params: SignMessageParams\n ): Promise<import('@partylayer/core').SignedMessage> {\n try {\n const state = this.generateState();\n const redirectUri = this.vendorConfig.redirectUri || `${ctx.origin}/callback`;\n const request: import('@partylayer/core').SignRequest = {\n message: params.message,\n state,\n redirectUri,\n };\n\n const signUrl = this.vendorModule.createSignUrl(request, this.vendorConfig);\n\n const transportOptions: import('@partylayer/core').TransportOptions = {\n timeoutMs: 60000,\n allowedOrigins: [ctx.origin],\n origin: ctx.origin,\n };\n\n const response = await this.transport.openSignRequest(\n signUrl,\n request,\n transportOptions\n );\n\n if (response.error) {\n if (response.error.code === 'USER_REJECTED') {\n throw new UserRejectedError('User rejected signing');\n }\n throw new Error(response.error.message || 'Signing failed');\n }\n\n if (!response.signature) {\n throw new Error('No signature in response');\n }\n\n return {\n message: params.message,\n signature: toSignature(response.signature),\n partyId: session.partyId,\n };\n } catch (err) {\n throw mapUnknownErrorToPartyLayerError(err, {\n walletId: this.walletId,\n phase: 'signMessage',\n transport: 'deeplink',\n });\n }\n }\n\n async signTransaction(\n ctx: AdapterContext,\n session: import('@partylayer/core').Session,\n params: SignTransactionParams\n ): Promise<import('@partylayer/core').SignedTransaction> {\n try {\n const state = this.generateState();\n const redirectUri = this.vendorConfig.redirectUri || `${ctx.origin}/callback`;\n const request: import('@partylayer/core').SignRequest = {\n transaction: params.tx,\n state,\n redirectUri,\n };\n\n const signUrl = this.vendorModule.createSignUrl(request, this.vendorConfig);\n\n const transportOptions: import('@partylayer/core').TransportOptions = {\n timeoutMs: 60000,\n allowedOrigins: [ctx.origin],\n origin: ctx.origin,\n };\n\n const response = await this.transport.openSignRequest(\n signUrl,\n request,\n transportOptions\n );\n\n if (response.error) {\n if (response.error.code === 'USER_REJECTED') {\n throw new UserRejectedError('User rejected signing');\n }\n throw new Error(response.error.message || 'Signing failed');\n }\n\n // Handle async approval (jobId)\n if (response.jobId && this.vendorModule.pollJobStatus) {\n const statusUrl = this.vendorConfig.statusEndpoint || '';\n const jobStatus = await this.vendorModule.pollJobStatus(\n response.jobId,\n statusUrl,\n 60000\n );\n\n if (jobStatus.status === 'denied') {\n throw new UserRejectedError('Transaction signing denied');\n }\n\n if (jobStatus.status === 'approved' && jobStatus.result?.signature) {\n const signedTx = typeof params.tx === 'object' && params.tx !== null\n ? { ...params.tx as Record<string, unknown>, signature: jobStatus.result.signature }\n : { tx: params.tx, signature: jobStatus.result.signature };\n return {\n signedTx,\n transactionHash: jobStatus.result.transactionHash\n ? toTransactionHash(jobStatus.result.transactionHash)\n : toTransactionHash('pending'),\n partyId: session.partyId,\n };\n }\n\n throw new Error('Job not completed');\n }\n\n if (!response.signature) {\n throw new Error('No signature in response');\n }\n\n const signedTx = typeof params.tx === 'object' && params.tx !== null\n ? { ...params.tx as Record<string, unknown>, signature: response.signature }\n : { tx: params.tx, signature: response.signature };\n return {\n signedTx,\n transactionHash: response.transactionHash\n ? toTransactionHash(response.transactionHash)\n : toTransactionHash('pending'),\n partyId: session.partyId,\n };\n } catch (err) {\n throw mapUnknownErrorToPartyLayerError(err, {\n walletId: this.walletId,\n phase: 'signTransaction',\n transport: 'deeplink',\n });\n }\n }\n\n /**\n * Generate random state nonce\n */\n private generateState(): string {\n const array = new Uint8Array(32);\n crypto.getRandomValues(array);\n return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@partylayer/adapter-cantor8",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.9",
|
|
4
4
|
"description": "Cantor8 (C8) Wallet adapter for PartyLayer",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"url": "https://github.com/PartyLayer/PartyLayer/issues"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@partylayer/core": "0.2.7"
|
|
35
|
+
"@partylayer/core": "^0.2.7"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/node": "^20.11.0",
|