{"version":3,"sources":["../../../src/helpers/constants.ts","../../../src/helpers/address.ts","../../../thru-ts-client-sdk/domain/programs/helpers/bytes.ts","../../../src/core-program-addresses.ts","../../../thru-ts-client-sdk/domain/programs/passkey-manager/context.ts"],"names":["a","b","c","d","triple","byte1","byte2"],"mappings":"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","file":"context.cjs","sourcesContent":["export const BASE64_URL_ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n\nconst tempMap = new Int16Array(256).fill(-1);\nfor (let i = 0; i < BASE64_URL_ALPHABET.length; i++) {\n    tempMap[BASE64_URL_ALPHABET.charCodeAt(i)] = i;\n}\nexport const BASE64_URL_MAP = tempMap\n\n","import { BASE64_URL_ALPHABET, BASE64_URL_MAP } from \"./constants\";\n\nexport function encodeAddress(bytes: Uint8Array): string {\n  if (bytes.length !== 32) {\n    throw new Error('Expected 32-byte address');\n  }\n\n  let checksum = 0;\n  let accumulator = 0;\n  let bitsCollected = 0;\n  const output: string[] = ['t', 'a'];\n\n  for (let i = 0; i < 30; i++) {\n    const byte = bytes[i];\n    checksum += byte;\n    accumulator = ((accumulator << 8) | byte) >>> 0;\n    bitsCollected += 8;\n    while (bitsCollected >= 6) {\n      const index = (accumulator >> (bitsCollected - 6)) & 0x3f;\n      output.push(BASE64_URL_ALPHABET[index]);\n      bitsCollected -= 6;\n      accumulator &= maskForBits(bitsCollected);\n    }\n  }\n\n  const secondLast = bytes[30];\n  checksum += secondLast;\n  accumulator = ((accumulator << 8) | secondLast) >>> 0;\n  bitsCollected += 8;\n\n  const last = bytes[31];\n  checksum += last;\n  accumulator = ((accumulator << 8) | last) >>> 0;\n  bitsCollected += 8;\n\n  accumulator = ((accumulator << 8) | (checksum & 0xff)) >>> 0;\n  bitsCollected += 8;\n\n  while (bitsCollected >= 6) {\n    const index = (accumulator >> (bitsCollected - 6)) & 0x3f;\n    output.push(BASE64_URL_ALPHABET[index]);\n    bitsCollected -= 6;\n    accumulator &= maskForBits(bitsCollected);\n  }\n\n  return output.join('');\n}\n\nexport function decodeAddress(value: string): Uint8Array {\n  if (value.length !== 46) {\n    throw new Error('Invalid address length');\n  }\n  if (!value.startsWith('ta')) {\n    throw new Error('Address must start with \"ta\"');\n  }\n\n  const output = new Uint8Array(32);\n  let checksum = 0;\n  let inIdx = 2;\n  let remaining = 40;\n  let outIdx = 0;\n\n  while (remaining >= 4) {\n    const a = BASE64_URL_MAP[value.charCodeAt(inIdx)];\n    const b = BASE64_URL_MAP[value.charCodeAt(inIdx + 1)];\n    const c = BASE64_URL_MAP[value.charCodeAt(inIdx + 2)];\n    const d = BASE64_URL_MAP[value.charCodeAt(inIdx + 3)];\n    if (a < 0 || b < 0 || c < 0 || d < 0) {\n      throw new Error('Invalid address encoding');\n    }\n    const triple = (a << 18) | (b << 12) | (c << 6) | d;\n    const byte1 = (triple >> 16) & 0xff;\n    const byte2 = (triple >> 8) & 0xff;\n    const byte3 = triple & 0xff;\n    checksum += byte1;\n    checksum += byte2;\n    checksum += byte3;\n    output[outIdx++] = byte1;\n    output[outIdx++] = byte2;\n    output[outIdx++] = byte3;\n    inIdx += 4;\n    remaining -= 4;\n  }\n\n  const a = BASE64_URL_MAP[value.charCodeAt(inIdx)];\n  const b = BASE64_URL_MAP[value.charCodeAt(inIdx + 1)];\n  const c = BASE64_URL_MAP[value.charCodeAt(inIdx + 2)];\n  const d = BASE64_URL_MAP[value.charCodeAt(inIdx + 3)];\n  if (a < 0 || b < 0 || c < 0 || d < 0) {\n    throw new Error('Invalid address encoding');\n  }\n  const triple = (a << 18) | (b << 12) | (c << 6) | d;\n  const byte1 = (triple >> 16) & 0xff;\n  const byte2 = (triple >> 8) & 0xff;\n  const incomingChecksum = triple & 0xff;\n\n  checksum += byte1;\n  checksum += byte2;\n  output[outIdx++] = byte1;\n  output[outIdx++] = byte2;\n\n  checksum &= 0xff;\n  if (checksum !== incomingChecksum) {\n    throw new Error('Address checksum mismatch');\n  }\n\n  return output;\n}\n\nfunction maskForBits(bits: number): number {\n  return bits === 0 ? 0 : (1 << bits) - 1;\n}\n","import { getWebCrypto } from \"@thru/sdk/helpers\";\n\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n  if (a.length !== b.length) return false;\n\n  let different = 0;\n  for (let index = 0; index < a.length; index += 1) {\n    different |= a[index] ^ b[index];\n  }\n\n  return different === 0;\n}\n\nexport function compareBytes(a: Uint8Array, b: Uint8Array): number {\n  const len = Math.min(a.length, b.length);\n  for (let i = 0; i < len; i++) {\n    if (a[i] !== b[i]) return a[i] - b[i];\n  }\n  return a.length - b.length;\n}\n\nexport function uniqueAccounts(accounts: Uint8Array[]): Uint8Array[] {\n  const unique: Uint8Array[] = [];\n  for (const account of accounts) {\n    if (!unique.some((candidate) => bytesEqual(candidate, account))) {\n      unique.push(account);\n    }\n  }\n  return unique;\n}\n\nexport function bytesToHex(bytes: Uint8Array): string {\n  let output = \"\";\n  for (const byte of bytes) output += byte.toString(16).padStart(2, \"0\");\n  return output;\n}\n\nexport function readU32le(bytes: Uint8Array, offset: number): number {\n  return new DataView(\n    bytes.buffer,\n    bytes.byteOffset,\n    bytes.byteLength,\n  ).getUint32(offset, true);\n}\n\nexport async function sha256(bytes: Uint8Array): Promise<Uint8Array> {\n  const crypto = getWebCrypto();\n  const digestInput = new Uint8Array(bytes);\n  return new Uint8Array(await crypto.subtle.digest(\"SHA-256\", digestInput));\n}\n","// Generated by programs/bootstrap/generate-addresses.ts; do not edit.\nexport const EOA_PROGRAM_ID = \"taEOAD2uLK1SLzPgtabFLUAx22yDlBs9DE9nZFTOESIGRr\";\nexport const ROOT_MANAGER_PROGRAM_ADDRESS = \"taAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEB\";\nexport const MANAGER_PROGRAM_ADDRESS = \"taMGRmPoSTkUtF6UlmCIq58K8OYsnXshOMPdobxxHytqmu\";\nexport const UPLOADER_PROGRAM_ADDRESS = \"taUPLMH5QYOAT4ktwQeO7DXAEKtqBhYehalNGf5BJFQDYq\";\n// Test fixture only: upload explicitly before use; absent from genesis.\nexport const SYSTEM_TEST_PROGRAM_ADDRESS = \"tar71GzddPShylAkcr4uvCDLRtdovGCI64b54CYtqCWSVA\";\nexport const NOOP_PROGRAM_ADDRESS = \"taNOOPV4A7S3WTsirr149To2GoGZ9q8zllQaBrbekHfkJT\";\nexport const ABI_MANAGER_PROGRAM_ADDRESS = \"taABII8WXcPaPIt47cXjOBbyoBUGBDXznAMHorVMeok3mw\";\nexport const TOKEN_PROGRAM_ADDRESS = \"taTOKENKRgcl3vO0yVhftATDbXuhgWcfaaxv9xpEEdMdUE\";\nexport const MULTICALL_PROGRAM_ADDRESS = \"taMULTIrOL8WpIFr16C1ECsO60qAsuwmwJephZHDOTvSeP\";\nexport const COMPRESSION_PROGRAM_ADDRESS = \"taRB54_92jNbBdcmt2jus88F-xrOSne1GR9mmyOh4RidAK\";\nexport const PASSKEY_MANAGER_PROGRAM_ADDRESS = \"taPASSIvjIgz2kZ1CIIhvbT00XV9Ve5kZ2I9uDLanzIgbA\";\n","export interface WalletAccountContext {\n  readWriteAddresses: string[];\n  readOnlyAddresses: string[];\n  walletAccountIdx: number;\n  getAccountIndex: (pubkey: Uint8Array) => number;\n}\nexport interface AccountContext {\n  readWriteAddresses: string[];\n  readOnlyAddresses: string[];\n  accountAddresses: string[];\n  walletAccountIdx: number;\n  getAccountIndex: (pubkey: Uint8Array) => number;\n}\nimport { encodeAddress, decodeAddress } from '@thru/sdk/helpers';\nimport { bytesEqual, compareBytes, uniqueAccounts } from '../helpers/bytes';\nimport { PASSKEY_MANAGER_PROGRAM_ADDRESS } from '../../../../src/core-program-addresses';\n\n\ninterface WalletAccountContextParams {\n  walletAddress: string;\n  readWriteAccounts: Uint8Array[];\n  readOnlyAccounts: Uint8Array[];\n  programAddress?: string;\n}\n\nfunction buildDeferredAccountLists(params: WalletAccountContextParams) {\n  const programBytes = decodeAddress(params.programAddress ?? PASSKEY_MANAGER_PROGRAM_ADDRESS);\n  const walletBytes = decodeAddress(params.walletAddress);\n\n  const readWriteBytes = uniqueAccounts([walletBytes, ...params.readWriteAccounts])\n    .filter((addr) => !bytesEqual(addr, programBytes))\n    .sort(compareBytes);\n  const readOnlyBytes = uniqueAccounts(params.readOnlyAccounts)\n    .filter(\n      (addr) =>\n        !bytesEqual(addr, programBytes) &&\n        !readWriteBytes.some((candidate) => bytesEqual(candidate, addr))\n    )\n    .sort(compareBytes);\n\n  return { programBytes, walletBytes, readWriteBytes, readOnlyBytes };\n}\n\n/**\n * Build account indices for an instruction that a wallet will wrap and pay for.\n * The concrete fee payer is intentionally unknown here; index 0 is reserved for\n * it and index 1 for the wrapper program.\n */\nexport function buildWalletAccountContext(\n  params: WalletAccountContextParams\n): WalletAccountContext {\n  const { programBytes, walletBytes, readWriteBytes, readOnlyBytes } =\n    buildDeferredAccountLists(params);\n  const readWriteAddresses = readWriteBytes.map(encodeAddress);\n  const readOnlyAddresses = readOnlyBytes.map(encodeAddress);\n\n  const findIndex = (target: Uint8Array): number => {\n    if (bytesEqual(target, programBytes)) return 1;\n\n    const rwIndex = readWriteBytes.findIndex((candidate) => bytesEqual(candidate, target));\n    if (rwIndex >= 0) return rwIndex + 2;\n\n    const roIndex = readOnlyBytes.findIndex((candidate) => bytesEqual(candidate, target));\n    if (roIndex >= 0) return roIndex + 2 + readWriteBytes.length;\n\n    return -1;\n  };\n\n  const walletAccountIdx = findIndex(walletBytes);\n  if (walletAccountIdx < 2) {\n    throw new Error('Wallet account must be a non-program account');\n  }\n\n  return {\n    readWriteAddresses,\n    readOnlyAddresses,\n    walletAccountIdx,\n    getAccountIndex: (pubkey: Uint8Array) => {\n      const idx = findIndex(pubkey);\n      if (idx < 0) {\n        throw new Error('Account not found in transaction accounts');\n      }\n      return idx;\n    },\n  };\n}\n\n/** Ensure the wallet-selected fee payer does not invalidate indices that were\n * encoded before that payer was known. */\nexport function assertWalletFeePayerCompatible(params: WalletAccountContextParams & {\n  feePayerAddress: string;\n}): void {\n  const feePayerBytes = decodeAddress(params.feePayerAddress);\n  const { programBytes, walletBytes, readWriteBytes, readOnlyBytes } =\n    buildDeferredAccountLists(params);\n  const conflicts = [programBytes, walletBytes, ...readWriteBytes, ...readOnlyBytes];\n  if (conflicts.some((account) => bytesEqual(account, feePayerBytes))) {\n    throw new Error('Wallet fee payer must not overlap instruction accounts');\n  }\n}\n\n/**\n * Build account context for passkey manager transactions.\n * Handles account deduplication, sorting, and index lookup.\n */\nexport function buildAccountContext(params: {\n  walletAddress: string;\n  readWriteAccounts: Uint8Array[];\n  readOnlyAccounts: Uint8Array[];\n  feePayerAddress: string;\n  programAddress?: string;\n}): AccountContext {\n  const feePayerBytes = decodeAddress(params.feePayerAddress);\n  const programBytes = decodeAddress(params.programAddress ?? PASSKEY_MANAGER_PROGRAM_ADDRESS);\n  const walletBytes = decodeAddress(params.walletAddress);\n\n  const readWriteBytes = uniqueAccounts([walletBytes, ...params.readWriteAccounts])\n    .filter(\n      (addr) => !bytesEqual(addr, feePayerBytes) && !bytesEqual(addr, programBytes)\n    )\n    .sort(compareBytes);\n\n  const readOnlyBytes = uniqueAccounts(params.readOnlyAccounts)\n    .filter(\n      (addr) =>\n        !bytesEqual(addr, feePayerBytes) &&\n        !bytesEqual(addr, programBytes) &&\n        !readWriteBytes.some((candidate) => bytesEqual(candidate, addr))\n    )\n    .sort(compareBytes);\n\n  const readWriteAddresses = readWriteBytes.map(encodeAddress);\n  const readOnlyAddresses = readOnlyBytes.map(encodeAddress);\n\n  const accountAddresses = [\n    encodeAddress(feePayerBytes),\n    encodeAddress(programBytes),\n    ...readWriteAddresses,\n    ...readOnlyAddresses,\n  ];\n\n  const findIndex = (target: Uint8Array): number => {\n    if (bytesEqual(target, feePayerBytes)) return 0;\n    if (bytesEqual(target, programBytes)) return 1;\n\n    const rwIndex = readWriteBytes.findIndex((candidate) => bytesEqual(candidate, target));\n    if (rwIndex >= 0) return rwIndex + 2;\n\n    const roIndex = readOnlyBytes.findIndex((candidate) => bytesEqual(candidate, target));\n    if (roIndex >= 0) return roIndex + 2 + readWriteBytes.length;\n\n    return -1;\n  };\n\n  const walletAccountIdx = findIndex(walletBytes);\n  if (walletAccountIdx < 2) {\n    throw new Error('Wallet account must be a non-fee-payer account');\n  }\n\n  return {\n    readWriteAddresses,\n    readOnlyAddresses,\n    accountAddresses,\n    walletAccountIdx,\n    getAccountIndex: (pubkey: Uint8Array) => {\n      const idx = findIndex(pubkey);\n      if (idx < 0) {\n        throw new Error('Account not found in transaction accounts');\n      }\n      return idx;\n    },\n  };\n}\n\n/**\n * Build read-write accounts list for passkey manager transactions (simpler wallet-only version).\n */\nexport function buildPasskeyReadWriteAccounts(\n  userAccounts: Uint8Array[],\n  feePayerPublicKey: Uint8Array,\n  programAddress: Uint8Array\n): {\n  readWriteAddresses: string[];\n  findAccountIndex: (target: Uint8Array) => number;\n} {\n  const sortedUserAccounts = uniqueAccounts(userAccounts).sort(compareBytes);\n  const filteredUserAccounts = sortedUserAccounts.filter(\n    (addr) => !bytesEqual(addr, feePayerPublicKey) && !bytesEqual(addr, programAddress)\n  );\n  const readWriteAddresses = filteredUserAccounts.map((addr) => encodeAddress(addr));\n\n  const findAccountIndex = (target: Uint8Array): number => {\n    if (bytesEqual(target, feePayerPublicKey)) return 0;\n    if (bytesEqual(target, programAddress)) return 1;\n    for (let i = 0; i < filteredUserAccounts.length; i++) {\n      if (bytesEqual(filteredUserAccounts[i], target)) return i + 2;\n    }\n    return -1;\n  };\n\n  return { readWriteAddresses, findAccountIndex };\n}\n"]}