@thru/sdk 0.2.27 → 0.2.29

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.
@@ -1 +1 @@
1
- {"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/abi/imports/onchainFetcher.ts","../../src/abi/imports/resolveImports.ts"],"names":["result","a","b","c","d","triple","temp1","temp2","value"],"mappings":"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","file":"index.js","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;\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;\nconst dynamicImport = new Function(\"specifier\", \"return import(specifier)\") as (\n specifier: string,\n) => Promise<unknown>;\nconst resolveModuleUrl = new Function(\"path\", \"base\", \"return new URL(path, base).href\") as (\n path: string,\n base: string,\n) => string;\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 return dynamicImport(specifier);\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 mainnet: \"https://rpc.thru.network\",\n testnet: \"https://rpc-testnet.thru.network\",\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","/**\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 {\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\nconst DEFAULT_ABI_MANAGER_PROGRAM_ID =\n \"taWqAAOSe9pavaaMpkc9VbSLBUMbuW6Mk59sZlSbcNHsJA\";\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"]}
1
+ {"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/abi/imports/onchainFetcher.ts","../../src/abi/imports/resolveImports.ts"],"names":["result","a","b","c","d","triple","temp1","temp2","value"],"mappings":"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","file":"index.js","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 mainnet: \"https://rpc.thru.network\",\n testnet: \"https://rpc-testnet.thru.network\",\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","/**\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 {\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\nconst DEFAULT_ABI_MANAGER_PROGRAM_ID =\n \"taWqAAOSe9pavaaMpkc9VbSLBUMbuW6Mk59sZlSbcNHsJA\";\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"]}