@bananalink-sdk/protocol 1.3.0 → 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.
Files changed (36) hide show
  1. package/dist/{chunk-KNGZKGRS.cjs → chunk-RZPN2GDJ.cjs} +13 -4
  2. package/dist/chunk-RZPN2GDJ.cjs.map +1 -0
  3. package/dist/{chunk-7KYDLL3B.js → chunk-XCMAKN3P.js} +13 -5
  4. package/dist/chunk-XCMAKN3P.js.map +1 -0
  5. package/dist/{client-session-claim-C4lUik3b.d.cts → client-session-claim-CkRKTG50.d.cts} +12 -2
  6. package/dist/{client-session-claim-3QF3noOr.d.ts → client-session-claim-CrIDASkZ.d.ts} +12 -2
  7. package/dist/{crypto-BUS06Qz-.d.cts → crypto-BK0Ile6V.d.cts} +1 -1
  8. package/dist/{crypto-BUS06Qz-.d.ts → crypto-BK0Ile6V.d.ts} +1 -1
  9. package/dist/crypto-export.d.cts +1 -1
  10. package/dist/crypto-export.d.ts +1 -1
  11. package/dist/index.cjs +6 -1
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.d.cts +31 -4
  14. package/dist/index.d.ts +31 -4
  15. package/dist/index.js +6 -2
  16. package/dist/index.js.map +1 -1
  17. package/dist/schemas-export.cjs +76 -72
  18. package/dist/schemas-export.d.cts +116 -1
  19. package/dist/schemas-export.d.ts +116 -1
  20. package/dist/schemas-export.js +1 -1
  21. package/dist/testing.d.cts +2 -2
  22. package/dist/testing.d.ts +2 -2
  23. package/dist/validation-export.cjs +76 -72
  24. package/dist/validation-export.d.cts +1 -1
  25. package/dist/validation-export.d.ts +1 -1
  26. package/dist/validation-export.js +1 -1
  27. package/package.json +1 -1
  28. package/src/index.ts +1 -0
  29. package/src/schemas/client-messages.ts +14 -0
  30. package/src/schemas/wallet-messages.ts +4 -0
  31. package/src/types/client-messages.ts +26 -1
  32. package/src/types/index.ts +9 -0
  33. package/src/types/persistence.ts +32 -0
  34. package/src/types/wallet-messages.ts +6 -2
  35. package/dist/chunk-7KYDLL3B.js.map +0 -1
  36. package/dist/chunk-KNGZKGRS.cjs.map +0 -1
@@ -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-KNGZKGRS.cjs.map
552
- //# sourceMappingURL=chunk-KNGZKGRS.cjs.map
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-7KYDLL3B.js.map
480
- //# sourceMappingURL=chunk-7KYDLL3B.js.map
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 ClientMessagePayload as B, type ClientSessionClaim as C, type DisplayInfo as D, type EncryptedPayload as E, type ClientMessageEnvelope as F, isClientReconnectPayload as G, isCloseSessionPayload as H, WalletSessionClaimManager as I, createWalletMessageEnvelope as J, stripWalletSessionClaim as K, validateClaimTimestamp as L, validateWalletMessageEnvelope as M, ClientSessionClaimManager as N, createClientMessageEnvelope as O, type PrefetchMetadataPayload as P, type QRPayload as Q, type RelayMessageType as R, stripClientSessionClaim as S, validateClientClaimTimestamp as T, validateClientMessageEnvelope as U, type WalletSessionClaim as W, 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, isClaimSessionPayload as q, isPrefetchMetadataPayload as r, isConnectionRejectedPayload as s, isAuthenticateConnectionPayload as t, isWalletReconnectPayload as u, isWalletHandshakeMessage as v, isConnectionRejectedMessage as w, isConnectionAuthenticatedMessage as x, type ClientReconnectPayload as y, type CloseSessionPayload as z };
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 };
@@ -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 ClientMessagePayload as B, type ClientSessionClaim as C, type DisplayInfo as D, type EncryptedPayload as E, type ClientMessageEnvelope as F, isClientReconnectPayload as G, isCloseSessionPayload as H, WalletSessionClaimManager as I, createWalletMessageEnvelope as J, stripWalletSessionClaim as K, validateClaimTimestamp as L, validateWalletMessageEnvelope as M, ClientSessionClaimManager as N, createClientMessageEnvelope as O, type PrefetchMetadataPayload as P, type QRPayload as Q, type RelayMessageType as R, stripClientSessionClaim as S, validateClientClaimTimestamp as T, validateClientMessageEnvelope as U, type WalletSessionClaim as W, 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, isClaimSessionPayload as q, isPrefetchMetadataPayload as r, isConnectionRejectedPayload as s, isAuthenticateConnectionPayload as t, isWalletReconnectPayload as u, isWalletHandshakeMessage as v, isConnectionRejectedMessage as w, isConnectionAuthenticatedMessage as x, type ClientReconnectPayload as y, type CloseSessionPayload as z };
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 };
@@ -37,4 +37,4 @@ interface CryptoPayload {
37
37
  derivation?: KeyDerivation;
38
38
  }
39
39
 
40
- export type { CryptoParameters as C, Encryption as E, KeyExchange as K, PublicKeyJWK as P, KeyDerivation as a, CryptoPayload as b };
40
+ export type { CryptoPayload as C, Encryption as E, KeyExchange as K, PublicKeyJWK as P, CryptoParameters as a, KeyDerivation as b };
@@ -37,4 +37,4 @@ interface CryptoPayload {
37
37
  derivation?: KeyDerivation;
38
38
  }
39
39
 
40
- export type { CryptoParameters as C, Encryption as E, KeyExchange as K, PublicKeyJWK as P, KeyDerivation as a, CryptoPayload as b };
40
+ export type { CryptoPayload as C, Encryption as E, KeyExchange as K, PublicKeyJWK as P, CryptoParameters as a, KeyDerivation as b };
@@ -1,6 +1,6 @@
1
1
  import { Logger } from '@bananalink-sdk/logger';
2
2
  import { a as CryptoKeyLike, C as CryptoProvider, P as ProviderKeyPair, b as CryptoProviderType, c as PlatformDetectionResult } from './crypto-provider-deYoVIxi.cjs';
3
- import { b as CryptoPayload } from './crypto-BUS06Qz-.cjs';
3
+ import { C as CryptoPayload } from './crypto-BK0Ile6V.cjs';
4
4
 
5
5
  type EncryptionAlgorithm = 'AES-GCM' | 'plaintext';
6
6
  interface EncryptedMessage {
@@ -1,6 +1,6 @@
1
1
  import { Logger } from '@bananalink-sdk/logger';
2
2
  import { a as CryptoKeyLike, C as CryptoProvider, P as ProviderKeyPair, b as CryptoProviderType, c as PlatformDetectionResult } from './crypto-provider-deYoVIxi.js';
3
- import { b as CryptoPayload } from './crypto-BUS06Qz-.js';
3
+ import { C as CryptoPayload } from './crypto-BK0Ile6V.js';
4
4
 
5
5
  type EncryptionAlgorithm = 'AES-GCM' | 'plaintext';
6
6
  interface EncryptedMessage {
package/dist/index.cjs CHANGED
@@ -47,6 +47,10 @@ function isCloseSessionPayload(payload) {
47
47
  return payload?.type === "close_session";
48
48
  }
49
49
  chunkWGEGR3DF_cjs.__name(isCloseSessionPayload, "isCloseSessionPayload");
50
+ function isClientHandshakeMessage(message) {
51
+ return message?.type === "client_handshake";
52
+ }
53
+ chunkWGEGR3DF_cjs.__name(isClientHandshakeMessage, "isClientHandshakeMessage");
50
54
 
51
55
  // src/types/relay-messages.ts
52
56
  function isSessionClosedAck(message) {
@@ -493,7 +497,7 @@ chunkWGEGR3DF_cjs.__name(isValidSessionId, "isValidSessionId");
493
497
 
494
498
  // package.json
495
499
  var package_default = {
496
- version: "1.2.8"};
500
+ version: "1.4.0"};
497
501
 
498
502
  // src/index.ts
499
503
  var VERSION = package_default.version;
@@ -589,6 +593,7 @@ exports.encodeUrlParameter = encodeUrlParameter;
589
593
  exports.generateSessionId = generateSessionId;
590
594
  exports.isAuthenticateConnectionPayload = isAuthenticateConnectionPayload;
591
595
  exports.isClaimSessionPayload = isClaimSessionPayload;
596
+ exports.isClientHandshakeMessage = isClientHandshakeMessage;
592
597
  exports.isClientReconnectPayload = isClientReconnectPayload;
593
598
  exports.isCloseSessionPayload = isCloseSessionPayload;
594
599
  exports.isConnectionAuthenticatedMessage = isConnectionAuthenticatedMessage;