@actioncodes/protocol 2.0.25 → 2.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map
CHANGED
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"import { PROTOCOL_META_MAX_BYTES, PROTOCOL_NORMALIZATION } from \"../constants\";\n\n// v2 protocol meta\nexport interface ProtocolMetaFields {\n ver: 2;\n id: string; // code id (usually hex/hash)\n int: string; // intent owner who created the code\n iss?: string; // issuer of the code, if not provided, int is both issuer and code owner, otherwise int is the intent owner and iss is the code issuer\n p?: Record<string, unknown>; // optional parameters as JSON object\n}\n\nexport const SCHEME = \"actioncodes:\";\n\nexport function buildProtocolMeta(fields: ProtocolMetaFields): string {\n const norm = normalizeFields(fields);\n if (norm.int != null) guardParamSize(norm.int);\n\n const parts = [\n `ver=${norm.ver}`,\n `id=${encodeURIComponent(norm.id)}`,\n `int=${encodeURIComponent(norm.int)}`,\n ];\n \n // if iss is provided and is not the same as int, add it to the parts\n if (norm.iss != null && norm.iss !== norm.int) {\n parts.push(`iss=${encodeURIComponent(norm.iss)}`);\n }\n\n if (norm.p != null && Object.keys(norm.p).length > 0) {\n const paramsJson = JSON.stringify(norm.p);\n guardParamSize(paramsJson);\n parts.push(`p=${encodeURIComponent(paramsJson)}`);\n }\n\n const out = SCHEME + parts.join(\"&\");\n guardSize(out);\n return out;\n}\n\nexport function parseProtocolMeta(input: string): ProtocolMetaFields {\n if (!input.startsWith(SCHEME))\n throw new Error(\"protocol meta must start with actioncodes:\");\n const q = input.slice(SCHEME.length);\n const pairs = q.split(\"&\").filter(Boolean);\n const map = new Map<string, string>();\n for (const pair of pairs) {\n const [k, vRaw] = pair.split(\"=\", 2);\n if (!k) continue;\n const v = vRaw != null ? decodeURIComponent(vRaw) : \"\";\n map.set(k, v);\n }\n const verStr = map.get(\"ver\");\n const id = map.get(\"id\");\n const int = map.get(\"int\");\n const iss = map.get(\"iss\");\n const pStr = map.get(\"p\");\n if (verStr == null || id == null || int == null)\n throw new Error(\"protocol meta missing required fields ver or id or int\");\n const ver = Number(verStr);\n if (!Number.isInteger(ver) || ver <= 0)\n throw new Error(\"protocol meta ver must be positive integer\");\n\n let p: Record<string, unknown> | undefined;\n if (pStr != null && pStr !== \"\") {\n try {\n p = JSON.parse(pStr);\n if (typeof p !== \"object\" || p === null || Array.isArray(p)) {\n throw new Error(\"protocol meta p must be a JSON object\");\n }\n } catch {\n throw new Error(\"protocol meta p must be valid JSON\");\n }\n }\n\n const norm = normalizeFields({ ver: ver as 2, id, int, iss, p });\n if (norm.int != null) guardParamSize(norm.int);\n if (norm.iss != null) guardParamSize(norm.iss);\n if (norm.p != null) guardParamSize(JSON.stringify(norm.p));\n const unknownKeys = [...map.keys()].filter(\n (k) => k !== \"ver\" && k !== \"id\" && k !== \"int\" && k !== \"iss\" && k !== \"p\"\n );\n if (unknownKeys.length > 0)\n throw new Error(\"protocol meta contains unsupported keys\");\n guardSize(buildProtocolMeta(norm));\n return norm;\n}\n\nexport function validateProtocolMetaFormat(\n input: string\n): { ok: true } | { ok: false; reason: string } {\n try {\n parseProtocolMeta(input);\n return { ok: true };\n } catch (e: unknown) {\n return { ok: false, reason: String(e) };\n }\n}\n\nfunction normalizeFields(fields: ProtocolMetaFields): ProtocolMetaFields {\n const id = fields.id.normalize(PROTOCOL_NORMALIZATION).trim();\n const out: ProtocolMetaFields = { ver: fields.ver, id, int: fields.int };\n if (fields.int != null)\n out.int = fields.int.normalize(PROTOCOL_NORMALIZATION).trim();\n if (fields.iss != null)\n out.iss = fields.iss.normalize(PROTOCOL_NORMALIZATION).trim();\n if (fields.p != null) {\n // For JSON objects, we don't normalize the object itself, just ensure it's valid\n out.p = fields.p;\n }\n return out;\n}\n\nfunction guardSize(s: string): void {\n const bytes = new TextEncoder().encode(s);\n if (bytes.length > PROTOCOL_META_MAX_BYTES)\n throw new Error(`protocol meta exceeds ${PROTOCOL_META_MAX_BYTES} bytes`);\n}\n\nfunction guardParamSize(value: string): void {\n const bytes = new TextEncoder().encode(value);\n if (bytes.length > PROTOCOL_META_MAX_BYTES)\n throw new Error(\n `protocol meta params exceed ${PROTOCOL_META_MAX_BYTES} bytes`\n );\n}\n",
|
|
17
17
|
"import type { ActionCode, CodeGenerationConfig, Chain } from \"../types\";\nimport { hmacSha256, truncateBits, digestToDigits } from \"../utils/crypto\";\nimport { CODE_MAX_LENGTH, CODE_MIN_LENGTH } from \"../constants\";\nimport { serializeCanonical } from \"../utils/canonical\";\nimport { ProtocolError } from \"../errors\";\nimport bs58 from \"bs58\";\n\nexport class WalletStrategy {\n constructor(private config: CodeGenerationConfig) {}\n\n generateCode(\n canonicalMessage: Uint8Array,\n chain: Chain,\n signature: string\n ): ActionCode {\n const canonical = canonicalMessage;\n\n // Parse pubkey and windowStart from canonical message\n const decoded = JSON.parse(new TextDecoder().decode(canonical));\n const pubkey = decoded.pubkey;\n const windowStart = decoded.windowStart;\n\n // Use signature as the primary entropy source\n // Decode Base58 signature to bytes\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = bs58.decode(signature);\n } catch {\n throw ProtocolError.invalidSignature(\"Invalid Base58 signature format\");\n }\n const digest = hmacSha256(signatureBytes, canonical);\n\n const clamped = Math.max(\n CODE_MIN_LENGTH,\n Math.min(CODE_MAX_LENGTH, this.config.codeLength)\n );\n const bitsNeeded = 8 * Math.ceil(clamped / 2);\n const truncated = truncateBits(digest, bitsNeeded);\n const code = digestToDigits(truncated, clamped);\n\n const actionCode: ActionCode = {\n chain,\n code,\n pubkey,\n timestamp: windowStart,\n expiresAt: windowStart + this.config.ttlMs,\n signature,\n };\n\n return actionCode;\n }\n\n validateCode(actionCode: ActionCode): void {\n const currentTime = Date.now();\n if (currentTime > actionCode.expiresAt + (this.config.clockSkewMs ?? 0)) {\n throw ProtocolError.expiredCode(\n actionCode.code,\n actionCode.expiresAt,\n currentTime\n );\n }\n\n const canonical = serializeCanonical({\n pubkey: actionCode.pubkey,\n windowStart: actionCode.timestamp,\n });\n\n // Use same digest method as generation\n if (!actionCode.signature) {\n throw ProtocolError.missingRequiredField(\"signature\");\n }\n\n // Use signature as the primary entropy source\n // Decode Base58 signature to bytes\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = bs58.decode(actionCode.signature);\n } catch {\n throw ProtocolError.invalidSignature(\"Invalid Base58 signature format\");\n }\n const digest = hmacSha256(signatureBytes, canonical);\n\n const clamped = Math.max(\n CODE_MIN_LENGTH,\n Math.min(CODE_MAX_LENGTH, this.config.codeLength)\n );\n const truncated = truncateBits(digest, 8 * Math.ceil(clamped / 2));\n const expected = digestToDigits(truncated, clamped);\n\n if (expected !== actionCode.code) {\n throw ProtocolError.invalidCode();\n }\n }\n}\n",
|
|
18
18
|
"import { WalletStrategy } from \"./WalletStrategy\";\nimport { serializeCanonical } from \"../utils/canonical\";\nimport { ProtocolError } from \"../errors\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport nacl from \"tweetnacl\";\nimport bs58 from \"bs58\";\n\nimport type {\n DelegationProof,\n DelegatedActionCode,\n CodeGenerationConfig,\n Chain,\n} from \"../types\";\n\nexport class DelegationStrategy {\n private walletStrategy: WalletStrategy;\n private config: CodeGenerationConfig;\n\n constructor(config: CodeGenerationConfig) {\n this.config = config;\n this.walletStrategy = new WalletStrategy(config);\n }\n\n /**\n * Generate a delegated action code using a delegation proof and signature over message to generate code via delegated keypair\n */\n generateDelegatedCode(\n delegationProof: DelegationProof,\n canonicalMessage: Uint8Array,\n chain: Chain,\n signature: string // this is the signature over message to generate code via delegated keypair\n ): DelegatedActionCode {\n // Validate delegation proof format and expiration\n this.validateDelegationProof(delegationProof);\n\n // Generate code using existing WalletStrategy with the original canonical message\n // The signature was created over this message by the delegated keypair\n const result = this.walletStrategy.generateCode(\n canonicalMessage,\n chain,\n signature // Use signature from delegated keypair\n );\n\n // Create delegated action code\n const delegatedActionCode: DelegatedActionCode = {\n ...result,\n delegationProof: delegationProof,\n };\n\n return delegatedActionCode;\n }\n\n /**\n * Validate a delegated action code\n */\n validateDelegatedCode(\n actionCode: DelegatedActionCode,\n ): void {\n // Basic validation checks (similar to WalletStrategy.validateCode)\n const currentTime = Date.now();\n if (currentTime > actionCode.expiresAt + (this.config.clockSkewMs ?? 0)) {\n throw ProtocolError.expiredCode(\n actionCode.code,\n actionCode.expiresAt,\n currentTime\n );\n }\n\n // Verify delegation proof is still valid\n this.validateDelegationProof(actionCode.delegationProof);\n\n // Verify the delegation proof matches the action code\n // The action code pubkey should be the delegated signer (who signed the message)\n if (actionCode.pubkey !== actionCode.delegationProof.delegatedPubkey) {\n throw ProtocolError.invalidInput(\n \"delegatedPubkey\",\n actionCode.delegationProof.delegatedPubkey,\n \"Action code pubkey does not match delegated signer\"\n );\n }\n\n // Verify that the generated code doesn't expire after the delegation proof\n // This prevents codes from outliving their authorization\n if (actionCode.expiresAt > actionCode.delegationProof.expiresAt) {\n throw ProtocolError.invalidInput(\n \"expiresAt\",\n actionCode.expiresAt,\n \"Action code cannot expire after delegation proof expiration\"\n );\n }\n\n // Verify delegated signature is present\n if (!actionCode.delegationProof.signature) {\n throw ProtocolError.missingRequiredField(\"delegationProof.signature\");\n }\n\n // Finally, verify the delegated signature against the canonical message\n // The signature was created by signing a message with the DELEGATED pubkey\n // even though the ActionCode.pubkey is the wallet owner\n const canonicalMessage = serializeCanonical({\n pubkey: actionCode.delegationProof.delegatedPubkey,\n windowStart: actionCode.timestamp,\n });\n\n // Decode and verify the delegated signature\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = bs58.decode(actionCode.signature ?? \"\");\n } catch {\n throw ProtocolError.invalidSignature(\n \"Invalid Base58 delegated signature format\"\n );\n }\n\n // Verify the signature using the delegated keypair's public key\n const delegatedPubkeyBytes = bs58.decode(actionCode.delegationProof.delegatedPubkey);\n const isValidSignature = nacl.sign.detached.verify(\n canonicalMessage,\n signatureBytes,\n delegatedPubkeyBytes\n );\n\n if (!isValidSignature) {\n throw ProtocolError.invalidSignature(\n \"Delegated signature verification failed\"\n );\n }\n }\n\n /**\n * Validate a delegation proof with comprehensive input validation\n */\n private validateDelegationProof(delegationProof: DelegationProof): void {\n // Validate walletPubkey using Solana's PublicKey constructor\n if (\n !delegationProof.walletPubkey ||\n typeof delegationProof.walletPubkey !== \"string\"\n ) {\n throw ProtocolError.invalidInput(\n \"walletPubkey\",\n delegationProof.walletPubkey,\n \"Wallet pubkey is required and must be a string\"\n );\n }\n try {\n new PublicKey(delegationProof.walletPubkey);\n } catch {\n throw ProtocolError.invalidInput(\n \"walletPubkey\",\n delegationProof.walletPubkey,\n \"Invalid wallet pubkey format\"\n );\n }\n\n // Validate delegatedPubkey using Solana's PublicKey constructor\n if (\n !delegationProof.delegatedPubkey ||\n typeof delegationProof.delegatedPubkey !== \"string\"\n ) {\n throw ProtocolError.invalidInput(\n \"delegatedPubkey\",\n delegationProof.delegatedPubkey,\n \"Delegated pubkey is required and must be a string\"\n );\n }\n try {\n new PublicKey(delegationProof.delegatedPubkey);\n } catch {\n throw ProtocolError.invalidInput(\n \"delegatedPubkey\",\n delegationProof.delegatedPubkey,\n \"Invalid delegated pubkey format\"\n );\n }\n\n // Validate chain\n if (!delegationProof.chain || typeof delegationProof.chain !== \"string\") {\n throw ProtocolError.invalidInput(\n \"chain\",\n delegationProof.chain,\n \"Chain is required and must be a string\"\n );\n }\n if (\n delegationProof.chain.length === 0 ||\n delegationProof.chain.length > 50\n ) {\n throw ProtocolError.invalidInput(\n \"chain\",\n delegationProof.chain,\n \"Chain must be between 1 and 50 characters\"\n );\n }\n if (!/^[a-z0-9-]+$/.test(delegationProof.chain)) {\n throw ProtocolError.invalidInput(\n \"chain\",\n delegationProof.chain,\n \"Chain contains invalid characters (only lowercase letters, numbers, and hyphens allowed)\"\n );\n }\n\n // Validate expiresAt\n if (\n typeof delegationProof.expiresAt !== \"number\" ||\n !Number.isInteger(delegationProof.expiresAt)\n ) {\n throw ProtocolError.invalidInput(\n \"expiresAt\",\n delegationProof.expiresAt,\n \"Expiration time must be a valid integer timestamp\"\n );\n }\n if (delegationProof.expiresAt <= 0) {\n throw ProtocolError.invalidInput(\n \"expiresAt\",\n delegationProof.expiresAt,\n \"Expiration time must be positive\"\n );\n }\n\n // Check for reasonable expiration bounds (not too far in the future)\n const now = Date.now();\n const maxFuture = 365 * 24 * 60 * 60 * 1000; // 1 year from now\n\n if (delegationProof.expiresAt > now + maxFuture) {\n throw ProtocolError.invalidInput(\n \"expiresAt\",\n delegationProof.expiresAt,\n \"Expiration time is too far in the future\"\n );\n }\n\n // Check if delegation has expired\n if (delegationProof.expiresAt < now) {\n throw ProtocolError.expiredCode(\n \"Delegation proof has expired\",\n delegationProof.expiresAt,\n now\n );\n }\n\n // Validate signature\n if (\n !delegationProof.signature ||\n typeof delegationProof.signature !== \"string\"\n ) {\n throw ProtocolError.invalidInput(\n \"signature\",\n delegationProof.signature,\n \"Delegation signature is required and must be a string\"\n );\n }\n if (\n delegationProof.signature.length === 0 ||\n delegationProof.signature.length > 200\n ) {\n throw ProtocolError.invalidInput(\n \"signature\",\n delegationProof.signature,\n \"Delegation signature must be between 1 and 200 characters\"\n );\n }\n // Note: Signature format validation will be done during actual verification\n }\n}\n",
|
|
19
|
-
"import nacl from \"tweetnacl\";\nimport bs58 from \"bs58\";\nimport {\n PublicKey,\n Transaction,\n VersionedTransaction,\n TransactionInstruction,\n MessageV0,\n Connection,\n TransactionMessage,\n AddressLookupTableAccount,\n} from \"@solana/web3.js\";\nimport { createMemoInstruction, MEMO_PROGRAM_ID } from \"@solana/spl-memo\";\nimport { BaseChainAdapter } from \"./BaseChainAdapter\";\nimport {\n buildProtocolMeta,\n parseProtocolMeta,\n type ProtocolMetaFields,\n} from \"../utils/protocolMeta\";\nimport { codeHash } from \"../utils/crypto\";\nimport type { ActionCode, DelegatedActionCode } from \"../types\";\nimport { ProtocolError } from \"../errors\";\nimport {\n serializeCanonical,\n serializeCanonicalRevoke,\n serializeDelegationProof,\n} from \"../utils/canonical\";\n\n/** Union of supported Solana txn types */\nexport type SolanaTransaction = Transaction | VersionedTransaction;\n\nexport const ADAPTER_CHAIN_NAME = \"solana\" as const;\n\nexport class SolanaAdapter extends BaseChainAdapter {\n /** Normalize pubkey input to PublicKey */\n private normalizePubkey(input: string | PublicKey): PublicKey {\n if (typeof input === \"string\") {\n return new PublicKey(input);\n }\n return input;\n }\n\n /** Verify the signature over canonical message (protocol-level) */\n verifyWithWallet(actionCode: ActionCode): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (actionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (!actionCode.pubkey || !actionCode.timestamp || !actionCode.signature)\n return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const message = serializeCanonical({\n pubkey: actionCode.pubkey,\n windowStart: actionCode.timestamp,\n });\n const pub = this.normalizePubkey(actionCode.pubkey);\n const sigBytes = bs58.decode(actionCode.signature);\n const pubBytes = pub.toBytes();\n\n // Validate lengths\n if (sigBytes.length !== 64 || pubBytes.length !== 32) {\n return false;\n }\n\n // Perform signature verification\n return nacl.sign.detached.verify(message, sigBytes, pubBytes);\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Verify delegation proof signature */\n verifyWithDelegation(delegatedActionCode: DelegatedActionCode): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (delegatedActionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (\n !delegatedActionCode.pubkey ||\n !delegatedActionCode.timestamp ||\n !delegatedActionCode.signature\n )\n return false;\n\n const proof = delegatedActionCode.delegationProof;\n\n // Basic validation\n if (\n !proof.walletPubkey ||\n !proof.delegatedPubkey ||\n !proof.chain ||\n !proof.expiresAt ||\n !proof.signature\n ) {\n return false;\n }\n\n // Validate chain matches adapter\n if (proof.chain !== ADAPTER_CHAIN_NAME) {\n return false;\n }\n\n // The revoke/message pubkey for delegated flow must be the delegated pubkey\n if (delegatedActionCode.pubkey !== proof.delegatedPubkey) return false;\n\n // Check if delegation has expired\n if (proof.expiresAt < Date.now()) return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n // this check if delegation correct\n const delegationMessage = serializeDelegationProof(proof);\n const walletPub = this.normalizePubkey(proof.walletPubkey);\n const walletSigBytes = bs58.decode(proof.signature);\n const walletPubBytes = walletPub.toBytes();\n\n // this check if generated code correct by delegated keypair\n // The signature was created by signing a message with the DELEGATED pubkey\n const canonicalMessage = serializeCanonical({\n pubkey: proof.delegatedPubkey,\n windowStart: delegatedActionCode.timestamp,\n });\n const delegatedPub = this.normalizePubkey(proof.delegatedPubkey);\n const delegatedSigBytes = bs58.decode(delegatedActionCode.signature);\n const delegatedPubBytes = delegatedPub.toBytes();\n\n // Validate lengths first to prevent timing attacks\n if (walletSigBytes.length !== 64 || walletPubBytes.length !== 32) {\n return false;\n }\n if (delegatedSigBytes.length !== 64 || delegatedPubBytes.length !== 32) {\n return false;\n }\n\n // Perform both signature verifications regardless of first result\n // This prevents timing attacks that could leak information about which signature failed\n const delegationProofOk = nacl.sign.detached.verify(\n delegationMessage,\n walletSigBytes,\n walletPubBytes\n );\n\n const canonicalMessageOk = nacl.sign.detached.verify(\n canonicalMessage,\n delegatedSigBytes,\n delegatedPubBytes\n );\n\n // Return result only after both operations complete\n return delegationProofOk && canonicalMessageOk;\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Verify the signature over canonical revoke message (protocol-level) */\n verifyRevokeWithWallet(\n actionCode: ActionCode,\n revokeSignature: string\n ): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (actionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (!actionCode.pubkey || !actionCode.timestamp || !revokeSignature)\n return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const message = serializeCanonicalRevoke({\n pubkey: actionCode.pubkey,\n codeHash: codeHash(actionCode.code),\n windowStart: actionCode.timestamp,\n });\n const pub = this.normalizePubkey(actionCode.pubkey);\n const sigBytes = bs58.decode(revokeSignature);\n const pubBytes = pub.toBytes();\n\n // Validate lengths\n if (sigBytes.length !== 64 || pubBytes.length !== 32) {\n return false;\n }\n\n // Perform signature verification\n return nacl.sign.detached.verify(message, sigBytes, pubBytes);\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n verifyRevokeWithDelegation(\n delegatedActionCode: DelegatedActionCode,\n revokeSignature: string\n ): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (delegatedActionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (\n !delegatedActionCode.pubkey ||\n !delegatedActionCode.timestamp ||\n !delegatedActionCode.signature ||\n !delegatedActionCode.delegationProof\n )\n return false;\n\n const proof = delegatedActionCode.delegationProof;\n\n // Basic validation\n if (\n !proof.walletPubkey ||\n !proof.delegatedPubkey ||\n !proof.chain ||\n !proof.expiresAt ||\n !proof.signature\n ) {\n return false;\n }\n\n // Validate chain matches adapter\n if (proof.chain !== ADAPTER_CHAIN_NAME) {\n return false;\n }\n\n // The revoke/message pubkey for delegated flow must be the delegated pubkey\n if (delegatedActionCode.pubkey !== proof.delegatedPubkey) return false;\n\n // Check if delegation has expired\n if (proof.expiresAt < Date.now()) return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const delegationMessage = serializeDelegationProof(proof);\n const walletPub = this.normalizePubkey(proof.walletPubkey);\n const walletSigBytes = bs58.decode(proof.signature);\n const walletPubBytes = walletPub.toBytes();\n\n const revokeMessage = serializeCanonicalRevoke({\n pubkey: proof.delegatedPubkey, // Revoke signature is from delegated keypair\n codeHash: codeHash(delegatedActionCode.code),\n windowStart: delegatedActionCode.timestamp,\n });\n const delegatedPub = this.normalizePubkey(proof.delegatedPubkey);\n const delegatedSigBytes = bs58.decode(revokeSignature);\n const delegatedPubBytes = delegatedPub.toBytes();\n\n // Validate lengths first to prevent timing attacks\n if (walletSigBytes.length !== 64 || walletPubBytes.length !== 32) {\n return false;\n }\n if (delegatedSigBytes.length !== 64 || delegatedPubBytes.length !== 32) {\n return false;\n }\n\n // Perform both signature verifications regardless of first result\n // This prevents timing attacks that could leak information about which signature failed\n const delegationProofOk = nacl.sign.detached.verify(\n delegationMessage,\n walletSigBytes,\n walletPubBytes\n );\n\n const revokeMessageOk = nacl.sign.detached.verify(\n revokeMessage,\n delegatedSigBytes,\n delegatedPubBytes\n );\n\n // Return result only after both operations complete\n return delegationProofOk && revokeMessageOk;\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Create a Solana memo instruction carrying protocol meta (for SDK/clients) */\n static createProtocolMetaIx(\n meta: ProtocolMetaFields\n ): TransactionInstruction {\n const metaString = buildProtocolMeta(meta);\n return createMemoInstruction(metaString);\n }\n\n /** Extract protocol metadata string (memo) from a base64-encoded transaction, or null */\n getProtocolMeta(txString: string): string | null {\n try {\n const tx = this.deserializeTransaction(txString);\n for (const ix of this.getMemoInstructions(tx)) {\n const data = ix.data;\n try {\n const s = new TextDecoder().decode(data);\n // Optionally: test parse\n const parsed = parseProtocolMeta(s);\n if (parsed) return s;\n } catch {\n // ignore\n }\n }\n return null;\n } catch {\n return null;\n }\n }\n\n /** Deserialize a base64-encoded transaction string to SolanaTransaction */\n private deserializeTransaction(txString: string): SolanaTransaction {\n try {\n // Try versioned first (most common now)\n const versionedTx = VersionedTransaction.deserialize(\n Buffer.from(txString, \"base64\")\n );\n\n // Check if this is actually a versioned transaction by checking if it has a MessageV0\n if (versionedTx.message instanceof MessageV0) {\n return versionedTx;\n } else {\n // This is likely a legacy transaction that was incorrectly deserialized as versioned\n // Fall back to legacy deserialization\n return Transaction.from(Buffer.from(txString, \"base64\"));\n }\n } catch {\n try {\n // Fallback to legacy\n return Transaction.from(Buffer.from(txString, \"base64\"));\n } catch {\n throw ProtocolError.invalidTransactionFormat(\n \"Invalid base64 transaction format\"\n );\n }\n }\n }\n\n /** Get parsed ProtocolMeta object from base64-encoded transaction, or null if none or invalid */\n parseMeta(txString: string): ProtocolMetaFields | null {\n const s = this.getProtocolMeta(txString);\n if (!s) return null;\n return parseProtocolMeta(s);\n }\n\n /** List memo instructions from the transaction (legacy & versioned) */\n private getMemoInstructions(tx: SolanaTransaction): TransactionInstruction[] {\n if (tx instanceof Transaction) {\n return tx.instructions.filter((ix) =>\n ix.programId.equals(MEMO_PROGRAM_ID)\n );\n } else {\n // VersionedTransaction: inspect `message.compiledInstructions` / static keys\n const vtx = tx as VersionedTransaction;\n const msg = vtx.message;\n if (msg instanceof MessageV0) {\n const memos: TransactionInstruction[] = [];\n for (const ix of msg.compiledInstructions) {\n const pid = msg.staticAccountKeys[ix.programIdIndex];\n if (pid && pid.equals(MEMO_PROGRAM_ID)) {\n // reconstruct a TransactionInstruction for inspection\n const keys = ix.accountKeyIndexes.map((i) => ({\n pubkey: msg.staticAccountKeys[i]!,\n isSigner: false,\n isWritable: false,\n }));\n memos.push(\n new TransactionInstruction({\n keys,\n programId: pid,\n data: ix.data as Buffer,\n })\n );\n }\n }\n return memos;\n }\n return [];\n }\n }\n\n /**\n * Validate that a base64-encoded transaction's memo meta aligns with the bound `actionCode`.\n * Throws ProtocolError if validation fails.\n */\n verifyTransactionMatchesCode(actionCode: ActionCode, txString: string): void {\n // Check expiration first\n const currentTime = Date.now();\n if (currentTime > actionCode.expiresAt) {\n throw ProtocolError.expiredCode(\n actionCode.code,\n actionCode.expiresAt,\n currentTime\n );\n }\n\n const meta = this.parseMeta(txString);\n if (!meta) {\n throw ProtocolError.missingMeta();\n }\n\n // Check version\n if (meta.ver !== 2) {\n throw ProtocolError.metaMismatch(\"2\", String(meta.ver), \"ver\");\n }\n\n // Check code ID - should be codeHash of the code, not the code itself\n const expectedCodeHash = codeHash(actionCode.code);\n if (meta.id !== expectedCodeHash) {\n throw ProtocolError.metaMismatch(expectedCodeHash, meta.id, \"id\");\n }\n\n // Check intended pubkey\n if (meta.int !== actionCode.pubkey) {\n throw ProtocolError.metaMismatch(actionCode.pubkey, meta.int, \"int\");\n }\n }\n\n /**\n * Verify that the base64-encoded transaction is signed by the \"intendedFor\" pubkey\n * as declared in the protocol meta of the transaction.\n * Throws ProtocolError if validation fails.\n */\n verifyTransactionSignedByIntentOwner(txString: string): void {\n const meta = this.parseMeta(txString);\n if (!meta) {\n throw ProtocolError.missingMeta();\n }\n\n const intended = meta.int;\n const issuer = meta.iss;\n if (!intended) {\n throw ProtocolError.invalidMetaFormat(\n \"Missing 'int' (intendedFor) field\"\n );\n }\n\n let intendedPubkey: PublicKey;\n let issuerPubkey: PublicKey;\n try {\n intendedPubkey = new PublicKey(intended);\n } catch {\n throw ProtocolError.invalidPubkeyFormat(\n intended,\n \"Invalid public key format\"\n );\n }\n\n try {\n if (issuer) {\n issuerPubkey = new PublicKey(issuer);\n }\n } catch {\n throw ProtocolError.invalidPubkeyFormat(\n issuer || \"\",\n \"Invalid public key format\"\n );\n }\n\n const tx = this.deserializeTransaction(txString);\n const actualSigners: string[] = [];\n\n // For legacy Transaction\n if (tx instanceof Transaction) {\n let isSignedByIntended = false;\n let isSignedByIssuer = false;\n\n tx.signatures.forEach((sig) => {\n if (!sig.signature) return;\n actualSigners.push(sig.publicKey.toString());\n\n if (sig.publicKey.equals(intendedPubkey)) {\n isSignedByIntended = true;\n }\n if (issuer && sig.publicKey.equals(issuerPubkey!)) {\n isSignedByIssuer = true;\n }\n });\n\n if (!isSignedByIntended) {\n throw ProtocolError.transactionNotSignedByIntendedOwner(\n intended,\n actualSigners\n );\n }\n\n if (issuer && !isSignedByIssuer) {\n throw ProtocolError.transactionNotSignedByIssuer(\n issuer,\n actualSigners\n );\n }\n return;\n }\n\n // For VersionedTransaction (MessageV0)\n if (tx instanceof VersionedTransaction) {\n const msg = tx.message;\n if (msg instanceof MessageV0) {\n let isSignedByIntended = false;\n let isSignedByIssuer = false;\n const signerCount = msg.header.numRequiredSignatures;\n for (let i = 0; i < signerCount; i++) {\n const key = msg.staticAccountKeys[i];\n if (key) {\n actualSigners.push(key.toString());\n if (key.equals(intendedPubkey)) {\n isSignedByIntended = true;\n }\n if (issuer && key.equals(issuerPubkey!)) {\n isSignedByIssuer = true;\n }\n }\n }\n if (!isSignedByIntended) {\n throw ProtocolError.transactionNotSignedByIntendedOwner(\n intended,\n actualSigners\n );\n }\n if (issuer && !isSignedByIssuer) {\n throw ProtocolError.transactionNotSignedByIssuer(\n issuer,\n actualSigners\n );\n }\n return;\n }\n }\n\n throw ProtocolError.invalidTransactionFormat(\n \"Unsupported transaction format\"\n );\n }\n\n verifyMessageSignedByIntentOwner(\n message: string,\n signature: string,\n pubkey: string\n ): void {\n try {\n const messageBytes = new TextEncoder().encode(message);\n const signatureBytes = bs58.decode(signature);\n const pubkeyObj = this.normalizePubkey(pubkey);\n const pubBytes = pubkeyObj.toBytes();\n\n const isValid = nacl.sign.detached.verify(\n messageBytes,\n signatureBytes,\n pubBytes\n );\n\n if (!isValid) {\n throw ProtocolError.invalidSignature(\"Signature verification failed\");\n }\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"Signature verification failed\")\n ) {\n throw error;\n }\n throw ProtocolError.invalidSignature(\"Invalid signature format\");\n }\n }\n\n /**\n * Attach protocol meta into a base64-encoded transaction and return the modified transaction as base64.\n * Throws ProtocolError if the transaction already contains protocol meta.\n * \n * @param txString - Base64-encoded transaction string\n * @param meta - Protocol metadata to attach\n * @param connection - Optional Solana connection. Required if transaction has address lookup tables\n * and instructions reference accounts from those tables.\n * @returns Base64-encoded transaction with protocol meta attached\n */\n static async attachProtocolMeta(\n txString: string,\n meta: ProtocolMetaFields,\n connection?: Connection\n ): Promise<string> {\n // Check if transaction already has protocol meta\n const adapter = new SolanaAdapter();\n const existingMeta = adapter.getProtocolMeta(txString);\n if (existingMeta) {\n throw ProtocolError.invalidTransactionFormat(\n \"Transaction already contains protocol meta. Cannot attach additional protocol meta.\"\n );\n }\n\n const metaIx = SolanaAdapter.createProtocolMetaIx(meta);\n\n try {\n // Try to deserialize as versioned first\n const versionedTx = VersionedTransaction.deserialize(\n Buffer.from(txString, \"base64\")\n );\n\n // Check if this is actually a versioned transaction by checking if it has a MessageV0\n if (versionedTx.message instanceof MessageV0) {\n const msg = versionedTx.message;\n\n // Check if we need to handle address lookup tables\n const hasAddressTableLookups =\n msg.addressTableLookups && msg.addressTableLookups.length > 0;\n\n // Check if any instruction references accounts beyond static account keys\n // (which would indicate they reference lookup table accounts)\n const numStaticAccounts = msg.staticAccountKeys.length;\n const referencesLookupAccounts = msg.compiledInstructions.some((ix) =>\n ix.accountKeyIndexes.some((idx) => idx >= numStaticAccounts)\n );\n\n // If we have lookup tables and instructions reference them, we need a connection\n if (hasAddressTableLookups && referencesLookupAccounts) {\n if (!connection) {\n throw ProtocolError.invalidTransactionFormat(\n \"Connection required: Transaction uses address lookup tables and instructions reference accounts from those tables. A Solana connection is needed to resolve lookup tables and correctly recalculate account indices.\"\n );\n }\n\n // Resolve address lookup tables\n const addressLookupTableAccounts: AddressLookupTableAccount[] = [];\n for (const lookup of msg.addressTableLookups) {\n try {\n const lookupTableAccount = await connection.getAddressLookupTable(\n lookup.accountKey\n );\n if (lookupTableAccount.value) {\n addressLookupTableAccounts.push(lookupTableAccount.value);\n }\n } catch (error) {\n throw ProtocolError.invalidTransactionFormat(\n `Failed to resolve address lookup table ${lookup.accountKey.toString()}: ${error}`\n );\n }\n }\n\n // Decompile the message with resolved lookup tables\n const decompiledMessage = TransactionMessage.decompile(msg, {\n addressLookupTableAccounts,\n });\n\n // Add memo instruction (programId will be added automatically during compilation)\n decompiledMessage.instructions.push(metaIx);\n\n // Recompile - this will correctly recalculate all account indices\n const recompiledMessage =\n decompiledMessage.compileToV0Message(addressLookupTableAccounts);\n\n // Re-wrap in VersionedTransaction\n const newTx = new VersionedTransaction(recompiledMessage);\n // Always create fresh empty signatures array to ensure clean transaction structure\n // This is important for wallet compatibility (e.g., Solflare) which may validate\n // the transaction structure before signing\n const numSignatures = recompiledMessage.header.numRequiredSignatures;\n newTx.signatures = Array.from(\n { length: numSignatures },\n () => new Uint8Array(64)\n );\n\n return Buffer.from(newTx.serialize()).toString(\"base64\");\n } else {\n // Simple case: no lookup tables or no instructions reference them\n // Use the original simple approach\n const newStaticKeys = [...msg.staticAccountKeys];\n if (!newStaticKeys.some((k) => k.equals(MEMO_PROGRAM_ID))) {\n newStaticKeys.push(MEMO_PROGRAM_ID);\n }\n\n // Program ID index\n const programIdIndex = newStaticKeys.findIndex((k) =>\n k.equals(MEMO_PROGRAM_ID)\n );\n\n // Memo instruction as compiled instruction\n const compiledIx = {\n programIdIndex,\n accountKeyIndexes: [],\n data: metaIx.data,\n };\n\n const newMsg = new MessageV0({\n header: msg.header,\n staticAccountKeys: newStaticKeys,\n recentBlockhash: msg.recentBlockhash,\n compiledInstructions: [...msg.compiledInstructions, compiledIx],\n addressTableLookups: msg.addressTableLookups,\n });\n\n // Re-wrap in VersionedTransaction\n const newTx = new VersionedTransaction(newMsg);\n // Always create fresh empty signatures array to ensure clean transaction structure\n // This is important for wallet compatibility (e.g., Solflare) which may validate\n // the transaction structure before signing\n const numSignatures = newMsg.header.numRequiredSignatures;\n newTx.signatures = Array.from(\n { length: numSignatures },\n () => new Uint8Array(64)\n );\n\n return Buffer.from(newTx.serialize()).toString(\"base64\");\n }\n } else {\n // This is likely a legacy transaction that was incorrectly deserialized as versioned\n // Fall back to legacy deserialization\n const legacyTx = Transaction.from(Buffer.from(txString, \"base64\"));\n\n // Legacy tx: just push memo instruction\n legacyTx.add(metaIx);\n\n return Buffer.from(\n legacyTx.serialize({ requireAllSignatures: false })\n ).toString(\"base64\");\n }\n } catch (error) {\n // If it's already a ProtocolError, re-throw it\n if (error instanceof ProtocolError) {\n throw error;\n }\n\n try {\n // Fallback to legacy transaction\n const legacyTx = Transaction.from(Buffer.from(txString, \"base64\"));\n\n // Legacy tx: just push memo instruction\n legacyTx.add(metaIx);\n\n return Buffer.from(\n legacyTx.serialize({ requireAllSignatures: false })\n ).toString(\"base64\");\n } catch {\n throw ProtocolError.invalidTransactionFormat(\n `Invalid base64 transaction format: ${error}`\n );\n }\n }\n }\n}\n",
|
|
19
|
+
"import nacl from \"tweetnacl\";\nimport bs58 from \"bs58\";\nimport {\n PublicKey,\n Transaction,\n VersionedTransaction,\n TransactionInstruction,\n MessageV0,\n Connection,\n TransactionMessage,\n AddressLookupTableAccount,\n type TransactionResponse,\n type VersionedTransactionResponse,\n type ParsedTransactionWithMeta,\n Message,\n type VersionedMessage,\n} from \"@solana/web3.js\";\nimport { createMemoInstruction, MEMO_PROGRAM_ID } from \"@solana/spl-memo\";\nimport { BaseChainAdapter } from \"./BaseChainAdapter\";\nimport {\n buildProtocolMeta,\n parseProtocolMeta,\n type ProtocolMetaFields,\n} from \"../utils/protocolMeta\";\nimport { codeHash } from \"../utils/crypto\";\nimport type { ActionCode, DelegatedActionCode } from \"../types\";\nimport { ProtocolError } from \"../errors\";\nimport {\n serializeCanonical,\n serializeCanonicalRevoke,\n serializeDelegationProof,\n} from \"../utils/canonical\";\n\n/** Union of supported Solana txn types */\nexport type SolanaTransaction = Transaction | VersionedTransaction;\n\nexport const ADAPTER_CHAIN_NAME = \"solana\" as const;\n\nexport class SolanaAdapter extends BaseChainAdapter {\n /** Normalize pubkey input to PublicKey */\n private normalizePubkey(input: string | PublicKey): PublicKey {\n if (typeof input === \"string\") {\n return new PublicKey(input);\n }\n return input;\n }\n\n /** Verify the signature over canonical message (protocol-level) */\n verifyWithWallet(actionCode: ActionCode): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (actionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (!actionCode.pubkey || !actionCode.timestamp || !actionCode.signature)\n return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const message = serializeCanonical({\n pubkey: actionCode.pubkey,\n windowStart: actionCode.timestamp,\n });\n const pub = this.normalizePubkey(actionCode.pubkey);\n const sigBytes = bs58.decode(actionCode.signature);\n const pubBytes = pub.toBytes();\n\n // Validate lengths\n if (sigBytes.length !== 64 || pubBytes.length !== 32) {\n return false;\n }\n\n // Perform signature verification\n return nacl.sign.detached.verify(message, sigBytes, pubBytes);\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Verify delegation proof signature */\n verifyWithDelegation(delegatedActionCode: DelegatedActionCode): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (delegatedActionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (\n !delegatedActionCode.pubkey ||\n !delegatedActionCode.timestamp ||\n !delegatedActionCode.signature\n )\n return false;\n\n const proof = delegatedActionCode.delegationProof;\n\n // Basic validation\n if (\n !proof.walletPubkey ||\n !proof.delegatedPubkey ||\n !proof.chain ||\n !proof.expiresAt ||\n !proof.signature\n ) {\n return false;\n }\n\n // Validate chain matches adapter\n if (proof.chain !== ADAPTER_CHAIN_NAME) {\n return false;\n }\n\n // The revoke/message pubkey for delegated flow must be the delegated pubkey\n if (delegatedActionCode.pubkey !== proof.delegatedPubkey) return false;\n\n // Check if delegation has expired\n if (proof.expiresAt < Date.now()) return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n // this check if delegation correct\n const delegationMessage = serializeDelegationProof(proof);\n const walletPub = this.normalizePubkey(proof.walletPubkey);\n const walletSigBytes = bs58.decode(proof.signature);\n const walletPubBytes = walletPub.toBytes();\n\n // this check if generated code correct by delegated keypair\n // The signature was created by signing a message with the DELEGATED pubkey\n const canonicalMessage = serializeCanonical({\n pubkey: proof.delegatedPubkey,\n windowStart: delegatedActionCode.timestamp,\n });\n const delegatedPub = this.normalizePubkey(proof.delegatedPubkey);\n const delegatedSigBytes = bs58.decode(delegatedActionCode.signature);\n const delegatedPubBytes = delegatedPub.toBytes();\n\n // Validate lengths first to prevent timing attacks\n if (walletSigBytes.length !== 64 || walletPubBytes.length !== 32) {\n return false;\n }\n if (delegatedSigBytes.length !== 64 || delegatedPubBytes.length !== 32) {\n return false;\n }\n\n // Perform both signature verifications regardless of first result\n // This prevents timing attacks that could leak information about which signature failed\n const delegationProofOk = nacl.sign.detached.verify(\n delegationMessage,\n walletSigBytes,\n walletPubBytes\n );\n\n const canonicalMessageOk = nacl.sign.detached.verify(\n canonicalMessage,\n delegatedSigBytes,\n delegatedPubBytes\n );\n\n // Return result only after both operations complete\n return delegationProofOk && canonicalMessageOk;\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Verify the signature over canonical revoke message (protocol-level) */\n verifyRevokeWithWallet(\n actionCode: ActionCode,\n revokeSignature: string\n ): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (actionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (!actionCode.pubkey || !actionCode.timestamp || !revokeSignature)\n return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const message = serializeCanonicalRevoke({\n pubkey: actionCode.pubkey,\n codeHash: codeHash(actionCode.code),\n windowStart: actionCode.timestamp,\n });\n const pub = this.normalizePubkey(actionCode.pubkey);\n const sigBytes = bs58.decode(revokeSignature);\n const pubBytes = pub.toBytes();\n\n // Validate lengths\n if (sigBytes.length !== 64 || pubBytes.length !== 32) {\n return false;\n }\n\n // Perform signature verification\n return nacl.sign.detached.verify(message, sigBytes, pubBytes);\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n verifyRevokeWithDelegation(\n delegatedActionCode: DelegatedActionCode,\n revokeSignature: string\n ): boolean {\n // Early validation checks - these are fast and don't leak timing info\n if (delegatedActionCode.chain !== ADAPTER_CHAIN_NAME) return false;\n if (\n !delegatedActionCode.pubkey ||\n !delegatedActionCode.timestamp ||\n !delegatedActionCode.signature ||\n !delegatedActionCode.delegationProof\n )\n return false;\n\n const proof = delegatedActionCode.delegationProof;\n\n // Basic validation\n if (\n !proof.walletPubkey ||\n !proof.delegatedPubkey ||\n !proof.chain ||\n !proof.expiresAt ||\n !proof.signature\n ) {\n return false;\n }\n\n // Validate chain matches adapter\n if (proof.chain !== ADAPTER_CHAIN_NAME) {\n return false;\n }\n\n // The revoke/message pubkey for delegated flow must be the delegated pubkey\n if (delegatedActionCode.pubkey !== proof.delegatedPubkey) return false;\n\n // Check if delegation has expired\n if (proof.expiresAt < Date.now()) return false;\n\n // Perform all operations in a single try-catch to ensure consistent timing\n try {\n const delegationMessage = serializeDelegationProof(proof);\n const walletPub = this.normalizePubkey(proof.walletPubkey);\n const walletSigBytes = bs58.decode(proof.signature);\n const walletPubBytes = walletPub.toBytes();\n\n const revokeMessage = serializeCanonicalRevoke({\n pubkey: proof.delegatedPubkey, // Revoke signature is from delegated keypair\n codeHash: codeHash(delegatedActionCode.code),\n windowStart: delegatedActionCode.timestamp,\n });\n const delegatedPub = this.normalizePubkey(proof.delegatedPubkey);\n const delegatedSigBytes = bs58.decode(revokeSignature);\n const delegatedPubBytes = delegatedPub.toBytes();\n\n // Validate lengths first to prevent timing attacks\n if (walletSigBytes.length !== 64 || walletPubBytes.length !== 32) {\n return false;\n }\n if (delegatedSigBytes.length !== 64 || delegatedPubBytes.length !== 32) {\n return false;\n }\n\n // Perform both signature verifications regardless of first result\n // This prevents timing attacks that could leak information about which signature failed\n const delegationProofOk = nacl.sign.detached.verify(\n delegationMessage,\n walletSigBytes,\n walletPubBytes\n );\n\n const revokeMessageOk = nacl.sign.detached.verify(\n revokeMessage,\n delegatedSigBytes,\n delegatedPubBytes\n );\n\n // Return result only after both operations complete\n return delegationProofOk && revokeMessageOk;\n } catch {\n // All errors result in false with consistent timing\n return false;\n }\n }\n\n /** Create a Solana memo instruction carrying protocol meta (for SDK/clients) */\n static createProtocolMetaIx(\n meta: ProtocolMetaFields\n ): TransactionInstruction {\n const metaString = buildProtocolMeta(meta);\n return createMemoInstruction(metaString);\n }\n\n /**\n * Extract protocol metadata string (memo) from a base64-encoded transaction, or null\n * @overload\n */\n getProtocolMeta(txString: string): string | null;\n /**\n * Extract protocol metadata string (memo) from a transaction response from solana.getTransaction(), or null\n * @overload\n */\n getProtocolMeta(\n txResponse:\n | TransactionResponse\n | VersionedTransactionResponse\n | ParsedTransactionWithMeta\n ): string | null;\n getProtocolMeta(\n input:\n | string\n | TransactionResponse\n | VersionedTransactionResponse\n | ParsedTransactionWithMeta\n ): string | null {\n try {\n // Handle base64 string (existing functionality)\n if (typeof input === \"string\") {\n const tx = this.deserializeTransaction(input);\n for (const ix of this.getMemoInstructions(tx)) {\n const data = ix.data;\n try {\n const s = new TextDecoder().decode(data);\n // Optionally: test parse\n const parsed = parseProtocolMeta(s);\n if (parsed) return s;\n } catch {\n // ignore\n }\n }\n return null;\n }\n\n // Handle transaction response objects\n // Check if it's a parsed transaction\n if (\"transaction\" in input && \"message\" in input.transaction) {\n const msg = input.transaction.message;\n\n // Handle ParsedTransactionWithMeta\n if (\n \"instructions\" in msg &&\n Array.isArray(msg.instructions) &&\n msg.instructions.length > 0 &&\n (\"program\" in msg.instructions[0]! ||\n \"programId\" in msg.instructions[0]!)\n ) {\n // This is a ParsedMessage with parsed instructions\n for (const ix of msg.instructions) {\n // Check if it's a memo instruction\n if (\n (\"program\" in ix && ix.program === \"spl-memo\") ||\n (\"programId\" in ix &&\n ix.programId instanceof PublicKey &&\n ix.programId.equals(MEMO_PROGRAM_ID))\n ) {\n let memoString: string | null = null;\n\n // For parsed instructions, the memo is in the `parsed` field\n if (\"parsed\" in ix && typeof ix.parsed === \"string\") {\n memoString = ix.parsed;\n } else if (\"data\" in ix && typeof ix.data === \"string\") {\n // For partially decoded instructions, decode base58 data\n try {\n const dataBytes = bs58.decode(ix.data);\n memoString = new TextDecoder().decode(dataBytes);\n } catch {\n continue;\n }\n }\n\n if (memoString) {\n try {\n // Test parse to ensure it's valid protocol meta\n const parsed = parseProtocolMeta(memoString);\n if (parsed) return memoString;\n } catch {\n // ignore\n }\n }\n }\n }\n return null;\n }\n\n // Handle non-parsed TransactionResponse or VersionedTransactionResponse\n // Work with compiled instructions directly from Message or MessageV0\n try {\n // Check if it's a MessageV0 (versioned)\n if (msg instanceof MessageV0) {\n const v0Msg = msg;\n const staticKeys = v0Msg.staticAccountKeys;\n for (const compiledIx of v0Msg.compiledInstructions) {\n const pid = staticKeys[compiledIx.programIdIndex];\n if (pid && pid.equals(MEMO_PROGRAM_ID)) {\n try {\n const data = Buffer.from(compiledIx.data);\n const s = new TextDecoder().decode(data);\n const parsed = parseProtocolMeta(s);\n if (parsed) return s;\n } catch {\n // ignore\n }\n }\n }\n return null;\n }\n\n // Check if it's a legacy Message\n if (msg instanceof Message || (\"version\" in msg && msg.version === \"legacy\")) {\n const legacyMsg = msg as Message;\n const accountKeys = legacyMsg.accountKeys;\n // Message has compiledInstructions getter\n for (const compiledIx of legacyMsg.compiledInstructions) {\n const pid = accountKeys[compiledIx.programIdIndex];\n if (pid && pid.equals(MEMO_PROGRAM_ID)) {\n try {\n const data = Buffer.from(compiledIx.data);\n const s = new TextDecoder().decode(data);\n const parsed = parseProtocolMeta(s);\n if (parsed) return s;\n } catch {\n // ignore\n }\n }\n }\n return null;\n }\n\n // Try to decompile as VersionedMessage (fallback)\n try {\n const decompiled = TransactionMessage.decompile(\n msg as unknown as VersionedMessage\n );\n for (const ix of decompiled.instructions) {\n if (ix.programId.equals(MEMO_PROGRAM_ID)) {\n try {\n const s = new TextDecoder().decode(ix.data);\n const parsed = parseProtocolMeta(s);\n if (parsed) return s;\n } catch {\n // ignore\n }\n }\n }\n } catch {\n // ignore\n }\n } catch {\n // ignore\n }\n return null;\n }\n\n return null;\n } catch {\n return null;\n }\n }\n\n /** Deserialize a base64-encoded transaction string to SolanaTransaction */\n private deserializeTransaction(txString: string): SolanaTransaction {\n try {\n // Try versioned first (most common now)\n const versionedTx = VersionedTransaction.deserialize(\n Buffer.from(txString, \"base64\")\n );\n\n // Return versioned transaction (works with any message version)\n return versionedTx;\n } catch {\n try {\n // Fallback to legacy\n return Transaction.from(Buffer.from(txString, \"base64\"));\n } catch {\n throw ProtocolError.invalidTransactionFormat(\n \"Invalid base64 transaction format\"\n );\n }\n }\n }\n\n /**\n * Get parsed ProtocolMeta object from base64-encoded transaction, or null if none or invalid\n * @overload\n */\n parseMeta(txString: string): ProtocolMetaFields | null;\n /**\n * Get parsed ProtocolMeta object from transaction response from solana.getTransaction(), or null if none or invalid\n * @overload\n */\n parseMeta(\n txResponse:\n | TransactionResponse\n | VersionedTransactionResponse\n | ParsedTransactionWithMeta\n ): ProtocolMetaFields | null;\n parseMeta(\n input:\n | string\n | TransactionResponse\n | VersionedTransactionResponse\n | ParsedTransactionWithMeta\n ): ProtocolMetaFields | null {\n const s =\n typeof input === \"string\"\n ? this.getProtocolMeta(input)\n : this.getProtocolMeta(input);\n if (!s) return null;\n return parseProtocolMeta(s);\n }\n\n /** List memo instructions from the transaction (legacy & versioned) */\n private getMemoInstructions(tx: SolanaTransaction): TransactionInstruction[] {\n if (tx instanceof Transaction) {\n return tx.instructions.filter((ix) =>\n ix.programId.equals(MEMO_PROGRAM_ID)\n );\n } else {\n // VersionedTransaction: inspect `message.compiledInstructions`\n const vtx = tx as VersionedTransaction;\n const msg = vtx.message;\n const memos: TransactionInstruction[] = [];\n\n // Use getAccountKeys() API which properly resolves both static and lookup table keys\n // This is the recommended Solana API for accessing account keys in versioned transactions\n let accountKeys;\n try {\n // Try to get account keys - works if no lookup tables or if they're already resolved\n accountKeys = msg.getAccountKeys();\n } catch {\n // If lookup tables need resolution but aren't available, fall back to staticAccountKeys\n // Program IDs are always in staticAccountKeys, so this is safe for checking program IDs\n accountKeys = null;\n }\n\n // Program IDs are always in staticAccountKeys (Solana requirement)\n // So we can safely access them from staticAccountKeys even if accountKeys isn't available\n const staticKeys = (msg as MessageV0).staticAccountKeys;\n\n for (const ix of msg.compiledInstructions) {\n // Program ID is always in staticAccountKeys\n const pid = staticKeys[ix.programIdIndex];\n if (pid && pid.equals(MEMO_PROGRAM_ID)) {\n // Reconstruct a TransactionInstruction for inspection\n // For account keys, use getAccountKeys() if available, otherwise skip accounts from lookup tables\n const keys = ix.accountKeyIndexes\n .map((i) => {\n if (accountKeys) {\n // Use getAccountKeys() to properly resolve accounts from lookup tables\n const key = accountKeys.get(i);\n return key\n ? {\n pubkey: key,\n isSigner: false,\n isWritable: false,\n }\n : null;\n } else {\n // Fallback: only include accounts that are in staticAccountKeys\n // Skip accounts from lookup tables (indices >= staticKeys.length)\n if (i < staticKeys.length) {\n return {\n pubkey: staticKeys[i]!,\n isSigner: false,\n isWritable: false,\n };\n }\n return null;\n }\n })\n .filter((k): k is NonNullable<typeof k> => k !== null);\n\n memos.push(\n new TransactionInstruction({\n keys,\n programId: pid,\n data: ix.data as Buffer,\n })\n );\n }\n }\n return memos;\n }\n }\n\n /**\n * Validate that a base64-encoded transaction's memo meta aligns with the bound `actionCode`.\n * Throws ProtocolError if validation fails.\n */\n verifyTransactionMatchesCode(actionCode: ActionCode, txString: string): void {\n // Check expiration first\n const currentTime = Date.now();\n if (currentTime > actionCode.expiresAt) {\n throw ProtocolError.expiredCode(\n actionCode.code,\n actionCode.expiresAt,\n currentTime\n );\n }\n\n const meta = this.parseMeta(txString);\n if (!meta) {\n throw ProtocolError.missingMeta();\n }\n\n // Check version\n if (meta.ver !== 2) {\n throw ProtocolError.metaMismatch(\"2\", String(meta.ver), \"ver\");\n }\n\n // Check code ID - should be codeHash of the code, not the code itself\n const expectedCodeHash = codeHash(actionCode.code);\n if (meta.id !== expectedCodeHash) {\n throw ProtocolError.metaMismatch(expectedCodeHash, meta.id, \"id\");\n }\n\n // Check intended pubkey\n if (meta.int !== actionCode.pubkey) {\n throw ProtocolError.metaMismatch(actionCode.pubkey, meta.int, \"int\");\n }\n }\n\n /**\n * Verify that the base64-encoded transaction is signed by the \"intendedFor\" pubkey\n * as declared in the protocol meta of the transaction.\n * Throws ProtocolError if validation fails.\n */\n verifyTransactionSignedByIntentOwner(txString: string): void {\n const meta = this.parseMeta(txString);\n if (!meta) {\n throw ProtocolError.missingMeta();\n }\n\n const intended = meta.int;\n const issuer = meta.iss;\n if (!intended) {\n throw ProtocolError.invalidMetaFormat(\n \"Missing 'int' (intendedFor) field\"\n );\n }\n\n let intendedPubkey: PublicKey;\n let issuerPubkey: PublicKey;\n try {\n intendedPubkey = new PublicKey(intended);\n } catch {\n throw ProtocolError.invalidPubkeyFormat(\n intended,\n \"Invalid public key format\"\n );\n }\n\n try {\n if (issuer) {\n issuerPubkey = new PublicKey(issuer);\n }\n } catch {\n throw ProtocolError.invalidPubkeyFormat(\n issuer || \"\",\n \"Invalid public key format\"\n );\n }\n\n const tx = this.deserializeTransaction(txString);\n const actualSigners: string[] = [];\n\n // For legacy Transaction\n if (tx instanceof Transaction) {\n let isSignedByIntended = false;\n let isSignedByIssuer = false;\n\n tx.signatures.forEach((sig) => {\n if (!sig.signature) return;\n actualSigners.push(sig.publicKey.toString());\n\n if (sig.publicKey.equals(intendedPubkey)) {\n isSignedByIntended = true;\n }\n if (issuer && sig.publicKey.equals(issuerPubkey!)) {\n isSignedByIssuer = true;\n }\n });\n\n if (!isSignedByIntended) {\n throw ProtocolError.transactionNotSignedByIntendedOwner(\n intended,\n actualSigners\n );\n }\n\n if (issuer && !isSignedByIssuer) {\n throw ProtocolError.transactionNotSignedByIssuer(\n issuer,\n actualSigners\n );\n }\n return;\n }\n\n // For VersionedTransaction\n if (tx instanceof VersionedTransaction) {\n const msg = tx.message;\n let isSignedByIntended = false;\n let isSignedByIssuer = false;\n const signerCount = msg.header.numRequiredSignatures;\n\n // Use getAccountKeys() API which properly resolves both static and lookup table keys\n // This is the recommended Solana API for accessing account keys in versioned transactions\n // Note: getAccountKeys() requires lookup tables to be resolved if present, but since\n // signers are always in staticAccountKeys (Solana requirement), we can safely access\n // them via getAccountKeys() when lookup tables don't need resolution, or fall back\n // to staticAccountKeys if lookup tables are present but not resolved.\n let accountKeys;\n try {\n // Try to get account keys - works if no lookup tables or if they're already resolved\n accountKeys = msg.getAccountKeys();\n } catch {\n // If lookup tables need resolution but aren't available, fall back to staticAccountKeys\n // This is safe for signers since they're always in staticAccountKeys\n accountKeys = null;\n }\n\n for (let i = 0; i < signerCount; i++) {\n const key = accountKeys\n ? accountKeys.get(i)\n : (msg as MessageV0).staticAccountKeys[i];\n if (key) {\n actualSigners.push(key.toString());\n if (key.equals(intendedPubkey)) {\n isSignedByIntended = true;\n }\n if (issuer && key.equals(issuerPubkey!)) {\n isSignedByIssuer = true;\n }\n }\n }\n\n if (!isSignedByIntended) {\n throw ProtocolError.transactionNotSignedByIntendedOwner(\n intended,\n actualSigners\n );\n }\n\n if (issuer && !isSignedByIssuer) {\n throw ProtocolError.transactionNotSignedByIssuer(\n issuer,\n actualSigners\n );\n }\n\n return;\n }\n\n throw ProtocolError.invalidTransactionFormat(\n \"Unsupported transaction format\"\n );\n }\n\n verifyMessageSignedByIntentOwner(\n message: string,\n signature: string,\n pubkey: string\n ): void {\n try {\n const messageBytes = new TextEncoder().encode(message);\n const signatureBytes = bs58.decode(signature);\n const pubkeyObj = this.normalizePubkey(pubkey);\n const pubBytes = pubkeyObj.toBytes();\n\n const isValid = nacl.sign.detached.verify(\n messageBytes,\n signatureBytes,\n pubBytes\n );\n\n if (!isValid) {\n throw ProtocolError.invalidSignature(\"Signature verification failed\");\n }\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"Signature verification failed\")\n ) {\n throw error;\n }\n throw ProtocolError.invalidSignature(\"Invalid signature format\");\n }\n }\n\n /**\n * Attach protocol meta into a base64-encoded transaction and return the modified transaction as base64.\n * Throws ProtocolError if the transaction already contains protocol meta.\n * \n * @param txString - Base64-encoded transaction string\n * @param meta - Protocol metadata to attach\n * @param connection - Optional Solana connection. Required if transaction has address lookup tables\n * and instructions reference accounts from those tables.\n * @returns Base64-encoded transaction with protocol meta attached\n */\n static async attachProtocolMeta(\n txString: string,\n meta: ProtocolMetaFields,\n connection?: Connection\n ): Promise<string> {\n // Check if transaction already has protocol meta\n const adapter = new SolanaAdapter();\n const existingMeta = adapter.getProtocolMeta(txString);\n if (existingMeta) {\n throw ProtocolError.invalidTransactionFormat(\n \"Transaction already contains protocol meta. Cannot attach additional protocol meta.\"\n );\n }\n\n const metaIx = SolanaAdapter.createProtocolMetaIx(meta);\n\n try {\n // Try to deserialize as versioned first\n const versionedTx = VersionedTransaction.deserialize(\n Buffer.from(txString, \"base64\")\n );\n\n // Check if this is actually a versioned transaction by checking if it has a MessageV0\n if (versionedTx.message instanceof MessageV0) {\n const msg = versionedTx.message;\n\n // Check if we need to handle address lookup tables\n const hasAddressTableLookups =\n msg.addressTableLookups && msg.addressTableLookups.length > 0;\n\n // Check if any instruction references accounts beyond static account keys\n // (which would indicate they reference lookup table accounts)\n const numStaticAccounts = msg.staticAccountKeys.length;\n const referencesLookupAccounts = msg.compiledInstructions.some((ix) =>\n ix.accountKeyIndexes.some((idx) => idx >= numStaticAccounts)\n );\n\n // If we have lookup tables and instructions reference them, we need a connection\n if (hasAddressTableLookups && referencesLookupAccounts) {\n if (!connection) {\n throw ProtocolError.invalidTransactionFormat(\n \"Connection required: Transaction uses address lookup tables and instructions reference accounts from those tables. A Solana connection is needed to resolve lookup tables and correctly recalculate account indices.\"\n );\n }\n\n // Resolve address lookup tables\n const addressLookupTableAccounts: AddressLookupTableAccount[] = [];\n for (const lookup of msg.addressTableLookups) {\n try {\n const lookupTableAccount = await connection.getAddressLookupTable(\n lookup.accountKey\n );\n if (lookupTableAccount.value) {\n addressLookupTableAccounts.push(lookupTableAccount.value);\n }\n } catch (error) {\n throw ProtocolError.invalidTransactionFormat(\n `Failed to resolve address lookup table ${lookup.accountKey.toString()}: ${error}`\n );\n }\n }\n\n // Decompile the message with resolved lookup tables\n const decompiledMessage = TransactionMessage.decompile(msg, {\n addressLookupTableAccounts,\n });\n\n // Add memo instruction (programId will be added automatically during compilation)\n decompiledMessage.instructions.push(metaIx);\n\n // Recompile - this will correctly recalculate all account indices\n const recompiledMessage =\n decompiledMessage.compileToV0Message(addressLookupTableAccounts);\n\n // Re-wrap in VersionedTransaction\n const newTx = new VersionedTransaction(recompiledMessage);\n // Always create fresh empty signatures array to ensure clean transaction structure\n // This is important for wallet compatibility (e.g., Solflare) which may validate\n // the transaction structure before signing\n const numSignatures = recompiledMessage.header.numRequiredSignatures;\n newTx.signatures = Array.from(\n { length: numSignatures },\n () => new Uint8Array(64)\n );\n\n return Buffer.from(newTx.serialize()).toString(\"base64\");\n } else {\n // Simple case: no lookup tables or no instructions reference them\n // Use the original simple approach\n const newStaticKeys = [...msg.staticAccountKeys];\n if (!newStaticKeys.some((k) => k.equals(MEMO_PROGRAM_ID))) {\n newStaticKeys.push(MEMO_PROGRAM_ID);\n }\n\n // Program ID index\n const programIdIndex = newStaticKeys.findIndex((k) =>\n k.equals(MEMO_PROGRAM_ID)\n );\n\n // Memo instruction as compiled instruction\n const compiledIx = {\n programIdIndex,\n accountKeyIndexes: [],\n data: metaIx.data,\n };\n\n const newMsg = new MessageV0({\n header: msg.header,\n staticAccountKeys: newStaticKeys,\n recentBlockhash: msg.recentBlockhash,\n compiledInstructions: [...msg.compiledInstructions, compiledIx],\n addressTableLookups: msg.addressTableLookups,\n });\n\n // Re-wrap in VersionedTransaction\n const newTx = new VersionedTransaction(newMsg);\n // Always create fresh empty signatures array to ensure clean transaction structure\n // This is important for wallet compatibility (e.g., Solflare) which may validate\n // the transaction structure before signing\n const numSignatures = newMsg.header.numRequiredSignatures;\n newTx.signatures = Array.from(\n { length: numSignatures },\n () => new Uint8Array(64)\n );\n\n return Buffer.from(newTx.serialize()).toString(\"base64\");\n }\n } else {\n // This is likely a legacy transaction that was incorrectly deserialized as versioned\n // Fall back to legacy deserialization\n const legacyTx = Transaction.from(Buffer.from(txString, \"base64\"));\n\n // Legacy tx: just push memo instruction\n legacyTx.add(metaIx);\n\n return Buffer.from(\n legacyTx.serialize({ requireAllSignatures: false })\n ).toString(\"base64\");\n }\n } catch (error) {\n // If it's already a ProtocolError, re-throw it\n if (error instanceof ProtocolError) {\n throw error;\n }\n\n try {\n // Fallback to legacy transaction\n const legacyTx = Transaction.from(Buffer.from(txString, \"base64\"));\n\n // Legacy tx: just push memo instruction\n legacyTx.add(metaIx);\n\n return Buffer.from(\n legacyTx.serialize({ requireAllSignatures: false })\n ).toString(\"base64\");\n } catch {\n throw ProtocolError.invalidTransactionFormat(\n `Invalid base64 transaction format: ${error}`\n );\n }\n }\n }\n}\n",
|
|
20
20
|
"import type {\n ActionCode,\n CodeGenerationConfig,\n DelegationProof,\n DelegatedActionCode,\n Chain,\n ActionCodeRevoke,\n DelegatedActionCodeRevoke,\n} from \"./types\";\nimport type { ChainAdapter, SignFn } from \"./adapters/BaseChainAdapter\";\nimport { WalletStrategy } from \"./strategy/WalletStrategy\";\nimport { DelegationStrategy } from \"./strategy/DelegationStrategy\";\nimport { SolanaAdapter } from \"./adapters/SolanaAdapter\";\nimport { ProtocolError } from \"./errors\";\nimport { SUPPORTED_CHAINS } from \"./constants\";\nimport {\n getCanonicalMessageParts,\n serializeCanonicalRevoke,\n} from \"./utils/canonical\";\nimport { codeHash } from \"./utils/crypto\";\n\nexport class ActionCodesProtocol {\n private adapters: Record<string, ChainAdapter> = {};\n private _walletStrategy: WalletStrategy;\n private _delegationStrategy: DelegationStrategy;\n\n constructor(private readonly config: CodeGenerationConfig) {\n // Register default adapters\n this.adapters.solana = new SolanaAdapter();\n\n // Initialize strategies\n this._walletStrategy = new WalletStrategy(config);\n this._delegationStrategy = new DelegationStrategy(config);\n }\n\n public getConfig(): CodeGenerationConfig {\n return this.config;\n }\n\n /** Register a chain adapter */\n registerAdapter(chain: string, adapter: ChainAdapter): void {\n this.adapters[chain] = adapter;\n }\n\n /** Get a registered adapter */\n getAdapter(chain: string): ChainAdapter | undefined {\n return this.adapters[chain];\n }\n\n /** Typed access to specific adapters */\n get adapter() {\n return {\n solana: this.adapters.solana as unknown as SolanaAdapter,\n };\n }\n\n /** Access to strategies */\n get walletStrategy() {\n return this._walletStrategy;\n }\n\n get delegationStrategy() {\n return this._delegationStrategy;\n }\n\n // Generate code\n async generate(\n strategy: \"wallet\",\n pubkey: string,\n chain: Chain,\n signFn: SignFn\n ): Promise<ActionCode>;\n async generate(\n strategy: \"delegation\",\n delegationProof: DelegationProof,\n chain: Chain,\n signFn: SignFn\n ): Promise<DelegatedActionCode>;\n async generate(\n strategy: \"wallet\" | \"delegation\",\n pubkeyOrProof: string | DelegationProof,\n chain: Chain,\n signFn: SignFn\n ): Promise<ActionCode | DelegatedActionCode> {\n if (!chain || !SUPPORTED_CHAINS[chain]) {\n throw ProtocolError.invalidAdapter(chain);\n }\n\n if (!signFn || typeof signFn !== \"function\") {\n throw ProtocolError.invalidSignature(\"Missing signature function\");\n }\n\n if (strategy === \"wallet\") {\n const canonical = getCanonicalMessageParts(pubkeyOrProof as string);\n // For now we have to pass Solana as only chain\n // later we will allow to pass the chain dynamically\n const signature = await signFn(canonical, chain);\n\n // Here param1 must be Uint8Array (canonical message)\n if (!signature) {\n throw ProtocolError.invalidSignature(\n \"Missing signature over canonical message\"\n );\n }\n return this.walletStrategy.generateCode(canonical, chain, signature);\n } else {\n const proof = pubkeyOrProof as DelegationProof;\n const canonical = getCanonicalMessageParts(proof.delegatedPubkey); // Use delegated pubkey for signing\n const signature = await signFn(canonical, chain);\n\n // Here param1 must be DelegationProof\n if (!signature) {\n throw ProtocolError.invalidSignature(\"Missing delegated signature\");\n }\n return this.delegationStrategy.generateDelegatedCode(\n proof as DelegationProof,\n canonical,\n chain,\n signature\n );\n }\n }\n\n async revoke(\n strategy: \"wallet\",\n actionCode: ActionCode,\n chain: Chain,\n signFn: SignFn\n ): Promise<ActionCodeRevoke>;\n async revoke(\n strategy: \"delegation\",\n actionCode: DelegatedActionCode,\n chain: Chain,\n signFn: SignFn\n ): Promise<DelegatedActionCodeRevoke>;\n async revoke(\n strategy: \"wallet\" | \"delegation\",\n actionCode: ActionCode | DelegatedActionCode,\n chain: Chain,\n signFn: SignFn\n ): Promise<ActionCodeRevoke | DelegatedActionCodeRevoke> {\n if (!chain || !SUPPORTED_CHAINS[chain]) {\n throw ProtocolError.invalidAdapter(chain);\n }\n\n if (!signFn || typeof signFn !== \"function\") {\n throw ProtocolError.invalidSignature(\"Missing signature function\");\n }\n\n if (strategy === \"wallet\") {\n const canonical = serializeCanonicalRevoke({\n codeHash: codeHash(actionCode.code),\n pubkey: actionCode.pubkey,\n windowStart: actionCode.timestamp,\n });\n // For now we have to pass Solana as only chain\n // later we will allow to pass the chain dynamically\n const signature = await signFn(canonical, chain);\n\n // Here param1 must be Uint8Array (canonical message)\n if (!signature) {\n throw ProtocolError.invalidSignature(\n \"Missing signature over canonical message\"\n );\n }\n\n return {\n ...actionCode,\n revokeSignature: signature,\n };\n } else {\n const delegatedActionCode = actionCode as DelegatedActionCode;\n const canonical = serializeCanonicalRevoke({\n codeHash: codeHash(actionCode.code),\n pubkey: delegatedActionCode.delegationProof.delegatedPubkey, // Use delegated pubkey for signature\n windowStart: actionCode.timestamp,\n });\n const signature = await signFn(canonical, chain);\n\n // Here param1 must be DelegationProof\n if (!signature) {\n throw ProtocolError.invalidSignature(\"Missing delegated signature\");\n }\n\n return {\n ...actionCode,\n revokeSignature: signature,\n };\n }\n }\n\n // Overloaded validateCode methods with strategy parameter\n validate(strategy: \"wallet\", actionCode: ActionCode): void;\n validate(strategy: \"delegation\", actionCode: DelegatedActionCode): void;\n validate(\n strategy: \"wallet\" | \"delegation\",\n actionCode: ActionCode | DelegatedActionCode\n ): void {\n if (strategy === \"wallet\") {\n // This will throw if validation fails\n this.walletStrategy.validateCode(actionCode as ActionCode);\n\n const adapter = this.getAdapter(actionCode.chain);\n if (!adapter) throw ProtocolError.invalidAdapter(actionCode.chain);\n\n const ok = adapter.verifyWithWallet(actionCode);\n\n if (!ok) {\n throw ProtocolError.invalidSignature(\n \"Wallet signature verification failed\"\n );\n }\n } else {\n this.delegationStrategy.validateDelegatedCode(\n actionCode as DelegatedActionCode\n );\n\n // Then verify the delegation proof signature\n const adapter = this.getAdapter(actionCode.chain);\n if (!adapter) throw ProtocolError.invalidAdapter(actionCode.chain);\n\n const ok = adapter.verifyWithDelegation(\n actionCode as DelegatedActionCode\n );\n\n if (!ok) {\n throw ProtocolError.invalidSignature(\n \"Delegation signature verification failed\"\n );\n }\n }\n }\n}\n"
|
|
21
21
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
22
|
+
"mappings": "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",
|
|
23
|
+
"debugId": "4195AC45AC4E72A864756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|