{"version":3,"sources":["../../src/abi/utils/bytes.ts","../../src/abi/utils/runtime.ts","../../src/abi/wasmBridge.ts","../../src/abi/nestedInstructionData.ts","../../src/abi/imports/types.ts","../../src/core-program-addresses.ts","../../src/abi/imports/onchainFetcher.ts","../../src/abi/imports/resolveImports.ts"],"names":["result","a","b","c","d","triple","temp1","temp2","yaml","value"],"mappings":"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","file":"index.cjs","sourcesContent":["export function bytesToHex(bytes: Uint8Array): string {\n  return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nexport function alignUp(offset: number, alignment: number): number {\n  return (offset + alignment - 1) & ~(alignment - 1);\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n  let normalized = hex.trim().replace(/[\\s_]/g, \"\");\n  if (normalized.startsWith(\"0x\") || normalized.startsWith(\"0X\")) {\n    normalized = normalized.slice(2);\n  }\n  if (normalized.length === 0) return new Uint8Array();\n  if (normalized.length % 2 !== 0) {\n    throw new Error(\"Hex input must contain an even number of characters\");\n  }\n  const bytes = new Uint8Array(normalized.length / 2);\n  for (let i = 0; i < normalized.length; i += 2) {\n    const byte = Number.parseInt(normalized.slice(i, i + 2), 16);\n    if (Number.isNaN(byte)) {\n      throw new Error(\"Hex input contains non-hexadecimal characters\");\n    }\n    bytes[i / 2] = byte;\n  }\n  return bytes;\n}\n\nexport function toUint8Array(\n  input: Uint8Array | ArrayBuffer | ArrayBufferView | number[],\n): Uint8Array {\n  if (input instanceof Uint8Array) {\n    return input;\n  }\n  if (ArrayBuffer.isView(input)) {\n    return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n  }\n  if (input instanceof ArrayBuffer) {\n    return new Uint8Array(input);\n  }\n  if (Array.isArray(input)) {\n    return Uint8Array.from(input);\n  }\n  throw new TypeError(\"Unsupported buffer input\");\n}\n","export function isNodeRuntime(): boolean {\n  return typeof process !== \"undefined\" && Boolean(process.versions?.node);\n}\n","import { hexToBytes, toUint8Array } from \"./utils/bytes\";\nimport { isNodeRuntime } from \"./utils/runtime\";\nimport type { FormattedReflection } from \"./types\";\n\ntype WasmReflectBindings = {\n  reflect: (abi: string, typeName: string, buffer: Uint8Array) => string;\n  reflect_instruction: (abi: string, buffer: Uint8Array) => string;\n  reflect_account: (abi: string, buffer: Uint8Array) => string;\n  reflect_event: (abi: string, buffer: Uint8Array) => string;\n  build_layout_ir: (abi: string) => string;\n  format_reflection: (raw: string) => string;\n  format_reflection_with_options: (raw: string, options: string) => string;\n  /* Manifest-based functions for ABIs with imports */\n  reflect_with_manifest: (manifest: string, rootPackage: string, typeName: string, buffer: Uint8Array) => string;\n  reflect_instruction_with_manifest: (manifest: string, rootPackage: string, buffer: Uint8Array) => string;\n  reflect_account_with_manifest: (manifest: string, rootPackage: string, buffer: Uint8Array) => string;\n  reflect_event_with_manifest: (manifest: string, rootPackage: string, buffer: Uint8Array) => string;\n  build_layout_ir_with_manifest: (manifest: string, rootPackage: string) => string;\n  get_manifest_packages: (manifest: string) => string;\n  validate_manifest: (manifest: string) => string;\n  wasm_start?: () => void;\n};\n\ntype JsonValue = unknown;\ndeclare const require: ((specifier: string) => unknown) | undefined;\ndeclare const HermesInternal: unknown;\n\nexport interface WasmConfig {\n  /**\n   * Public URL for the generated wasm-pack JS glue module.\n   *\n   * Browser apps that bundle @thru/sdk can use this to load ABI\n   * reflection from a stable static asset path instead of relying on a\n   * package-relative dynamic import.\n   */\n  moduleUrl?: string;\n\n  /**\n   * Public URL for abi_reflect_wasm_bg.wasm.\n   */\n  wasmUrl: string;\n}\n\n// Configuration for WASM loading\nlet configuredWasmUrl: string | undefined;\nlet configuredWasmModuleUrl: string | undefined;\n\n/**\n * Configure the URL from which to load the WASM file.\n * Must be called before any reflection functions are used.\n *\n * This is useful for environments like Next.js where bundler-based WASM loading\n * doesn't work. Instead, copy the WASM file to your public directory and call:\n *\n * @example\n * ```ts\n * import { configureWasm } from \"@thru/sdk/abi\";\n * configureWasm(\"/wasm/abi_reflect_wasm_bg.wasm\");\n * ```\n *\n * Browser apps that serve both the generated wasm-pack JS glue and the\n * `.wasm` binary from public assets should pass both URLs:\n *\n * @example\n * ```ts\n * configureWasm({\n *   moduleUrl: \"/wasm/abi/web/abi_reflect_wasm.js\",\n *   wasmUrl: \"/wasm/abi/web/abi_reflect_wasm_bg.wasm\",\n * });\n * ```\n *\n * Passing a string preserves the legacy behavior and only configures\n * the `.wasm` binary URL.\n *\n * @param config - WASM URL or full browser asset configuration.\n */\nexport function configureWasm(config: string | WasmConfig): void {\n  if (cachedBindings) {\n    console.warn(\"configureWasm called after WASM was already loaded. Configuration ignored.\");\n    return;\n  }\n  if (typeof config === \"string\") {\n    configuredWasmUrl = config;\n    configuredWasmModuleUrl = undefined;\n    return;\n  }\n  configuredWasmUrl = config.wasmUrl;\n  configuredWasmModuleUrl = config.moduleUrl;\n}\n\nconst wasmDir = resolveWasmDir();\nlet bindingsPromise: Promise<WasmReflectBindings> | undefined;\nlet cachedBindings: WasmReflectBindings | undefined;\nlet dynamicImport: ((specifier: string) => Promise<unknown>) | undefined;\n\nfunction isObjectLike(value: unknown): value is Record<string, unknown> {\n  return (typeof value === \"object\" && value !== null) || typeof value === \"function\";\n}\n\nfunction hasWasmBinding(value: unknown, name: keyof WasmReflectBindings): boolean {\n  return isObjectLike(value) && typeof value[name] === \"function\";\n}\n\nfunction isWasmReflectBindings(value: unknown): value is WasmReflectBindings {\n  return (\n    hasWasmBinding(value, \"reflect\") &&\n    hasWasmBinding(value, \"reflect_instruction\") &&\n    hasWasmBinding(value, \"format_reflection\")\n  );\n}\n\nfunction describeImportedBindings(value: unknown): string {\n  if (value === null) return \"null\";\n  if (Array.isArray(value)) return \"array\";\n  return typeof value;\n}\n\nfunction unwrapImportedBindings(imported: unknown, relativePath: string): WasmReflectBindings {\n  const defaultExport = isObjectLike(imported) ? imported.default : undefined;\n  const candidate = defaultExport ?? imported;\n\n  if (isWasmReflectBindings(candidate)) {\n    return candidate;\n  }\n  if (isWasmReflectBindings(imported)) {\n    return imported;\n  }\n\n  throw new Error(\n    `WASM bindings import did not return a module object for ${relativePath} (received ${describeImportedBindings(imported)})`\n  );\n}\n\nfunction resolveImportMetaUrl(): string {\n  const url = import.meta.url as string | null | undefined;\n  if (typeof url === \"string\" && url.length > 0) return url;\n\n  const location =\n    typeof globalThis.location === \"object\" && globalThis.location\n      ? globalThis.location\n      : undefined;\n  if (typeof location?.href === \"string\" && location.href.length > 0) {\n    return location.href;\n  }\n\n  return \"file:///\";\n}\n\nasync function importModule(specifier: string): Promise<unknown> {\n  if (isHermesRuntime()) {\n    throw new Error(\n      \"WASM ABI reflection is not available in React Native/Hermes. Use known-payload decoding or a reflection API fallback.\"\n    );\n  }\n\n  dynamicImport ??= new Function(\n    \"specifier\",\n    \"return import(specifier)\"\n  ) as (specifier: string) => Promise<unknown>;\n\n  return dynamicImport(specifier);\n}\n\nfunction isHermesRuntime(): boolean {\n  return typeof HermesInternal !== \"undefined\";\n}\n\nfunction resolveModuleUrl(path: string, base: string): string {\n  return new URL(path, base).href;\n}\n\nfunction resolveRuntimeUrl(url: string): string {\n  if (/^(?:[a-zA-Z][a-zA-Z\\d+.-]*:|\\/\\/)/.test(url)) {\n    return url;\n  }\n\n  const location =\n    typeof globalThis.location === \"object\" && globalThis.location\n      ? globalThis.location\n      : undefined;\n  const base =\n    typeof location?.href === \"string\" && location.href.length > 0\n      ? location.href\n      : resolveImportMetaUrl();\n\n  return resolveModuleUrl(url, base);\n}\n\nfunction requireModule(moduleUrl: string): unknown | undefined {\n  try {\n    const requireFn = typeof require === \"function\" ? require : undefined;\n    if (!requireFn) return undefined;\n\n    const specifier = moduleUrl.startsWith(\"file:\")\n      ? decodeURIComponent(new URL(moduleUrl).pathname)\n      : moduleUrl;\n    return requireFn(specifier);\n  } catch {\n    return undefined;\n  }\n}\n\nfunction resolveWasmDir(): string {\n  const url = resolveImportMetaUrl();\n  if (url.includes(\"/src/abi/\")) return \"../../wasm/abi\";\n  if (url.includes(\"/dist/\")) return \"./wasm\";\n  return \"./wasm\";\n}\n\nfunction resolveConfiguredWasmModuleUrl(wasmUrl: string): string {\n  const base =\n    typeof globalThis.location === \"object\" &&\n    typeof globalThis.location?.href === \"string\"\n      ? globalThis.location.href\n      : resolveImportMetaUrl();\n  const resolved = new URL(wasmUrl, base);\n  if (resolved.pathname.endsWith(\"_bg.wasm\")) {\n    resolved.pathname = resolved.pathname.slice(0, -\"_bg.wasm\".length) + \".js\";\n  } else if (resolved.pathname.endsWith(\".wasm\")) {\n    resolved.pathname = resolved.pathname.slice(0, -\".wasm\".length) + \".js\";\n  } else {\n    throw new Error(\n      `Configured WASM URL must end in .wasm (received ${wasmUrl})`,\n    );\n  }\n  resolved.search = \"\";\n  resolved.hash = \"\";\n  return resolved.href;\n}\n\nasync function loadBindings(): Promise<WasmReflectBindings> {\n  if (cachedBindings) {\n    return cachedBindings;\n  }\n  if (!bindingsPromise) {\n    let loader: Promise<WasmReflectBindings>;\n    if (isNodeRuntime()) {\n      loader = loadNodeBindings();\n    } else if (configuredWasmUrl) {\n      loader = loadWebBindings(configuredWasmUrl, configuredWasmModuleUrl);\n    } else {\n      loader = loadBundlerBindings();\n    }\n    bindingsPromise = loader.then(\n      (bindings) => {\n        cachedBindings = bindings;\n        return bindings;\n      },\n      (err) => {\n        bindingsPromise = undefined;\n        throw err;\n      }\n    );\n  }\n  return bindingsPromise;\n}\n\nasync function loadWebBindings(\n  wasmUrl: string,\n  moduleUrlOverride?: string,\n): Promise<WasmReflectBindings> {\n  const moduleUrl = moduleUrlOverride\n    ? resolveRuntimeUrl(moduleUrlOverride)\n    : resolveConfiguredWasmModuleUrl(wasmUrl);\n  const imported = await importModule(moduleUrl);\n  const mod = unwrapImportedBindings(imported, moduleUrl);\n  const initializer = isObjectLike(imported) ? imported.default : undefined;\n  if (typeof initializer !== \"function\") {\n    throw new Error(`WASM web module is missing default initializer for ${moduleUrl}`);\n  }\n\n  // Initialize with the configured WASM URL\n  await initializer({ module_or_path: resolveRuntimeUrl(wasmUrl) });\n\n  return mod;\n}\n\nasync function loadBundlerBindings(): Promise<WasmReflectBindings> {\n  const mod = await importBindings(\"bundler/abi_reflect_wasm.js\");\n  return mod;\n}\n\nasync function loadNodeBindings(): Promise<WasmReflectBindings> {\n  const relativePath = \"node/abi_reflect_wasm.js\";\n  const moduleUrl = resolveModuleUrl(`${wasmDir}/${relativePath}`, resolveImportMetaUrl());\n  const imported = requireModule(moduleUrl) ?? (await importModule(moduleUrl));\n  const mod = unwrapImportedBindings(imported, relativePath);\n  if (typeof mod.wasm_start === \"function\") {\n    mod.wasm_start();\n  }\n  return mod;\n}\n\nasync function importBindings(relativePath: string): Promise<WasmReflectBindings> {\n  const moduleUrl = resolveModuleUrl(`${wasmDir}/${relativePath}`, resolveImportMetaUrl());\n  const imported = await importModule(moduleUrl);\n  return unwrapImportedBindings(imported, relativePath);\n}\n\nasync function callReflect(\n  abiYaml: string,\n  typeName: string,\n  buffer: Uint8Array,\n): Promise<JsonValue> {\n  const bindings = await loadBindings();\n  const result = bindings.reflect(abiYaml, typeName, buffer);\n  return JSON.parse(result);\n}\n\nasync function callLayoutIr(abiYaml: string): Promise<JsonValue> {\n  const bindings = await loadBindings();\n  const result = bindings.build_layout_ir(abiYaml);\n  return JSON.parse(result);\n}\n\nasync function callReflectInstruction(\n  abiYaml: string,\n  buffer: Uint8Array,\n): Promise<JsonValue> {\n  const bindings = await loadBindings();\n  const result = bindings.reflect_instruction(abiYaml, buffer);\n  return JSON.parse(result);\n}\n\nasync function callReflectAccount(\n  abiYaml: string,\n  buffer: Uint8Array,\n): Promise<JsonValue> {\n  const bindings = await loadBindings();\n  const result = bindings.reflect_account(abiYaml, buffer);\n  return JSON.parse(result);\n}\n\nasync function callReflectEvent(\n  abiYaml: string,\n  buffer: Uint8Array,\n): Promise<JsonValue> {\n  const bindings = await loadBindings();\n  const result = bindings.reflect_event(abiYaml, buffer);\n  return JSON.parse(result);\n}\n\nexport type BinaryLike = Uint8Array | ArrayBuffer | ArrayBufferView | number[];\n\nexport async function reflect(\n  abiYaml: string,\n  typeName: string,\n  payload: {type: 'binary', value: BinaryLike} | {type: 'hex', value: string },\n): Promise<JsonValue> {\n  if (payload.type === 'binary') {\n    return callReflect(abiYaml, typeName, toUint8Array(payload.value));\n  }\n  if (payload.type === 'hex') {\n    return callReflect(abiYaml, typeName, hexToBytes(payload.value));\n  }\n  throw new Error(`Invalid payload type`);\n}\n\nexport async function buildLayoutIr(abiYaml: string): Promise<JsonValue> {\n  return callLayoutIr(abiYaml);\n}\n\nexport type ReflectRootPayload = {type: 'binary', value: BinaryLike} | {type: 'hex', value: string };\n\nexport async function reflectInstruction(\n  abiYaml: string,\n  payload: ReflectRootPayload,\n): Promise<JsonValue> {\n  if (payload.type === 'binary') {\n    return callReflectInstruction(abiYaml, toUint8Array(payload.value));\n  }\n  if (payload.type === 'hex') {\n    return callReflectInstruction(abiYaml, hexToBytes(payload.value));\n  }\n  throw new Error(`Invalid payload type`);\n}\n\nexport async function reflectAccount(\n  abiYaml: string,\n  payload: ReflectRootPayload,\n): Promise<JsonValue> {\n  if (payload.type === 'binary') {\n    return callReflectAccount(abiYaml, toUint8Array(payload.value));\n  }\n  if (payload.type === 'hex') {\n    return callReflectAccount(abiYaml, hexToBytes(payload.value));\n  }\n  throw new Error(`Invalid payload type`);\n}\n\nexport async function reflectEvent(\n  abiYaml: string,\n  payload: ReflectRootPayload,\n): Promise<JsonValue> {\n  if (payload.type === 'binary') {\n    return callReflectEvent(abiYaml, toUint8Array(payload.value));\n  }\n  if (payload.type === 'hex') {\n    return callReflectEvent(abiYaml, hexToBytes(payload.value));\n  }\n  throw new Error(`Invalid payload type`);\n}\n\nexport async function ensureWasmLoaded(): Promise<void> {\n  await loadBindings();\n}\n\nfunction requireBindings(): WasmReflectBindings {\n  if (cachedBindings) {\n    return cachedBindings;\n  }\n  throw new Error(\"WASM bindings are not loaded. Call ensureWasmLoaded() first.\");\n}\n\nexport interface FormatOptions {\n  includeByteOffsets?: boolean;\n}\n\nexport function formatReflection(raw: JsonValue, options?: FormatOptions): FormattedReflection {\n  const bindings = requireBindings();\n  const serialized = JSON.stringify(raw);\n\n  if (options && Object.keys(options).length > 0) {\n    const optionsJson = JSON.stringify(options);\n    const result = bindings.format_reflection_with_options(serialized, optionsJson);\n    return JSON.parse(result) as FormattedReflection;\n  }\n\n  const result = bindings.format_reflection(serialized);\n  return JSON.parse(result) as FormattedReflection;\n}\n\n/* ============================================================================\n   Manifest-based Functions\n\n   These functions support ABIs with imports by accepting a pre-resolved manifest\n   (a map of package names to their ABI YAML content).\n   ============================================================================ */\n\nexport type Manifest = Record<string, string>;\n\nasync function callReflectWithManifest(\n  manifest: Manifest,\n  rootPackage: string,\n  typeName: string,\n  buffer: Uint8Array,\n): Promise<JsonValue> {\n  const bindings = await loadBindings();\n  const manifestJson = JSON.stringify(manifest);\n  const result = bindings.reflect_with_manifest(manifestJson, rootPackage, typeName, buffer);\n  return JSON.parse(result);\n}\n\nasync function callReflectInstructionWithManifest(\n  manifest: Manifest,\n  rootPackage: string,\n  buffer: Uint8Array,\n): Promise<JsonValue> {\n  const bindings = await loadBindings();\n  const manifestJson = JSON.stringify(manifest);\n  const result = bindings.reflect_instruction_with_manifest(manifestJson, rootPackage, buffer);\n  return JSON.parse(result);\n}\n\nasync function callReflectAccountWithManifest(\n  manifest: Manifest,\n  rootPackage: string,\n  buffer: Uint8Array,\n): Promise<JsonValue> {\n  const bindings = await loadBindings();\n  const manifestJson = JSON.stringify(manifest);\n  const result = bindings.reflect_account_with_manifest(manifestJson, rootPackage, buffer);\n  return JSON.parse(result);\n}\n\nasync function callReflectEventWithManifest(\n  manifest: Manifest,\n  rootPackage: string,\n  buffer: Uint8Array,\n): Promise<JsonValue> {\n  const bindings = await loadBindings();\n  const manifestJson = JSON.stringify(manifest);\n  const result = bindings.reflect_event_with_manifest(manifestJson, rootPackage, buffer);\n  return JSON.parse(result);\n}\n\n/**\n * Reflect a binary buffer using a pre-resolved manifest.\n *\n * @param manifest - Map of package names to ABI YAML content\n * @param rootPackage - The package containing the target type\n * @param typeName - The type name to parse\n * @param payload - Binary data to reflect\n */\nexport async function reflectWithManifest(\n  manifest: Manifest,\n  rootPackage: string,\n  typeName: string,\n  payload: ReflectRootPayload,\n): Promise<JsonValue> {\n  if (payload.type === 'binary') {\n    return callReflectWithManifest(manifest, rootPackage, typeName, toUint8Array(payload.value));\n  }\n  if (payload.type === 'hex') {\n    return callReflectWithManifest(manifest, rootPackage, typeName, hexToBytes(payload.value));\n  }\n  throw new Error(`Invalid payload type`);\n}\n\n/**\n * Reflect an instruction using a pre-resolved manifest.\n */\nexport async function reflectInstructionWithManifest(\n  manifest: Manifest,\n  rootPackage: string,\n  payload: ReflectRootPayload,\n): Promise<JsonValue> {\n  if (payload.type === 'binary') {\n    return callReflectInstructionWithManifest(manifest, rootPackage, toUint8Array(payload.value));\n  }\n  if (payload.type === 'hex') {\n    return callReflectInstructionWithManifest(manifest, rootPackage, hexToBytes(payload.value));\n  }\n  throw new Error(`Invalid payload type`);\n}\n\n/**\n * Reflect an account using a pre-resolved manifest.\n */\nexport async function reflectAccountWithManifest(\n  manifest: Manifest,\n  rootPackage: string,\n  payload: ReflectRootPayload,\n): Promise<JsonValue> {\n  if (payload.type === 'binary') {\n    return callReflectAccountWithManifest(manifest, rootPackage, toUint8Array(payload.value));\n  }\n  if (payload.type === 'hex') {\n    return callReflectAccountWithManifest(manifest, rootPackage, hexToBytes(payload.value));\n  }\n  throw new Error(`Invalid payload type`);\n}\n\n/**\n * Reflect an event using a pre-resolved manifest.\n */\nexport async function reflectEventWithManifest(\n  manifest: Manifest,\n  rootPackage: string,\n  payload: ReflectRootPayload,\n): Promise<JsonValue> {\n  if (payload.type === 'binary') {\n    return callReflectEventWithManifest(manifest, rootPackage, toUint8Array(payload.value));\n  }\n  if (payload.type === 'hex') {\n    return callReflectEventWithManifest(manifest, rootPackage, hexToBytes(payload.value));\n  }\n  throw new Error(`Invalid payload type`);\n}\n\n/**\n * Build layout IR using a pre-resolved manifest.\n */\nexport async function buildLayoutIrWithManifest(\n  manifest: Manifest,\n  rootPackage: string,\n): Promise<JsonValue> {\n  const bindings = await loadBindings();\n  const manifestJson = JSON.stringify(manifest);\n  const result = bindings.build_layout_ir_with_manifest(manifestJson, rootPackage);\n  return JSON.parse(result);\n}\n\n/**\n * Get the list of package names in a manifest.\n */\nexport async function getManifestPackages(manifest: Manifest): Promise<string[]> {\n  const bindings = await loadBindings();\n  const manifestJson = JSON.stringify(manifest);\n  const result = bindings.get_manifest_packages(manifestJson);\n  return JSON.parse(result);\n}\n\nexport interface ManifestPackageInfo {\n  name: string;\n  package: string;\n  version: number;\n  type_count: number;\n  has_root_types: boolean;\n}\n\n/**\n * Validate a manifest and return information about its contents.\n */\nexport async function validateManifest(manifest: Manifest): Promise<ManifestPackageInfo[]> {\n  const bindings = await loadBindings();\n  const manifestJson = JSON.stringify(manifest);\n  const result = bindings.validate_manifest(manifestJson);\n  return JSON.parse(result);\n}\n","import type { FormattedReflection } from \"./types\";\n\nexport const MAX_NESTED_INSTRUCTION_DEPTH = 15;\n\nexport interface NestedInstructionDecodeOptions {\n  maxDepth?: number;\n}\n\nexport type NestedInstructionDecoder = (\n  programAddress: string,\n  data: Uint8Array,\n) => FormattedReflection | null | undefined | Promise<FormattedReflection | null | undefined>;\n\ntype JsonObject = Record<string, unknown>;\n\nexport async function resolveNestedInstructionData(\n  reflection: FormattedReflection,\n  accountAddresses: readonly string[],\n  decoder: NestedInstructionDecoder,\n  options: NestedInstructionDecodeOptions = {},\n): Promise<FormattedReflection> {\n  await resolveValue(\n    reflection.value,\n    0,\n    accountAddresses,\n    decoder,\n    options.maxDepth ?? MAX_NESTED_INSTRUCTION_DEPTH,\n  );\n  return reflection;\n}\n\nasync function resolveValue(\n  value: unknown,\n  instructionDepth: number,\n  accountAddresses: readonly string[],\n  decoder: NestedInstructionDecoder,\n  maxDepth: number,\n): Promise<void> {\n  if (Array.isArray(value)) {\n    for (const item of value) {\n      await resolveValue(item, instructionDepth, accountAddresses, decoder, maxDepth);\n    }\n    return;\n  }\n\n  if (!isJsonObject(value)) return;\n\n  if (isInstructionDataValue(value)) {\n    await resolveInstructionDataValue(\n      value,\n      instructionDepth,\n      accountAddresses,\n      decoder,\n      maxDepth,\n    );\n    return;\n  }\n\n  for (const [key, child] of Object.entries(value)) {\n    if (key === \"decodedInstruction\") continue;\n    await resolveValue(child, instructionDepth, accountAddresses, decoder, maxDepth);\n  }\n}\n\nasync function resolveInstructionDataValue(\n  value: JsonObject,\n  instructionDepth: number,\n  accountAddresses: readonly string[],\n  decoder: NestedInstructionDecoder,\n  maxDepth: number,\n): Promise<void> {\n  delete value.decodeError;\n  delete value.decodedInstruction;\n  delete value.programAddress;\n\n  const programIndex = value.programIndex as number;\n  const dataHex = value.dataHex as string;\n\n  if (instructionDepth >= maxDepth) {\n    insertError(value, \"Nested instruction depth limit reached\");\n    return;\n  }\n\n  const programAddress = accountAddresses[programIndex];\n  if (!programAddress) {\n    insertError(value, `Invalid program index ${programIndex}`);\n    return;\n  }\n  value.programAddress = programAddress;\n\n  let data: Uint8Array;\n  try {\n    data = parseHexBytes(dataHex);\n  } catch (err) {\n    insertError(value, `Nested instruction decode failed: ${errorMessage(err)}`);\n    return;\n  }\n\n  try {\n    const decoded = await decoder(programAddress, data);\n    if (!decoded) {\n      insertError(value, `ABI unavailable for program ${programAddress}`);\n      return;\n    }\n\n    await resolveValue(\n      decoded.value,\n      instructionDepth + 1,\n      accountAddresses,\n      decoder,\n      maxDepth,\n    );\n    value.decodedInstruction = decoded;\n  } catch (err) {\n    insertError(value, `Nested instruction decode failed: ${errorMessage(err)}`);\n  }\n}\n\nfunction isInstructionDataValue(value: JsonObject): boolean {\n  return (\n    value._pendingReflection === true &&\n    Number.isSafeInteger(value.programIndex) &&\n    (value.programIndex as number) >= 0 &&\n    typeof value.dataHex === \"string\"\n  );\n}\n\nfunction insertError(value: JsonObject, message: string): void {\n  value.decodeError = message;\n}\n\nfunction parseHexBytes(value: string): Uint8Array {\n  const hex = value.startsWith(\"0x\") || value.startsWith(\"0X\")\n    ? value.slice(2)\n    : value;\n\n  if (hex.length % 2 !== 0) {\n    throw new Error(\"hex payload has an odd number of digits\");\n  }\n\n  const bytes = new Uint8Array(hex.length / 2);\n  for (let idx = 0; idx < bytes.length; idx += 1) {\n    const high = decodeHexNibble(hex.charCodeAt(idx * 2));\n    const low = decodeHexNibble(hex.charCodeAt(idx * 2 + 1));\n    if (high === undefined || low === undefined) {\n      throw new Error(`invalid hex payload at byte ${idx}`);\n    }\n    bytes[idx] = (high << 4) | low;\n  }\n  return bytes;\n}\n\nfunction decodeHexNibble(value: number): number | undefined {\n  if (value >= 0x30 && value <= 0x39) return value - 0x30;\n  if (value >= 0x61 && value <= 0x66) return value - 0x61 + 10;\n  if (value >= 0x41 && value <= 0x46) return value - 0x41 + 10;\n  return undefined;\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction errorMessage(err: unknown): string {\n  return err instanceof Error ? err.message : String(err);\n}\n","/**\n * Import Source Types\n *\n * These types mirror the Rust ImportSource enum and related types.\n */\n\n/* Target type for on-chain ABI imports */\nexport type OnchainTarget = \"program\" | \"abi-meta\" | \"abi\";\n\n/* Revision specifier for on-chain imports */\nexport type RevisionSpec =\n  | { type: \"exact\"; value: number }\n  | { type: \"minimum\"; value: number }\n  | { type: \"latest\" }\n  | { type: \"atSlot\"; slot: bigint };\n\n/* Import source specification */\nexport type ImportSource =\n  | { type: \"path\"; path: string }\n  | { type: \"git\"; url: string; ref: string; path: string }\n  | { type: \"http\"; url: string }\n  | {\n      type: \"onchain\";\n      address: string;\n      target: OnchainTarget;\n      network: string;\n      revision: RevisionSpec;\n    };\n\n/* Package identifier */\nexport interface PackageId {\n  packageName: string;\n  version: string;\n}\n\n/* Resolved package information */\nexport interface ResolvedPackage {\n  id: PackageId;\n  source: ImportSource;\n  abiYaml: string;\n  dependencies: PackageId[];\n  isRemote: boolean;\n}\n\n/* Resolution result */\nexport interface ResolutionResult {\n  root: ResolvedPackage;\n  allPackages: ResolvedPackage[];\n  manifest: Record<string, string>;\n}\n\n/* Resolution error */\nexport class ResolutionError extends Error {\n  constructor(\n    public code:\n      | \"CYCLIC_DEPENDENCY\"\n      | \"VERSION_CONFLICT\"\n      | \"FETCH_ERROR\"\n      | \"PARSE_ERROR\"\n      | \"NOT_FOUND\"\n      | \"UNSUPPORTED_IMPORT_TYPE\",\n    message: string,\n    public details?: unknown\n  ) {\n    super(message);\n    this.name = \"ResolutionError\";\n  }\n}\n\n/* ABI account header constants (matches Rust) */\nexport const ABI_ACCOUNT_HEADER_SIZE = 45;\nexport const ABI_STATE_OPEN = 0x00;\nexport const ABI_STATE_FINALIZED = 0x01;\n\n/* Parsed ABI account data */\nexport interface AbiAccountData {\n  abiMetaAccount: Uint8Array;\n  revision: bigint;\n  state: number;\n  content: string;\n}\n\n/* RPC endpoint configuration */\nexport interface RpcEndpoints {\n  [network: string]: string;\n}\n\n/* Default RPC endpoints */\nexport const DEFAULT_RPC_ENDPOINTS: RpcEndpoints = {\n  alphanet: \"https://rpc.alphanet.thru.org\",\n};\n\n/* ABI metadata parsed from YAML */\nexport interface AbiMetadata {\n  package: string;\n  name?: string;\n  \"abi-version\": number;\n  \"package-version\": string;\n  description: string;\n  imports?: ImportSourceYaml[];\n}\n\n/* Import source as it appears in YAML */\nexport type ImportSourceYaml =\n  | { type: \"path\"; path: string }\n  | { type: \"git\"; url: string; ref: string; path: string }\n  | { type: \"http\"; url: string }\n  | {\n      type: \"onchain\";\n      address: string;\n      target?: OnchainTarget;\n      network: string;\n      revision?: number | string;\n    };\n\n/* Parsed ABI file */\nexport interface AbiFile {\n  abi: AbiMetadata;\n  types: unknown[];\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","/**\n * On-chain ABI Fetcher\n *\n * Fetches ABI content from on-chain accounts.\n */\n\nimport type { AbiAccountData, RpcEndpoints, RevisionSpec, OnchainTarget } from \"./types\";\nimport { ABI_MANAGER_PROGRAM_ADDRESS as DEFAULT_ABI_MANAGER_PROGRAM_ID } from \"../../core-program-addresses\";\nimport {\n  ABI_ACCOUNT_HEADER_SIZE,\n  ABI_STATE_OPEN,\n  ABI_STATE_FINALIZED,\n  DEFAULT_RPC_ENDPOINTS,\n} from \"./types\";\n\n/**\n * Minimal interface for a Thru RPC client that can fetch raw accounts.\n * This is compatible with @thru/sdk client but doesn't require it.\n */\nexport interface ThruRpcClient {\n  query: {\n    getRawAccount: (request: {\n      address: { value: Uint8Array };\n      versionContext: Record<string, unknown>;\n    }) => Promise<{ rawData?: Uint8Array }>;\n  };\n}\n\n/* ABI account seed suffix (matches on-chain ABI manager) */\nconst ABI_ACCOUNT_SUFFIX = \"_abi_account\";\nconst ABI_ACCOUNT_SUFFIX_BYTES = new TextEncoder().encode(ABI_ACCOUNT_SUFFIX);\n\nconst ABI_META_HEADER_SIZE = 4;\nconst ABI_META_BODY_SIZE = 96;\nconst ABI_META_ACCOUNT_SIZE = ABI_META_HEADER_SIZE + ABI_META_BODY_SIZE;\n\nconst ABI_META_VERSION = 1;\nconst ABI_META_KIND_OFFICIAL = 0;\nconst ABI_META_KIND_EXTERNAL = 1;\n\nasync function sha256Bytes(data: Uint8Array): Promise<Uint8Array> {\n  const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data as BufferSource);\n  return new Uint8Array(hashBuffer);\n}\n\nfunction concatBytes(...chunks: Uint8Array[]): Uint8Array {\n  const total = chunks.reduce((sum, chunk) => sum + chunk.length, 0);\n  const out = new Uint8Array(total);\n  let offset = 0;\n  for (const chunk of chunks) {\n    out.set(chunk, offset);\n    offset += chunk.length;\n  }\n  return out;\n}\n\nfunction abiMetaBodyForProgram(program: Uint8Array): Uint8Array {\n  const body = new Uint8Array(ABI_META_BODY_SIZE);\n  body.set(program.slice(0, 32), 0);\n  return body;\n}\n\nasync function deriveAbiAccountSeed(kind: number, body: Uint8Array): Promise<Uint8Array> {\n  return sha256Bytes(concatBytes(new Uint8Array([kind]), body, ABI_ACCOUNT_SUFFIX_BYTES));\n}\n\nasync function createProgramDefinedAccountAddress(\n  owner: Uint8Array,\n  isEphemeral: boolean,\n  seed: Uint8Array\n): Promise<Uint8Array> {\n  const flag = new Uint8Array([isEphemeral ? 1 : 0]);\n  return sha256Bytes(concatBytes(owner, flag, seed));\n}\n\nasync function deriveAbiAccountAddress(\n  kind: number,\n  body: Uint8Array,\n  owner: Uint8Array,\n  isEphemeral: boolean\n): Promise<Uint8Array> {\n  const seed = await deriveAbiAccountSeed(kind, body);\n  return createProgramDefinedAccountAddress(owner, isEphemeral, seed);\n}\n\n/**\n * Derive the official ABI account address for a given program.\n *\n * This performs the same derivation as OnchainFetcher.fetch() with target=\"program\",\n * returning the raw 32-byte address of the ABI account.\n */\nexport async function deriveOfficialAbiAddress(\n  programAddress: string,\n  abiManagerProgramId: string = DEFAULT_ABI_MANAGER_PROGRAM_ID\n): Promise<Uint8Array> {\n  const programBytes = decodeAddress(programAddress);\n  const managerBytes = decodeAddress(abiManagerProgramId);\n  const body = abiMetaBodyForProgram(programBytes);\n  return deriveAbiAccountAddress(ABI_META_KIND_OFFICIAL, body, managerBytes, false);\n}\n\ntype AbiMetaAccount = {\n  version: number;\n  kind: number;\n  flags: number;\n  body: Uint8Array;\n};\n\nfunction parseAbiMetaAccount(data: Uint8Array): AbiMetaAccount {\n  if (data.length < ABI_META_ACCOUNT_SIZE) {\n    throw new Error(\n      `ABI meta account data too short: ${data.length} bytes, expected at least ${ABI_META_ACCOUNT_SIZE}`\n    );\n  }\n\n  const version = data[0];\n  const kind = data[1];\n  const flags = data[2] | (data[3] << 8);\n  const body = data.slice(ABI_META_HEADER_SIZE, ABI_META_HEADER_SIZE + ABI_META_BODY_SIZE);\n\n  if (version !== ABI_META_VERSION) {\n    throw new Error(`Unsupported ABI meta version: ${version}`);\n  }\n  if (kind !== ABI_META_KIND_OFFICIAL && kind !== ABI_META_KIND_EXTERNAL) {\n    throw new Error(`Unsupported ABI meta kind: ${kind}`);\n  }\n\n  return { version, kind, flags, body };\n}\n\n/**\n * Parse ABI account data from raw bytes.\n *\n * Account header layout (45 bytes):\n * - abi_meta_account: [u8; 32]\n * - revision: u64 (little-endian)\n * - state: u8 (0x00=OPEN, 0x01=FINALIZED)\n * - content_sz: u32 (little-endian)\n * - content: [u8; content_sz]\n */\nexport function parseAbiAccountData(data: Uint8Array): AbiAccountData {\n  if (data.length < ABI_ACCOUNT_HEADER_SIZE) {\n    throw new Error(\n      `ABI account data too short: ${data.length} bytes, expected at least ${ABI_ACCOUNT_HEADER_SIZE}`\n    );\n  }\n\n  const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n  const abiMetaAccount = data.slice(0, 32);\n  const revision = view.getBigUint64(32, true);\n  const state = data[40];\n  const contentSize = view.getUint32(41, true);\n\n  if (state !== ABI_STATE_OPEN && state !== ABI_STATE_FINALIZED) {\n    throw new Error(`Invalid ABI account state: ${state}`);\n  }\n\n  const expectedSize = ABI_ACCOUNT_HEADER_SIZE + contentSize;\n  if (data.length < expectedSize) {\n    throw new Error(\n      `ABI account data truncated: ${data.length} bytes, expected ${expectedSize}`\n    );\n  }\n\n  const contentBytes = data.slice(ABI_ACCOUNT_HEADER_SIZE, expectedSize);\n  const content = new TextDecoder().decode(contentBytes);\n\n  return {\n    abiMetaAccount,\n    revision,\n    state,\n    content,\n  };\n}\n\n/**\n * Check if a revision matches the specification.\n *\n * Note: `atSlot` skips this check entirely in `OnchainFetcher.fetch` — the\n * constraint there is \"whatever revision was active at this slot\", and the\n * RPC's version_context handles that selection server-side.\n */\nexport function revisionMatches(revision: bigint, spec: RevisionSpec): boolean {\n  switch (spec.type) {\n    case \"latest\":\n      return true;\n    case \"exact\":\n      return revision === BigInt(spec.value);\n    case \"minimum\":\n      return revision >= BigInt(spec.value);\n    case \"atSlot\":\n      return true;\n    default:\n      return false;\n  }\n}\n\n/**\n * Build the VersionContext oneof shape expected by getRawAccount for a given\n * RevisionSpec. `latest`/`exact`/`minimum` use `{ case: \"current\" }` because\n * they all target the live account; only `atSlot` selects a historical slot.\n */\nfunction versionContextForRevision(spec: RevisionSpec): Record<string, unknown> {\n  if (spec.type === \"atSlot\") {\n    return { version: { case: \"slot\", value: spec.slot } };\n  }\n  return { version: { case: \"current\", value: {} } };\n}\n\nexport interface OnchainFetcherConfig {\n  rpcEndpoints?: RpcEndpoints;\n  thruClient?: ThruRpcClient;\n  abiManagerProgramId?: string;\n  abiManagerIsEphemeral?: boolean;\n}\n\nexport interface FetchResult {\n  abiYaml: string;\n  revision: bigint;\n  isFinalized: boolean;\n}\n\n/**\n * Fetcher for on-chain ABI accounts.\n *\n * Supports fetching ABI from:\n * - Official ABI via program (target: \"program\")\n * - ABI via ABI meta account (target: \"abi-meta\")\n * - Direct ABI account (target: \"abi\")\n */\nexport class OnchainFetcher {\n  private rpcEndpoints: RpcEndpoints;\n  private thruClient?: ThruRpcClient;\n  private abiManagerProgramId: Uint8Array;\n  private abiManagerIsEphemeral: boolean;\n\n  constructor(config: OnchainFetcherConfig = {}) {\n    this.rpcEndpoints = { ...DEFAULT_RPC_ENDPOINTS, ...config.rpcEndpoints };\n    this.thruClient = config.thruClient;\n    const managerId = config.abiManagerProgramId ?? DEFAULT_ABI_MANAGER_PROGRAM_ID;\n    this.abiManagerProgramId = decodeAddress(managerId);\n    this.abiManagerIsEphemeral = config.abiManagerIsEphemeral ?? false;\n  }\n\n  /**\n   * Fetch ABI content from an on-chain account.\n   *\n   * The `revision` parameter controls both how the account is selected\n   * server-side (via version_context when `atSlot` is used) and whether the\n   * returned revision is validated against an expected value (`exact` /\n   * `minimum`). For `atSlot`, the returned `FetchResult.revision` reflects\n   * the revision that was active at that slot.\n   */\n  async fetch(\n    address: string,\n    target: OnchainTarget,\n    network: string,\n    revision: RevisionSpec\n  ): Promise<FetchResult> {\n    const addressBytes = this.parseAddress(address);\n    let abiAddress: Uint8Array;\n    if (target === \"program\") {\n      const body = abiMetaBodyForProgram(addressBytes);\n      abiAddress = await deriveAbiAccountAddress(\n        ABI_META_KIND_OFFICIAL,\n        body,\n        this.abiManagerProgramId,\n        this.abiManagerIsEphemeral\n      );\n    } else if (target === \"abi-meta\") {\n      const metaData = await this.fetchAccountData(addressBytes, network, revision);\n      const meta = parseAbiMetaAccount(metaData);\n      abiAddress = await deriveAbiAccountAddress(\n        meta.kind,\n        meta.body,\n        this.abiManagerProgramId,\n        this.abiManagerIsEphemeral\n      );\n    } else {\n      abiAddress = addressBytes;\n    }\n\n    const accountData = await this.fetchAccountData(abiAddress, network, revision);\n    const parsed = parseAbiAccountData(accountData);\n\n    if (!revisionMatches(parsed.revision, revision)) {\n      const revisionStr =\n        revision.type === \"exact\"\n          ? `exactly ${revision.value}`\n          : revision.type === \"minimum\"\n            ? `at least ${revision.value}`\n            : revision.type === \"atSlot\"\n              ? `active at slot ${revision.slot}`\n              : \"latest\";\n      throw new Error(\n        `ABI revision mismatch: got ${parsed.revision}, expected ${revisionStr}`\n      );\n    }\n\n    return {\n      abiYaml: parsed.content,\n      revision: parsed.revision,\n      isFinalized: parsed.state === ABI_STATE_FINALIZED,\n    };\n  }\n\n  /**\n   * Get the RPC endpoint for a network.\n   */\n  getRpcEndpoint(network: string): string {\n    const endpoint = this.rpcEndpoints[network];\n    if (!endpoint) {\n      throw new Error(\n        `Unknown network: ${network}. Configure rpcEndpoints for this network.`\n      );\n    }\n    return endpoint;\n  }\n\n  private parseAddress(address: string): Uint8Array {\n    return decodeAddress(address);\n  }\n\n  private async fetchAccountData(\n    address: Uint8Array,\n    network: string,\n    revision: RevisionSpec,\n  ): Promise<Uint8Array> {\n    if (this.thruClient) {\n      return this.fetchWithThruClient(address, revision);\n    }\n    if (revision.type === \"atSlot\") {\n      throw new Error(\n        \"Slot-aware ABI fetch requires a ThruClient; the HTTP/JSON-RPC fallback does not support historical slot queries\",\n      );\n    }\n    return this.fetchWithHttp(address, network);\n  }\n\n  private async fetchWithThruClient(\n    address: Uint8Array,\n    revision: RevisionSpec,\n  ): Promise<Uint8Array> {\n    if (!this.thruClient) {\n      throw new Error(\"ThruClient not configured\");\n    }\n\n    const response = await this.thruClient.query.getRawAccount({\n      address: { value: address },\n      versionContext: versionContextForRevision(revision),\n    });\n\n    if (!response.rawData) {\n      throw new Error(\"Account not found or has no data\");\n    }\n\n    return response.rawData;\n  }\n\n  private async fetchWithHttp(address: Uint8Array, network: string): Promise<Uint8Array> {\n    const endpoint = this.getRpcEndpoint(network);\n    const addressStr = encodeThruAddress(address);\n\n    /* Use HTTP/JSON-RPC fallback */\n    const response = await fetch(`${endpoint}/v1/accounts/${addressStr}:raw`, {\n      method: \"GET\",\n      headers: {\n        Accept: \"application/json\",\n      },\n    });\n\n    if (!response.ok) {\n      if (response.status === 404) {\n        throw new Error(`ABI account not found: ${addressStr}`);\n      }\n      throw new Error(`Failed to fetch account: ${response.status} ${response.statusText}`);\n    }\n\n    const json = await response.json();\n    if (!json.rawData) {\n      throw new Error(\"Account has no data\");\n    }\n\n    /* rawData is base64 encoded */\n    return base64Decode(json.rawData);\n  }\n}\n\nconst BASE64_URL_ALPHABET =\n  \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n\nfunction decodeAddress(address: string): Uint8Array {\n  if (address.startsWith(\"ta\") && address.length === 46) {\n    return decodeThruAddress(address);\n  }\n  throw new Error(`Invalid Thru address format: ${address} (expected 46-char ta-prefixed address)`);\n}\n\nfunction decodeThruAddress(address: string): Uint8Array {\n  if (address.length !== 46 || !address.startsWith(\"ta\")) {\n    throw new Error(`Invalid Thru address: ${address}`);\n  }\n\n  const invlut = new Int16Array(256);\n  invlut.fill(-1);\n  for (let i = 0; i < BASE64_URL_ALPHABET.length; i += 1) {\n    invlut[BASE64_URL_ALPHABET.charCodeAt(i)] = i;\n  }\n\n  let inIdx = 2;\n  let inSz = 40;\n  let outIdx = 0;\n  let checksum = 0;\n  const out = new Uint8Array(32);\n\n  while (inSz >= 4) {\n    const a = invlut[address.charCodeAt(inIdx + 0)];\n    const b = invlut[address.charCodeAt(inIdx + 1)];\n    const c = invlut[address.charCodeAt(inIdx + 2)];\n    const d = invlut[address.charCodeAt(inIdx + 3)];\n    if (a < 0 || b < 0 || c < 0 || d < 0) {\n      throw new Error(`Invalid Thru address character at ${inIdx}`);\n    }\n    const triple = (a << 18) | (b << 12) | (c << 6) | d;\n    const temp1 = (triple >> 16) & 0xff;\n    checksum += temp1;\n    out[outIdx++] = temp1;\n    const temp2 = (triple >> 8) & 0xff;\n    checksum += temp2;\n    out[outIdx++] = temp2;\n    const temp3 = triple & 0xff;\n    checksum += temp3;\n    out[outIdx++] = temp3;\n    inIdx += 4;\n    inSz -= 4;\n  }\n\n  const a = invlut[address.charCodeAt(inIdx + 0)];\n  const b = invlut[address.charCodeAt(inIdx + 1)];\n  const c = invlut[address.charCodeAt(inIdx + 2)];\n  const d = invlut[address.charCodeAt(inIdx + 3)];\n  if (a < 0 || b < 0 || c < 0 || d < 0) {\n    throw new Error(`Invalid Thru address character at ${inIdx}`);\n  }\n  const triple = (a << 18) | (b << 12) | (c << 6) | d;\n  const temp1 = (triple >> 16) & 0xff;\n  checksum += temp1;\n  out[outIdx++] = temp1;\n  const temp2 = (triple >> 8) & 0xff;\n  checksum += temp2;\n  out[outIdx++] = temp2;\n  const incomingChecksum = triple & 0xff;\n  if ((checksum & 0xff) !== incomingChecksum) {\n    throw new Error(\"Invalid Thru address checksum\");\n  }\n\n  return out;\n}\n\nfunction encodeThruAddress(bytes: Uint8Array): string {\n  if (bytes.length !== 32) {\n    throw new Error(`Expected 32 bytes, got ${bytes.length}`);\n  }\n\n  function maskForBits(bits: number): number {\n    return bits === 0 ? 0 : (1 << bits) - 1;\n  }\n\n  let output = \"ta\";\n  let checksum = 0;\n  let accumulator = 0;\n  let bitsCollected = 0;\n\n  for (let i = 0; i < 30; i++) {\n    const byte = bytes[i];\n    checksum += byte;\n    accumulator = (accumulator << 8) | byte;\n    bitsCollected += 8;\n    while (bitsCollected >= 6) {\n      const index = (accumulator >> (bitsCollected - 6)) & 0x3f;\n      output += 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;\n  bitsCollected += 8;\n\n  const last = bytes[31];\n  checksum += last;\n  accumulator = (accumulator << 8) | last;\n  bitsCollected += 8;\n\n  accumulator = (accumulator << 8) | (checksum & 0xff);\n  bitsCollected += 8;\n\n  while (bitsCollected >= 6) {\n    const index = (accumulator >> (bitsCollected - 6)) & 0x3f;\n    output += BASE64_URL_ALPHABET[index];\n    bitsCollected -= 6;\n    accumulator &= maskForBits(bitsCollected);\n  }\n\n  return output;\n}\n\nfunction base64Decode(str: string): Uint8Array {\n  const binaryStr = atob(str);\n  const bytes = new Uint8Array(binaryStr.length);\n  for (let i = 0; i < binaryStr.length; i++) {\n    bytes[i] = binaryStr.charCodeAt(i);\n  }\n  return bytes;\n}\n","/**\n * Import Resolver\n *\n * Resolves ABI imports and builds a manifest for WASM consumption.\n */\n\nimport * as yaml from \"yaml\";\nimport type {\n  ImportSource,\n  ImportSourceYaml,\n  PackageId,\n  ResolvedPackage,\n  ResolutionResult,\n  AbiMetadata,\n  AbiFile,\n  RpcEndpoints,\n  RevisionSpec,\n} from \"./types\";\nimport { ResolutionError, DEFAULT_RPC_ENDPOINTS } from \"./types\";\nimport { OnchainFetcher, type OnchainFetcherConfig } from \"./onchainFetcher\";\n\nexport interface ResolverConfig {\n  onchainFetcher?: OnchainFetcher;\n  rpcEndpoints?: RpcEndpoints;\n  maxDepth?: number;\n}\n\n/**\n * Resolve all imports for an ABI and return a manifest.\n *\n * The resolver only supports on-chain imports for browser environments.\n * For path imports, use the CLI `bundle` command.\n */\nexport async function resolveImports(\n  rootAbiYaml: string,\n  config: ResolverConfig = {}\n): Promise<ResolutionResult> {\n  const resolver = new ImportResolver(config);\n  return resolver.resolve(rootAbiYaml);\n}\n\n/**\n * Create a manifest from an ABI and its resolved imports.\n *\n * The manifest maps package names to ABI YAML content.\n */\nexport function createManifest(result: ResolutionResult): Record<string, string> {\n  return result.manifest;\n}\n\nclass ImportResolver {\n  private onchainFetcher: OnchainFetcher;\n  private maxDepth: number;\n  private visited: Map<string, ResolvedPackage>;\n  private inProgress: Set<string>;\n\n  constructor(config: ResolverConfig = {}) {\n    this.onchainFetcher =\n      config.onchainFetcher ??\n      new OnchainFetcher({\n        rpcEndpoints: { ...DEFAULT_RPC_ENDPOINTS, ...config.rpcEndpoints },\n      });\n    this.maxDepth = config.maxDepth ?? 10;\n    this.visited = new Map();\n    this.inProgress = new Set();\n  }\n\n  async resolve(rootAbiYaml: string): Promise<ResolutionResult> {\n    this.visited.clear();\n    this.inProgress.clear();\n\n    const rootPackage = await this.resolvePackage(rootAbiYaml, false, 0);\n    const allPackages = Array.from(this.visited.values());\n    const manifest: Record<string, string> = {};\n\n    for (const pkg of allPackages) {\n      manifest[pkg.id.packageName] = pkg.abiYaml;\n    }\n\n    return {\n      root: rootPackage,\n      allPackages,\n      manifest,\n    };\n  }\n\n  private async resolvePackage(\n    abiYaml: string,\n    isRemote: boolean,\n    depth: number\n  ): Promise<ResolvedPackage> {\n    if (depth > this.maxDepth) {\n      throw new ResolutionError(\n        \"CYCLIC_DEPENDENCY\",\n        `Maximum resolution depth (${this.maxDepth}) exceeded`\n      );\n    }\n\n    const abiFile = this.parseAbiYaml(abiYaml);\n    const packageId = this.extractPackageId(abiFile);\n    const canonicalKey = `${packageId.packageName}@${packageId.version}`;\n\n    /* Check for cycle */\n    if (this.inProgress.has(canonicalKey)) {\n      throw new ResolutionError(\n        \"CYCLIC_DEPENDENCY\",\n        `Cyclic dependency detected: ${canonicalKey}`\n      );\n    }\n\n    /* Check if already resolved (keyed by name@version to match inProgress) */\n    const existing = this.visited.get(canonicalKey);\n    if (existing) {\n      return existing;\n    }\n\n    /* Check for version conflict: same package name, different version */\n    for (const [key, pkg] of this.visited) {\n      if (pkg.id.packageName === packageId.packageName && pkg.id.version !== packageId.version) {\n        throw new ResolutionError(\n          \"VERSION_CONFLICT\",\n          `Version conflict for ${packageId.packageName}: ` +\n            `${pkg.id.version} vs ${packageId.version}`,\n          { existing: pkg.id, conflicting: packageId }\n        );\n      }\n    }\n\n    this.inProgress.add(canonicalKey);\n\n    const imports = abiFile.abi.imports ?? [];\n    const dependencies: PackageId[] = [];\n\n    for (const importYaml of imports) {\n      const importSource = this.normalizeImportSource(importYaml);\n\n      /* Enforce local import restriction */\n      if (isRemote && importSource.type === \"path\") {\n        throw new ResolutionError(\n          \"UNSUPPORTED_IMPORT_TYPE\",\n          `Remote package ${packageId.packageName} cannot import local path: ${importSource.path}`\n        );\n      }\n\n      /* Determine child remoteness from the import source type, not the parent.\n         Non-path imports (onchain, git, http) are always remote. */\n      const childIsRemote = importSource.type !== \"path\";\n      const depPackage = await this.resolveImport(importSource, childIsRemote, depth + 1);\n      dependencies.push(depPackage.id);\n    }\n\n    this.inProgress.delete(canonicalKey);\n\n    const resolvedPackage: ResolvedPackage = {\n      id: packageId,\n      source: { type: \"path\", path: \"<root>\" },\n      abiYaml,\n      dependencies,\n      isRemote,\n    };\n\n    this.visited.set(canonicalKey, resolvedPackage);\n    return resolvedPackage;\n  }\n\n  private async resolveImport(\n    source: ImportSource,\n    parentIsRemote: boolean,\n    depth: number\n  ): Promise<ResolvedPackage> {\n    switch (source.type) {\n      case \"path\":\n        throw new ResolutionError(\n          \"UNSUPPORTED_IMPORT_TYPE\",\n          `Path imports are not supported in browser. Use CLI 'bundle' command. Path: ${source.path}`\n        );\n\n      case \"git\":\n        throw new ResolutionError(\n          \"UNSUPPORTED_IMPORT_TYPE\",\n          `Git imports are not supported in browser. Use CLI 'bundle' command. URL: ${source.url}`\n        );\n\n      case \"http\":\n        throw new ResolutionError(\n          \"UNSUPPORTED_IMPORT_TYPE\",\n          `HTTP imports are not supported in browser. Use CLI 'bundle' command. URL: ${source.url}`\n        );\n\n      case \"onchain\":\n        return this.resolveOnchainImport(source, depth);\n\n      default:\n        throw new ResolutionError(\n          \"UNSUPPORTED_IMPORT_TYPE\",\n          `Unknown import type: ${(source as ImportSource).type}`\n        );\n    }\n  }\n\n  private async resolveOnchainImport(\n    source: Extract<ImportSource, { type: \"onchain\" }>,\n    depth: number\n  ): Promise<ResolvedPackage> {\n    const result = await this.onchainFetcher.fetch(\n      source.address,\n      source.target,\n      source.network,\n      source.revision\n    );\n\n    const resolved = await this.resolvePackage(result.abiYaml, true, depth);\n    resolved.source = source;\n    resolved.isRemote = true;\n\n    return resolved;\n  }\n\n  private parseAbiYaml(yamlContent: string): AbiFile {\n    try {\n      const parsed = yaml.parse(yamlContent);\n      if (!parsed || typeof parsed !== \"object\") {\n        throw new Error(\"Invalid ABI YAML: not an object\");\n      }\n      if (!parsed.abi || typeof parsed.abi !== \"object\") {\n        throw new Error(\"Invalid ABI YAML: missing 'abi' section\");\n      }\n      return parsed as AbiFile;\n    } catch (error) {\n      throw new ResolutionError(\n        \"PARSE_ERROR\",\n        `Failed to parse ABI YAML: ${error instanceof Error ? error.message : String(error)}`,\n        error\n      );\n    }\n  }\n\n  private extractPackageId(abiFile: AbiFile): PackageId {\n    const metadata = abiFile.abi;\n    if (!metadata.package) {\n      throw new ResolutionError(\"PARSE_ERROR\", \"ABI missing 'package' field\");\n    }\n    return {\n      packageName: metadata.package,\n      version: metadata[\"package-version\"] ?? \"0.0.0\",\n    };\n  }\n\n  private normalizeImportSource(source: ImportSourceYaml): ImportSource {\n    switch (source.type) {\n      case \"path\":\n        return { type: \"path\", path: source.path };\n\n      case \"git\":\n        return {\n          type: \"git\",\n          url: source.url,\n          ref: source.ref,\n          path: source.path,\n        };\n\n      case \"http\":\n        return { type: \"http\", url: source.url };\n\n      case \"onchain\": {\n        const revision = this.parseRevisionSpec(source.revision);\n        return {\n          type: \"onchain\",\n          address: source.address,\n          target: source.target ?? \"program\",\n          network: source.network,\n          revision,\n        };\n      }\n\n      default:\n        throw new ResolutionError(\n          \"UNSUPPORTED_IMPORT_TYPE\",\n          `Unknown import type: ${(source as ImportSourceYaml).type}`\n        );\n    }\n  }\n\n  private parseRevisionSpec(revision: number | string | undefined): RevisionSpec {\n    if (revision === undefined || revision === \"latest\") {\n      return { type: \"latest\" };\n    }\n    if (typeof revision === \"number\") {\n      return { type: \"exact\", value: revision };\n    }\n    if (typeof revision === \"string\") {\n      if (revision.startsWith(\">=\")) {\n        const value = parseInt(revision.slice(2), 10);\n        if (isNaN(value)) {\n          throw new Error(`Invalid minimum revision: ${revision}`);\n        }\n        return { type: \"minimum\", value };\n      }\n      const value = parseInt(revision, 10);\n      if (!isNaN(value)) {\n        return { type: \"exact\", value };\n      }\n    }\n    throw new Error(`Invalid revision specification: ${revision}`);\n  }\n}\n"]}