@bananalink-sdk/protocol 1.2.8 → 1.4.0
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/{chunk-32OWUOZ3.js → chunk-KJ7QIHAY.js} +11 -7
- package/dist/chunk-KJ7QIHAY.js.map +1 -0
- package/dist/{chunk-VXLUSU5B.cjs → chunk-MUYKP6UQ.cjs} +63 -8
- package/dist/chunk-MUYKP6UQ.cjs.map +1 -0
- package/dist/{chunk-MCZG7QEM.cjs → chunk-NGPP7HUR.cjs} +11 -7
- package/dist/chunk-NGPP7HUR.cjs.map +1 -0
- package/dist/{chunk-LELPCIE7.js → chunk-OBJR2TL4.js} +54 -4
- package/dist/chunk-OBJR2TL4.js.map +1 -0
- package/dist/{chunk-KNGZKGRS.cjs → chunk-RZPN2GDJ.cjs} +13 -4
- package/dist/chunk-RZPN2GDJ.cjs.map +1 -0
- package/dist/{chunk-7KYDLL3B.js → chunk-XCMAKN3P.js} +13 -5
- package/dist/chunk-XCMAKN3P.js.map +1 -0
- package/dist/{client-session-claim-C4lUik3b.d.cts → client-session-claim-CkRKTG50.d.cts} +12 -2
- package/dist/{client-session-claim-3QF3noOr.d.ts → client-session-claim-CrIDASkZ.d.ts} +12 -2
- package/dist/crypto/providers/noble-provider.cjs +2 -3
- package/dist/crypto/providers/noble-provider.d.cts +0 -7
- package/dist/crypto/providers/noble-provider.d.ts +0 -7
- package/dist/crypto/providers/noble-provider.js +1 -2
- package/dist/crypto/providers/node-provider.cjs +7 -29
- package/dist/crypto/providers/node-provider.cjs.map +1 -1
- package/dist/crypto/providers/node-provider.d.cts +0 -7
- package/dist/crypto/providers/node-provider.d.ts +0 -7
- package/dist/crypto/providers/node-provider.js +7 -29
- package/dist/crypto/providers/node-provider.js.map +1 -1
- package/dist/crypto/providers/quickcrypto-provider.cjs +8 -46
- package/dist/crypto/providers/quickcrypto-provider.cjs.map +1 -1
- package/dist/crypto/providers/quickcrypto-provider.d.cts +0 -9
- package/dist/crypto/providers/quickcrypto-provider.d.ts +0 -9
- package/dist/crypto/providers/quickcrypto-provider.js +7 -45
- package/dist/crypto/providers/quickcrypto-provider.js.map +1 -1
- package/dist/crypto/providers/webcrypto-provider.cjs +0 -2
- package/dist/crypto/providers/webcrypto-provider.cjs.map +1 -1
- package/dist/crypto/providers/webcrypto-provider.d.cts +0 -7
- package/dist/crypto/providers/webcrypto-provider.d.ts +0 -7
- package/dist/crypto/providers/webcrypto-provider.js +0 -2
- package/dist/crypto/providers/webcrypto-provider.js.map +1 -1
- package/dist/{crypto-BUS06Qz-.d.cts → crypto-BK0Ile6V.d.cts} +1 -1
- package/dist/{crypto-BUS06Qz-.d.ts → crypto-BK0Ile6V.d.ts} +1 -1
- package/dist/crypto-export.cjs +50 -51
- package/dist/crypto-export.cjs.map +1 -1
- package/dist/crypto-export.d.cts +1 -1
- package/dist/crypto-export.d.ts +1 -1
- package/dist/crypto-export.js +2 -4
- package/dist/crypto-export.js.map +1 -1
- package/dist/index.cjs +8 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +31 -4
- package/dist/index.d.ts +31 -4
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/schemas-export.cjs +76 -72
- package/dist/schemas-export.d.cts +116 -1
- package/dist/schemas-export.d.ts +116 -1
- package/dist/schemas-export.js +1 -1
- package/dist/testing.d.cts +2 -2
- package/dist/testing.d.ts +2 -2
- package/dist/validation-export.cjs +76 -72
- package/dist/validation-export.d.cts +1 -1
- package/dist/validation-export.d.ts +1 -1
- package/dist/validation-export.js +1 -1
- package/package.json +1 -1
- package/src/crypto/providers/noble-provider.ts +44 -49
- package/src/crypto/providers/node-provider.ts +18 -59
- package/src/crypto/providers/quickcrypto-provider.ts +25 -84
- package/src/crypto/providers/registry.ts +14 -9
- package/src/crypto/providers/webcrypto-provider.ts +28 -43
- package/src/index.ts +1 -0
- package/src/schemas/client-messages.ts +14 -0
- package/src/schemas/wallet-messages.ts +4 -0
- package/src/types/client-messages.ts +26 -1
- package/src/types/index.ts +9 -0
- package/src/types/persistence.ts +32 -0
- package/src/types/wallet-messages.ts +6 -2
- package/dist/chunk-32OWUOZ3.js.map +0 -1
- package/dist/chunk-7KYDLL3B.js.map +0 -1
- package/dist/chunk-A6FLEJ7R.cjs +0 -62
- package/dist/chunk-A6FLEJ7R.cjs.map +0 -1
- package/dist/chunk-KNGZKGRS.cjs.map +0 -1
- package/dist/chunk-LELPCIE7.js.map +0 -1
- package/dist/chunk-MCZG7QEM.cjs.map +0 -1
- package/dist/chunk-TCVKC227.js +0 -56
- package/dist/chunk-TCVKC227.js.map +0 -1
- package/dist/chunk-VXLUSU5B.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/crypto/errors.ts","../src/crypto/providers/registry.ts","../src/crypto/providers/compliance-provider.ts","../src/crypto/context.ts","../src/crypto/utils.ts","../src/crypto/providers/factory.ts"],"names":["platform","recommendations"],"mappings":"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","file":"chunk-OBJR2TL4.js","sourcesContent":["import type { CryptoProviderType, PlatformDetectionResult } from '../types/crypto-provider';\n\n/**\n * Base class for all crypto-related errors\n * Provides structured context for better debugging\n */\nexport class CryptoError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly context?: Record<string, unknown>\n ) {\n super(message);\n this.name = 'CryptoError';\n\n // Maintain proper stack trace in V8 environments\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Thrown when a requested crypto provider is not available in the current environment\n * Includes diagnostic information to help developers understand why and what alternatives exist\n */\nexport class CryptoProviderUnavailableError extends CryptoError {\n constructor(\n message: string,\n context: {\n requestedProvider?: CryptoProviderType;\n availableProviders: CryptoProviderType[];\n platform?: PlatformDetectionResult;\n recommendations: string[];\n }\n ) {\n super(message, 'PROVIDER_UNAVAILABLE', context);\n this.name = 'CryptoProviderUnavailableError';\n }\n\n /**\n * Format a developer-friendly error message with context\n * Includes available alternatives and actionable recommendations\n */\n toDevMessage(): string {\n // Guard against undefined context (defensive programming)\n if (!this.context) {\n return this.message;\n }\n\n const ctx = this.context as {\n requestedProvider?: CryptoProviderType;\n availableProviders: CryptoProviderType[];\n platform?: PlatformDetectionResult;\n recommendations: string[];\n };\n\n const lines: string[] = [\n this.message,\n '',\n 'Available providers:',\n ...ctx.availableProviders.map(p => ` - ${p}`),\n ];\n\n if (ctx.recommendations.length > 0) {\n lines.push('', 'Recommendations:');\n lines.push(...ctx.recommendations.map(r => ` - ${r}`));\n }\n\n // Add platform information if available\n if (ctx.platform) {\n const platformType = ctx.platform.isNode\n ? 'Node.js'\n : ctx.platform.isBrowser\n ? 'Browser'\n : ctx.platform.isReactNative\n ? 'React Native'\n : 'Unknown';\n\n lines.push('', `Platform: ${platformType}`);\n\n if (ctx.platform.platform) {\n lines.push(`OS: ${ctx.platform.platform}`);\n }\n\n if (ctx.platform.userAgent) {\n const ua = ctx.platform.userAgent;\n // Only truncate if longer than 100 characters\n const truncated = ua.length > 100 ? `${ua.substring(0, 100)}...` : ua;\n lines.push(`User Agent: ${truncated}`);\n }\n }\n\n return lines.join('\\n');\n }\n}\n\n/**\n * Thrown when a specific cryptographic operation is not supported by the provider\n */\nexport class CryptoCapabilityMissingError extends CryptoError {\n constructor(\n operation: string,\n provider: string,\n reason: string\n ) {\n super(\n `Crypto operation '${operation}' is not available in provider '${provider}': ${reason}`,\n 'CAPABILITY_MISSING',\n { operation, provider, reason }\n );\n this.name = 'CryptoCapabilityMissingError';\n }\n}\n","/**\n * Global registry for crypto providers\n *\n * @deprecated This module is deprecated. Use crypto factory functions instead:\n * ```typescript\n * import { BananaLink, webSocketTransport, nobleCrypto } from '@bananalink-sdk/client'\n *\n * const client = new BananaLink({\n * transport: webSocketTransport(),\n * crypto: nobleCrypto(),\n * })\n * ```\n *\n * The registry is kept for backward compatibility but will be removed in a future version.\n */\n\nimport type { CryptoProvider, CryptoProviderType } from '../../types/crypto-provider';\nimport type { Logger } from '@bananalink-sdk/logger';\n\n/**\n * Factory function type for creating crypto provider instances\n */\nexport type CryptoProviderFactory = (logger?: Logger) => CryptoProvider;\n\n/**\n * Global registry storing available crypto providers\n */\nconst cryptoProviders = new Map<CryptoProviderType, CryptoProviderFactory>();\n\n/**\n * Register a crypto provider factory\n * Called automatically when a provider module is imported\n *\n * This function is idempotent - calling it multiple times with the same type\n * will only register the provider once.\n *\n * @param type - The provider type identifier\n * @param factory - Factory function that creates provider instances\n *\n * @example\n * ```typescript\n * // In noble-provider.ts\n * registerCryptoProvider('noble', (logger) => new NobleCryptoProvider(logger));\n * ```\n */\nexport function registerCryptoProvider(type: CryptoProviderType, factory: CryptoProviderFactory): void {\n // Skip if already registered (idempotent)\n if (cryptoProviders.has(type)) {\n return;\n }\n cryptoProviders.set(type, factory);\n}\n\n/**\n * Get a registered crypto provider factory\n *\n * @param type - The provider type to retrieve\n * @returns The provider factory function\n * @throws Error if the provider is not registered\n */\nexport function getCryptoProviderFactory(type: CryptoProviderType): CryptoProviderFactory {\n const factory = cryptoProviders.get(type);\n\n if (!factory) {\n const availableProviders = Array.from(cryptoProviders.keys()).join(', ');\n const importHint = getImportHint(type);\n\n throw new Error(\n `Crypto provider '${type}' is not registered. ${importHint}\\n` +\n `Available providers: ${availableProviders || 'none'}\\n` +\n `Make sure to import the provider before using it.`,\n );\n }\n\n return factory;\n}\n\n/**\n * Check if a crypto provider is registered\n *\n * @param type - The provider type to check\n * @returns True if the provider is registered\n */\nexport function isCryptoProviderRegistered(type: CryptoProviderType): boolean {\n return cryptoProviders.has(type);\n}\n\n/**\n * Get all registered crypto provider types\n *\n * @returns Array of registered provider types\n */\nexport function getRegisteredCryptoProviders(): CryptoProviderType[] {\n return Array.from(cryptoProviders.keys());\n}\n\n/**\n * Clear all registered providers (useful for testing)\n */\nexport function clearCryptoProviderRegistry(): void {\n cryptoProviders.clear();\n}\n\n/**\n * Get import hint for a specific provider type\n */\nfunction getImportHint(type: CryptoProviderType): string {\n switch (type) {\n case 'noble':\n return \"Did you forget to import '@bananalink-sdk/protocol/crypto/provider/noble'?\";\n case 'quickcrypto':\n return \"Did you forget to import '@bananalink-sdk/protocol/crypto/provider/quickcrypto'?\";\n case 'webcrypto':\n return \"Did you forget to import '@bananalink-sdk/protocol/crypto/provider/webcrypto'?\";\n case 'node':\n return \"Did you forget to import '@bananalink-sdk/protocol/crypto/provider/node'?\";\n default:\n return `Did you forget to import the '${String(type)}' provider?`;\n }\n}\n\n/**\n * Type augmentation for registered providers\n * This allows TypeScript to track which providers are available\n */\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace BananaLink {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface RegisteredCryptoProviders {\n // This will be augmented by each provider module\n }\n }\n}\n","import type { Logger } from '@bananalink-sdk/logger';\nimport type { CryptoProvider, CryptoKeyLike, ProviderKeyPair } from '../../types/crypto-provider';\n\n/**\n * Compliance audit event types\n */\nexport type ComplianceEventType =\n | 'key_generation'\n | 'key_import'\n | 'key_export'\n | 'key_derivation'\n | 'encryption'\n | 'decryption'\n | 'hmac_generation'\n | 'hmac_verification'\n | 'random_generation';\n\n/**\n * Compliance audit event\n */\nexport interface ComplianceAuditEvent {\n eventType: ComplianceEventType;\n timestamp: string;\n sessionId?: string;\n keyUsage?: readonly string[];\n dataSize?: number;\n algorithm?: string;\n success: boolean;\n error?: string;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Compliance audit logger interface\n */\nexport interface ComplianceAuditor {\n logEvent(event: ComplianceAuditEvent): void;\n getAuditLog(): ComplianceAuditEvent[];\n clearAuditLog(): void;\n}\n\n/**\n * Default compliance auditor implementation\n */\nexport class DefaultComplianceAuditor implements ComplianceAuditor {\n private auditLog: ComplianceAuditEvent[] = [];\n private readonly logger?: Logger;\n\n constructor(logger?: Logger) {\n this.logger = logger?.child({ component: 'ComplianceAuditor' });\n }\n\n logEvent(event: ComplianceAuditEvent): void {\n this.auditLog.push(event);\n this.logger?.info('Compliance audit event', {\n eventType: event.eventType,\n success: event.success,\n sessionId: event.sessionId,\n timestamp: event.timestamp\n });\n }\n\n getAuditLog(): ComplianceAuditEvent[] {\n return [...this.auditLog];\n }\n\n clearAuditLog(): void {\n this.auditLog = [];\n this.logger?.debug('Compliance audit log cleared');\n }\n}\n\n/**\n * Key usage restrictions for compliance\n */\nexport interface KeyUsageRestrictions {\n allowKeyExport?: boolean;\n allowKeyImport?: boolean;\n requiredKeyUsages?: string[];\n forbiddenKeyUsages?: string[];\n maxDataSize?: number;\n requireSessionId?: boolean;\n}\n\n/**\n * Compliance configuration\n */\nexport interface ComplianceConfig {\n enabled?: boolean;\n auditor?: ComplianceAuditor;\n keyRestrictions?: KeyUsageRestrictions;\n sessionId?: string;\n enableStrictMode?: boolean;\n strictMode?: boolean;\n}\n\n/**\n * Compliance wrapper for CryptoProvider implementations\n * Provides audit logging, key usage restrictions, and regulatory compliance features\n */\nexport class ComplianceCryptoProvider implements CryptoProvider {\n public readonly name: string;\n public readonly isAvailable: boolean;\n\n private readonly underlyingProvider: CryptoProvider;\n private readonly config: ComplianceConfig;\n private readonly auditor: ComplianceAuditor;\n private readonly logger?: Logger;\n\n constructor(\n underlyingProvider: CryptoProvider,\n config: ComplianceConfig = {},\n logger?: Logger\n ) {\n this.underlyingProvider = underlyingProvider;\n this.config = config;\n this.auditor = config.auditor || new DefaultComplianceAuditor(logger);\n this.logger = logger?.child({\n component: 'ComplianceCryptoProvider',\n underlyingProvider: underlyingProvider.name\n });\n\n this.name = `Compliance(${underlyingProvider.name})`;\n this.isAvailable = underlyingProvider.isAvailable;\n }\n\n /**\n * Create compliance audit event\n */\n private createAuditEvent(\n eventType: ComplianceEventType,\n success: boolean,\n metadata: Record<string, unknown> = {},\n error?: string\n ): ComplianceAuditEvent {\n return {\n eventType,\n timestamp: new Date().toISOString(),\n sessionId: this.config.sessionId,\n success,\n error,\n metadata,\n ...metadata\n };\n }\n\n /**\n * Validate key usage restrictions\n */\n private validateKeyUsage(operation: string, keyUsages?: readonly string[], dataSize?: number): void {\n const restrictions = this.config.keyRestrictions;\n if (!restrictions) return;\n\n if (restrictions.requireSessionId && !this.config.sessionId) {\n throw new Error('Session ID required for compliance but not provided');\n }\n\n if (restrictions.maxDataSize && dataSize && dataSize > restrictions.maxDataSize) {\n throw new Error(`Data size ${dataSize} exceeds maximum allowed ${restrictions.maxDataSize} bytes`);\n }\n\n if (keyUsages && restrictions.requiredKeyUsages) {\n const hasRequiredUsage = restrictions.requiredKeyUsages.some(usage => keyUsages.includes(usage));\n if (!hasRequiredUsage) {\n throw new Error(`Key must have one of required usages: ${restrictions.requiredKeyUsages.join(', ')}`);\n }\n }\n\n if (keyUsages && restrictions.forbiddenKeyUsages) {\n const hasForbiddenUsage = restrictions.forbiddenKeyUsages.some(usage => keyUsages.includes(usage));\n if (hasForbiddenUsage) {\n throw new Error(`Key has forbidden usage. Forbidden: ${restrictions.forbiddenKeyUsages.join(', ')}`);\n }\n }\n\n // Operation-specific restrictions\n if (operation === 'export' && restrictions.allowKeyExport === false) {\n throw new Error('Key export is forbidden by compliance policy');\n }\n\n if (operation === 'import' && restrictions.allowKeyImport === false) {\n throw new Error('Key import is forbidden by compliance policy');\n }\n }\n\n /**\n * Generate ECDH P-256 key pair with compliance audit\n */\n async generateKeyPair(): Promise<ProviderKeyPair> {\n const startTime = Date.now();\n\n try {\n this.logger?.debug('Generating key pair with compliance audit');\n\n const keyPair = await this.underlyingProvider.generateKeyPair();\n\n this.validateKeyUsage('generation', keyPair.privateKey.usages);\n\n this.auditor.logEvent(this.createAuditEvent('key_generation', true, {\n algorithm: keyPair.privateKey.algorithm,\n keyUsage: keyPair.privateKey.usages,\n duration: Date.now() - startTime\n }));\n\n return keyPair;\n } catch (error) {\n this.auditor.logEvent(this.createAuditEvent('key_generation', false, {\n duration: Date.now() - startTime\n }, error instanceof Error ? error.message : String(error)));\n\n throw error;\n }\n }\n\n /**\n * Export public key with compliance audit\n */\n async exportPublicKey(publicKey: CryptoKeyLike): Promise<ArrayBuffer> {\n const startTime = Date.now();\n\n try {\n this.validateKeyUsage('export', publicKey.usages);\n\n const keyData = await this.underlyingProvider.exportPublicKey(publicKey);\n\n this.auditor.logEvent(this.createAuditEvent('key_export', true, {\n keyType: 'public',\n algorithm: publicKey.algorithm,\n keySize: keyData.byteLength,\n duration: Date.now() - startTime\n }));\n\n return keyData;\n } catch (error) {\n this.auditor.logEvent(this.createAuditEvent('key_export', false, {\n keyType: 'public',\n algorithm: publicKey.algorithm,\n duration: Date.now() - startTime\n }, error instanceof Error ? error.message : String(error)));\n\n throw error;\n }\n }\n\n /**\n * Export private key with compliance audit\n */\n async exportPrivateKey(privateKey: CryptoKeyLike): Promise<ArrayBuffer> {\n const startTime = Date.now();\n\n try {\n this.validateKeyUsage('export', privateKey.usages);\n\n // Extra security check for private key export\n if (this.config.enableStrictMode) {\n this.logger?.warn('Private key export in strict compliance mode', {\n sessionId: this.config.sessionId,\n algorithm: privateKey.algorithm\n });\n }\n\n const keyData = await this.underlyingProvider.exportPrivateKey(privateKey);\n\n this.auditor.logEvent(this.createAuditEvent('key_export', true, {\n keyType: 'private',\n algorithm: privateKey.algorithm,\n keySize: keyData.byteLength,\n strictMode: this.config.enableStrictMode,\n duration: Date.now() - startTime\n }));\n\n return keyData;\n } catch (error) {\n this.auditor.logEvent(this.createAuditEvent('key_export', false, {\n keyType: 'private',\n algorithm: privateKey.algorithm,\n strictMode: this.config.enableStrictMode,\n duration: Date.now() - startTime\n }, error instanceof Error ? error.message : String(error)));\n\n throw error;\n }\n }\n\n /**\n * Import public key with compliance audit\n */\n async importPublicKey(keyData: ArrayBuffer): Promise<CryptoKeyLike> {\n const startTime = Date.now();\n\n try {\n this.validateKeyUsage('import');\n\n const key = await this.underlyingProvider.importPublicKey(keyData);\n\n this.auditor.logEvent(this.createAuditEvent('key_import', true, {\n keyType: 'public',\n algorithm: key.algorithm,\n keySize: keyData.byteLength,\n keyUsage: key.usages,\n duration: Date.now() - startTime\n }));\n\n return key;\n } catch (error) {\n this.auditor.logEvent(this.createAuditEvent('key_import', false, {\n keyType: 'public',\n keySize: keyData.byteLength,\n duration: Date.now() - startTime\n }, error instanceof Error ? error.message : String(error)));\n\n throw error;\n }\n }\n\n /**\n * Import private key with compliance audit\n */\n async importPrivateKey(keyData: ArrayBuffer): Promise<CryptoKeyLike> {\n const startTime = Date.now();\n\n try {\n this.validateKeyUsage('import');\n\n const key = await this.underlyingProvider.importPrivateKey(keyData);\n\n this.auditor.logEvent(this.createAuditEvent('key_import', true, {\n keyType: 'private',\n algorithm: key.algorithm,\n keySize: keyData.byteLength,\n keyUsage: key.usages,\n duration: Date.now() - startTime\n }));\n\n return key;\n } catch (error) {\n this.auditor.logEvent(this.createAuditEvent('key_import', false, {\n keyType: 'private',\n keySize: keyData.byteLength,\n duration: Date.now() - startTime\n }, error instanceof Error ? error.message : String(error)));\n\n throw error;\n }\n }\n\n /**\n * Derive shared secret with compliance audit\n */\n async deriveSharedSecret(privateKey: CryptoKeyLike, publicKey: CryptoKeyLike): Promise<CryptoKeyLike> {\n const startTime = Date.now();\n\n try {\n this.validateKeyUsage('derivation', privateKey.usages);\n\n const sharedSecret = await this.underlyingProvider.deriveSharedSecret(privateKey, publicKey);\n\n this.auditor.logEvent(this.createAuditEvent('key_derivation', true, {\n operation: 'ECDH',\n algorithm: privateKey.algorithm,\n duration: Date.now() - startTime\n }));\n\n return sharedSecret;\n } catch (error) {\n this.auditor.logEvent(this.createAuditEvent('key_derivation', false, {\n operation: 'ECDH',\n algorithm: privateKey.algorithm,\n duration: Date.now() - startTime\n }, error instanceof Error ? error.message : String(error)));\n\n throw error;\n }\n }\n\n /**\n * Derive encryption key with compliance audit\n */\n async deriveEncryptionKey(sharedSecret: CryptoKeyLike, salt: ArrayBuffer, info: ArrayBuffer): Promise<CryptoKeyLike> {\n const startTime = Date.now();\n\n try {\n const encryptionKey = await this.underlyingProvider.deriveEncryptionKey(sharedSecret, salt, info);\n\n this.auditor.logEvent(this.createAuditEvent('key_derivation', true, {\n operation: 'HKDF',\n algorithm: 'HKDF-SHA256',\n saltSize: salt.byteLength,\n infoSize: info.byteLength,\n duration: Date.now() - startTime\n }));\n\n return encryptionKey;\n } catch (error) {\n this.auditor.logEvent(this.createAuditEvent('key_derivation', false, {\n operation: 'HKDF',\n algorithm: 'HKDF-SHA256',\n saltSize: salt.byteLength,\n infoSize: info.byteLength,\n duration: Date.now() - startTime\n }, error instanceof Error ? error.message : String(error)));\n\n throw error;\n }\n }\n\n /**\n * Generate random bytes with compliance audit\n */\n randomBytes(length: number): ArrayBuffer {\n const startTime = Date.now();\n\n try {\n const randomData = this.underlyingProvider.randomBytes(length);\n\n this.auditor.logEvent(this.createAuditEvent('random_generation', true, {\n length,\n duration: Date.now() - startTime\n }));\n\n return randomData;\n } catch (error) {\n this.auditor.logEvent(this.createAuditEvent('random_generation', false, {\n length,\n duration: Date.now() - startTime\n }, error instanceof Error ? error.message : String(error)));\n\n throw error;\n }\n }\n\n /**\n * Encrypt data with compliance audit\n */\n async encrypt(key: CryptoKeyLike, data: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer> {\n const startTime = Date.now();\n\n try {\n this.validateKeyUsage('encryption', key.usages, data.byteLength);\n\n const ciphertext = await this.underlyingProvider.encrypt(key, data, iv);\n\n this.auditor.logEvent(this.createAuditEvent('encryption', true, {\n algorithm: key.algorithm,\n dataSize: data.byteLength,\n ivSize: iv.byteLength,\n ciphertextSize: ciphertext.byteLength,\n duration: Date.now() - startTime\n }));\n\n return ciphertext;\n } catch (error) {\n this.auditor.logEvent(this.createAuditEvent('encryption', false, {\n algorithm: key.algorithm,\n dataSize: data.byteLength,\n ivSize: iv.byteLength,\n duration: Date.now() - startTime\n }, error instanceof Error ? error.message : String(error)));\n\n throw error;\n }\n }\n\n /**\n * Decrypt data with compliance audit\n */\n async decrypt(key: CryptoKeyLike, data: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer> {\n const startTime = Date.now();\n\n try {\n this.validateKeyUsage('decryption', key.usages, data.byteLength);\n\n const plaintext = await this.underlyingProvider.decrypt(key, data, iv);\n\n this.auditor.logEvent(this.createAuditEvent('decryption', true, {\n algorithm: key.algorithm,\n dataSize: data.byteLength,\n ivSize: iv.byteLength,\n plaintextSize: plaintext.byteLength,\n duration: Date.now() - startTime\n }));\n\n return plaintext;\n } catch (error) {\n this.auditor.logEvent(this.createAuditEvent('decryption', false, {\n algorithm: key.algorithm,\n dataSize: data.byteLength,\n ivSize: iv.byteLength,\n duration: Date.now() - startTime\n }, error instanceof Error ? error.message : String(error)));\n\n throw error;\n }\n }\n\n /**\n * Generate HMAC with compliance audit\n */\n async generateHMAC(key: CryptoKeyLike, data: ArrayBuffer): Promise<ArrayBuffer> {\n const startTime = Date.now();\n\n try {\n this.validateKeyUsage('hmac', key.usages, data.byteLength);\n\n const mac = await this.underlyingProvider.generateHMAC(key, data);\n\n this.auditor.logEvent(this.createAuditEvent('hmac_generation', true, {\n algorithm: 'HMAC-SHA256',\n dataSize: data.byteLength,\n macSize: mac.byteLength,\n duration: Date.now() - startTime\n }));\n\n return mac;\n } catch (error) {\n this.auditor.logEvent(this.createAuditEvent('hmac_generation', false, {\n algorithm: 'HMAC-SHA256',\n dataSize: data.byteLength,\n duration: Date.now() - startTime\n }, error instanceof Error ? error.message : String(error)));\n\n throw error;\n }\n }\n\n /**\n * Verify HMAC with compliance audit\n */\n async verifyHMAC(key: CryptoKeyLike, data: ArrayBuffer, mac: ArrayBuffer): Promise<boolean> {\n const startTime = Date.now();\n\n try {\n this.validateKeyUsage('hmac', key.usages, data.byteLength);\n\n const isValid = await this.underlyingProvider.verifyHMAC(key, data, mac);\n\n this.auditor.logEvent(this.createAuditEvent('hmac_verification', true, {\n algorithm: 'HMAC-SHA256',\n dataSize: data.byteLength,\n macSize: mac.byteLength,\n verified: isValid,\n duration: Date.now() - startTime\n }));\n\n return isValid;\n } catch (error) {\n this.auditor.logEvent(this.createAuditEvent('hmac_verification', false, {\n algorithm: 'HMAC-SHA256',\n dataSize: data.byteLength,\n macSize: mac.byteLength,\n duration: Date.now() - startTime\n }, error instanceof Error ? error.message : String(error)));\n\n throw error;\n }\n }\n\n /**\n * Get compliance auditor for external access\n */\n getAuditor(): ComplianceAuditor {\n return this.auditor;\n }\n\n /**\n * Update compliance configuration\n */\n updateConfig(newConfig: Partial<ComplianceConfig>): void {\n Object.assign(this.config, newConfig);\n this.logger?.debug('Compliance configuration updated', newConfig);\n }\n\n /**\n * Get underlying provider (for debugging/testing)\n */\n getUnderlyingProvider(): CryptoProvider {\n return this.underlyingProvider;\n }\n}\n","/**\n * CryptoContext - Singleton manager for the active crypto provider\n *\n * Provides a global context for crypto operations while maintaining\n * the ability to use custom providers when needed.\n *\n * @example\n * // Automatic initialization with best available provider\n * const bytes = randomBytes(32);\n *\n * @example\n * // Explicit provider configuration\n * CryptoContext.initialize({ type: 'noble' });\n * const bytes = randomBytes(32);\n *\n * @example\n * // Custom provider instance\n * const provider = new NobleCryptoProvider();\n * CryptoContext.setProvider(provider);\n */\n\nimport type { Logger } from '@bananalink-sdk/logger';\nimport type { CryptoProvider, CryptoProviderType } from '../types/crypto-provider';\nimport { createCryptoProvider, getRegisteredCryptoProviders } from './providers';\nimport { ComplianceCryptoProvider } from './providers/compliance-provider';\nimport type { ComplianceConfig } from './providers/compliance-provider';\nimport { CryptoProviderUnavailableError } from './errors';\nimport { detectPlatform } from './utils';\n\nexport interface CryptoContextConfig {\n /** Provider type to use (auto-detects if not specified) */\n type?: CryptoProviderType;\n /** Strict mode - throw if preferred provider unavailable (default: false) */\n strict?: boolean;\n /** Compliance configuration (wraps provider if enabled) */\n compliance?: ComplianceConfig;\n /** Logger instance for debug output */\n logger?: Logger;\n}\n\n/**\n * Singleton context for managing the active crypto provider\n *\n * Design rationale:\n * - Provides convenient global access to crypto operations\n * - Maintains lazy initialization for tree-shaking\n * - Allows explicit provider configuration when needed\n * - Supports both automatic and manual provider selection\n */\nclass CryptoContextManager {\n private provider: CryptoProvider | null = null;\n private config: CryptoContextConfig | null = null;\n private initialized = false;\n private initializing = false;\n\n /**\n * Initialize the crypto context with specific configuration\n *\n * @param config - Provider configuration options\n * @throws Error if already initialized (call reset() first)\n * @throws CryptoProviderUnavailableError if strict mode enabled and provider unavailable\n */\n initialize(config: CryptoContextConfig = {}): void {\n if (this.initialized && this.provider) {\n throw new Error(\n 'CryptoContext already initialized. Call CryptoContext.reset() first to reconfigure.'\n );\n }\n\n // Strict mode validation - check if provider is registered\n if (config.strict && config.type) {\n const availableProviders = getRegisteredCryptoProviders();\n if (!availableProviders.includes(config.type)) {\n const platform = detectPlatform();\n const recommendations: string[] = [\n `Import the provider: import '@bananalink-sdk/protocol/crypto/provider/${config.type}'`,\n 'Ensure the provider package is installed',\n ];\n\n // Add platform-specific recommendations\n if (config.type === 'quickcrypto' && !platform.isReactNative) {\n recommendations.push('QuickCrypto requires React Native environment');\n if (platform.isNode) {\n recommendations.push(\"Try 'node' provider for Node.js\");\n } else if (platform.isBrowser) {\n recommendations.push(\"Try 'webcrypto' provider for browsers\");\n }\n }\n\n // Add universal fallback recommendation\n if (availableProviders.includes('noble')) {\n recommendations.push(\"'noble' provider works in all environments as a fallback\");\n }\n\n throw new CryptoProviderUnavailableError(\n `Strict mode: Crypto provider '${config.type}' is not registered. Did you forget to import it?`,\n {\n requestedProvider: config.type,\n availableProviders,\n platform,\n recommendations,\n }\n );\n }\n }\n\n this.config = config;\n this.provider = this.createProvider(config);\n this.initialized = true;\n }\n\n /**\n * Get the active crypto provider\n * Automatically initializes with default config if not already initialized\n *\n * @returns The active crypto provider instance\n * @throws Error if called concurrently during initialization\n *\n * @remarks\n * This method performs lazy initialization on first call. It is NOT safe to call\n * concurrently from multiple contexts before initialization completes (e.g., from\n * Worker threads or Promise.all). For concurrent access scenarios, explicitly call\n * initialize() first to ensure the provider is ready before concurrent operations begin.\n *\n * @example\n * ```typescript\n * // Safe: Single-threaded lazy initialization\n * const provider = CryptoContext.getProvider();\n *\n * // Safe: Pre-initialize for concurrent access\n * CryptoContext.initialize({ type: 'noble' });\n * await Promise.all([\n * operation1(CryptoContext.getProvider()),\n * operation2(CryptoContext.getProvider())\n * ]);\n *\n * // Unsafe: Concurrent calls during lazy initialization\n * await Promise.all([\n * operation1(CryptoContext.getProvider()), // May throw if not initialized yet\n * operation2(CryptoContext.getProvider())\n * ]);\n * ```\n */\n getProvider(): CryptoProvider {\n // Check if already initialized\n if (this.provider) {\n return this.provider;\n }\n\n // Prevent race condition - if already initializing, throw error\n if (this.initializing) {\n throw new Error(\n 'CryptoContext initialization in progress. Avoid concurrent calls to getProvider() during initialization.'\n );\n }\n\n // Lazy initialization with defaults\n this.initializing = true;\n try {\n this.initialize();\n // After initialize(), provider is guaranteed to be set\n if (!this.provider) {\n throw new Error('CryptoContext initialization failed: provider is null');\n }\n return this.provider;\n } finally {\n this.initializing = false;\n }\n }\n\n /**\n * Set a custom provider instance\n * Useful for testing or advanced use cases\n *\n * @param provider - Custom provider instance\n */\n setProvider(provider: CryptoProvider): void {\n this.provider = provider;\n this.initialized = true;\n }\n\n /**\n * Check if context has been explicitly initialized\n */\n isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * Get current configuration\n */\n getConfig(): CryptoContextConfig | null {\n return this.config;\n }\n\n /**\n * Reset the context (for testing or reconfiguration)\n */\n reset(): void {\n this.provider = null;\n this.config = null;\n this.initialized = false;\n this.initializing = false;\n }\n\n /**\n * Create a provider instance from configuration\n */\n private createProvider(config: CryptoContextConfig): CryptoProvider {\n const baseProvider = createCryptoProvider(config.type, config.logger, config.strict);\n\n if (config.compliance?.enabled) {\n return new ComplianceCryptoProvider(baseProvider, config.compliance);\n }\n\n return baseProvider;\n }\n\n}\n\n/**\n * Global singleton instance\n *\n * Usage:\n * - Most code should use utility functions (randomBytes, generateNonce)\n * - Advanced use cases can access CryptoContext directly\n */\nexport const CryptoContext = new CryptoContextManager();\n","import type { CryptoProvider, PlatformDetectionResult } from '../types/crypto-provider';\nimport { CryptoContext } from './context';\n\n/**\n * Generate cryptographically secure random bytes\n *\n * Uses the global CryptoContext provider (auto-initializes if needed).\n * For custom provider usage, pass a provider instance.\n *\n * @param length - Number of bytes to generate\n * @param provider - Optional custom provider (uses CryptoContext if not provided)\n * @returns Cryptographically secure random bytes\n *\n * @example\n * // Default behavior (uses CryptoContext)\n * const bytes = randomBytes(32);\n *\n * @example\n * // With custom provider\n * const provider = new NobleCryptoProvider();\n * const bytes = randomBytes(32, provider);\n */\nexport function randomBytes(length: number, provider?: CryptoProvider): Uint8Array {\n const activeProvider = provider || CryptoContext.getProvider();\n const buffer = activeProvider.randomBytes(length);\n return new Uint8Array(buffer);\n}\n\n/**\n * Convert ArrayBuffer to base64 string\n */\nexport function arrayBufferToBase64(buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer);\n let binary = '';\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\n/**\n * Convert base64 string to ArrayBuffer\n */\nexport function base64ToArrayBuffer(base64: string): ArrayBuffer {\n // Sanitize the base64 string - remove any whitespace and invalid characters\n const cleanBase64 = base64.replace(/[^A-Za-z0-9+/=]/g, '');\n\n // Ensure proper padding\n let paddedBase64 = cleanBase64;\n while (paddedBase64.length % 4 !== 0) {\n paddedBase64 += '=';\n }\n\n try {\n const binary = atob(paddedBase64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes.buffer;\n } catch (error) {\n throw new Error(`Failed to decode base64 string: ${error instanceof Error ? error.message : 'Invalid base64 format'}. Original string: ${base64.substring(0, 50)}...`);\n }\n}\n\n/**\n * Convert string to ArrayBuffer\n */\nexport function stringToArrayBuffer(str: string): ArrayBuffer {\n return new TextEncoder().encode(str).buffer;\n}\n\n/**\n * Convert ArrayBuffer to string\n */\nexport function arrayBufferToString(buffer: ArrayBuffer): string {\n return new TextDecoder().decode(buffer);\n}\n\n/**\n * Generate a cryptographically secure nonce\n *\n * @param length - Number of bytes to generate (default: 32)\n * @param provider - Optional custom provider (uses CryptoContext if not provided)\n * @returns Hex-encoded string (2 characters per byte)\n *\n * @example\n * generateNonce() // Returns 64-char hex string (32 bytes)\n * generateNonce(16) // Returns 32-char hex string (16 bytes)\n *\n * @example\n * // With custom provider\n * const provider = new NobleCryptoProvider();\n * const nonce = generateNonce(32, provider);\n */\nexport function generateNonce(length: number = 32, provider?: CryptoProvider): string {\n const bytes = randomBytes(length, provider);\n return Array.from(bytes, (byte: number) => byte.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Generate a RFC 4122 version 4 UUID (Universally Unique Identifier)\n *\n * Uses cryptographically secure random bytes from the configured CryptoProvider.\n * This implementation is mobile-safe and works across all platforms (Browser, Node.js, React Native).\n *\n * Output format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\n * where x is any hexadecimal digit and y is one of 8, 9, a, or b.\n *\n * @param provider - Optional custom provider (uses CryptoContext if not provided)\n * @returns UUID v4 string (36 characters including dashes)\n *\n * @example\n * // Default behavior (uses CryptoContext)\n * const uuid = generateUUID();\n * // Example output: \"f47ac10b-58cc-4372-a567-0e02b2c3d479\"\n *\n * @example\n * // With custom provider\n * const provider = new NobleCryptoProvider();\n * const uuid = generateUUID(provider);\n */\nexport function generateUUID(provider?: CryptoProvider): string {\n const bytes = randomBytes(16, provider);\n\n // Set version (4) and variant bits according to RFC 4122\n bytes[6] = (bytes[6] & 0x0f) | 0x40; // Version 4\n bytes[8] = (bytes[8] & 0x3f) | 0x80; // Variant 10\n\n // Convert to hex string with dashes\n const hex = Array.from(bytes, (byte: number) => byte.toString(16).padStart(2, '0')).join('');\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20, 32)\n ].join('-');\n}\n\n/**\n * Detect the current platform/runtime environment\n *\n * Provides information about whether code is running in Node.js, browser,\n * React Native, or other JavaScript environments.\n *\n * @returns Platform detection result with environment flags\n *\n * @example\n * const platform = detectPlatform();\n * if (platform.isNode) {\n * console.log('Running in Node.js');\n * } else if (platform.isBrowser) {\n * console.log('Running in browser');\n * }\n */\nexport function detectPlatform(): PlatformDetectionResult {\n // Check for Node.js\n const isNode = typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null;\n\n // Check for browser\n const isBrowser = typeof window !== 'undefined' &&\n typeof document !== 'undefined';\n\n // Check for React Native\n const isReactNative = typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative';\n\n // Get platform identifier (Node.js only)\n let platform: string | undefined;\n if (isNode && typeof process.platform === 'string') {\n platform = process.platform;\n }\n\n // Get user agent (browser/React Native)\n let userAgent: string | undefined;\n if (typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string') {\n userAgent = navigator.userAgent;\n }\n\n return {\n isNode,\n isBrowser,\n isReactNative,\n platform,\n userAgent,\n };\n}\n","import type { Logger } from '@bananalink-sdk/logger';\nimport type { CryptoProvider, CryptoProviderType } from '../../types/crypto-provider';\nimport { CryptoProviderUnavailableError } from '../errors';\nimport { detectPlatform } from '../utils';\nimport {\n getCryptoProviderFactory,\n getRegisteredCryptoProviders\n} from './registry';\n\n/**\n * Generate context-appropriate recommendations for unavailable providers\n */\nfunction generateRecommendations(\n requestedProvider: CryptoProviderType,\n platform: ReturnType<typeof detectPlatform>\n): string[] {\n const recommendations: string[] = [];\n\n // Provider-specific recommendations\n if (requestedProvider === 'webcrypto') {\n recommendations.push(\"WebCrypto requires a browser or Node.js 15+ environment\");\n if (platform.isNode) {\n recommendations.push(\"Try 'node' provider for Node.js\");\n }\n } else if (requestedProvider === 'node') {\n recommendations.push(\"Node crypto requires Node.js environment\");\n if (platform.isBrowser) {\n recommendations.push(\"Try 'webcrypto' provider for browsers\");\n }\n } else if (requestedProvider === 'quickcrypto') {\n recommendations.push(\"QuickCrypto requires React Native environment\");\n if (!platform.isReactNative) {\n if (platform.isNode) {\n recommendations.push(\"Try 'node' provider for Node.js\");\n } else if (platform.isBrowser) {\n recommendations.push(\"Try 'webcrypto' provider for browsers\");\n }\n }\n }\n\n // Universal fallback\n recommendations.push(\"'noble' provider works in all environments as a fallback\");\n recommendations.push(`Import the provider: import '@bananalink-sdk/protocol/crypto/provider/${requestedProvider}'`);\n\n return recommendations;\n}\n\n/**\n * Create a crypto provider based on type\n *\n * This factory function uses the global registry to instantiate providers.\n * Providers must be explicitly imported before they can be used.\n *\n * @param preferredProvider - Optional preferred provider type\n * @param logger - Optional logger for debug output\n * @param strict - If true, throw error if preferred provider unavailable\n * @returns The created crypto provider instance\n *\n * @example\n * ```typescript\n * // Import providers to make them available\n * import '@bananalink-sdk/protocol/crypto/provider/noble';\n * import '@bananalink-sdk/protocol/crypto/provider/webcrypto';\n *\n * // Create provider\n * const provider = createCryptoProvider('noble');\n * ```\n */\nexport function createCryptoProvider(\n preferredProvider?: CryptoProviderType,\n logger?: Logger,\n strict?: boolean\n): CryptoProvider {\n const registeredProviders = getRegisteredCryptoProviders();\n\n logger?.debug('Creating crypto provider', {\n preferredProvider,\n strict,\n registeredProviders\n });\n\n // Determine which provider to use\n let providerType: CryptoProviderType | undefined = preferredProvider;\n\n // Strict validation: If no provider specified, require exactly one registered\n if (!providerType) {\n if (registeredProviders.length === 0) {\n throw new CryptoProviderUnavailableError(\n 'No crypto providers are registered. Did you forget to import a provider?',\n {\n availableProviders: [],\n recommendations: [\n \"Import at least one crypto provider, e.g.: import '@bananalink-sdk/protocol/crypto/provider/noble'\",\n \"Noble provider is recommended as a universal fallback\"\n ]\n }\n );\n } else if (registeredProviders.length === 1) {\n // Auto-select the single registered provider\n providerType = registeredProviders[0];\n logger?.debug(`Auto-selected '${providerType}' provider (only one registered)`);\n } else {\n // Multiple registered - require explicit selection\n throw new CryptoProviderUnavailableError(\n `Multiple crypto providers registered: ${registeredProviders.join(', ')}. ` +\n `Either import only one provider OR explicitly set cryptoProvider.type. ` +\n `Example: cryptoProvider: { type: '${registeredProviders[0]}' }`,\n {\n availableProviders: registeredProviders,\n recommendations: [\n `Import only one crypto provider, or specify which one to use`,\n `Registered providers: ${registeredProviders.join(', ')}`,\n `Set cryptoProvider.type to one of the registered providers`\n ]\n }\n );\n }\n }\n\n // Try to create the provider\n try {\n const factory = getCryptoProviderFactory(providerType);\n const provider = factory(logger);\n\n logger?.info(`Using ${provider.name} crypto provider`, {\n providerType,\n isAvailable: provider.isAvailable\n });\n\n return provider;\n } catch (error) {\n // If strict mode AND user explicitly requested a specific provider, throw immediately\n const userRequestedSpecificProvider = preferredProvider !== undefined;\n if (strict && userRequestedSpecificProvider) {\n // If already a CryptoProviderUnavailableError, re-throw as-is\n if (error instanceof CryptoProviderUnavailableError) {\n throw error;\n }\n\n // Wrap generic errors with full context\n const platform = detectPlatform();\n const availableProviders = getRegisteredCryptoProviders();\n const recommendations = generateRecommendations(providerType, platform);\n\n throw new CryptoProviderUnavailableError(\n `Strict mode: Crypto provider '${providerType}' failed to initialize: ${error instanceof Error ? error.message : String(error)}`,\n {\n requestedProvider: providerType,\n availableProviders,\n platform,\n recommendations,\n }\n );\n }\n\n // Try fallback to any available provider\n logger?.warn(`Failed to create '${providerType}' provider, trying fallback`, {\n error: error instanceof Error ? { message: error.message } : { message: String(error) }\n });\n\n // Try each registered provider as fallback\n for (const fallbackType of registeredProviders) {\n if (fallbackType === providerType) continue; // Skip the one that failed\n\n try {\n const factory = getCryptoProviderFactory(fallbackType);\n const provider = factory(logger);\n\n logger?.info(`Using ${provider.name} crypto provider (fallback)`, {\n originalType: providerType,\n fallbackType\n });\n\n return provider;\n } catch (fallbackError) {\n logger?.debug(`Fallback to '${fallbackType}' failed`, {\n error: fallbackError instanceof Error ? { message: fallbackError.message } : { message: String(fallbackError) }\n });\n }\n }\n\n // If we get here, no providers worked\n const platform = detectPlatform();\n const recommendations = generateRecommendations(providerType, platform);\n\n throw new CryptoProviderUnavailableError(\n `Failed to create any crypto provider. Requested: '${providerType}'`,\n {\n requestedProvider: providerType,\n availableProviders: registeredProviders,\n platform,\n recommendations,\n }\n );\n }\n}\n\n/**\n * Export registry functions for advanced usage\n */\nexport {\n isCryptoProviderRegistered,\n getRegisteredCryptoProviders\n} from './registry';\n"]}
|
|
@@ -161,7 +161,8 @@ var authenticateConnectionPayloadSchema = zod.z.object({
|
|
|
161
161
|
encrypted: encryptedPayloadSchema
|
|
162
162
|
});
|
|
163
163
|
var walletReconnectPayloadSchema = zod.z.object({
|
|
164
|
-
type: zod.z.literal("wallet_reconnect")
|
|
164
|
+
type: zod.z.literal("wallet_reconnect"),
|
|
165
|
+
walletPublicKey: zod.z.string().min(1, "Wallet public key cannot be empty").regex(/^(AES-GCM:|cleartext:)/, 'Wallet public key must start with "AES-GCM:" or "cleartext:"')
|
|
165
166
|
});
|
|
166
167
|
var walletMessagePayloadSchema = zod.z.discriminatedUnion("type", [
|
|
167
168
|
claimSessionPayloadSchema,
|
|
@@ -267,7 +268,14 @@ var clientSessionClaimSchema2 = zod.z.object({
|
|
|
267
268
|
timestamp: zod.z.number().int().positive("Timestamp must be a positive integer")
|
|
268
269
|
});
|
|
269
270
|
var clientReconnectPayloadSchema = zod.z.object({
|
|
270
|
-
type: zod.z.literal("client_reconnect")
|
|
271
|
+
type: zod.z.literal("client_reconnect"),
|
|
272
|
+
sessionClaim: clientSessionClaimSchema2,
|
|
273
|
+
clientPublicKey: zod.z.string().min(1, "Client public key cannot be empty").regex(/^(AES-GCM:|cleartext:)/, 'Client public key must start with "AES-GCM:" or "cleartext:"')
|
|
274
|
+
});
|
|
275
|
+
var clientHandshakeMessageSchema = zod.z.object({
|
|
276
|
+
type: zod.z.literal("client_handshake"),
|
|
277
|
+
clientPublicKey: zod.z.string().min(1, "Client public key cannot be empty").regex(/^(AES-GCM:|cleartext:)/, 'Client public key must start with "AES-GCM:" or "cleartext:"'),
|
|
278
|
+
timestamp: zod.z.number().int().positive("Timestamp must be a positive integer")
|
|
271
279
|
});
|
|
272
280
|
var closeSessionPayloadSchema = zod.z.object({
|
|
273
281
|
type: zod.z.literal("close_session"),
|
|
@@ -482,6 +490,7 @@ exports.authenticationDataSchema = authenticationDataSchema;
|
|
|
482
490
|
exports.bananaLinkErrorSchema = bananaLinkErrorSchema;
|
|
483
491
|
exports.base64Schema = base64Schema;
|
|
484
492
|
exports.claimSessionPayloadSchema = claimSessionPayloadSchema;
|
|
493
|
+
exports.clientHandshakeMessageSchema = clientHandshakeMessageSchema;
|
|
485
494
|
exports.clientMessageEnvelopeSchema = clientMessageEnvelopeSchema;
|
|
486
495
|
exports.clientMessagePayloadSchema = clientMessagePayloadSchema;
|
|
487
496
|
exports.clientReconnectPayloadSchema = clientReconnectPayloadSchema;
|
|
@@ -548,5 +557,5 @@ exports.walletMessagePayloadSchema = walletMessagePayloadSchema;
|
|
|
548
557
|
exports.walletMetadataSchema = walletMetadataSchema;
|
|
549
558
|
exports.walletReconnectPayloadSchema = walletReconnectPayloadSchema;
|
|
550
559
|
exports.walletSessionClaimSchema = walletSessionClaimSchema;
|
|
551
|
-
//# sourceMappingURL=chunk-
|
|
552
|
-
//# sourceMappingURL=chunk-
|
|
560
|
+
//# sourceMappingURL=chunk-RZPN2GDJ.cjs.map
|
|
561
|
+
//# sourceMappingURL=chunk-RZPN2GDJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schemas/core.ts","../src/schemas/discovery.ts","../src/schemas/wallet-messages.ts","../src/schemas/client-messages.ts","../src/schemas/relay-messages.ts","../src/schemas/index.ts"],"names":["z","urlSchema","FRUITS","__name","clientSessionClaimSchema","ethereumAddressSchema","iso8601Schema","domainSchema","nonceSchema","siweFieldsSchema","dAppMetadataSchema","qrPayloadSchema","encryptedPayloadSchema","relayMessageTypeSchema","relayMessageSchema","securityPolicySchema","displayInfoSchema","frutiLinkSchema","NETWORK_CONFIG","publicKeySchema"],"mappings":"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","file":"chunk-RZPN2GDJ.cjs","sourcesContent":["/**\n * Core validation schemas for BananaLink protocol types\n */\n\nimport { z } from 'zod';\n\n// Base validation schemas\nconst ethereumAddressSchema = z.string().regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address');\nconst hexStringSchema = z.string().regex(/^0x[a-fA-F0-9]*$/, 'Invalid hex string');\nconst iso8601Schema = z.string().datetime({ message: 'Invalid ISO 8601 datetime' });\nconst urlSchema = z.string().url('Invalid URL');\nconst domainSchema = z.string().min(1, 'Domain cannot be empty');\n// Protocol v2.0: 32-byte nonces = 64 hex characters\nconst nonceSchema = z\n .string()\n .length(64, 'Nonce must be exactly 64 characters (32 bytes hex-encoded)')\n .regex(/^[a-fA-F0-9]{64}$/, 'Nonce must be a valid 64-character hexadecimal string');\n\n// SIWE base schema\nexport const siweFieldsSchema = z.object({\n scheme: z.string().optional(),\n domain: domainSchema,\n address: ethereumAddressSchema,\n statement: z.string().optional(),\n uri: urlSchema,\n version: z.literal('1'),\n chainId: z.number().int().positive(),\n nonce: nonceSchema,\n issuedAt: iso8601Schema,\n expirationTime: iso8601Schema.optional(),\n notBefore: iso8601Schema.optional(),\n requestId: z.string().optional(),\n resources: z.array(urlSchema).optional(),\n});\n\n// Transaction payload schema\nexport const transactionPayloadSchema = z.object({\n to: ethereumAddressSchema,\n value: z.string().regex(/^\\d+$/, 'Value must be a numeric string').optional(),\n data: hexStringSchema.optional(),\n gas: z.string().regex(/^\\d+$/, 'Gas must be a numeric string').optional(),\n gasPrice: z.string().regex(/^\\d+$/, 'Gas price must be a numeric string').optional(),\n maxFeePerGas: z.string().regex(/^\\d+$/, 'Max fee per gas must be a numeric string').optional(),\n maxPriorityFeePerGas: z.string().regex(/^\\d+$/, 'Max priority fee per gas must be a numeric string').optional(),\n});\n\n// Sign payload schema\nexport const signPayloadSchema = z.object({\n message: z.string().min(1, 'Message cannot be empty'),\n encoding: z.enum(['utf8', 'hex']).default('utf8'),\n});\n\n// BananaLink message type schema\nexport const messageTypeSchema = z.enum(['auth', 'tx', 'sign']);\n\n// Main BananaLink message schema\nexport const bananaLinkMessageSchema = siweFieldsSchema.extend({\n type: messageTypeSchema,\n sessionId: z.string().min(1, 'Session ID cannot be empty'),\n payload: z.union([transactionPayloadSchema, signPayloadSchema]).optional(),\n});\n\n// DApp metadata schema\nexport const dAppMetadataSchema = z.object({\n dappId: z.string().optional(),\n name: z.string().min(1, 'Name cannot be empty'),\n description: z.string().optional(),\n url: urlSchema,\n icons: z.array(urlSchema).optional(),\n});\n\n// Session configuration schema\nexport const sessionConfigSchema = z.object({\n returnUrl: urlSchema.optional(),\n sessionName: z.string().optional(),\n expiresAt: iso8601Schema.optional(),\n customData: z.record(z.unknown()).optional(),\n});\n\n// BananaLink response schema\nexport const bananaLinkResponseSchema = z.object({\n success: z.boolean(),\n data: z.unknown().optional(),\n error: z.string().optional(),\n requestId: z.string().optional(),\n});\n\n// Security policy schema\nexport const securityPolicySchema = z.object({\n sessionTimeout: z.number().int().positive(),\n requestTimeout: z.number().int().positive(),\n maxConcurrentSessions: z.number().int().positive(),\n requireOriginProof: z.boolean(),\n allowedDomains: z.array(domainSchema).optional(),\n blockedDomains: z.array(domainSchema).optional(),\n});\n\n// Session options schema\nexport const sessionOptionsSchema = z.object({\n config: sessionConfigSchema.optional(),\n securityPolicy: securityPolicySchema.partial().optional(),\n relayUrl: urlSchema.optional(),\n});\n\n// Session metadata schema (for session creation)\nexport const sessionMetadataSchema = z.object({\n encryptionAlgorithm: z.enum(['AES-GCM', 'plaintext']),\n sessionId: z.string().min(1, 'Session ID cannot be empty'),\n publicKey: z.string().optional(),\n timestamp: iso8601Schema,\n});\n\n// Session creation request schema (Client → API Gateway)\nexport const createSessionRequestSchema = z.object({\n dappId: z.string().uuid('Invalid DApp ID format'),\n metadata: sessionMetadataSchema,\n sessionConfig: sessionConfigSchema.optional(),\n});\n\n// Client session claim schema\nexport const clientSessionClaimSchema = z.object({\n /** Unique nonce for client session claim (32 bytes hex-encoded = 64 characters) */\n claimNonce: z\n .string()\n .length(64, 'Claim nonce must be exactly 64 characters (32 bytes hex-encoded)')\n .regex(/^[0-9a-f]{64}$/, 'Claim nonce must be lowercase hexadecimal'),\n timestamp: z.number().int().positive(),\n});\n\n// Session creation response schema (API Gateway → Client)\nexport const createSessionResponseSchema = z.object({\n sessionId: z.string().uuid('Invalid session ID format'),\n clientSessionClaim: clientSessionClaimSchema,\n ttl: z.number().int().positive(),\n});\n\n// Validation helper functions\nexport const validateMessage = (message: unknown) => bananaLinkMessageSchema.parse(message);\n\n// Safe parsing functions\nexport const safeValidateMessage = (message: unknown) => bananaLinkMessageSchema.safeParse(message);\n\n// Note: Types are exported from ./types/core to avoid conflicts\n// Use z.infer<typeof schemaName> if you need to infer types from schemas\n","/**\n * Discovery validation schemas for BananaLink protocol\n */\n\nimport { z } from 'zod';\nimport { FRUITS } from '../constants';\n\n// Base validation schemas\nconst urlSchema = z.string().url('Invalid URL');\n\n\n// QR payload schema\nexport const qrPayloadSchema = z.object({\n sessionId: z.string().min(1, 'Session ID cannot be empty'),\n publicKey: z.string().min(1, 'Public key cannot be empty'),\n relayUrl: z.string().url().optional(),\n providerId: z.string().optional(),\n});\n\n// Encrypted payload schema\nexport const encryptedPayloadSchema = z.object({\n iv: z.string().min(1, 'IV cannot be empty'),\n ciphertext: z.string().min(1, 'Ciphertext cannot be empty'),\n mac: z.string().min(1, 'MAC cannot be empty'),\n});\n\n// Relay message type schema\nexport const relayMessageTypeSchema = z.enum(['pub', 'sub', 'ack', 'error']);\n\n// Relay message schema\nexport const relayMessageSchema = z.object({\n topic: z.string().min(1, 'Topic cannot be empty'),\n type: relayMessageTypeSchema,\n payload: encryptedPayloadSchema.optional(),\n id: z.string().min(1, 'Message ID cannot be empty'),\n});\n\n// Display info schema\nexport const displayInfoSchema = z.object({\n qrCode: z.string().min(1, 'QR code cannot be empty'),\n frutiLink: z.string().regex(/^[🍌🍎🍊🍇🍓🍑🍒🍉🥝🍍🥭🥥🫐🍈🍋🥑]{8}$/u, 'Invalid FrutiLink format'),\n deepLink: urlSchema,\n});\n\n// FrutiLink validation\nexport const frutiLinkSchema = z.string()\n .length(8, 'FrutiLink must be exactly 8 characters')\n .refine(\n (value) => value.split('').every(char => FRUITS.includes(char as typeof FRUITS[number])),\n 'FrutiLink contains invalid fruits'\n );\n\n// Public key validation (base64 encoded)\nexport const publicKeySchema = z.string()\n .min(1, 'Public key cannot be empty')\n .refine(\n (key) => {\n try {\n atob(key);\n return true;\n } catch {\n return false;\n }\n },\n 'Public key must be valid Base64'\n );\n\n// Validation helper functions\nexport const validateQRPayload = (payload: unknown) => qrPayloadSchema.parse(payload);\nexport const validateRelayMessage = (message: unknown) => relayMessageSchema.parse(message);\nexport const validateFrutiLink = (frutiLink: unknown) => frutiLinkSchema.parse(frutiLink);\n\n// Safe parsing functions\nexport const safeValidateQRPayload = (payload: unknown) => qrPayloadSchema.safeParse(payload);\nexport const safeValidateRelayMessage = (message: unknown) => relayMessageSchema.safeParse(message);\nexport const safeValidateFrutiLink = (frutiLink: unknown) => frutiLinkSchema.safeParse(frutiLink);\n\n// Note: Types are exported from ./types/discovery to avoid conflicts\n// Use z.infer<typeof schemaName> if you need to infer types from schemas\n","/**\n * Validation schemas for wallet message types\n */\n\nimport { z } from 'zod';\nimport { dAppMetadataSchema, sessionConfigSchema } from './core';\nimport { encryptedPayloadSchema } from './discovery';\n\n// Re-export encryptedPayloadSchema for convenience\nexport { encryptedPayloadSchema };\n\n// Wallet session claim schema\nexport const walletSessionClaimSchema = z.object({\n /** Unique nonce for this session claim (32 bytes hex-encoded = 64 characters) */\n sessionNonce: z\n .string()\n .length(64, 'Session nonce must be exactly 64 characters (32 bytes hex-encoded)')\n .regex(/^[0-9a-f]{64}$/, 'Session nonce must be lowercase hexadecimal'),\n /** Claim timestamp */\n timestamp: z.number().int().positive('Timestamp must be a positive integer'),\n});\n\n// Wallet message payload schemas\nexport const claimSessionPayloadSchema = z.object({\n type: z.literal('claim_session'),\n /** Wallet's public key for ECDH key exchange - format: \"algorithm:key_data\" (e.g., \"AES-GCM:base64...\" or \"cleartext:none\") */\n walletPublicKey: z\n .string()\n .min(1, 'Wallet public key cannot be empty')\n .regex(/^(AES-GCM:|cleartext:)/, 'Wallet public key must start with \"AES-GCM:\" or \"cleartext:\"'),\n});\n\nexport const prefetchMetadataPayloadSchema = z.object({\n type: z.literal('prefetch_metadata'),\n});\n\nexport const connectionRejectedPayloadSchema = z.object({\n type: z.literal('connection_rejected'),\n encrypted: encryptedPayloadSchema,\n});\n\nexport const authenticateConnectionPayloadSchema = z.object({\n type: z.literal('authenticate_connection'),\n encrypted: encryptedPayloadSchema,\n});\n\nexport const walletReconnectPayloadSchema = z.object({\n type: z.literal('wallet_reconnect'),\n walletPublicKey: z\n .string()\n .min(1, 'Wallet public key cannot be empty')\n .regex(/^(AES-GCM:|cleartext:)/, 'Wallet public key must start with \"AES-GCM:\" or \"cleartext:\"'),\n});\n\n// Union of all wallet message payloads\nexport const walletMessagePayloadSchema = z.discriminatedUnion('type', [\n claimSessionPayloadSchema,\n prefetchMetadataPayloadSchema,\n connectionRejectedPayloadSchema,\n authenticateConnectionPayloadSchema,\n walletReconnectPayloadSchema,\n]);\n\n// Wallet message envelope schema\nexport const walletMessageEnvelopeSchema = z.object({\n /** Session identifier */\n sessionId: z.string().uuid('Session ID must be a valid UUID'),\n /** Wallet session claim credential */\n walletSessionClaim: walletSessionClaimSchema,\n /** Message payload */\n payload: walletMessagePayloadSchema,\n});\n\n// Decrypted data schemas\nexport const rejectionDataSchema = z.object({\n reason: z.string().optional(),\n timestamp: z.number().int().positive(),\n});\n\nexport const walletMetadataSchema = z.object({\n /** Wallet name */\n name: z.string().min(1, 'Wallet name cannot be empty'),\n /** Wallet version */\n version: z.string().optional(),\n /** Wallet icon URL */\n icon: z.string().url('Invalid icon URL').optional(),\n /** Wallet description */\n description: z.string().optional(),\n /** Wallet website URL */\n url: z.string().url('Invalid wallet URL').optional(),\n /** Wallet provider type */\n provider: z.string().optional(),\n});\n\nexport const authenticationDataSchema = z.object({\n /** Wallet address */\n address: z.string().regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address'),\n /** Signature of the SIWE message */\n signature: z.string().regex(/^0x[a-fA-F0-9]+$/, 'Invalid signature format'),\n /** Full SIWE message that was signed */\n message: z.string().min(1, 'Message cannot be empty'),\n /** Chain ID (EIP-155) */\n chainId: z.number().int().positive('Chain ID must be a positive integer'),\n /** Network identifier */\n network: z.string().optional(),\n /** Signing algorithm */\n signingAlgo: z.string().optional(),\n /** Optional wallet metadata */\n walletMetadata: walletMetadataSchema.optional(),\n});\n\n// Relay-to-dApp message schemas\nexport const walletHandshakeMessageSchema = z.object({\n type: z.literal('wallet_handshake'),\n status: z.literal('reviewing'),\n /** Wallet's public key in format \"algorithm:base64_public_key\" */\n walletPublicKey: z.string(),\n timestamp: z.number().int().positive(),\n});\n\nexport const connectionRejectedMessageSchema = z.object({\n type: z.literal('connection_rejected'),\n encrypted: encryptedPayloadSchema,\n});\n\nexport const connectionAuthenticatedMessageSchema = z.object({\n type: z.literal('connection_authenticated'),\n encrypted: encryptedPayloadSchema,\n});\n\n// Union of relay-to-dApp messages\nexport const relayToDAppMessageSchema = z.discriminatedUnion('type', [\n walletHandshakeMessageSchema,\n connectionRejectedMessageSchema,\n connectionAuthenticatedMessageSchema,\n]);\n\n// Prefetch metadata response schema\nexport const prefetchMetadataResponseSchema = z.object({\n dappMetadata: dAppMetadataSchema,\n sessionConfig: sessionConfigSchema.optional(),\n});\n\n// Validation helper functions\nexport const validateWalletMessage = (message: unknown) => {\n return walletMessageEnvelopeSchema.parse(message);\n};\n\nexport const safeValidateWalletMessage = (message: unknown) => {\n return walletMessageEnvelopeSchema.safeParse(message);\n};\n\nexport const validateRelayToDAppMessage = (message: unknown) => {\n return relayToDAppMessageSchema.parse(message);\n};\n\nexport const safeValidateRelayToDAppMessage = (message: unknown) => {\n return relayToDAppMessageSchema.safeParse(message);\n};\n\nexport const validateWalletSessionClaim = (claim: unknown) => {\n return walletSessionClaimSchema.parse(claim);\n};\n\nexport const safeValidateWalletSessionClaim = (claim: unknown) => {\n return walletSessionClaimSchema.safeParse(claim);\n};\n\n/**\n * Validate timestamp for replay attack prevention\n * @param timestamp - Timestamp to validate\n * @param maxAge - Maximum age in milliseconds (default: 5 minutes)\n */\nexport function validateTimestamp(timestamp: number, maxAge: number = 5 * 60 * 1000): boolean {\n const now = Date.now();\n const age = Math.abs(now - timestamp);\n return age <= maxAge;\n}\n\n// NOTE: Nonce generation moved to @bananalink-sdk/crypto package to avoid circular dependencies\n// SDKs should use crypto.generateSessionNonce() before validating session claims\n","/**\n * Validation schemas for client message types\n */\n\nimport { z } from 'zod';\n\n// Client session claim schema\nexport const clientSessionClaimSchema = z.object({\n /** Unique nonce for this client session */\n claimNonce: z.string().min(32, 'Client claim nonce must be at least 32 characters'),\n /** Claim generation timestamp */\n timestamp: z.number().int().positive('Timestamp must be a positive integer'),\n});\n\n// Client message payload schemas\nexport const clientReconnectPayloadSchema = z.object({\n type: z.literal('client_reconnect'),\n sessionClaim: clientSessionClaimSchema,\n clientPublicKey: z\n .string()\n .min(1, 'Client public key cannot be empty')\n .regex(/^(AES-GCM:|cleartext:)/, 'Client public key must start with \"AES-GCM:\" or \"cleartext:\"'),\n});\n\nexport const clientHandshakeMessageSchema = z.object({\n type: z.literal('client_handshake'),\n clientPublicKey: z\n .string()\n .min(1, 'Client public key cannot be empty')\n .regex(/^(AES-GCM:|cleartext:)/, 'Client public key must start with \"AES-GCM:\" or \"cleartext:\"'),\n timestamp: z.number().int().positive('Timestamp must be a positive integer'),\n});\n\nexport const closeSessionPayloadSchema = z.object({\n type: z.literal('close_session'),\n /** Optional reason for closing the session */\n reason: z.string().optional(),\n});\n\n// Union of all client message payloads\nexport const clientMessagePayloadSchema = z.discriminatedUnion('type', [\n clientReconnectPayloadSchema,\n closeSessionPayloadSchema,\n]);\n\n// Client message envelope schema\nexport const clientMessageEnvelopeSchema = z.object({\n /** Session identifier */\n sessionId: z.string().uuid('Session ID must be a valid UUID'),\n /** Client session claim */\n clientSessionClaim: clientSessionClaimSchema,\n /** Message payload */\n payload: clientMessagePayloadSchema,\n});\n\n// Validation helper functions\nexport const validateClientMessage = (message: unknown) => {\n return clientMessageEnvelopeSchema.parse(message);\n};\n\nexport const safeValidateClientMessage = (message: unknown) => {\n return clientMessageEnvelopeSchema.safeParse(message);\n};\n\nexport const validateClientSessionClaim = (claim: unknown) => {\n return clientSessionClaimSchema.parse(claim);\n};\n\nexport const safeValidateClientSessionClaim = (claim: unknown) => {\n return clientSessionClaimSchema.safeParse(claim);\n};\n","/**\n * Validation schemas for relay notification message types\n */\n\nimport { z } from 'zod';\n\n// Session closed acknowledgment schema\nexport const sessionClosedAckSchema = z.object({\n type: z.literal('session_closed_ack'),\n timestamp: z.number().int().positive(),\n});\n\n// Session closed notification schema\nexport const sessionClosedNotificationSchema = z.object({\n type: z.literal('session_closed_notification'),\n /** Which party closed the session */\n closedBy: z.enum(['client', 'wallet']),\n /** Optional reason for closure */\n reason: z.string().optional(),\n timestamp: z.number().int().positive(),\n});\n\n// Reconnected message schema\nexport const reconnectedMessageSchema = z.object({\n type: z.literal('reconnected'),\n /** Number of messages that were queued during disconnection */\n queuedMessages: z.number().int().nonnegative(),\n timestamp: z.number().int().positive(),\n});\n\n// Union of all relay notification messages\nexport const relayNotificationMessageSchema = z.discriminatedUnion('type', [\n sessionClosedAckSchema,\n sessionClosedNotificationSchema,\n reconnectedMessageSchema,\n]);\n\n// Validation helper functions\nexport const validateRelayNotificationMessage = (message: unknown) => {\n return relayNotificationMessageSchema.parse(message);\n};\n\nexport const safeValidateRelayNotificationMessage = (message: unknown) => {\n return relayNotificationMessageSchema.safeParse(message);\n};\n","/**\n * Zod validation schemas for BananaLink protocol types\n * Provides runtime type validation for all protocol messages\n */\n\nimport { z } from 'zod';\nimport { FRUITS, NETWORK_CONFIG } from '../constants';\n\n// Base validation schemas\nconst ethereumAddressSchema = z.string().regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address');\nconst iso8601Schema = z.string().datetime({ message: 'Invalid ISO 8601 datetime' });\nconst urlSchema = z.string().url('Invalid URL');\nconst domainSchema = z.string().min(1, 'Domain cannot be empty');\n// Protocol v2.0: 32-byte nonces = 64 hex characters\nconst nonceSchema = z\n .string()\n .length(64, 'Nonce must be exactly 64 characters (32 bytes hex-encoded)')\n .regex(/^[a-fA-F0-9]{64}$/, 'Nonce must be a valid 64-character hexadecimal string');\n\n// SIWE base schema\nexport const siweFieldsSchema = z.object({\n scheme: z.string().optional(),\n domain: domainSchema,\n address: ethereumAddressSchema,\n statement: z.string().optional(),\n uri: urlSchema,\n version: z.literal('1'),\n chainId: z.number().int().positive(),\n nonce: nonceSchema,\n issuedAt: iso8601Schema,\n expirationTime: iso8601Schema.optional(),\n notBefore: iso8601Schema.optional(),\n requestId: z.string().optional(),\n resources: z.array(urlSchema).optional(),\n});\n\n// DApp metadata schema\nexport const dAppMetadataSchema = z.object({\n returnUrl: urlSchema.optional(),\n});\n\n// QR payload schema\nexport const qrPayloadSchema = z.object({\n sessionId: z.string().min(1, 'Session ID cannot be empty'),\n publicKey: z.string().min(1, 'Public key cannot be empty'),\n providerId: z.string().optional(),\n relayUrl: z.string().url().optional(),\n});\n\n// Encrypted payload schema\nexport const encryptedPayloadSchema = z.object({\n iv: z.string().min(1, 'IV cannot be empty'),\n ciphertext: z.string().min(1, 'Ciphertext cannot be empty'),\n mac: z.string().min(1, 'MAC cannot be empty'),\n});\n\n// Relay message type schema\nexport const relayMessageTypeSchema = z.enum(['pub', 'sub', 'ack', 'error']);\n\n// Relay message schema\nexport const relayMessageSchema = z.object({\n topic: z.string().min(1, 'Topic cannot be empty'),\n type: relayMessageTypeSchema,\n payload: encryptedPayloadSchema.optional(),\n id: z.string().min(1, 'Message ID cannot be empty'),\n});\n\n// Security policy schema\nexport const securityPolicySchema = z.object({\n sessionTimeout: z.number().int().positive(),\n requestTimeout: z.number().int().positive(),\n maxConcurrentSessions: z.number().int().positive(),\n requireOriginProof: z.boolean(),\n allowedDomains: z.array(domainSchema).optional(),\n blockedDomains: z.array(domainSchema).optional(),\n});\n\n// Origin proof schema\nexport const originProofSchema = z.object({\n domain: domainSchema,\n timestamp: z.number().int().positive(),\n signature: z.string().min(1, 'Signature cannot be empty'),\n});\n\n// Session state schema (Protocol v2.0)\nexport const sessionStateSchema = z.enum([\n 'created',\n 'claimed',\n 'authenticated',\n 'active',\n 'disconnected',\n 'closed',\n 'expired',\n 'rejected',\n]);\n\n// Session info schema\nexport const sessionInfoSchema = z.object({\n sessionId: z.string().min(1, 'Session ID cannot be empty'),\n state: sessionStateSchema,\n address: ethereumAddressSchema.optional(),\n metadata: dAppMetadataSchema,\n createdAt: iso8601Schema,\n lastActivity: iso8601Schema,\n expiresAt: iso8601Schema.optional(),\n});\n\n// Display info schema\nexport const displayInfoSchema = z.object({\n qrCode: z.string().min(1, 'QR code cannot be empty'),\n frutiLink: z.string().regex(/^[🍌🍎🍊🍇🍓🍑🍒🍉🥝🍍🥭🥥🫐🍈🍋🥑]{8}$/u, 'Invalid FrutiLink format'),\n deepLink: urlSchema,\n});\n\n// Error code schema (Protocol v2.0+)\nexport const errorCodeSchema = z.enum([\n // Session errors\n 'SESSION_EXPIRED',\n 'SESSION_NOT_FOUND',\n 'SESSION_ALREADY_CLAIMED',\n 'INVALID_SESSION_CLAIM',\n 'INVALID_CLIENT_CLAIM',\n 'SESSION_TOKEN_EXPIRED',\n 'SESSION_CLOSED',\n // Encryption errors\n 'ENCRYPTION_FAILED',\n 'DECRYPTION_FAILED',\n 'INVALID_SIGNATURE',\n // Network errors\n 'NETWORK_ERROR',\n 'RELAY_ERROR',\n 'MESSAGE_QUEUE_FULL',\n 'RATE_LIMIT_EXCEEDED',\n 'ORIGIN_MISMATCH',\n // Request lifecycle errors (v2.1+)\n 'REQUEST_PENDING',\n 'REQUEST_NOT_FOUND',\n 'REQUEST_EXPIRED',\n 'REQUEST_INVALID',\n 'REQUEST_TIMEOUT',\n // Operation-specific errors (v2.1+)\n 'SIGNING_FAILED',\n 'SIGNING_REJECTED',\n 'TRANSACTION_INVALID',\n 'CHAIN_MISMATCH',\n]);\n\n// BananaLink error schema\nexport const bananaLinkErrorSchema = z.object({\n code: errorCodeSchema,\n message: z.string().min(1, 'Error message cannot be empty'),\n details: z.unknown().optional(),\n});\n\n// FrutiLink validation\nexport const frutiLinkSchema = z.string()\n .length(8, 'FrutiLink must be exactly 8 characters')\n .refine(\n (value) => value.split('').every(char => FRUITS.includes(char as typeof FRUITS[number])),\n 'FrutiLink contains invalid fruits'\n );\n\n// Supported chain ID validation\nexport const supportedChainIdSchema = z.number()\n .int()\n .refine(\n (chainId) => NETWORK_CONFIG.SUPPORTED_CHAINS.includes(chainId as typeof NETWORK_CONFIG.SUPPORTED_CHAINS[number]),\n 'Unsupported chain ID'\n );\n\n// Base64 string validation\nexport const base64Schema = z.string().regex(\n /^[A-Za-z0-9+/]*={0,2}$/,\n 'Invalid Base64 string'\n);\n\n// Session ID validation (UUID v4)\nexport const sessionIdSchema = z.string().regex(\n /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,\n 'Invalid session ID format'\n);\n\n// Public key validation (base64 encoded)\nexport const publicKeySchema = z.string()\n .min(1, 'Public key cannot be empty')\n .refine(\n (key) => {\n try {\n atob(key);\n return true;\n } catch {\n return false;\n }\n },\n 'Public key must be valid Base64'\n );\n\n// Validation helper functions (Protocol v2.0)\nexport const validateQRPayload = (payload: unknown) => qrPayloadSchema.parse(payload);\nexport const validateRelayMessage = (message: unknown) => relayMessageSchema.parse(message);\nexport const validateSessionInfo = (info: unknown) => sessionInfoSchema.parse(info);\nexport const validateFrutiLink = (frutiLink: unknown) => frutiLinkSchema.parse(frutiLink);\n\n// Safe parsing functions (returns { success: boolean, data?: T, error?: ZodError })\nexport const safeValidateQRPayload = (payload: unknown) => qrPayloadSchema.safeParse(payload);\nexport const safeValidateRelayMessage = (message: unknown) => relayMessageSchema.safeParse(message);\nexport const safeValidateSessionInfo = (info: unknown) => sessionInfoSchema.safeParse(info);\nexport const safeValidateFrutiLink = (frutiLink: unknown) => frutiLinkSchema.safeParse(frutiLink);\n\n// Type inference from schemas (Protocol v2.0)\nexport type SIWEFields = z.infer<typeof siweFieldsSchema>;\nexport type DAppMetadata = z.infer<typeof dAppMetadataSchema>;\nexport type QRPayload = z.infer<typeof qrPayloadSchema>;\nexport type EncryptedPayload = z.infer<typeof encryptedPayloadSchema>;\nexport type RelayMessage = z.infer<typeof relayMessageSchema>;\nexport type SecurityPolicy = z.infer<typeof securityPolicySchema>;\nexport type SessionInfo = z.infer<typeof sessionInfoSchema>;\nexport type DisplayInfo = z.infer<typeof displayInfoSchema>;\n\n// Re-export core schemas (Protocol v2.0)\nexport {\n dAppMetadataSchema as coreDAppMetadataSchema,\n sessionConfigSchema,\n sessionOptionsSchema,\n sessionMetadataSchema,\n createSessionRequestSchema,\n createSessionResponseSchema,\n clientSessionClaimSchema,\n securityPolicySchema as coreSecurityPolicySchema,\n} from './core';\n\n// Re-export v2.0 wallet message schemas\nexport * from './wallet-messages';\n\n// Re-export v2.0 client message schemas\nexport * from './client-messages';\n\n// Re-export v2.0 relay message schemas\nexport * from './relay-messages';\n"]}
|
|
@@ -159,7 +159,8 @@ var authenticateConnectionPayloadSchema = z.object({
|
|
|
159
159
|
encrypted: encryptedPayloadSchema
|
|
160
160
|
});
|
|
161
161
|
var walletReconnectPayloadSchema = z.object({
|
|
162
|
-
type: z.literal("wallet_reconnect")
|
|
162
|
+
type: z.literal("wallet_reconnect"),
|
|
163
|
+
walletPublicKey: z.string().min(1, "Wallet public key cannot be empty").regex(/^(AES-GCM:|cleartext:)/, 'Wallet public key must start with "AES-GCM:" or "cleartext:"')
|
|
163
164
|
});
|
|
164
165
|
var walletMessagePayloadSchema = z.discriminatedUnion("type", [
|
|
165
166
|
claimSessionPayloadSchema,
|
|
@@ -265,7 +266,14 @@ var clientSessionClaimSchema2 = z.object({
|
|
|
265
266
|
timestamp: z.number().int().positive("Timestamp must be a positive integer")
|
|
266
267
|
});
|
|
267
268
|
var clientReconnectPayloadSchema = z.object({
|
|
268
|
-
type: z.literal("client_reconnect")
|
|
269
|
+
type: z.literal("client_reconnect"),
|
|
270
|
+
sessionClaim: clientSessionClaimSchema2,
|
|
271
|
+
clientPublicKey: z.string().min(1, "Client public key cannot be empty").regex(/^(AES-GCM:|cleartext:)/, 'Client public key must start with "AES-GCM:" or "cleartext:"')
|
|
272
|
+
});
|
|
273
|
+
var clientHandshakeMessageSchema = z.object({
|
|
274
|
+
type: z.literal("client_handshake"),
|
|
275
|
+
clientPublicKey: z.string().min(1, "Client public key cannot be empty").regex(/^(AES-GCM:|cleartext:)/, 'Client public key must start with "AES-GCM:" or "cleartext:"'),
|
|
276
|
+
timestamp: z.number().int().positive("Timestamp must be a positive integer")
|
|
269
277
|
});
|
|
270
278
|
var closeSessionPayloadSchema = z.object({
|
|
271
279
|
type: z.literal("close_session"),
|
|
@@ -475,6 +483,6 @@ var safeValidateRelayMessage = /* @__PURE__ */ __name((message) => relayMessageS
|
|
|
475
483
|
var safeValidateSessionInfo = /* @__PURE__ */ __name((info) => sessionInfoSchema.safeParse(info), "safeValidateSessionInfo");
|
|
476
484
|
var safeValidateFrutiLink = /* @__PURE__ */ __name((frutiLink) => frutiLinkSchema2.safeParse(frutiLink), "safeValidateFrutiLink");
|
|
477
485
|
|
|
478
|
-
export { authenticateConnectionPayloadSchema, authenticationDataSchema, bananaLinkErrorSchema, base64Schema, claimSessionPayloadSchema, clientMessageEnvelopeSchema, clientMessagePayloadSchema, clientReconnectPayloadSchema, clientSessionClaimSchema, closeSessionPayloadSchema, connectionAuthenticatedMessageSchema, connectionRejectedMessageSchema, connectionRejectedPayloadSchema, createSessionRequestSchema, createSessionResponseSchema, dAppMetadataSchema, dAppMetadataSchema2, displayInfoSchema2 as displayInfoSchema, encryptedPayloadSchema2 as encryptedPayloadSchema, errorCodeSchema, frutiLinkSchema2 as frutiLinkSchema, originProofSchema, prefetchMetadataPayloadSchema, prefetchMetadataResponseSchema, publicKeySchema2 as publicKeySchema, qrPayloadSchema2 as qrPayloadSchema, reconnectedMessageSchema, rejectionDataSchema, relayMessageSchema2 as relayMessageSchema, relayMessageTypeSchema2 as relayMessageTypeSchema, relayNotificationMessageSchema, relayToDAppMessageSchema, safeValidateClientMessage, safeValidateClientSessionClaim, safeValidateFrutiLink, safeValidateQRPayload, safeValidateRelayMessage, safeValidateRelayNotificationMessage, safeValidateRelayToDAppMessage, safeValidateSessionInfo, safeValidateWalletMessage, safeValidateWalletSessionClaim, securityPolicySchema, securityPolicySchema2, sessionClosedAckSchema, sessionClosedNotificationSchema, sessionConfigSchema, sessionIdSchema, sessionInfoSchema, sessionMetadataSchema, sessionOptionsSchema, sessionStateSchema, siweFieldsSchema2 as siweFieldsSchema, supportedChainIdSchema, validateClientMessage, validateClientSessionClaim, validateFrutiLink, validateQRPayload, validateRelayMessage, validateRelayNotificationMessage, validateRelayToDAppMessage, validateSessionInfo, validateTimestamp, validateWalletMessage, validateWalletSessionClaim, walletHandshakeMessageSchema, walletMessageEnvelopeSchema, walletMessagePayloadSchema, walletMetadataSchema, walletReconnectPayloadSchema, walletSessionClaimSchema };
|
|
479
|
-
//# sourceMappingURL=chunk-
|
|
480
|
-
//# sourceMappingURL=chunk-
|
|
486
|
+
export { authenticateConnectionPayloadSchema, authenticationDataSchema, bananaLinkErrorSchema, base64Schema, claimSessionPayloadSchema, clientHandshakeMessageSchema, clientMessageEnvelopeSchema, clientMessagePayloadSchema, clientReconnectPayloadSchema, clientSessionClaimSchema, closeSessionPayloadSchema, connectionAuthenticatedMessageSchema, connectionRejectedMessageSchema, connectionRejectedPayloadSchema, createSessionRequestSchema, createSessionResponseSchema, dAppMetadataSchema, dAppMetadataSchema2, displayInfoSchema2 as displayInfoSchema, encryptedPayloadSchema2 as encryptedPayloadSchema, errorCodeSchema, frutiLinkSchema2 as frutiLinkSchema, originProofSchema, prefetchMetadataPayloadSchema, prefetchMetadataResponseSchema, publicKeySchema2 as publicKeySchema, qrPayloadSchema2 as qrPayloadSchema, reconnectedMessageSchema, rejectionDataSchema, relayMessageSchema2 as relayMessageSchema, relayMessageTypeSchema2 as relayMessageTypeSchema, relayNotificationMessageSchema, relayToDAppMessageSchema, safeValidateClientMessage, safeValidateClientSessionClaim, safeValidateFrutiLink, safeValidateQRPayload, safeValidateRelayMessage, safeValidateRelayNotificationMessage, safeValidateRelayToDAppMessage, safeValidateSessionInfo, safeValidateWalletMessage, safeValidateWalletSessionClaim, securityPolicySchema, securityPolicySchema2, sessionClosedAckSchema, sessionClosedNotificationSchema, sessionConfigSchema, sessionIdSchema, sessionInfoSchema, sessionMetadataSchema, sessionOptionsSchema, sessionStateSchema, siweFieldsSchema2 as siweFieldsSchema, supportedChainIdSchema, validateClientMessage, validateClientSessionClaim, validateFrutiLink, validateQRPayload, validateRelayMessage, validateRelayNotificationMessage, validateRelayToDAppMessage, validateSessionInfo, validateTimestamp, validateWalletMessage, validateWalletSessionClaim, walletHandshakeMessageSchema, walletMessageEnvelopeSchema, walletMessagePayloadSchema, walletMetadataSchema, walletReconnectPayloadSchema, walletSessionClaimSchema };
|
|
487
|
+
//# sourceMappingURL=chunk-XCMAKN3P.js.map
|
|
488
|
+
//# sourceMappingURL=chunk-XCMAKN3P.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schemas/core.ts","../src/schemas/discovery.ts","../src/schemas/wallet-messages.ts","../src/schemas/client-messages.ts","../src/schemas/relay-messages.ts","../src/schemas/index.ts"],"names":["urlSchema","z","clientSessionClaimSchema","ethereumAddressSchema","iso8601Schema","domainSchema","nonceSchema","siweFieldsSchema","dAppMetadataSchema","qrPayloadSchema","encryptedPayloadSchema","relayMessageTypeSchema","relayMessageSchema","securityPolicySchema","displayInfoSchema","frutiLinkSchema","publicKeySchema"],"mappings":"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","file":"chunk-XCMAKN3P.js","sourcesContent":["/**\n * Core validation schemas for BananaLink protocol types\n */\n\nimport { z } from 'zod';\n\n// Base validation schemas\nconst ethereumAddressSchema = z.string().regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address');\nconst hexStringSchema = z.string().regex(/^0x[a-fA-F0-9]*$/, 'Invalid hex string');\nconst iso8601Schema = z.string().datetime({ message: 'Invalid ISO 8601 datetime' });\nconst urlSchema = z.string().url('Invalid URL');\nconst domainSchema = z.string().min(1, 'Domain cannot be empty');\n// Protocol v2.0: 32-byte nonces = 64 hex characters\nconst nonceSchema = z\n .string()\n .length(64, 'Nonce must be exactly 64 characters (32 bytes hex-encoded)')\n .regex(/^[a-fA-F0-9]{64}$/, 'Nonce must be a valid 64-character hexadecimal string');\n\n// SIWE base schema\nexport const siweFieldsSchema = z.object({\n scheme: z.string().optional(),\n domain: domainSchema,\n address: ethereumAddressSchema,\n statement: z.string().optional(),\n uri: urlSchema,\n version: z.literal('1'),\n chainId: z.number().int().positive(),\n nonce: nonceSchema,\n issuedAt: iso8601Schema,\n expirationTime: iso8601Schema.optional(),\n notBefore: iso8601Schema.optional(),\n requestId: z.string().optional(),\n resources: z.array(urlSchema).optional(),\n});\n\n// Transaction payload schema\nexport const transactionPayloadSchema = z.object({\n to: ethereumAddressSchema,\n value: z.string().regex(/^\\d+$/, 'Value must be a numeric string').optional(),\n data: hexStringSchema.optional(),\n gas: z.string().regex(/^\\d+$/, 'Gas must be a numeric string').optional(),\n gasPrice: z.string().regex(/^\\d+$/, 'Gas price must be a numeric string').optional(),\n maxFeePerGas: z.string().regex(/^\\d+$/, 'Max fee per gas must be a numeric string').optional(),\n maxPriorityFeePerGas: z.string().regex(/^\\d+$/, 'Max priority fee per gas must be a numeric string').optional(),\n});\n\n// Sign payload schema\nexport const signPayloadSchema = z.object({\n message: z.string().min(1, 'Message cannot be empty'),\n encoding: z.enum(['utf8', 'hex']).default('utf8'),\n});\n\n// BananaLink message type schema\nexport const messageTypeSchema = z.enum(['auth', 'tx', 'sign']);\n\n// Main BananaLink message schema\nexport const bananaLinkMessageSchema = siweFieldsSchema.extend({\n type: messageTypeSchema,\n sessionId: z.string().min(1, 'Session ID cannot be empty'),\n payload: z.union([transactionPayloadSchema, signPayloadSchema]).optional(),\n});\n\n// DApp metadata schema\nexport const dAppMetadataSchema = z.object({\n dappId: z.string().optional(),\n name: z.string().min(1, 'Name cannot be empty'),\n description: z.string().optional(),\n url: urlSchema,\n icons: z.array(urlSchema).optional(),\n});\n\n// Session configuration schema\nexport const sessionConfigSchema = z.object({\n returnUrl: urlSchema.optional(),\n sessionName: z.string().optional(),\n expiresAt: iso8601Schema.optional(),\n customData: z.record(z.unknown()).optional(),\n});\n\n// BananaLink response schema\nexport const bananaLinkResponseSchema = z.object({\n success: z.boolean(),\n data: z.unknown().optional(),\n error: z.string().optional(),\n requestId: z.string().optional(),\n});\n\n// Security policy schema\nexport const securityPolicySchema = z.object({\n sessionTimeout: z.number().int().positive(),\n requestTimeout: z.number().int().positive(),\n maxConcurrentSessions: z.number().int().positive(),\n requireOriginProof: z.boolean(),\n allowedDomains: z.array(domainSchema).optional(),\n blockedDomains: z.array(domainSchema).optional(),\n});\n\n// Session options schema\nexport const sessionOptionsSchema = z.object({\n config: sessionConfigSchema.optional(),\n securityPolicy: securityPolicySchema.partial().optional(),\n relayUrl: urlSchema.optional(),\n});\n\n// Session metadata schema (for session creation)\nexport const sessionMetadataSchema = z.object({\n encryptionAlgorithm: z.enum(['AES-GCM', 'plaintext']),\n sessionId: z.string().min(1, 'Session ID cannot be empty'),\n publicKey: z.string().optional(),\n timestamp: iso8601Schema,\n});\n\n// Session creation request schema (Client → API Gateway)\nexport const createSessionRequestSchema = z.object({\n dappId: z.string().uuid('Invalid DApp ID format'),\n metadata: sessionMetadataSchema,\n sessionConfig: sessionConfigSchema.optional(),\n});\n\n// Client session claim schema\nexport const clientSessionClaimSchema = z.object({\n /** Unique nonce for client session claim (32 bytes hex-encoded = 64 characters) */\n claimNonce: z\n .string()\n .length(64, 'Claim nonce must be exactly 64 characters (32 bytes hex-encoded)')\n .regex(/^[0-9a-f]{64}$/, 'Claim nonce must be lowercase hexadecimal'),\n timestamp: z.number().int().positive(),\n});\n\n// Session creation response schema (API Gateway → Client)\nexport const createSessionResponseSchema = z.object({\n sessionId: z.string().uuid('Invalid session ID format'),\n clientSessionClaim: clientSessionClaimSchema,\n ttl: z.number().int().positive(),\n});\n\n// Validation helper functions\nexport const validateMessage = (message: unknown) => bananaLinkMessageSchema.parse(message);\n\n// Safe parsing functions\nexport const safeValidateMessage = (message: unknown) => bananaLinkMessageSchema.safeParse(message);\n\n// Note: Types are exported from ./types/core to avoid conflicts\n// Use z.infer<typeof schemaName> if you need to infer types from schemas\n","/**\n * Discovery validation schemas for BananaLink protocol\n */\n\nimport { z } from 'zod';\nimport { FRUITS } from '../constants';\n\n// Base validation schemas\nconst urlSchema = z.string().url('Invalid URL');\n\n\n// QR payload schema\nexport const qrPayloadSchema = z.object({\n sessionId: z.string().min(1, 'Session ID cannot be empty'),\n publicKey: z.string().min(1, 'Public key cannot be empty'),\n relayUrl: z.string().url().optional(),\n providerId: z.string().optional(),\n});\n\n// Encrypted payload schema\nexport const encryptedPayloadSchema = z.object({\n iv: z.string().min(1, 'IV cannot be empty'),\n ciphertext: z.string().min(1, 'Ciphertext cannot be empty'),\n mac: z.string().min(1, 'MAC cannot be empty'),\n});\n\n// Relay message type schema\nexport const relayMessageTypeSchema = z.enum(['pub', 'sub', 'ack', 'error']);\n\n// Relay message schema\nexport const relayMessageSchema = z.object({\n topic: z.string().min(1, 'Topic cannot be empty'),\n type: relayMessageTypeSchema,\n payload: encryptedPayloadSchema.optional(),\n id: z.string().min(1, 'Message ID cannot be empty'),\n});\n\n// Display info schema\nexport const displayInfoSchema = z.object({\n qrCode: z.string().min(1, 'QR code cannot be empty'),\n frutiLink: z.string().regex(/^[🍌🍎🍊🍇🍓🍑🍒🍉🥝🍍🥭🥥🫐🍈🍋🥑]{8}$/u, 'Invalid FrutiLink format'),\n deepLink: urlSchema,\n});\n\n// FrutiLink validation\nexport const frutiLinkSchema = z.string()\n .length(8, 'FrutiLink must be exactly 8 characters')\n .refine(\n (value) => value.split('').every(char => FRUITS.includes(char as typeof FRUITS[number])),\n 'FrutiLink contains invalid fruits'\n );\n\n// Public key validation (base64 encoded)\nexport const publicKeySchema = z.string()\n .min(1, 'Public key cannot be empty')\n .refine(\n (key) => {\n try {\n atob(key);\n return true;\n } catch {\n return false;\n }\n },\n 'Public key must be valid Base64'\n );\n\n// Validation helper functions\nexport const validateQRPayload = (payload: unknown) => qrPayloadSchema.parse(payload);\nexport const validateRelayMessage = (message: unknown) => relayMessageSchema.parse(message);\nexport const validateFrutiLink = (frutiLink: unknown) => frutiLinkSchema.parse(frutiLink);\n\n// Safe parsing functions\nexport const safeValidateQRPayload = (payload: unknown) => qrPayloadSchema.safeParse(payload);\nexport const safeValidateRelayMessage = (message: unknown) => relayMessageSchema.safeParse(message);\nexport const safeValidateFrutiLink = (frutiLink: unknown) => frutiLinkSchema.safeParse(frutiLink);\n\n// Note: Types are exported from ./types/discovery to avoid conflicts\n// Use z.infer<typeof schemaName> if you need to infer types from schemas\n","/**\n * Validation schemas for wallet message types\n */\n\nimport { z } from 'zod';\nimport { dAppMetadataSchema, sessionConfigSchema } from './core';\nimport { encryptedPayloadSchema } from './discovery';\n\n// Re-export encryptedPayloadSchema for convenience\nexport { encryptedPayloadSchema };\n\n// Wallet session claim schema\nexport const walletSessionClaimSchema = z.object({\n /** Unique nonce for this session claim (32 bytes hex-encoded = 64 characters) */\n sessionNonce: z\n .string()\n .length(64, 'Session nonce must be exactly 64 characters (32 bytes hex-encoded)')\n .regex(/^[0-9a-f]{64}$/, 'Session nonce must be lowercase hexadecimal'),\n /** Claim timestamp */\n timestamp: z.number().int().positive('Timestamp must be a positive integer'),\n});\n\n// Wallet message payload schemas\nexport const claimSessionPayloadSchema = z.object({\n type: z.literal('claim_session'),\n /** Wallet's public key for ECDH key exchange - format: \"algorithm:key_data\" (e.g., \"AES-GCM:base64...\" or \"cleartext:none\") */\n walletPublicKey: z\n .string()\n .min(1, 'Wallet public key cannot be empty')\n .regex(/^(AES-GCM:|cleartext:)/, 'Wallet public key must start with \"AES-GCM:\" or \"cleartext:\"'),\n});\n\nexport const prefetchMetadataPayloadSchema = z.object({\n type: z.literal('prefetch_metadata'),\n});\n\nexport const connectionRejectedPayloadSchema = z.object({\n type: z.literal('connection_rejected'),\n encrypted: encryptedPayloadSchema,\n});\n\nexport const authenticateConnectionPayloadSchema = z.object({\n type: z.literal('authenticate_connection'),\n encrypted: encryptedPayloadSchema,\n});\n\nexport const walletReconnectPayloadSchema = z.object({\n type: z.literal('wallet_reconnect'),\n walletPublicKey: z\n .string()\n .min(1, 'Wallet public key cannot be empty')\n .regex(/^(AES-GCM:|cleartext:)/, 'Wallet public key must start with \"AES-GCM:\" or \"cleartext:\"'),\n});\n\n// Union of all wallet message payloads\nexport const walletMessagePayloadSchema = z.discriminatedUnion('type', [\n claimSessionPayloadSchema,\n prefetchMetadataPayloadSchema,\n connectionRejectedPayloadSchema,\n authenticateConnectionPayloadSchema,\n walletReconnectPayloadSchema,\n]);\n\n// Wallet message envelope schema\nexport const walletMessageEnvelopeSchema = z.object({\n /** Session identifier */\n sessionId: z.string().uuid('Session ID must be a valid UUID'),\n /** Wallet session claim credential */\n walletSessionClaim: walletSessionClaimSchema,\n /** Message payload */\n payload: walletMessagePayloadSchema,\n});\n\n// Decrypted data schemas\nexport const rejectionDataSchema = z.object({\n reason: z.string().optional(),\n timestamp: z.number().int().positive(),\n});\n\nexport const walletMetadataSchema = z.object({\n /** Wallet name */\n name: z.string().min(1, 'Wallet name cannot be empty'),\n /** Wallet version */\n version: z.string().optional(),\n /** Wallet icon URL */\n icon: z.string().url('Invalid icon URL').optional(),\n /** Wallet description */\n description: z.string().optional(),\n /** Wallet website URL */\n url: z.string().url('Invalid wallet URL').optional(),\n /** Wallet provider type */\n provider: z.string().optional(),\n});\n\nexport const authenticationDataSchema = z.object({\n /** Wallet address */\n address: z.string().regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address'),\n /** Signature of the SIWE message */\n signature: z.string().regex(/^0x[a-fA-F0-9]+$/, 'Invalid signature format'),\n /** Full SIWE message that was signed */\n message: z.string().min(1, 'Message cannot be empty'),\n /** Chain ID (EIP-155) */\n chainId: z.number().int().positive('Chain ID must be a positive integer'),\n /** Network identifier */\n network: z.string().optional(),\n /** Signing algorithm */\n signingAlgo: z.string().optional(),\n /** Optional wallet metadata */\n walletMetadata: walletMetadataSchema.optional(),\n});\n\n// Relay-to-dApp message schemas\nexport const walletHandshakeMessageSchema = z.object({\n type: z.literal('wallet_handshake'),\n status: z.literal('reviewing'),\n /** Wallet's public key in format \"algorithm:base64_public_key\" */\n walletPublicKey: z.string(),\n timestamp: z.number().int().positive(),\n});\n\nexport const connectionRejectedMessageSchema = z.object({\n type: z.literal('connection_rejected'),\n encrypted: encryptedPayloadSchema,\n});\n\nexport const connectionAuthenticatedMessageSchema = z.object({\n type: z.literal('connection_authenticated'),\n encrypted: encryptedPayloadSchema,\n});\n\n// Union of relay-to-dApp messages\nexport const relayToDAppMessageSchema = z.discriminatedUnion('type', [\n walletHandshakeMessageSchema,\n connectionRejectedMessageSchema,\n connectionAuthenticatedMessageSchema,\n]);\n\n// Prefetch metadata response schema\nexport const prefetchMetadataResponseSchema = z.object({\n dappMetadata: dAppMetadataSchema,\n sessionConfig: sessionConfigSchema.optional(),\n});\n\n// Validation helper functions\nexport const validateWalletMessage = (message: unknown) => {\n return walletMessageEnvelopeSchema.parse(message);\n};\n\nexport const safeValidateWalletMessage = (message: unknown) => {\n return walletMessageEnvelopeSchema.safeParse(message);\n};\n\nexport const validateRelayToDAppMessage = (message: unknown) => {\n return relayToDAppMessageSchema.parse(message);\n};\n\nexport const safeValidateRelayToDAppMessage = (message: unknown) => {\n return relayToDAppMessageSchema.safeParse(message);\n};\n\nexport const validateWalletSessionClaim = (claim: unknown) => {\n return walletSessionClaimSchema.parse(claim);\n};\n\nexport const safeValidateWalletSessionClaim = (claim: unknown) => {\n return walletSessionClaimSchema.safeParse(claim);\n};\n\n/**\n * Validate timestamp for replay attack prevention\n * @param timestamp - Timestamp to validate\n * @param maxAge - Maximum age in milliseconds (default: 5 minutes)\n */\nexport function validateTimestamp(timestamp: number, maxAge: number = 5 * 60 * 1000): boolean {\n const now = Date.now();\n const age = Math.abs(now - timestamp);\n return age <= maxAge;\n}\n\n// NOTE: Nonce generation moved to @bananalink-sdk/crypto package to avoid circular dependencies\n// SDKs should use crypto.generateSessionNonce() before validating session claims\n","/**\n * Validation schemas for client message types\n */\n\nimport { z } from 'zod';\n\n// Client session claim schema\nexport const clientSessionClaimSchema = z.object({\n /** Unique nonce for this client session */\n claimNonce: z.string().min(32, 'Client claim nonce must be at least 32 characters'),\n /** Claim generation timestamp */\n timestamp: z.number().int().positive('Timestamp must be a positive integer'),\n});\n\n// Client message payload schemas\nexport const clientReconnectPayloadSchema = z.object({\n type: z.literal('client_reconnect'),\n sessionClaim: clientSessionClaimSchema,\n clientPublicKey: z\n .string()\n .min(1, 'Client public key cannot be empty')\n .regex(/^(AES-GCM:|cleartext:)/, 'Client public key must start with \"AES-GCM:\" or \"cleartext:\"'),\n});\n\nexport const clientHandshakeMessageSchema = z.object({\n type: z.literal('client_handshake'),\n clientPublicKey: z\n .string()\n .min(1, 'Client public key cannot be empty')\n .regex(/^(AES-GCM:|cleartext:)/, 'Client public key must start with \"AES-GCM:\" or \"cleartext:\"'),\n timestamp: z.number().int().positive('Timestamp must be a positive integer'),\n});\n\nexport const closeSessionPayloadSchema = z.object({\n type: z.literal('close_session'),\n /** Optional reason for closing the session */\n reason: z.string().optional(),\n});\n\n// Union of all client message payloads\nexport const clientMessagePayloadSchema = z.discriminatedUnion('type', [\n clientReconnectPayloadSchema,\n closeSessionPayloadSchema,\n]);\n\n// Client message envelope schema\nexport const clientMessageEnvelopeSchema = z.object({\n /** Session identifier */\n sessionId: z.string().uuid('Session ID must be a valid UUID'),\n /** Client session claim */\n clientSessionClaim: clientSessionClaimSchema,\n /** Message payload */\n payload: clientMessagePayloadSchema,\n});\n\n// Validation helper functions\nexport const validateClientMessage = (message: unknown) => {\n return clientMessageEnvelopeSchema.parse(message);\n};\n\nexport const safeValidateClientMessage = (message: unknown) => {\n return clientMessageEnvelopeSchema.safeParse(message);\n};\n\nexport const validateClientSessionClaim = (claim: unknown) => {\n return clientSessionClaimSchema.parse(claim);\n};\n\nexport const safeValidateClientSessionClaim = (claim: unknown) => {\n return clientSessionClaimSchema.safeParse(claim);\n};\n","/**\n * Validation schemas for relay notification message types\n */\n\nimport { z } from 'zod';\n\n// Session closed acknowledgment schema\nexport const sessionClosedAckSchema = z.object({\n type: z.literal('session_closed_ack'),\n timestamp: z.number().int().positive(),\n});\n\n// Session closed notification schema\nexport const sessionClosedNotificationSchema = z.object({\n type: z.literal('session_closed_notification'),\n /** Which party closed the session */\n closedBy: z.enum(['client', 'wallet']),\n /** Optional reason for closure */\n reason: z.string().optional(),\n timestamp: z.number().int().positive(),\n});\n\n// Reconnected message schema\nexport const reconnectedMessageSchema = z.object({\n type: z.literal('reconnected'),\n /** Number of messages that were queued during disconnection */\n queuedMessages: z.number().int().nonnegative(),\n timestamp: z.number().int().positive(),\n});\n\n// Union of all relay notification messages\nexport const relayNotificationMessageSchema = z.discriminatedUnion('type', [\n sessionClosedAckSchema,\n sessionClosedNotificationSchema,\n reconnectedMessageSchema,\n]);\n\n// Validation helper functions\nexport const validateRelayNotificationMessage = (message: unknown) => {\n return relayNotificationMessageSchema.parse(message);\n};\n\nexport const safeValidateRelayNotificationMessage = (message: unknown) => {\n return relayNotificationMessageSchema.safeParse(message);\n};\n","/**\n * Zod validation schemas for BananaLink protocol types\n * Provides runtime type validation for all protocol messages\n */\n\nimport { z } from 'zod';\nimport { FRUITS, NETWORK_CONFIG } from '../constants';\n\n// Base validation schemas\nconst ethereumAddressSchema = z.string().regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address');\nconst iso8601Schema = z.string().datetime({ message: 'Invalid ISO 8601 datetime' });\nconst urlSchema = z.string().url('Invalid URL');\nconst domainSchema = z.string().min(1, 'Domain cannot be empty');\n// Protocol v2.0: 32-byte nonces = 64 hex characters\nconst nonceSchema = z\n .string()\n .length(64, 'Nonce must be exactly 64 characters (32 bytes hex-encoded)')\n .regex(/^[a-fA-F0-9]{64}$/, 'Nonce must be a valid 64-character hexadecimal string');\n\n// SIWE base schema\nexport const siweFieldsSchema = z.object({\n scheme: z.string().optional(),\n domain: domainSchema,\n address: ethereumAddressSchema,\n statement: z.string().optional(),\n uri: urlSchema,\n version: z.literal('1'),\n chainId: z.number().int().positive(),\n nonce: nonceSchema,\n issuedAt: iso8601Schema,\n expirationTime: iso8601Schema.optional(),\n notBefore: iso8601Schema.optional(),\n requestId: z.string().optional(),\n resources: z.array(urlSchema).optional(),\n});\n\n// DApp metadata schema\nexport const dAppMetadataSchema = z.object({\n returnUrl: urlSchema.optional(),\n});\n\n// QR payload schema\nexport const qrPayloadSchema = z.object({\n sessionId: z.string().min(1, 'Session ID cannot be empty'),\n publicKey: z.string().min(1, 'Public key cannot be empty'),\n providerId: z.string().optional(),\n relayUrl: z.string().url().optional(),\n});\n\n// Encrypted payload schema\nexport const encryptedPayloadSchema = z.object({\n iv: z.string().min(1, 'IV cannot be empty'),\n ciphertext: z.string().min(1, 'Ciphertext cannot be empty'),\n mac: z.string().min(1, 'MAC cannot be empty'),\n});\n\n// Relay message type schema\nexport const relayMessageTypeSchema = z.enum(['pub', 'sub', 'ack', 'error']);\n\n// Relay message schema\nexport const relayMessageSchema = z.object({\n topic: z.string().min(1, 'Topic cannot be empty'),\n type: relayMessageTypeSchema,\n payload: encryptedPayloadSchema.optional(),\n id: z.string().min(1, 'Message ID cannot be empty'),\n});\n\n// Security policy schema\nexport const securityPolicySchema = z.object({\n sessionTimeout: z.number().int().positive(),\n requestTimeout: z.number().int().positive(),\n maxConcurrentSessions: z.number().int().positive(),\n requireOriginProof: z.boolean(),\n allowedDomains: z.array(domainSchema).optional(),\n blockedDomains: z.array(domainSchema).optional(),\n});\n\n// Origin proof schema\nexport const originProofSchema = z.object({\n domain: domainSchema,\n timestamp: z.number().int().positive(),\n signature: z.string().min(1, 'Signature cannot be empty'),\n});\n\n// Session state schema (Protocol v2.0)\nexport const sessionStateSchema = z.enum([\n 'created',\n 'claimed',\n 'authenticated',\n 'active',\n 'disconnected',\n 'closed',\n 'expired',\n 'rejected',\n]);\n\n// Session info schema\nexport const sessionInfoSchema = z.object({\n sessionId: z.string().min(1, 'Session ID cannot be empty'),\n state: sessionStateSchema,\n address: ethereumAddressSchema.optional(),\n metadata: dAppMetadataSchema,\n createdAt: iso8601Schema,\n lastActivity: iso8601Schema,\n expiresAt: iso8601Schema.optional(),\n});\n\n// Display info schema\nexport const displayInfoSchema = z.object({\n qrCode: z.string().min(1, 'QR code cannot be empty'),\n frutiLink: z.string().regex(/^[🍌🍎🍊🍇🍓🍑🍒🍉🥝🍍🥭🥥🫐🍈🍋🥑]{8}$/u, 'Invalid FrutiLink format'),\n deepLink: urlSchema,\n});\n\n// Error code schema (Protocol v2.0+)\nexport const errorCodeSchema = z.enum([\n // Session errors\n 'SESSION_EXPIRED',\n 'SESSION_NOT_FOUND',\n 'SESSION_ALREADY_CLAIMED',\n 'INVALID_SESSION_CLAIM',\n 'INVALID_CLIENT_CLAIM',\n 'SESSION_TOKEN_EXPIRED',\n 'SESSION_CLOSED',\n // Encryption errors\n 'ENCRYPTION_FAILED',\n 'DECRYPTION_FAILED',\n 'INVALID_SIGNATURE',\n // Network errors\n 'NETWORK_ERROR',\n 'RELAY_ERROR',\n 'MESSAGE_QUEUE_FULL',\n 'RATE_LIMIT_EXCEEDED',\n 'ORIGIN_MISMATCH',\n // Request lifecycle errors (v2.1+)\n 'REQUEST_PENDING',\n 'REQUEST_NOT_FOUND',\n 'REQUEST_EXPIRED',\n 'REQUEST_INVALID',\n 'REQUEST_TIMEOUT',\n // Operation-specific errors (v2.1+)\n 'SIGNING_FAILED',\n 'SIGNING_REJECTED',\n 'TRANSACTION_INVALID',\n 'CHAIN_MISMATCH',\n]);\n\n// BananaLink error schema\nexport const bananaLinkErrorSchema = z.object({\n code: errorCodeSchema,\n message: z.string().min(1, 'Error message cannot be empty'),\n details: z.unknown().optional(),\n});\n\n// FrutiLink validation\nexport const frutiLinkSchema = z.string()\n .length(8, 'FrutiLink must be exactly 8 characters')\n .refine(\n (value) => value.split('').every(char => FRUITS.includes(char as typeof FRUITS[number])),\n 'FrutiLink contains invalid fruits'\n );\n\n// Supported chain ID validation\nexport const supportedChainIdSchema = z.number()\n .int()\n .refine(\n (chainId) => NETWORK_CONFIG.SUPPORTED_CHAINS.includes(chainId as typeof NETWORK_CONFIG.SUPPORTED_CHAINS[number]),\n 'Unsupported chain ID'\n );\n\n// Base64 string validation\nexport const base64Schema = z.string().regex(\n /^[A-Za-z0-9+/]*={0,2}$/,\n 'Invalid Base64 string'\n);\n\n// Session ID validation (UUID v4)\nexport const sessionIdSchema = z.string().regex(\n /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,\n 'Invalid session ID format'\n);\n\n// Public key validation (base64 encoded)\nexport const publicKeySchema = z.string()\n .min(1, 'Public key cannot be empty')\n .refine(\n (key) => {\n try {\n atob(key);\n return true;\n } catch {\n return false;\n }\n },\n 'Public key must be valid Base64'\n );\n\n// Validation helper functions (Protocol v2.0)\nexport const validateQRPayload = (payload: unknown) => qrPayloadSchema.parse(payload);\nexport const validateRelayMessage = (message: unknown) => relayMessageSchema.parse(message);\nexport const validateSessionInfo = (info: unknown) => sessionInfoSchema.parse(info);\nexport const validateFrutiLink = (frutiLink: unknown) => frutiLinkSchema.parse(frutiLink);\n\n// Safe parsing functions (returns { success: boolean, data?: T, error?: ZodError })\nexport const safeValidateQRPayload = (payload: unknown) => qrPayloadSchema.safeParse(payload);\nexport const safeValidateRelayMessage = (message: unknown) => relayMessageSchema.safeParse(message);\nexport const safeValidateSessionInfo = (info: unknown) => sessionInfoSchema.safeParse(info);\nexport const safeValidateFrutiLink = (frutiLink: unknown) => frutiLinkSchema.safeParse(frutiLink);\n\n// Type inference from schemas (Protocol v2.0)\nexport type SIWEFields = z.infer<typeof siweFieldsSchema>;\nexport type DAppMetadata = z.infer<typeof dAppMetadataSchema>;\nexport type QRPayload = z.infer<typeof qrPayloadSchema>;\nexport type EncryptedPayload = z.infer<typeof encryptedPayloadSchema>;\nexport type RelayMessage = z.infer<typeof relayMessageSchema>;\nexport type SecurityPolicy = z.infer<typeof securityPolicySchema>;\nexport type SessionInfo = z.infer<typeof sessionInfoSchema>;\nexport type DisplayInfo = z.infer<typeof displayInfoSchema>;\n\n// Re-export core schemas (Protocol v2.0)\nexport {\n dAppMetadataSchema as coreDAppMetadataSchema,\n sessionConfigSchema,\n sessionOptionsSchema,\n sessionMetadataSchema,\n createSessionRequestSchema,\n createSessionResponseSchema,\n clientSessionClaimSchema,\n securityPolicySchema as coreSecurityPolicySchema,\n} from './core';\n\n// Re-export v2.0 wallet message schemas\nexport * from './wallet-messages';\n\n// Re-export v2.0 client message schemas\nexport * from './client-messages';\n\n// Re-export v2.0 relay message schemas\nexport * from './relay-messages';\n"]}
|
|
@@ -51,12 +51,19 @@ interface ClientSessionClaim {
|
|
|
51
51
|
}
|
|
52
52
|
interface ClientReconnectPayload {
|
|
53
53
|
type: 'client_reconnect';
|
|
54
|
+
sessionClaim: ClientSessionClaim;
|
|
55
|
+
clientPublicKey: string;
|
|
56
|
+
}
|
|
57
|
+
interface ClientHandshakeMessage {
|
|
58
|
+
type: 'client_handshake';
|
|
59
|
+
clientPublicKey: string;
|
|
60
|
+
timestamp: number;
|
|
54
61
|
}
|
|
55
62
|
interface CloseSessionPayload {
|
|
56
63
|
type: 'close_session';
|
|
57
64
|
reason?: string;
|
|
58
65
|
}
|
|
59
|
-
type ClientMessagePayload = ClientReconnectPayload | CloseSessionPayload | SignMessageRequestPayload | SignTypedDataRequestPayload | SignTransactionRequestPayload;
|
|
66
|
+
type ClientMessagePayload = ClientReconnectPayload | CloseSessionPayload | ClientHandshakeMessage | SignMessageRequestPayload | SignTypedDataRequestPayload | SignTransactionRequestPayload;
|
|
60
67
|
interface ClientMessageEnvelope {
|
|
61
68
|
sessionId: string;
|
|
62
69
|
clientSessionClaim: ClientSessionClaim;
|
|
@@ -64,6 +71,7 @@ interface ClientMessageEnvelope {
|
|
|
64
71
|
}
|
|
65
72
|
declare function isClientReconnectPayload(payload: ClientMessagePayload): payload is ClientReconnectPayload;
|
|
66
73
|
declare function isCloseSessionPayload(payload: ClientMessagePayload): payload is CloseSessionPayload;
|
|
74
|
+
declare function isClientHandshakeMessage(message: unknown): message is ClientHandshakeMessage;
|
|
67
75
|
|
|
68
76
|
interface WalletSessionClaim {
|
|
69
77
|
sessionNonce: string;
|
|
@@ -91,6 +99,7 @@ interface AuthenticateConnectionPayload {
|
|
|
91
99
|
}
|
|
92
100
|
interface WalletReconnectPayload {
|
|
93
101
|
type: 'wallet_reconnect';
|
|
102
|
+
walletPublicKey: string;
|
|
94
103
|
}
|
|
95
104
|
type WalletMessagePayload = ClaimSessionPayload | PrefetchMetadataPayload | ConnectionRejectedPayload | AuthenticateConnectionPayload | WalletReconnectPayload | CloseSessionPayload | RequestFulfilledPayload | RequestRejectedPayload;
|
|
96
105
|
interface RejectionData {
|
|
@@ -133,6 +142,7 @@ interface PrefetchMetadataResponse {
|
|
|
133
142
|
sessionConfig?: SessionConfig;
|
|
134
143
|
}
|
|
135
144
|
type RelayToDAppMessage = WalletHandshakeMessage | ConnectionRejectedMessage | ConnectionAuthenticatedMessage;
|
|
145
|
+
type RelayToWalletMessage = ClientHandshakeMessage;
|
|
136
146
|
declare function isClaimSessionPayload(payload: WalletMessagePayload): payload is ClaimSessionPayload;
|
|
137
147
|
declare function isPrefetchMetadataPayload(payload: WalletMessagePayload): payload is PrefetchMetadataPayload;
|
|
138
148
|
declare function isConnectionRejectedPayload(payload: WalletMessagePayload): payload is ConnectionRejectedPayload;
|
|
@@ -194,4 +204,4 @@ declare function validateClientMessageEnvelope(envelope: ClientMessageEnvelope):
|
|
|
194
204
|
errors: string[];
|
|
195
205
|
};
|
|
196
206
|
|
|
197
|
-
export { type AuthenticateConnectionPayload as A, type
|
|
207
|
+
export { type AuthenticateConnectionPayload as A, type ClientHandshakeMessage as B, type ClientSessionClaim as C, type DisplayInfo as D, type EncryptedPayload as E, type CloseSessionPayload as F, type ClientMessagePayload as G, type ClientMessageEnvelope as H, isClientReconnectPayload as I, isCloseSessionPayload as J, isClientHandshakeMessage as K, WalletSessionClaimManager as L, createWalletMessageEnvelope as M, stripWalletSessionClaim as N, validateClaimTimestamp as O, type PrefetchMetadataPayload as P, type QRPayload as Q, type RelayMessageType as R, validateWalletMessageEnvelope as S, ClientSessionClaimManager as T, createClientMessageEnvelope as U, stripClientSessionClaim as V, type WalletSessionClaim as W, validateClientClaimTimestamp as X, validateClientMessageEnvelope as Y, type WalletSessionClaimStorage as a, type ClientSessionClaimStorage as b, type RelayMessage as c, type WalletMessageEnvelope as d, type ClaimSessionPayload as e, type ConnectionRejectedPayload as f, type WalletReconnectPayload as g, type WalletMessagePayload as h, type RejectionData as i, type AuthenticationData as j, type WalletMetadata as k, type WalletHandshakeMessage as l, type ConnectionRejectedMessage as m, type ConnectionAuthenticatedMessage as n, type PrefetchMetadataResponse as o, type RelayToDAppMessage as p, type RelayToWalletMessage as q, isClaimSessionPayload as r, isPrefetchMetadataPayload as s, isConnectionRejectedPayload as t, isAuthenticateConnectionPayload as u, isWalletReconnectPayload as v, isWalletHandshakeMessage as w, isConnectionRejectedMessage as x, isConnectionAuthenticatedMessage as y, type ClientReconnectPayload as z };
|