@vtx-labs/solana-explain 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/errors.ts","../../src/input/encoding.ts","../../src/rpc/http.ts","../../src/decode/known-programs.ts","../../src/decode/reader.ts","../../src/decode/programs/system.ts","../../src/decode/programs/spl-token.ts","../../src/decode/programs/token-2022.ts","../../src/decode/programs/ata.ts","../../src/decode/programs/memo.ts","../../src/decode/programs/compute-budget.ts","../../src/decode/programs/recognize.ts","../../src/decode/registry.ts","../../src/decode/message.ts","../../src/input/detect.ts","../../src/explain/token-meta.ts","../../src/acquire/normalize.ts","../../src/acquire/tx-error.ts","../../src/acquire/from-signature.ts","../../src/acquire/from-simulation.ts","../../src/decode/build-message.ts","../../src/render/format.ts","../../src/explain/diff.ts","../../src/explain/correlate.ts","../../src/explain/summarize.ts","../../src/explain.ts","../../src/render/ansi.ts","../../src/render/index.ts","../../src/cli/help.ts","../../src/cli/index.ts"],"names":["acc","bs58","s"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Error hierarchy for solana-explain.\n *\n * Every public async function rejects ONLY with a {@link SolanaExplainError}\n * subclass. Raw/underlying errors are always wrapped and preserved on `.cause`.\n */\n\nexport type ErrorCode =\n | 'INVALID_INPUT'\n | 'INVALID_SIGNATURE'\n | 'INVALID_ENCODING'\n | 'EMPTY_INPUT'\n | 'TX_NOT_FOUND'\n | 'RPC_HTTP'\n | 'RPC_JSON'\n | 'RPC_TIMEOUT'\n | 'ABORTED'\n | 'DECODE_FAILED'\n | 'SIMULATION_REJECTED'\n | 'UNSUPPORTED_TX_VERSION';\n\nexport interface SolanaExplainErrorOptions {\n cause?: unknown;\n /** Optional human hint surfaced by the CLI alongside the message. */\n hint?: string;\n}\n\n/** Base class. Never thrown directly by public functions — only its subclasses. */\nexport class SolanaExplainError extends Error {\n readonly code: ErrorCode;\n override readonly cause?: unknown;\n /** Optional, CLI-friendly remediation hint. */\n readonly hint?: string;\n\n constructor(code: ErrorCode, message: string, options: SolanaExplainErrorOptions = {}) {\n super(message);\n this.name = new.target.name;\n this.code = code;\n if (options.cause !== undefined) this.cause = options.cause;\n if (options.hint !== undefined) this.hint = options.hint;\n // Maintain prototype chain across transpile targets.\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Transport / JSON-RPC error (HTTP failure, malformed JSON, JSON-RPC error object, timeout). */\nexport class RpcError extends SolanaExplainError {}\n\n/** Malformed transaction bytes / wire message. */\nexport class DecodeError extends SolanaExplainError {}\n\n/**\n * Simulation produced a runtime error (the tx would fail). Still carries a\n * partial {@link import('./types').ExplainResult} on `.result` when available,\n * because the user usually wants to know *why* it failed.\n *\n * Note: a node *rejecting* the simulation outright (bad blockhash, etc.) is a\n * different condition and is also surfaced as a `SimulationError`, with code\n * `SIMULATION_REJECTED`.\n */\nexport class SimulationError extends SolanaExplainError {\n /** Partial result when the simulation ran but reverted. */\n readonly result?: unknown;\n /** Tail of the node's program logs, for diagnostics. */\n readonly logs?: readonly string[];\n\n constructor(\n code: ErrorCode,\n message: string,\n options: SolanaExplainErrorOptions & { result?: unknown; logs?: readonly string[] } = {},\n ) {\n super(code, message, options);\n if (options.result !== undefined) this.result = options.result;\n if (options.logs !== undefined) this.logs = options.logs;\n }\n}\n\n/** Bad signature / encoding / empty input. */\nexport class InputError extends SolanaExplainError {}\n\n/**\n * Wrap an unknown thrown value into a `SolanaExplainError` subclass, preserving\n * the original on `.cause`. Pass-through if it is already one of ours.\n */\nexport function wrapError(\n err: unknown,\n fallbackCode: ErrorCode,\n fallbackMessage: string,\n): SolanaExplainError {\n if (err instanceof SolanaExplainError) return err;\n if (isAbortError(err)) {\n return new RpcError('ABORTED', 'The operation was aborted.', { cause: err });\n }\n const detail = err instanceof Error ? err.message : String(err);\n return new SolanaExplainError(fallbackCode, `${fallbackMessage}: ${detail}`, { cause: err });\n}\n\n/** Detect a DOMException/AbortError-style cancellation from any runtime. */\nexport function isAbortError(err: unknown): boolean {\n return (\n typeof err === 'object' &&\n err !== null &&\n 'name' in err &&\n (err as { name?: unknown }).name === 'AbortError'\n );\n}\n","/**\n * Base58/base64 decode helpers + RPC URL scheme normalization.\n *\n * bs58 is our single hard runtime dependency — the de-facto Solana standard.\n */\n\nimport bs58 from 'bs58';\nimport { InputError } from '../errors.js';\n\n/** Decode base58 into bytes. Throws {@link InputError} on invalid alphabet. */\nexport function decodeBase58(input: string): Uint8Array {\n try {\n return bs58.decode(input);\n } catch (err) {\n throw new InputError('INVALID_ENCODING', 'Input is not valid base58.', { cause: err });\n }\n}\n\n/** Encode bytes to base58. */\nexport function encodeBase58(bytes: Uint8Array): string {\n return bs58.encode(bytes);\n}\n\n/** Try base58; return `null` instead of throwing. */\nexport function tryDecodeBase58(input: string): Uint8Array | null {\n try {\n const out = bs58.decode(input);\n return out.length > 0 ? out : null;\n } catch {\n return null;\n }\n}\n\nconst BASE64_RE = /^[A-Za-z0-9+/]+={0,2}$/;\n\n/** Decode base64 into bytes. Throws {@link InputError} on invalid input. */\nexport function decodeBase64(input: string): Uint8Array {\n const trimmed = input.trim();\n if (!BASE64_RE.test(trimmed) || trimmed.length % 4 !== 0) {\n throw new InputError('INVALID_ENCODING', 'Input is not valid base64.');\n }\n try {\n return new Uint8Array(Buffer.from(trimmed, 'base64'));\n } catch (err) {\n throw new InputError('INVALID_ENCODING', 'Input is not valid base64.', { cause: err });\n }\n}\n\n/** Try base64; return `null` instead of throwing. Validates round-trip to reject loose matches. */\nexport function tryDecodeBase64(input: string): Uint8Array | null {\n const trimmed = input.trim();\n if (trimmed.length === 0 || trimmed.length % 4 !== 0 || !BASE64_RE.test(trimmed)) return null;\n try {\n const buf = Buffer.from(trimmed, 'base64');\n if (buf.length === 0) return null;\n // Re-encode and compare to reject inputs Buffer silently truncates.\n if (buf.toString('base64') !== trimmed) return null;\n return new Uint8Array(buf);\n } catch {\n return null;\n }\n}\n\n/** Encode bytes as base64. */\nexport function encodeBase64(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString('base64');\n}\n\n/** Looks like base64 (contains `+`, `/`, or `=`, or only base64 alphabet)? */\nexport function looksLikeBase64(input: string): boolean {\n const trimmed = input.trim();\n if (trimmed.length === 0) return false;\n if (/[+/=]/.test(trimmed)) return true;\n return BASE64_RE.test(trimmed);\n}\n\n/** Looks like base58 (only base58 alphabet, no `0OIl`)? */\nexport function looksLikeBase58(input: string): boolean {\n const trimmed = input.trim();\n if (trimmed.length === 0) return false;\n return /^[1-9A-HJ-NP-Za-km-z]+$/.test(trimmed);\n}\n\n/**\n * Normalize an RPC URL: trim whitespace, prepend `https://` if scheme-less.\n * Throws {@link InputError} if clearly invalid.\n */\nexport function normalizeRpcUrl(url: string): string {\n let u = url.trim();\n if (u.length === 0) {\n throw new InputError('INVALID_INPUT', 'RPC URL is empty.');\n }\n if (!/^[a-zA-Z][a-zA-Z0-9+.-]*:\\/\\//.test(u)) {\n // Scheme-less — assume https.\n u = `https://${u}`;\n }\n try {\n const parsed = new URL(u);\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new InputError(\n 'INVALID_INPUT',\n `Unsupported RPC URL scheme \"${parsed.protocol}\". Use http(s).`,\n );\n }\n return parsed.toString();\n } catch (err) {\n if (err instanceof InputError) throw err;\n throw new InputError('INVALID_INPUT', `Invalid RPC URL: ${url}`, { cause: err });\n }\n}\n","/**\n * `createHttpRpc`: zero-dep JSON-RPC over the global `fetch` (Node 18+).\n *\n * - Per-call timeout via AbortController, composed with the caller's signal.\n * - Single jittered-backoff retry on 429/5xx.\n * - Strict JSON-RPC error mapping → RpcError.\n */\n\nimport { RpcError, isAbortError } from '../errors.js';\nimport { normalizeRpcUrl } from '../input/encoding.js';\nimport type {\n GetAccountsOpts,\n GetTransactionOpts,\n RawAccount,\n RawSimulateResponse,\n RawTransactionResponse,\n RpcClient,\n SimulateOpts,\n} from './types.js';\nimport type { Commitment } from '../types.js';\n\nexport interface HttpRpcOptions {\n /** Default per-call timeout in ms. Default 30_000. */\n timeoutMs?: number;\n /** Extra HTTP headers (e.g. API key). */\n headers?: Record<string, string>;\n /** Override fetch (for testing). Defaults to global fetch. */\n fetch?: typeof fetch;\n}\n\ninterface JsonRpcRequest {\n jsonrpc: '2.0';\n id: number;\n method: string;\n params: unknown[];\n}\n\ninterface JsonRpcError {\n code: number;\n message: string;\n data?: unknown;\n}\n\ninterface JsonRpcResponse<T> {\n jsonrpc: '2.0';\n id: number;\n result?: T;\n error?: JsonRpcError;\n}\n\nconst RETRY_STATUSES = new Set([429, 500, 502, 503, 504]);\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new RpcError('ABORTED', 'Aborted while backing off.'));\n return;\n }\n const t = setTimeout(resolve, ms);\n const onAbort = () => {\n clearTimeout(t);\n reject(new RpcError('ABORTED', 'Aborted while backing off.'));\n };\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n}\n\n/** Combine the caller's signal with a timeout signal into one. */\nfunction combineSignals(timeoutMs: number, external?: AbortSignal): {\n signal: AbortSignal;\n timedOut: () => boolean;\n cleanup: () => void;\n} {\n const controller = new AbortController();\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeoutMs);\n const onExternalAbort = () => controller.abort();\n if (external) {\n if (external.aborted) controller.abort();\n else external.addEventListener('abort', onExternalAbort, { once: true });\n }\n return {\n signal: controller.signal,\n timedOut: () => timedOut,\n cleanup: () => {\n clearTimeout(timer);\n external?.removeEventListener('abort', onExternalAbort);\n },\n };\n}\n\nexport function createHttpRpc(url: string, opts: HttpRpcOptions = {}): RpcClient {\n const endpoint = normalizeRpcUrl(url);\n const defaultTimeout = opts.timeoutMs ?? 30_000;\n const fetchImpl = opts.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== 'function') {\n throw new RpcError(\n 'RPC_HTTP',\n 'global fetch is not available; use Node 18+ or pass a fetch implementation.',\n );\n }\n let idCounter = 1;\n\n async function call<T>(\n method: string,\n params: unknown[],\n timeoutMs: number,\n externalSignal?: AbortSignal,\n ): Promise<T> {\n const body: JsonRpcRequest = { jsonrpc: '2.0', id: idCounter++, method, params };\n let attempt = 0;\n // 1 initial + 1 retry.\n for (;;) {\n const { signal, timedOut, cleanup } = combineSignals(timeoutMs, externalSignal);\n let res: Response;\n try {\n res = await fetchImpl(endpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/json', ...opts.headers },\n body: JSON.stringify(body),\n signal,\n });\n } catch (err) {\n cleanup();\n if (timedOut()) {\n throw new RpcError('RPC_TIMEOUT', `RPC request \"${method}\" timed out after ${timeoutMs}ms.`, {\n cause: err,\n hint: 'Increase --timeout or check your RPC URL.',\n });\n }\n if (isAbortError(err) || externalSignal?.aborted) {\n throw new RpcError('ABORTED', `RPC request \"${method}\" was aborted.`, { cause: err });\n }\n throw new RpcError('RPC_HTTP', `Network error calling \"${method}\": ${describeErr(err)}`, {\n cause: err,\n hint: 'Check connectivity and that the RPC URL is reachable.',\n });\n }\n cleanup();\n\n if (RETRY_STATUSES.has(res.status) && attempt < 1) {\n attempt++;\n const backoff = 250 + Math.floor(Math.random() * 400);\n await sleep(backoff, externalSignal);\n continue;\n }\n\n const text = await res.text();\n if (!res.ok) {\n throw new RpcError(\n 'RPC_HTTP',\n `RPC HTTP ${res.status} ${res.statusText} for \"${method}\". Body: ${snippet(text)}`,\n res.status === 429\n ? { hint: 'Public endpoints are rate-limited; use a dedicated RPC.' }\n : {},\n );\n }\n\n let parsed: JsonRpcResponse<T>;\n try {\n parsed = JSON.parse(text) as JsonRpcResponse<T>;\n } catch (err) {\n throw new RpcError(\n 'RPC_JSON',\n `RPC returned non-JSON for \"${method}\". Body: ${snippet(text)}`,\n { cause: err, hint: 'Is the RPC URL correct? A captive portal/HTML page may be intercepting.' },\n );\n }\n\n if (parsed.error) {\n const msg = `${parsed.error.message} (code ${parsed.error.code})`;\n // Common: maxSupportedTransactionVersion too low.\n if (/version|transaction version/i.test(parsed.error.message)) {\n throw new RpcError('UNSUPPORTED_TX_VERSION', `RPC: ${msg}`, {\n hint: 'Raise --max-tx-version (e.g. 0) to fetch versioned transactions.',\n });\n }\n throw new RpcError('RPC_JSON', `JSON-RPC error for \"${method}\": ${msg}`);\n }\n\n return parsed.result as T;\n }\n }\n\n return {\n async getTransaction(sig: string, o: GetTransactionOpts): Promise<RawTransactionResponse | null> {\n const config: Record<string, unknown> = {\n encoding: 'base64',\n commitment: o.commitment ?? 'confirmed',\n };\n if (o.maxSupportedTransactionVersion !== undefined) {\n config['maxSupportedTransactionVersion'] = o.maxSupportedTransactionVersion;\n }\n return call<RawTransactionResponse | null>(\n 'getTransaction',\n [sig, config],\n defaultTimeout,\n o.signal,\n );\n },\n\n async simulateTransaction(txBase64: string, o: SimulateOpts): Promise<RawSimulateResponse> {\n const config: Record<string, unknown> = {\n encoding: 'base64',\n commitment: o.commitment ?? 'confirmed',\n sigVerify: o.sigVerify ?? false,\n replaceRecentBlockhash: o.replaceRecentBlockhash ?? true,\n };\n if (o.innerInstructions) config['innerInstructions'] = true;\n if (o.accounts) {\n config['accounts'] = {\n addresses: o.accounts.addresses,\n encoding: o.accounts.encoding ?? 'jsonParsed',\n };\n }\n return call<RawSimulateResponse>(\n 'simulateTransaction',\n [txBase64, config],\n defaultTimeout,\n o.signal,\n );\n },\n\n async getMultipleAccounts(\n addresses: string[],\n o: GetAccountsOpts,\n ): Promise<(RawAccount | null)[]> {\n if (addresses.length === 0) return [];\n const config = {\n commitment: o.commitment ?? 'confirmed',\n encoding: o.encoding ?? 'jsonParsed',\n };\n const result = await call<{ value: (RawAccount | null)[] }>(\n 'getMultipleAccounts',\n [addresses, config],\n defaultTimeout,\n o.signal,\n );\n return result.value;\n },\n\n async getLatestBlockhash(\n o?: { commitment?: Commitment; signal?: AbortSignal },\n ): Promise<{ blockhash: string; lastValidBlockHeight: number }> {\n const result = await call<{\n value: { blockhash: string; lastValidBlockHeight: number };\n }>('getLatestBlockhash', [{ commitment: o?.commitment ?? 'confirmed' }], defaultTimeout, o?.signal);\n return result.value;\n },\n };\n}\n\nfunction snippet(text: string, n = 120): string {\n const oneLine = text.replace(/\\s+/g, ' ').trim();\n return oneLine.length > n ? `${oneLine.slice(0, n)}…` : oneLine;\n}\n\nfunction describeErr(err: unknown): string {\n if (err instanceof Error) {\n const code = (err as { cause?: { code?: string } }).cause?.code;\n return code ? `${err.message} (${code})` : err.message;\n }\n return String(err);\n}\n","/**\n * Program ID → friendly name/kind map.\n *\n * Used both by the bundled decoders (for their own IDs) and by best-effort\n * recognition (name-only) for programs we don't byte-decode.\n */\n\nimport type { KnownProgramInfo } from '../types.js';\n\nexport const SYSTEM_PROGRAM_ID = '11111111111111111111111111111111';\nexport const TOKEN_PROGRAM_ID = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';\nexport const TOKEN_2022_PROGRAM_ID = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb';\nexport const ASSOCIATED_TOKEN_PROGRAM_ID = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';\nexport const MEMO_PROGRAM_ID = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';\nexport const MEMO_V1_PROGRAM_ID = 'Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo';\nexport const COMPUTE_BUDGET_PROGRAM_ID = 'ComputeBudget111111111111111111111111111111';\n\nexport const KNOWN_PROGRAMS: Readonly<Record<string, KnownProgramInfo>> = Object.freeze({\n // Core / decoded\n [SYSTEM_PROGRAM_ID]: { name: 'System', kind: 'system' },\n [TOKEN_PROGRAM_ID]: { name: 'SPL Token', kind: 'token' },\n [TOKEN_2022_PROGRAM_ID]: { name: 'Token-2022', kind: 'token-2022' },\n [ASSOCIATED_TOKEN_PROGRAM_ID]: { name: 'Associated Token Account', kind: 'ata' },\n [MEMO_PROGRAM_ID]: { name: 'Memo', kind: 'memo' },\n [MEMO_V1_PROGRAM_ID]: { name: 'Memo (v1)', kind: 'memo' },\n [COMPUTE_BUDGET_PROGRAM_ID]: { name: 'Compute Budget', kind: 'compute-budget' },\n\n // Native\n Stake11111111111111111111111111111111111111: { name: 'Stake', kind: 'stake' },\n Vote111111111111111111111111111111111111111: { name: 'Vote', kind: 'vote' },\n BPFLoaderUpgradeab1e11111111111111111111111: { name: 'BPF Upgradeable Loader', kind: 'loader' },\n BPFLoader2111111111111111111111111111111111: { name: 'BPF Loader 2', kind: 'loader' },\n AddressLookupTab1e1111111111111111111111111: {\n name: 'Address Lookup Table',\n kind: 'other',\n },\n\n // Metaplex\n metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s: {\n name: 'Metaplex Token Metadata',\n kind: 'nft',\n },\n BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY: {\n name: 'Metaplex Bubblegum',\n kind: 'nft',\n },\n cndy3Z4yxLzowg4ZTHTHJYjBmtkk3vd6yMJ4r8x7q3o: {\n name: 'Metaplex Candy Machine',\n kind: 'nft',\n },\n\n // Aggregators / DEX\n JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4: { name: 'Jupiter v6', kind: 'aggregator' },\n JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WconZX: { name: 'Jupiter v4', kind: 'aggregator' },\n '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8': { name: 'Raydium AMM v4', kind: 'amm' },\n CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK: { name: 'Raydium CLMM', kind: 'amm' },\n whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc: { name: 'Orca Whirlpool', kind: 'amm' },\n '9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP': { name: 'Orca v2', kind: 'amm' },\n PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY: { name: 'Phoenix', kind: 'amm' },\n LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo: { name: 'Meteora DLMM', kind: 'amm' },\n});\n\n/** Look up a known program's info, or `undefined`. */\nexport function knownProgram(programId: string): KnownProgramInfo | undefined {\n return KNOWN_PROGRAMS[programId];\n}\n","/**\n * Tiny little-endian byte reader over a DataView. No allocations beyond slices.\n * Throws {@link DecodeError} naming the field on underrun.\n */\n\nimport { DecodeError } from '../errors.js';\nimport { encodeBase58 } from '../input/encoding.js';\n\nexport class Reader {\n private readonly view: DataView;\n private readonly bytes: Uint8Array;\n offset = 0;\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n }\n\n get remaining(): number {\n return this.bytes.length - this.offset;\n }\n\n private ensure(n: number, field: string): void {\n if (this.offset + n > this.bytes.length) {\n throw new DecodeError(\n 'DECODE_FAILED',\n `unexpected end while reading ${field} (need ${n} bytes at offset ${this.offset}, have ${this.remaining})`,\n );\n }\n }\n\n u8(field = 'u8'): number {\n this.ensure(1, field);\n const v = this.view.getUint8(this.offset);\n this.offset += 1;\n return v;\n }\n\n u16(field = 'u16'): number {\n this.ensure(2, field);\n const v = this.view.getUint16(this.offset, true);\n this.offset += 2;\n return v;\n }\n\n u32(field = 'u32'): number {\n this.ensure(4, field);\n const v = this.view.getUint32(this.offset, true);\n this.offset += 4;\n return v;\n }\n\n u64(field = 'u64'): bigint {\n this.ensure(8, field);\n const v = this.view.getBigUint64(this.offset, true);\n this.offset += 8;\n return v;\n }\n\n i64(field = 'i64'): bigint {\n this.ensure(8, field);\n const v = this.view.getBigInt64(this.offset, true);\n this.offset += 8;\n return v;\n }\n\n bytes_(n: number, field = 'bytes'): Uint8Array {\n this.ensure(n, field);\n const out = this.bytes.subarray(this.offset, this.offset + n);\n this.offset += n;\n return out;\n }\n\n /** Read a 32-byte pubkey and return base58. */\n pubkey(field = 'pubkey'): string {\n return encodeBase58(this.bytes_(32, field));\n }\n\n /**\n * Solana compact-u16 (a.k.a. ShortVec) length prefix. 1–3 bytes, 7 bits each.\n */\n compactU16(field = 'compact-u16'): number {\n let value = 0;\n let shift = 0;\n for (let i = 0; i < 3; i++) {\n const byte = this.u8(`${field} length byte`);\n value |= (byte & 0x7f) << shift;\n if ((byte & 0x80) === 0) return value >>> 0;\n shift += 7;\n }\n return value >>> 0;\n }\n\n /** Remaining bytes (no copy). */\n rest(): Uint8Array {\n const out = this.bytes.subarray(this.offset);\n this.offset = this.bytes.length;\n return out;\n }\n}\n","/**\n * System program decoder (u32 LE discriminator).\n *\n * Covers: createAccount(0), assign(1), transfer(2), createAccountWithSeed(3),\n * advanceNonce(4), withdrawNonce(5), initializeNonce(6), authorizeNonce(7),\n * allocate(8), allocateWithSeed(9), assignWithSeed(10), transferWithSeed(11).\n */\n\nimport type { CompiledInstructionView, DecodeOutput, ProgramDecoder } from '../../types.js';\nimport { Reader } from '../reader.js';\nimport { SYSTEM_PROGRAM_ID } from '../known-programs.js';\n\nfunction acc(ix: CompiledInstructionView, i: number): string | undefined {\n return ix.accounts[i]?.pubkey;\n}\n\nfunction decodeSystem(ix: CompiledInstructionView): DecodeOutput {\n if (ix.data.length < 4) {\n return { decoded: false, program: 'System', warning: 'instruction data too short' };\n }\n const r = new Reader(ix.data);\n const disc = r.u32('discriminator');\n\n try {\n switch (disc) {\n case 0: {\n // CreateAccount: lamports u64, space u64, owner pubkey\n const lamports = r.u64('lamports');\n const space = r.u64('space');\n const owner = r.pubkey('owner');\n const newAccount = acc(ix, 1) ?? '';\n return {\n program: 'System',\n type: 'createAccount',\n decoded: true,\n args: { lamports: lamports.toString(), space: space.toString(), owner },\n accountNames: ['funding', 'new'],\n effects: [\n {\n kind: 'account-created',\n address: newAccount,\n owner,\n lamports,\n space: Number(space),\n as: 'system',\n },\n ],\n };\n }\n case 1: {\n const owner = r.pubkey('owner');\n return {\n program: 'System',\n type: 'assign',\n decoded: true,\n args: { owner },\n accountNames: ['account'],\n };\n }\n case 2: {\n const lamports = r.u64('lamports');\n const from = acc(ix, 0) ?? '';\n const to = acc(ix, 1) ?? '';\n return {\n program: 'System',\n type: 'transfer',\n decoded: true,\n args: { lamports: lamports.toString() },\n accountNames: ['from', 'to'],\n effects: [{ kind: 'sol-transfer', from, to, lamports }],\n };\n }\n case 3: {\n // CreateAccountWithSeed: base pubkey, seed string, lamports, space, owner\n const base = r.pubkey('base');\n const seedLen = Number(r.u64('seed length'));\n const seed = new TextDecoder().decode(r.bytes_(seedLen, 'seed'));\n const lamports = r.u64('lamports');\n const space = r.u64('space');\n const owner = r.pubkey('owner');\n const newAccount = acc(ix, 1) ?? '';\n return {\n program: 'System',\n type: 'createAccountWithSeed',\n decoded: true,\n args: { base, seed, lamports: lamports.toString(), space: space.toString(), owner },\n accountNames: ['funding', 'new', 'base'],\n effects: [\n {\n kind: 'account-created',\n address: newAccount,\n owner,\n lamports,\n space: Number(space),\n as: 'system',\n },\n ],\n };\n }\n case 8: {\n const space = r.u64('space');\n return {\n program: 'System',\n type: 'allocate',\n decoded: true,\n args: { space: space.toString() },\n accountNames: ['account'],\n };\n }\n case 9: {\n const base = r.pubkey('base');\n const seedLen = Number(r.u64('seed length'));\n const seed = new TextDecoder().decode(r.bytes_(seedLen, 'seed'));\n const space = r.u64('space');\n const owner = r.pubkey('owner');\n return {\n program: 'System',\n type: 'allocateWithSeed',\n decoded: true,\n args: { base, seed, space: space.toString(), owner },\n accountNames: ['account', 'base'],\n };\n }\n case 10: {\n const base = r.pubkey('base');\n const seedLen = Number(r.u64('seed length'));\n const seed = new TextDecoder().decode(r.bytes_(seedLen, 'seed'));\n const owner = r.pubkey('owner');\n return {\n program: 'System',\n type: 'assignWithSeed',\n decoded: true,\n args: { base, seed, owner },\n accountNames: ['account', 'base'],\n };\n }\n case 11: {\n // TransferWithSeed: lamports, fromSeed string, fromOwner pubkey\n const lamports = r.u64('lamports');\n const seedLen = Number(r.u64('seed length'));\n const fromSeed = new TextDecoder().decode(r.bytes_(seedLen, 'fromSeed'));\n const fromOwner = r.pubkey('fromOwner');\n const from = acc(ix, 0) ?? '';\n const to = acc(ix, 2) ?? '';\n return {\n program: 'System',\n type: 'transferWithSeed',\n decoded: true,\n args: { lamports: lamports.toString(), fromSeed, fromOwner },\n accountNames: ['from', 'base', 'to'],\n effects: [{ kind: 'sol-transfer', from, to, lamports }],\n };\n }\n default: {\n const names: Record<number, string> = {\n 4: 'advanceNonceAccount',\n 5: 'withdrawNonceAccount',\n 6: 'initializeNonceAccount',\n 7: 'authorizeNonceAccount',\n };\n return {\n program: 'System',\n type: names[disc] ?? `unknown(${disc})`,\n decoded: disc in names,\n };\n }\n }\n } catch (err) {\n return {\n program: 'System',\n decoded: false,\n warning: err instanceof Error ? err.message : 'system decode failed',\n warningCode: 'partial-decode',\n };\n }\n}\n\nexport const systemDecoder: ProgramDecoder = {\n programId: SYSTEM_PROGRAM_ID,\n name: 'System',\n kind: 'system',\n decode: decodeSystem,\n};\n","/**\n * SPL Token decoder (single-byte discriminator). Shared by SPL Token and\n * Token-2022, which use the same base instruction layouts.\n *\n * Instruction tags (subset we decode):\n * 0 InitializeMint 1 InitializeAccount 3 Transfer\n * 4 Approve 5 Revoke 6 SetAuthority\n * 7 MintTo 8 Burn 9 CloseAccount\n * 10 FreezeAccount 11 ThawAccount 12 TransferChecked\n * 13 ApproveChecked 14 MintToChecked 15 BurnChecked\n * 16 InitializeAccount2 17 SyncNative 18 InitializeAccount3\n * 20 InitializeMint2\n */\n\nimport type { CompiledInstructionView, DecodeOutput } from '../../types.js';\nimport { Reader } from '../reader.js';\n\nconst MAX_U64 = (1n << 64n) - 1n;\n\nfunction acc(ix: CompiledInstructionView, i: number): string | undefined {\n return ix.accounts[i]?.pubkey;\n}\n\nexport type TokenProgramVariant = 'spl-token' | 'token-2022';\n\n/**\n * Decode an SPL-Token-layout instruction. `variant` differentiates the\n * effect's `tokenProgram` and lets Token-2022 flag unparsed extension ixs.\n */\nexport function decodeTokenInstruction(\n ix: CompiledInstructionView,\n programName: string,\n variant: TokenProgramVariant,\n): DecodeOutput {\n if (ix.data.length < 1) {\n return { decoded: false, program: programName, warning: 'empty instruction data' };\n }\n const r = new Reader(ix.data);\n const tag = r.u8('tag');\n\n try {\n switch (tag) {\n case 0: {\n const decimals = r.u8('decimals');\n return {\n program: programName,\n type: 'initializeMint',\n decoded: true,\n args: { decimals },\n accountNames: ['mint', 'rent'],\n };\n }\n case 20: {\n const decimals = r.u8('decimals');\n return {\n program: programName,\n type: 'initializeMint2',\n decoded: true,\n args: { decimals },\n accountNames: ['mint'],\n };\n }\n case 1:\n case 16:\n case 18: {\n const account = acc(ix, 0) ?? '';\n const mint = acc(ix, 1) ?? '';\n const owner = acc(ix, 2);\n const type =\n tag === 1 ? 'initializeAccount' : tag === 16 ? 'initializeAccount2' : 'initializeAccount3';\n return {\n program: programName,\n type,\n decoded: true,\n accountNames: ['account', 'mint', 'owner'],\n effects: [\n {\n kind: 'account-created',\n address: account,\n owner: owner ?? mint,\n as: 'token-account',\n },\n ],\n };\n }\n case 3: {\n const amount = r.u64('amount');\n const from = acc(ix, 0) ?? '';\n const to = acc(ix, 1) ?? '';\n return {\n program: programName,\n type: 'transfer',\n decoded: true,\n args: { amount: amount.toString() },\n accountNames: ['source', 'destination', 'authority'],\n // No decimals/mint in unchecked transfer — correlate fills from diff.\n effects: [{ kind: 'token-transfer', from, to, amount, tokenProgram: variant }],\n warning: 'unchecked transfer carries no mint/decimals',\n warningCode: 'ambiguous-amount',\n };\n }\n case 12: {\n const amount = r.u64('amount');\n const decimals = r.u8('decimals');\n const source = acc(ix, 0) ?? '';\n const mint = acc(ix, 1) ?? '';\n const dest = acc(ix, 2) ?? '';\n return {\n program: programName,\n type: 'transferChecked',\n decoded: true,\n args: { amount: amount.toString(), decimals },\n accountNames: ['source', 'mint', 'destination', 'authority'],\n effects: [\n { kind: 'token-transfer', from: source, to: dest, mint, amount, decimals, tokenProgram: variant },\n ],\n };\n }\n case 4: {\n const amount = r.u64('amount');\n const delegate = acc(ix, 1) ?? '';\n const owner = acc(ix, 2) ?? '';\n return {\n program: programName,\n type: 'approve',\n decoded: true,\n args: { amount: amount.toString() },\n accountNames: ['source', 'delegate', 'owner'],\n effects: [\n {\n kind: 'approval',\n owner,\n delegate,\n mint: '',\n amount: amount === MAX_U64 ? 'unlimited' : amount,\n },\n ],\n };\n }\n case 13: {\n const amount = r.u64('amount');\n const decimals = r.u8('decimals');\n const mint = acc(ix, 1) ?? '';\n const delegate = acc(ix, 2) ?? '';\n const owner = acc(ix, 3) ?? '';\n return {\n program: programName,\n type: 'approveChecked',\n decoded: true,\n args: { amount: amount.toString(), decimals },\n accountNames: ['source', 'mint', 'delegate', 'owner'],\n effects: [\n {\n kind: 'approval',\n owner,\n delegate,\n mint,\n amount: amount === MAX_U64 ? 'unlimited' : amount,\n },\n ],\n };\n }\n case 5: {\n const owner = acc(ix, 1) ?? '';\n return {\n program: programName,\n type: 'revoke',\n decoded: true,\n accountNames: ['source', 'owner'],\n effects: [{ kind: 'approval', owner, delegate: '', mint: '', amount: 0n, revoke: true }],\n };\n }\n case 6: {\n return {\n program: programName,\n type: 'setAuthority',\n decoded: true,\n accountNames: ['account', 'currentAuthority'],\n };\n }\n case 7: {\n const amount = r.u64('amount');\n const mint = acc(ix, 0) ?? '';\n const to = acc(ix, 1) ?? '';\n return {\n program: programName,\n type: 'mintTo',\n decoded: true,\n args: { amount: amount.toString() },\n accountNames: ['mint', 'destination', 'authority'],\n effects: [{ kind: 'mint', mint, to, amount }],\n };\n }\n case 14: {\n const amount = r.u64('amount');\n const decimals = r.u8('decimals');\n const mint = acc(ix, 0) ?? '';\n const to = acc(ix, 1) ?? '';\n return {\n program: programName,\n type: 'mintToChecked',\n decoded: true,\n args: { amount: amount.toString(), decimals },\n accountNames: ['mint', 'destination', 'authority'],\n effects: [{ kind: 'mint', mint, to, amount, decimals }],\n };\n }\n case 8: {\n const amount = r.u64('amount');\n const from = acc(ix, 0) ?? '';\n const mint = acc(ix, 1) ?? '';\n return {\n program: programName,\n type: 'burn',\n decoded: true,\n args: { amount: amount.toString() },\n accountNames: ['account', 'mint', 'authority'],\n effects: [{ kind: 'burn', mint, from, amount }],\n };\n }\n case 15: {\n const amount = r.u64('amount');\n const decimals = r.u8('decimals');\n const from = acc(ix, 0) ?? '';\n const mint = acc(ix, 1) ?? '';\n return {\n program: programName,\n type: 'burnChecked',\n decoded: true,\n args: { amount: amount.toString(), decimals },\n accountNames: ['account', 'mint', 'authority'],\n effects: [{ kind: 'burn', mint, from, amount, decimals }],\n };\n }\n case 9: {\n const account = acc(ix, 0) ?? '';\n const destination = acc(ix, 1) ?? '';\n return {\n program: programName,\n type: 'closeAccount',\n decoded: true,\n accountNames: ['account', 'destination', 'owner'],\n effects: [{ kind: 'close-account', account, destination }],\n };\n }\n case 10:\n return {\n program: programName,\n type: 'freezeAccount',\n decoded: true,\n accountNames: ['account', 'mint', 'authority'],\n };\n case 11:\n return {\n program: programName,\n type: 'thawAccount',\n decoded: true,\n accountNames: ['account', 'mint', 'authority'],\n };\n case 17: {\n const account = acc(ix, 0) ?? '';\n return {\n program: programName,\n type: 'syncNative',\n decoded: true,\n accountNames: ['account'],\n effects: [{ kind: 'sync-native', account }],\n };\n }\n default:\n return {\n program: programName,\n type: `unknown(${tag})`,\n decoded: false,\n warning: `unrecognized ${programName} instruction tag ${tag}`,\n warningCode: 'partial-decode',\n };\n }\n } catch (err) {\n return {\n program: programName,\n decoded: false,\n warning: err instanceof Error ? err.message : 'token decode failed',\n warningCode: 'partial-decode',\n };\n }\n}\n","/**\n * Token-2022 decoder. Shares the SPL Token base layouts but recognizes the\n * extension-instruction range and flags those it does not byte-decode, rather\n * than failing — the balance diff still reveals the fee impact.\n */\n\nimport type { CompiledInstructionView, DecodeOutput, ProgramDecoder } from '../../types.js';\nimport { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from '../known-programs.js';\nimport { decodeTokenInstruction } from './spl-token.js';\n\n/**\n * Token-2022 instruction tags >= 21 are extension namespaces (TransferFee,\n * ConfidentialTransfer, DefaultAccountState, MemoTransfer, InterestBearing,\n * CpiGuard, TransferHook, MetadataPointer, GroupPointer, etc.). The base\n * layouts (0..20) are identical to SPL Token.\n */\nconst EXTENSION_TAGS: Record<number, string> = {\n 21: 'getAccountDataSize',\n 22: 'initializeMintCloseAuthority',\n 23: 'transferFeeExtension',\n 24: 'confidentialTransferExtension',\n 25: 'defaultAccountStateExtension',\n 26: 'reallocate',\n 27: 'memoTransferExtension',\n 28: 'createNativeMint',\n 29: 'initializeNonTransferableMint',\n 30: 'interestBearingMintExtension',\n 31: 'cpiGuardExtension',\n 32: 'initializePermanentDelegate',\n 33: 'transferHookExtension',\n 34: 'confidentialTransferFeeExtension',\n 35: 'withdrawExcessLamports',\n 36: 'metadataPointerExtension',\n 37: 'groupPointerExtension',\n 38: 'groupMemberPointerExtension',\n};\n\nfunction decodeToken2022(ix: CompiledInstructionView): DecodeOutput {\n if (ix.data.length < 1) {\n return { decoded: false, program: 'Token-2022', warning: 'empty instruction data' };\n }\n const tag = ix.data[0]!;\n if (tag >= 21) {\n const name = EXTENSION_TAGS[tag] ?? `extension(${tag})`;\n return {\n program: 'Token-2022',\n type: name,\n decoded: false,\n warning: `Token-2022 extension instruction \"${name}\" not byte-decoded; effect visible in balance diff`,\n warningCode: 'token-2022-extension-unparsed',\n };\n }\n return decodeTokenInstruction(ix, 'Token-2022', 'token-2022');\n}\n\nexport const token2022Decoder: ProgramDecoder = {\n programId: TOKEN_2022_PROGRAM_ID,\n name: 'Token-2022',\n kind: 'token-2022',\n decode: decodeToken2022,\n};\n\n/** The classic SPL Token decoder, sharing the same base layout. */\nexport const splTokenDecoder: ProgramDecoder = {\n programId: TOKEN_PROGRAM_ID,\n name: 'SPL Token',\n kind: 'token',\n decode: (ix) => decodeTokenInstruction(ix, 'SPL Token', 'spl-token'),\n};\n","/**\n * Associated Token Account program decoder.\n *\n * Instructions:\n * (empty data) Create — legacy, no discriminator\n * 0 Create\n * 1 CreateIdempotent\n * 2 RecoverNested\n *\n * Account order for Create/CreateIdempotent:\n * [payer, ata, owner, mint, systemProgram, tokenProgram, (rent)]\n */\n\nimport type { CompiledInstructionView, DecodeOutput, ProgramDecoder } from '../../types.js';\nimport { ASSOCIATED_TOKEN_PROGRAM_ID } from '../known-programs.js';\n\nfunction acc(ix: CompiledInstructionView, i: number): string | undefined {\n return ix.accounts[i]?.pubkey;\n}\n\nfunction decodeAta(ix: CompiledInstructionView): DecodeOutput {\n // Legacy \"Create\" has empty data; modern variants carry a single tag byte.\n const tag = ix.data.length === 0 ? 0 : ix.data[0]!;\n const type =\n tag === 0 ? 'create' : tag === 1 ? 'createIdempotent' : tag === 2 ? 'recoverNested' : undefined;\n\n if (type === undefined) {\n return {\n program: 'Associated Token Account',\n decoded: false,\n warning: `unrecognized ATA instruction tag ${tag}`,\n warningCode: 'partial-decode',\n };\n }\n\n if (type === 'recoverNested') {\n return {\n program: 'Associated Token Account',\n type,\n decoded: true,\n accountNames: ['nestedAta', 'nestedMint', 'destinationAta', 'ownerAta', 'ownerMint', 'wallet'],\n };\n }\n\n const ata = acc(ix, 1) ?? '';\n const owner = acc(ix, 2) ?? '';\n const tokenProgram = acc(ix, 5);\n return {\n program: 'Associated Token Account',\n type,\n decoded: true,\n accountNames: ['payer', 'ata', 'owner', 'mint', 'systemProgram', 'tokenProgram'],\n effects: [\n {\n kind: 'account-created',\n address: ata,\n owner: owner || (tokenProgram ?? ''),\n as: 'ata',\n },\n ],\n };\n}\n\nexport const ataDecoder: ProgramDecoder = {\n programId: ASSOCIATED_TOKEN_PROGRAM_ID,\n name: 'Associated Token Account',\n kind: 'ata',\n decode: decodeAta,\n};\n","/**\n * Memo program decoder (v1 + v2). The instruction data IS the UTF-8 memo.\n * Invalid UTF-8 is lossy-decoded with replacement chars; display is truncated\n * at a sane length (full bytes remain available via --raw / args).\n */\n\nimport type { CompiledInstructionView, DecodeOutput, ProgramDecoder } from '../../types.js';\nimport { MEMO_PROGRAM_ID, MEMO_V1_PROGRAM_ID } from '../known-programs.js';\n\nconst MAX_DISPLAY = 256;\n\nfunction decodeMemoData(ix: CompiledInstructionView, name: string): DecodeOutput {\n // `fatal: false` yields replacement chars on invalid UTF-8 (lossy).\n const text = new TextDecoder('utf-8', { fatal: false }).decode(ix.data);\n const display = text.length > MAX_DISPLAY ? `${text.slice(0, MAX_DISPLAY)}…` : text;\n const truncated = text.length > MAX_DISPLAY;\n return {\n program: name,\n type: 'memo',\n decoded: true,\n args: { text: display, ...(truncated ? { truncated: true } : {}) },\n effects: [{ kind: 'memo', text: display }],\n ...(truncated\n ? { warning: 'memo truncated for display; full bytes available via --raw', warningCode: 'partial-decode' as const }\n : {}),\n };\n}\n\nexport const memoDecoder: ProgramDecoder = {\n programId: MEMO_PROGRAM_ID,\n name: 'Memo',\n kind: 'memo',\n decode: (ix) => decodeMemoData(ix, 'Memo'),\n};\n\nexport const memoV1Decoder: ProgramDecoder = {\n programId: MEMO_V1_PROGRAM_ID,\n name: 'Memo (v1)',\n kind: 'memo',\n decode: (ix) => decodeMemoData(ix, 'Memo (v1)'),\n};\n","/**\n * Compute Budget program decoder (single-byte discriminator).\n *\n * 0 RequestUnits (deprecated)\n * 1 RequestHeapFrame (u32 bytes)\n * 2 SetComputeUnitLimit (u32 units)\n * 3 SetComputeUnitPrice (u64 micro-lamports per CU — kept as bigint)\n * 4 SetLoadedAccountsDataSizeLimit (u32 bytes)\n */\n\nimport type { CompiledInstructionView, DecodeOutput, ProgramDecoder } from '../../types.js';\nimport { Reader } from '../reader.js';\nimport { COMPUTE_BUDGET_PROGRAM_ID } from '../known-programs.js';\n\nfunction decodeComputeBudget(ix: CompiledInstructionView): DecodeOutput {\n if (ix.data.length < 1) {\n return { decoded: false, program: 'Compute Budget', warning: 'empty instruction data' };\n }\n const r = new Reader(ix.data);\n const tag = r.u8('tag');\n\n try {\n switch (tag) {\n case 1: {\n const bytes = r.u32('heap bytes');\n return {\n program: 'Compute Budget',\n type: 'requestHeapFrame',\n decoded: true,\n args: { bytes },\n };\n }\n case 2: {\n const units = r.u32('unit limit');\n return {\n program: 'Compute Budget',\n type: 'setComputeUnitLimit',\n decoded: true,\n args: { units },\n effects: [{ kind: 'compute-budget', unitLimit: units }],\n };\n }\n case 3: {\n const price = r.u64('micro-lamports');\n return {\n program: 'Compute Budget',\n type: 'setComputeUnitPrice',\n decoded: true,\n args: { microLamports: price.toString() },\n effects: [{ kind: 'compute-budget', unitPriceMicroLamports: price }],\n };\n }\n case 4: {\n const bytes = r.u32('data size limit');\n return {\n program: 'Compute Budget',\n type: 'setLoadedAccountsDataSizeLimit',\n decoded: true,\n args: { bytes },\n };\n }\n case 0:\n return {\n program: 'Compute Budget',\n type: 'requestUnits',\n decoded: true,\n };\n default:\n return {\n program: 'Compute Budget',\n type: `unknown(${tag})`,\n decoded: false,\n warningCode: 'partial-decode',\n };\n }\n } catch (err) {\n return {\n program: 'Compute Budget',\n decoded: false,\n warning: err instanceof Error ? err.message : 'compute-budget decode failed',\n warningCode: 'partial-decode',\n };\n }\n}\n\nexport const computeBudgetDecoder: ProgramDecoder = {\n programId: COMPUTE_BUDGET_PROGRAM_ID,\n name: 'Compute Budget',\n kind: 'compute-budget',\n decode: decodeComputeBudget,\n};\n","/**\n * Best-effort, name-only recognizers for programs we do not byte-decode\n * (Jupiter, Metaplex, Raydium, Orca, Stake, Vote, BPF loaders, …).\n *\n * These set `program` + a `program-call` action; the actual \"what changed\" is\n * inferred from the balance diff + CPI transfers in the correlation layer.\n */\n\nimport type { ProgramDecoder } from '../../types.js';\nimport { KNOWN_PROGRAMS } from '../known-programs.js';\n\nconst ALREADY_DECODED = new Set([\n '11111111111111111111111111111111',\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb',\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',\n 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr',\n 'Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo',\n 'ComputeBudget111111111111111111111111111111',\n]);\n\n/**\n * Build name-only decoders for every {@link KNOWN_PROGRAMS} entry that doesn't\n * already have a byte-level decoder. They never throw; they mark the\n * instruction recognized-but-undecoded and emit a `program-call`-friendly\n * output for the correlation layer.\n */\nexport function buildRecognizers(): ProgramDecoder[] {\n const decoders: ProgramDecoder[] = [];\n for (const [programId, info] of Object.entries(KNOWN_PROGRAMS)) {\n if (ALREADY_DECODED.has(programId)) continue;\n decoders.push({\n programId,\n name: info.name,\n kind: info.kind,\n decode: () => ({\n program: info.name,\n decoded: false,\n // Honest signal: we know *who* but not the exact ix semantics.\n warning: `${info.name} recognized by program id; semantics inferred from balance diff (no IDL)`,\n }),\n });\n }\n return decoders;\n}\n","/**\n * Program registry + `createRegistry` + `defaultRegistry` + `decodeInstruction`.\n *\n * This module is also the `@vtx-labs/solana-explain/programs` entry point, so\n * advanced consumers can register custom decoders without IDLs.\n */\n\nimport type {\n CompiledInstructionView,\n DecodedInstruction,\n ProgramDecoder,\n ProgramRegistry,\n} from '../types.js';\nimport { knownProgram } from './known-programs.js';\nimport { systemDecoder } from './programs/system.js';\nimport { splTokenDecoder, token2022Decoder } from './programs/token-2022.js';\nimport { ataDecoder } from './programs/ata.js';\nimport { memoDecoder, memoV1Decoder } from './programs/memo.js';\nimport { computeBudgetDecoder } from './programs/compute-budget.js';\nimport { buildRecognizers } from './programs/recognize.js';\n\nexport { KNOWN_PROGRAMS, knownProgram } from './known-programs.js';\nexport type {\n ProgramDecoder,\n ProgramRegistry,\n DecodeOutput,\n DecoderEffect,\n CompiledInstructionView,\n KnownProgramInfo,\n ProgramKind,\n} from '../types.js';\n\nclass Registry implements ProgramRegistry {\n private readonly map: Map<string, ProgramDecoder>;\n\n constructor(decoders: ProgramDecoder[]) {\n this.map = new Map();\n for (const d of decoders) this.map.set(d.programId, d);\n }\n\n get(programId: string): ProgramDecoder | undefined {\n return this.map.get(programId);\n }\n\n has(programId: string): boolean {\n return this.map.has(programId);\n }\n\n list(): ProgramDecoder[] {\n return [...this.map.values()];\n }\n\n merge(decoders: ProgramDecoder[]): ProgramRegistry {\n const merged = new Map(this.map);\n for (const d of decoders) merged.set(d.programId, d);\n return new Registry([...merged.values()]);\n }\n}\n\n/** Bundled byte-level decoders (precise semantics). */\nexport const BUNDLED_DECODERS: ProgramDecoder[] = [\n systemDecoder,\n splTokenDecoder,\n token2022Decoder,\n ataDecoder,\n memoDecoder,\n memoV1Decoder,\n computeBudgetDecoder,\n];\n\n/**\n * Create a registry. By default it includes the bundled byte-level decoders\n * plus name-only recognizers; pass `decoders` to merge overrides on top.\n */\nexport function createRegistry(decoders?: ProgramDecoder[]): ProgramRegistry {\n const base = [...BUNDLED_DECODERS, ...buildRecognizers()];\n const reg = new Registry(base);\n return decoders && decoders.length > 0 ? reg.merge(decoders) : reg;\n}\n\n/** The default registry (bundled decoders + recognizers). */\nexport const defaultRegistry: ProgramRegistry = createRegistry();\n\n/**\n * Pure: decode one instruction against the registry. Returns `{ decoded:false }`\n * (never throws) for unrecognized programs.\n */\nexport function decodeInstruction(\n ix: CompiledInstructionView,\n registry: ProgramRegistry = defaultRegistry,\n /**\n * Optional pre-computed decode output. When the caller has already run the\n * decoder (see {@link decodeInstructionRaw}), passing it here avoids decoding\n * the instruction a second time across the whole CPI tree.\n */\n precomputed?: import('../types.js').DecodeOutput,\n): DecodedInstruction {\n const decoder = registry.get(ix.programId);\n const known = knownProgram(ix.programId);\n\n const baseAccounts = ix.accounts.map((a) => ({\n pubkey: a.pubkey,\n isSigner: a.isSigner,\n isWritable: a.isWritable,\n }));\n\n if (!decoder) {\n return {\n index: ix.index,\n programId: ix.programId,\n ...(known ? { program: known.name } : {}),\n decoded: false,\n accounts: baseAccounts,\n warning: known\n ? `${known.name} recognized by program id (no byte decoder)`\n : 'unknown program (no decoder)',\n };\n }\n\n let out;\n try {\n out = precomputed ?? decoder.decode(ix);\n } catch (err) {\n // Decoders are contracted not to throw, but be defensive.\n return {\n index: ix.index,\n programId: ix.programId,\n program: decoder.name,\n decoded: false,\n accounts: baseAccounts,\n warning: `decoder error: ${err instanceof Error ? err.message : String(err)}`,\n };\n }\n\n const accounts = baseAccounts.map((a, i) => {\n const name = out.accountNames?.[i];\n return name !== undefined ? { ...a, name } : a;\n });\n\n return {\n index: ix.index,\n programId: ix.programId,\n ...(out.program !== undefined ? { program: out.program } : {}),\n ...(out.type !== undefined ? { type: out.type } : {}),\n decoded: out.decoded,\n accounts,\n ...(out.args !== undefined ? { args: out.args } : {}),\n ...(out.warning !== undefined ? { warning: out.warning } : {}),\n };\n}\n\n/** Internal helper to retain the structured effects for correlation. */\nexport function decodeInstructionRaw(\n ix: CompiledInstructionView,\n registry: ProgramRegistry = defaultRegistry,\n): { decoded: DecodedInstruction; effects: import('../types.js').DecoderEffect[]; warningCode?: import('../types.js').WarningCode } {\n const decoder = registry.get(ix.programId);\n if (!decoder) return { decoded: decodeInstruction(ix, registry), effects: [] };\n let out;\n try {\n out = decoder.decode(ix); // decode ONCE\n } catch {\n return { decoded: decodeInstruction(ix, registry), effects: [] };\n }\n // Reuse the single decode output for the human view (no second decode).\n const decoded = decodeInstruction(ix, registry, out);\n return {\n decoded,\n effects: out.effects ?? [],\n ...(out.warningCode !== undefined ? { warningCode: out.warningCode } : {}),\n };\n}\n","/**\n * Legacy + v0 wire-message parser.\n *\n * Parses the Solana transaction wire format (compact-u16 arrays, account-key\n * table, header signer/writable counts, address-table-lookups) into\n * {@link CompiledInstructionView}[] with resolved per-account roles.\n *\n * The wire layout we parse here is the *message*. A full serialized\n * transaction prefixes the message with a compact-u16 array of 64-byte\n * signatures; we detect and skip that automatically.\n */\n\nimport { DecodeError } from '../errors.js';\nimport type { CompiledInstructionView } from '../types.js';\nimport { encodeBase58 } from '../input/encoding.js';\nimport { Reader } from './reader.js';\n\nconst VERSION_PREFIX_MASK = 0x80;\n\nexport interface ParsedMessage {\n version: 'legacy' | number;\n /** Account keys present *in the message* (not yet LUT-resolved). */\n staticAccountKeys: string[];\n header: {\n numRequiredSignatures: number;\n numReadonlySignedAccounts: number;\n numReadonlyUnsignedAccounts: number;\n };\n recentBlockhash: string;\n /** Raw compiled instructions referencing account indexes into the full key list. */\n compiled: { programIdIndex: number; accountIndexes: number[]; data: Uint8Array }[];\n /** Present for v0; index references into LUT accounts. */\n addressTableLookups: { accountKey: string; writableIndexes: number[]; readonlyIndexes: number[] }[];\n /** True if a v0 message references address tables we have not resolved. */\n hasUnresolvedLut: boolean;\n}\n\n/**\n * Detect whether a buffer is a full serialized transaction (with signatures)\n * and, if so, return the message slice. Heuristic: read a compact-u16 sig\n * count `n`, and check there are exactly `n*64` signature bytes followed by a\n * plausible message header. Falls back to treating the whole buffer as a\n * message.\n */\nexport function stripSignatures(bytes: Uint8Array): Uint8Array {\n if (bytes.length === 0) {\n throw new DecodeError('DECODE_FAILED', 'empty transaction buffer');\n }\n // A bare message starts with either a version byte (>= 0x80) or a header\n // whose first byte (numRequiredSignatures) is small (< ~20). A full tx\n // starts with a compact-u16 signature count.\n const reader = new Reader(bytes);\n let sigCount: number;\n try {\n sigCount = reader.compactU16('signature count');\n } catch {\n return bytes;\n }\n // Plausibility: signatures present and the byte right after them looks like a\n // version prefix or a small header.\n if (sigCount > 0 && sigCount <= 64) {\n const afterSigs = reader.offset + sigCount * 64;\n if (afterSigs < bytes.length) {\n const next = bytes[afterSigs];\n if (next !== undefined) {\n const looksVersioned = (next & VERSION_PREFIX_MASK) !== 0;\n const looksLegacyHeader = next > 0 && next <= 32;\n if (looksVersioned || looksLegacyHeader) {\n return bytes.subarray(afterSigs);\n }\n }\n }\n }\n // No leading signatures detected → it's already a message.\n return bytes;\n}\n\n/** Parse a wire message (legacy or v0). */\nexport function parseMessage(messageBytes: Uint8Array): ParsedMessage {\n const r = new Reader(messageBytes);\n const firstByte = r.u8('version/header byte');\n\n let version: 'legacy' | number;\n let numRequiredSignatures: number;\n if ((firstByte & VERSION_PREFIX_MASK) !== 0) {\n version = firstByte & 0x7f;\n if (version !== 0) {\n throw new DecodeError(\n 'DECODE_FAILED',\n `unsupported transaction message version v${version} (only legacy and v0 are supported)`,\n );\n }\n numRequiredSignatures = r.u8('numRequiredSignatures');\n } else {\n version = 'legacy';\n numRequiredSignatures = firstByte;\n }\n\n const numReadonlySignedAccounts = r.u8('numReadonlySignedAccounts');\n const numReadonlyUnsignedAccounts = r.u8('numReadonlyUnsignedAccounts');\n\n const keyCount = r.compactU16('account key count');\n if (keyCount > 256) {\n throw new DecodeError('DECODE_FAILED', `implausible account key count: ${keyCount}`);\n }\n const staticAccountKeys: string[] = [];\n for (let i = 0; i < keyCount; i++) {\n staticAccountKeys.push(r.pubkey(`account key #${i}`));\n }\n\n const recentBlockhash = r.pubkey('recentBlockhash');\n\n const ixCount = r.compactU16('instruction count');\n if (ixCount > 1024) {\n throw new DecodeError('DECODE_FAILED', `implausible instruction count: ${ixCount}`);\n }\n const compiled: ParsedMessage['compiled'] = [];\n for (let i = 0; i < ixCount; i++) {\n const programIdIndex = r.u8(`instruction #${i} programIdIndex`);\n const accCount = r.compactU16(`instruction #${i} account count`);\n const accountIndexes: number[] = [];\n for (let j = 0; j < accCount; j++) {\n accountIndexes.push(r.u8(`instruction #${i} account index #${j}`));\n }\n const dataLen = r.compactU16(`instruction #${i} data length`);\n const data = r.bytes_(dataLen, `instruction #${i} data`).slice();\n compiled.push({ programIdIndex, accountIndexes, data });\n }\n\n const addressTableLookups: ParsedMessage['addressTableLookups'] = [];\n let hasUnresolvedLut = false;\n if (version === 0) {\n const lutCount = r.compactU16('address table lookup count');\n for (let i = 0; i < lutCount; i++) {\n const accountKey = r.pubkey(`LUT #${i} account key`);\n const writableCount = r.compactU16(`LUT #${i} writable count`);\n const writableIndexes: number[] = [];\n for (let j = 0; j < writableCount; j++) {\n writableIndexes.push(r.u8(`LUT #${i} writable index #${j}`));\n }\n const readonlyCount = r.compactU16(`LUT #${i} readonly count`);\n const readonlyIndexes: number[] = [];\n for (let j = 0; j < readonlyCount; j++) {\n readonlyIndexes.push(r.u8(`LUT #${i} readonly index #${j}`));\n }\n addressTableLookups.push({ accountKey, writableIndexes, readonlyIndexes });\n if (writableIndexes.length + readonlyIndexes.length > 0) hasUnresolvedLut = true;\n }\n }\n\n return {\n version,\n staticAccountKeys,\n header: {\n numRequiredSignatures,\n numReadonlySignedAccounts,\n numReadonlyUnsignedAccounts,\n },\n recentBlockhash,\n compiled,\n addressTableLookups,\n hasUnresolvedLut,\n };\n}\n\n/**\n * Resolve compiled instructions into {@link CompiledInstructionView}[] with\n * full account roles.\n *\n * `loadedWritable`/`loadedReadonly` are the LUT-resolved addresses appended\n * after the static keys, in canonical order: `[...static, ...loadedWritable,\n * ...loadedReadonly]`. They are writable/readonly respectively.\n */\nexport function buildAccountList(\n msg: ParsedMessage,\n loaded?: { writable: string[]; readonly: string[] },\n): {\n accountKeys: string[];\n isSigner: boolean[];\n isWritable: boolean[];\n} {\n const loadedWritable = loaded?.writable ?? [];\n const loadedReadonly = loaded?.readonly ?? [];\n const accountKeys = [...msg.staticAccountKeys, ...loadedWritable, ...loadedReadonly];\n\n const { numRequiredSignatures, numReadonlySignedAccounts, numReadonlyUnsignedAccounts } =\n msg.header;\n const staticCount = msg.staticAccountKeys.length;\n\n const isSigner: boolean[] = [];\n const isWritable: boolean[] = [];\n\n for (let i = 0; i < accountKeys.length; i++) {\n if (i < staticCount) {\n const signer = i < numRequiredSignatures;\n // Within signed block: writable unless in the readonly-signed tail.\n // Within unsigned static block: writable unless in the readonly-unsigned tail.\n let writable: boolean;\n if (signer) {\n writable = i < numRequiredSignatures - numReadonlySignedAccounts;\n } else {\n const unsignedIndex = i - numRequiredSignatures;\n const unsignedWritableCount =\n staticCount - numRequiredSignatures - numReadonlyUnsignedAccounts;\n writable = unsignedIndex < unsignedWritableCount;\n }\n isSigner.push(signer);\n isWritable.push(writable);\n } else {\n // Loaded addresses: never signers. Writable for the writable block.\n const loadedIndex = i - staticCount;\n isSigner.push(false);\n isWritable.push(loadedIndex < loadedWritable.length);\n }\n }\n\n return { accountKeys, isSigner, isWritable };\n}\n\n/** Turn parsed + resolved message into instruction views. */\nexport function toInstructionViews(\n msg: ParsedMessage,\n resolved: { accountKeys: string[]; isSigner: boolean[]; isWritable: boolean[] },\n): CompiledInstructionView[] {\n const { accountKeys, isSigner, isWritable } = resolved;\n return msg.compiled.map((ix, index) => {\n const programId = accountKeys[ix.programIdIndex];\n if (programId === undefined) {\n throw new DecodeError(\n 'DECODE_FAILED',\n `instruction #${index} programIdIndex ${ix.programIdIndex} out of range (have ${accountKeys.length} keys)`,\n );\n }\n const accounts = ix.accountIndexes.map((ai) => {\n const pubkey = accountKeys[ai];\n if (pubkey === undefined) {\n throw new DecodeError(\n 'DECODE_FAILED',\n `instruction #${index} references account index ${ai} out of range (have ${accountKeys.length} keys)`,\n );\n }\n return {\n pubkey,\n isSigner: isSigner[ai] ?? false,\n isWritable: isWritable[ai] ?? false,\n };\n });\n return { index, programId, accounts, data: ix.data };\n });\n}\n\n/**\n * Convenience: decode a full serialized transaction (with or without\n * signatures) into instruction views + parsed message. LUT-resolved addresses\n * may be supplied (e.g. from `meta.loadedAddresses`).\n */\nexport function decodeWireTransaction(\n bytes: Uint8Array,\n loaded?: { writable: string[]; readonly: string[] },\n): { message: ParsedMessage; instructions: CompiledInstructionView[]; accountKeys: string[] } {\n const messageBytes = stripSignatures(bytes);\n const message = parseMessage(messageBytes);\n const resolved = buildAccountList(message, loaded);\n const instructions = toInstructionViews(message, resolved);\n return { message, instructions, accountKeys: resolved.accountKeys };\n}\n\n/** Validate a 64-byte signature buffer → base58 string. */\nexport function signatureFromBytes(bytes: Uint8Array): string {\n if (bytes.length !== 64) {\n throw new DecodeError('DECODE_FAILED', `signature must be 64 bytes, got ${bytes.length}`);\n }\n return encodeBase58(bytes);\n}\n","/**\n * `detectInput`: classify a raw argument into\n * `signature | tx-bytes | instruction-set`,\n * normalizing encodings. Throws {@link InputError} early with precise messages.\n */\n\nimport { InputError } from '../errors.js';\nimport type { ExplainInstruction } from '../types.js';\nimport {\n looksLikeBase58,\n tryDecodeBase58,\n tryDecodeBase64,\n} from './encoding.js';\nimport { parseMessage, stripSignatures } from '../decode/message.js';\n\nexport type DetectedInput =\n | { kind: 'signature'; signature: string }\n | { kind: 'tx-bytes'; bytes: Uint8Array; encoding: 'base64' | 'base58'; ambiguous: boolean }\n | { kind: 'instruction-set'; instructions: ExplainInstruction[] };\n\n/** Detect the kind of a string/bytes/instruction-array input. */\nexport function detectInput(\n input: string | Uint8Array | ExplainInstruction[],\n): DetectedInput {\n // Pre-parsed instruction set.\n if (Array.isArray(input)) {\n return { kind: 'instruction-set', instructions: validateInstructions(input) };\n }\n\n // Raw bytes → must be a wire tx.\n if (input instanceof Uint8Array) {\n if (input.length === 0) {\n throw new InputError('EMPTY_INPUT', 'Empty byte input.', {\n hint: 'Pass a signature, a serialized transaction, or pipe data via --stdin.',\n });\n }\n assertWireMessage(input, 'raw bytes');\n return { kind: 'tx-bytes', bytes: input, encoding: 'base64', ambiguous: false };\n }\n\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n throw new InputError('EMPTY_INPUT', 'Input is empty or whitespace only.', {\n hint: 'Pass a signature, a serialized transaction, or pipe data via --stdin.',\n });\n }\n\n // JSON instruction set (only via explicit string here; CLI also routes this).\n if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch (err) {\n throw new InputError('INVALID_INPUT', 'Input looks like JSON but failed to parse.', {\n cause: err,\n });\n }\n const arr = Array.isArray(parsed) ? parsed : null;\n if (!arr) {\n throw new InputError(\n 'INVALID_INPUT',\n 'JSON instruction input must be an array of instructions.',\n );\n }\n return { kind: 'instruction-set', instructions: validateInstructions(arr) };\n }\n\n // Signature: base58 decoding to exactly 64 bytes, length 64–88 chars.\n if (looksLikeBase58(trimmed) && trimmed.length >= 64 && trimmed.length <= 88) {\n const decoded = tryDecodeBase58(trimmed);\n if (decoded && decoded.length === 64) {\n // But it could also be a base58-encoded tx of 64 bytes (rare). 64 bytes\n // is far too small to be a wire message, so treat as a signature.\n return { kind: 'signature', signature: trimmed };\n }\n if (decoded && decoded.length !== 64) {\n // Not a signature length; maybe a base58 tx. Fall through to tx detection.\n }\n }\n\n // Transaction bytes: try base64 then base58; prefer the one that parses as a\n // wire message. If both parse, prefer base64 + flag ambiguity.\n const asB64 = tryDecodeBase64(trimmed);\n const asB58 = tryDecodeBase58(trimmed);\n\n const b64Ok = asB64 ? isWireMessage(asB64) : false;\n const b58Ok = asB58 ? isWireMessage(asB58) : false;\n\n if (b64Ok && b58Ok) {\n return { kind: 'tx-bytes', bytes: asB64!, encoding: 'base64', ambiguous: true };\n }\n if (b64Ok) {\n return { kind: 'tx-bytes', bytes: asB64!, encoding: 'base64', ambiguous: false };\n }\n if (b58Ok) {\n return { kind: 'tx-bytes', bytes: asB58!, encoding: 'base58', ambiguous: false };\n }\n\n // Maybe it's a signature whose byte count is wrong → precise message.\n if (looksLikeBase58(trimmed)) {\n const decoded = tryDecodeBase58(trimmed);\n if (decoded) {\n throw new InputError(\n 'INVALID_SIGNATURE',\n `Input decoded as ${decoded.length} bytes; a signature must be exactly 64 bytes, and it is not a valid transaction.`,\n { hint: 'Provide a 64-byte base58 signature or a base64/base58 serialized transaction.' },\n );\n }\n }\n\n throw new InputError(\n 'INVALID_INPUT',\n 'Could not classify input as a signature, transaction, or instruction set.',\n { hint: 'Provide a base58 signature, a base64/base58 transaction, or a JSON instruction array.' },\n );\n}\n\n/** Force a string to be interpreted as a serialized transaction (CLI --simulate). */\nexport function detectTxBytes(\n input: string,\n encoding: 'base64' | 'base58' | 'auto' = 'auto',\n): { bytes: Uint8Array; encoding: 'base64' | 'base58'; ambiguous: boolean } {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n throw new InputError('EMPTY_INPUT', 'Empty transaction input.');\n }\n if (encoding === 'base64') {\n const bytes = tryDecodeBase64(trimmed);\n if (!bytes) throw new InputError('INVALID_ENCODING', 'Input is not valid base64.');\n assertWireMessage(bytes, 'base64 transaction');\n return { bytes, encoding: 'base64', ambiguous: false };\n }\n if (encoding === 'base58') {\n const bytes = tryDecodeBase58(trimmed);\n if (!bytes) throw new InputError('INVALID_ENCODING', 'Input is not valid base58.');\n assertWireMessage(bytes, 'base58 transaction');\n return { bytes, encoding: 'base58', ambiguous: false };\n }\n const asB64 = tryDecodeBase64(trimmed);\n const asB58 = tryDecodeBase58(trimmed);\n const b64Ok = asB64 ? isWireMessage(asB64) : false;\n const b58Ok = asB58 ? isWireMessage(asB58) : false;\n if (b64Ok) return { bytes: asB64!, encoding: 'base64', ambiguous: b58Ok };\n if (b58Ok) return { bytes: asB58!, encoding: 'base58', ambiguous: false };\n throw new InputError('DECODE_FAILED', 'Input did not parse as a serialized transaction.');\n}\n\n/** Does the byte buffer parse as a legacy/v0 wire message? */\nfunction isWireMessage(bytes: Uint8Array): boolean {\n try {\n const stripped = stripSignatures(bytes);\n const msg = parseMessage(stripped);\n return msg.staticAccountKeys.length > 0 && msg.compiled.length >= 0;\n } catch {\n return false;\n }\n}\n\nfunction assertWireMessage(bytes: Uint8Array, label: string): void {\n if (!isWireMessage(bytes)) {\n throw new InputError(\n 'DECODE_FAILED',\n `${label} did not parse as a Solana wire transaction message.`,\n { hint: 'Ensure the input is a serialized (not deserialized) transaction.' },\n );\n }\n}\n\n/** Validate + normalize a raw JSON instruction array. */\nexport function validateInstructions(arr: unknown[]): ExplainInstruction[] {\n if (arr.length === 0) {\n throw new InputError('EMPTY_INPUT', 'Instruction set is empty.');\n }\n return arr.map((raw, i) => {\n if (typeof raw !== 'object' || raw === null) {\n throw new InputError('INVALID_INPUT', `Instruction #${i} is not an object.`);\n }\n const o = raw as Record<string, unknown>;\n if (typeof o['programId'] !== 'string') {\n throw new InputError('INVALID_INPUT', `Instruction #${i} is missing a string \"programId\".`);\n }\n const accountsRaw = o['accounts'];\n if (!Array.isArray(accountsRaw)) {\n throw new InputError('INVALID_INPUT', `Instruction #${i} \"accounts\" must be an array.`);\n }\n const accounts = accountsRaw.map((a, j) => {\n if (typeof a !== 'object' || a === null) {\n throw new InputError('INVALID_INPUT', `Instruction #${i} account #${j} is not an object.`);\n }\n const ao = a as Record<string, unknown>;\n if (typeof ao['pubkey'] !== 'string') {\n throw new InputError(\n 'INVALID_INPUT',\n `Instruction #${i} account #${j} is missing a string \"pubkey\".`,\n );\n }\n return {\n pubkey: ao['pubkey'],\n isSigner: Boolean(ao['isSigner']),\n isWritable: Boolean(ao['isWritable']),\n };\n });\n const data = o['data'];\n if (typeof data !== 'string' && !Array.isArray(data) && !(data instanceof Uint8Array)) {\n throw new InputError(\n 'INVALID_INPUT',\n `Instruction #${i} \"data\" must be a base64/base58 string, byte array, or Uint8Array.`,\n );\n }\n return {\n programId: o['programId'],\n accounts,\n data: data as string | number[] | Uint8Array,\n };\n });\n}\n","/**\n * Token metadata (symbol/decimals) resolution.\n *\n * Decimals come free from jsonParsed token balances / transferChecked. Symbols\n * are best-effort: a small built-in allowlist of well-known mints, applied\n * synchronously, with no network I/O — it covers the overwhelming majority of\n * user-facing transfers while keeping the core dependency-light and offline.\n */\n\nexport interface MintMeta {\n symbol: string;\n decimals: number;\n}\n\n/** Well-known mainnet mints. Keyed by mint address. */\nexport const KNOWN_MINTS: Readonly<Record<string, MintMeta>> = Object.freeze({\n EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: { symbol: \"USDC\", decimals: 6 },\n Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB: { symbol: \"USDT\", decimals: 6 },\n So11111111111111111111111111111111111111112: { symbol: \"wSOL\", decimals: 9 },\n mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So: { symbol: \"mSOL\", decimals: 9 },\n \"7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj\": {\n symbol: \"stSOL\",\n decimals: 9,\n },\n \"4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R\": {\n symbol: \"RAY\",\n decimals: 6,\n },\n JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN: { symbol: \"JUP\", decimals: 6 },\n DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263: { symbol: \"BONK\", decimals: 5 },\n});\n\n/** The canonical wrapped-SOL mint. */\nexport const WSOL_MINT = \"So11111111111111111111111111111111111111112\";\n\n/** Look up a known mint's metadata, or `undefined`. */\nexport function knownMint(mint: string): MintMeta | undefined {\n return KNOWN_MINTS[mint];\n}\n\n/** Resolve a symbol from the allowlist (best-effort, synchronous). */\nexport function resolveSymbol(mint: string): string | undefined {\n return KNOWN_MINTS[mint]?.symbol;\n}\n\n/** Is this the wrapped-SOL mint? */\nexport function isWsol(mint: string | undefined): boolean {\n return mint === WSOL_MINT;\n}\n","/**\n * The `NormalizedTx` shape produced by both acquisition strategies and fed to\n * `buildExplanation`. Plus shared parsing of jsonParsed token-balance entries\n * and account states.\n */\n\nimport type {\n BalanceSnapshot,\n CompiledInstructionView,\n TokenBalanceEntry,\n Warning,\n} from '../types.js';\nimport type {\n RawAccount,\n RawInnerInstructions,\n RawTokenBalance,\n} from '../rpc/types.js';\nimport { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from '../decode/known-programs.js';\nimport { resolveSymbol } from '../explain/token-meta.js';\n\nexport interface NormalizedTx {\n source: 'signature' | 'simulation';\n signature?: string;\n feePayer: string;\n success: boolean;\n error?: { raw: unknown; human: string };\n slot?: number;\n blockTime?: number | null;\n feeLamports: bigint;\n computeUnits?: number;\n pre: BalanceSnapshot;\n post: BalanceSnapshot;\n instructions: CompiledInstructionView[];\n innerInstructions?: { index: number; instructions: CompiledInstructionView[] }[];\n warnings: Warning[];\n raw?: unknown;\n}\n\n/** Normalize a token-program id to the human key the decoder uses. */\nexport function tokenProgramKey(programId: string | undefined): string {\n if (programId === TOKEN_PROGRAM_ID) return 'spl-token';\n if (programId === TOKEN_2022_PROGRAM_ID) return 'token-2022';\n return programId ?? 'spl-token';\n}\n\n/** Convert RPC token-balance entries (indexed) into our account-keyed form. */\nexport function tokenBalancesFromMeta(\n entries: RawTokenBalance[] | undefined,\n accountKeys: string[],\n): TokenBalanceEntry[] {\n if (!entries) return [];\n const out: TokenBalanceEntry[] = [];\n for (const e of entries) {\n const account = accountKeys[e.accountIndex];\n if (account === undefined) continue;\n const amount = BigInt(e.uiTokenAmount.amount);\n const symbol = resolveSymbol(e.mint);\n out.push({\n account,\n mint: e.mint,\n ...(e.owner !== undefined ? { owner: e.owner } : {}),\n amount,\n decimals: e.uiTokenAmount.decimals,\n tokenProgram: tokenProgramKey(e.programId),\n ...(symbol !== undefined ? { symbol } : {}),\n });\n }\n return out;\n}\n\n/**\n * Extract a token-balance entry from a jsonParsed account state (used by the\n * simulate path where we fetch/observe raw account states). Returns `null` if\n * the account isn't an SPL/Token-2022 token account.\n */\nexport function tokenBalanceFromAccount(\n address: string,\n account: RawAccount | null,\n): TokenBalanceEntry | null {\n if (!account) return null;\n const data = account.data;\n if (\n typeof data !== 'object' ||\n data === null ||\n !('parsed' in data) ||\n !('program' in data)\n ) {\n return null;\n }\n const program = (data as { program?: unknown }).program;\n const parsed = (data as { parsed?: unknown }).parsed;\n if (\n (program !== 'spl-token' && program !== 'spl-token-2022') ||\n typeof parsed !== 'object' ||\n parsed === null\n ) {\n return null;\n }\n const info = (parsed as { info?: unknown; type?: unknown }).info;\n const type = (parsed as { type?: unknown }).type;\n if (type !== 'account' || typeof info !== 'object' || info === null) return null;\n const i = info as {\n mint?: unknown;\n owner?: unknown;\n tokenAmount?: { amount?: unknown; decimals?: unknown };\n };\n if (typeof i.mint !== 'string' || !i.tokenAmount) return null;\n const amountStr = i.tokenAmount.amount;\n const decimals = i.tokenAmount.decimals;\n if (typeof amountStr !== 'string' || typeof decimals !== 'number') return null;\n const symbol = resolveSymbol(i.mint);\n return {\n account: address,\n mint: i.mint,\n ...(typeof i.owner === 'string' ? { owner: i.owner } : {}),\n amount: BigInt(amountStr),\n decimals,\n tokenProgram: program === 'spl-token-2022' ? 'token-2022' : 'spl-token',\n ...(symbol !== undefined ? { symbol } : {}),\n };\n}\n\n/** Convert RPC inner-instruction groups into compiled views (already resolved keys). */\nexport function innerFromMeta(\n groups: RawInnerInstructions[] | undefined,\n accountKeys: string[],\n decodeData: (b58: string) => Uint8Array,\n isSigner: boolean[],\n isWritable: boolean[],\n): { index: number; instructions: CompiledInstructionView[] }[] {\n if (!groups) return [];\n return groups.map((g) => ({\n index: g.index,\n instructions: g.instructions.map((ix, i) => {\n const programId = accountKeys[ix.programIdIndex] ?? '';\n return {\n index: i,\n programId,\n accounts: ix.accounts.map((ai) => ({\n pubkey: accountKeys[ai] ?? '',\n isSigner: isSigner[ai] ?? false,\n isWritable: isWritable[ai] ?? false,\n })),\n data: decodeData(ix.data),\n };\n }),\n }));\n}\n","/**\n * Map a Solana transaction `err` (from getTransaction meta or simulate value)\n * into human-readable text. Best-effort; covers the common shapes.\n *\n * Examples of `err`:\n * \"AccountInUse\"\n * { InstructionError: [2, { Custom: 6001 }] }\n * { InstructionError: [0, \"InvalidAccountData\"] }\n * { InsufficientFundsForRent: { account_index: 1 } }\n */\n\nimport { knownProgram } from '../decode/known-programs.js';\nimport type { CompiledInstructionView } from '../types.js';\n\nexport function humanizeTxError(\n err: unknown,\n instructions?: CompiledInstructionView[],\n): { raw: unknown; human: string } {\n return { raw: err, human: describe(err, instructions) };\n}\n\nfunction describe(err: unknown, instructions?: CompiledInstructionView[]): string {\n if (err === null || err === undefined) return 'unknown error';\n if (typeof err === 'string') return prettifyVariant(err);\n\n if (typeof err === 'object') {\n const entries = Object.entries(err as Record<string, unknown>);\n if (entries.length === 0) return 'unknown error';\n const [key, value] = entries[0]!;\n\n if (key === 'InstructionError' && Array.isArray(value)) {\n const [idx, detail] = value as [number, unknown];\n const ix = instructions?.[idx];\n const progInfo = ix ? knownProgram(ix.programId) : undefined;\n const where = `instruction #${idx}${progInfo ? ` (${progInfo.name})` : ix ? ` (${ix.programId})` : ''}`;\n if (typeof detail === 'string') {\n return `${where} failed: ${prettifyVariant(detail)}`;\n }\n if (detail && typeof detail === 'object') {\n const dEntries = Object.entries(detail as Record<string, unknown>);\n if (dEntries.length > 0) {\n const [dKey, dVal] = dEntries[0]!;\n if (dKey === 'Custom') {\n return `${where} failed with custom program error ${String(dVal)}`;\n }\n return `${where} failed: ${dKey}${dVal !== null ? ` (${JSON.stringify(dVal)})` : ''}`;\n }\n }\n return `${where} failed`;\n }\n\n if (key === 'InsufficientFundsForRent') {\n const acc =\n value && typeof value === 'object' && 'account_index' in value\n ? ` (account #${String((value as { account_index: unknown }).account_index)})`\n : '';\n return `insufficient funds for rent${acc}`;\n }\n\n // Generic single-key object error.\n if (value === null || (typeof value === 'object' && Object.keys(value as object).length === 0)) {\n return prettifyVariant(key);\n }\n return `${prettifyVariant(key)}: ${safeJson(value)}`;\n }\n\n return String(err);\n}\n\n/** \"InvalidAccountData\" → \"invalid account data\". */\nfunction prettifyVariant(name: string): string {\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .toLowerCase();\n}\n\nfunction safeJson(v: unknown): string {\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n}\n","/**\n * Signature acquisition path: `getTransaction` → diff pre/post balances.\n *\n * We request base64 *message* encoding so we can resolve per-account roles\n * ourselves (jsonParsed doesn't expose signer/writable flags cleanly across\n * versions), but we still consume meta's pre/post (token) balances, fee,\n * innerInstructions, loadedAddresses, and err — the rich authoritative data.\n */\n\nimport { RpcError } from '../errors.js';\nimport type { Commitment, Warning } from '../types.js';\nimport type { RpcClient, RawTransactionResponse } from '../rpc/types.js';\nimport { buildAccountList, parseMessage, toInstructionViews } from '../decode/message.js';\nimport { decodeBase58, decodeBase64 } from '../input/encoding.js';\nimport {\n innerFromMeta,\n tokenBalancesFromMeta,\n type NormalizedTx,\n} from './normalize.js';\nimport { humanizeTxError } from './tx-error.js';\n\nexport interface FromSignatureArgs {\n rpc: RpcClient;\n signature: string;\n commitment: Commitment;\n maxSupportedTransactionVersion: number;\n signal?: AbortSignal;\n includeRaw?: boolean;\n}\n\nexport async function acquireFromSignature(args: FromSignatureArgs): Promise<NormalizedTx> {\n const { rpc, signature, commitment, maxSupportedTransactionVersion, signal, includeRaw } = args;\n\n const resp = await rpc.getTransaction(signature, {\n commitment,\n maxSupportedTransactionVersion,\n ...(signal ? { signal } : {}),\n });\n\n if (resp === null) {\n throw new RpcError(\n 'TX_NOT_FOUND',\n `Transaction ${signature} not found at commitment \"${commitment}\".`,\n {\n hint: 'Try --commitment finalized, verify the signature, or check you are on the right cluster.',\n },\n );\n }\n\n return normalizeSignatureResponse(resp, signature, includeRaw ?? false);\n}\n\nexport function normalizeSignatureResponse(\n resp: RawTransactionResponse,\n signature: string,\n includeRaw: boolean,\n): NormalizedTx {\n const warnings: Warning[] = [];\n const meta = resp.meta;\n\n // The base64 `message` field from getTransaction is the MESSAGE itself\n // (no leading signatures), so we parse it directly.\n const messageBytes = decodeMessageBytes(resp.transaction.message);\n const parsed = parseMessage(messageBytes);\n\n const loaded = meta?.loadedAddresses\n ? { writable: meta.loadedAddresses.writable, readonly: meta.loadedAddresses.readonly }\n : undefined;\n\n if (parsed.version === 0 && parsed.hasUnresolvedLut && !loaded) {\n warnings.push({\n code: 'lut-unresolved',\n message: 'versioned tx uses address lookup tables not resolved by the node response',\n });\n }\n\n const resolved = buildAccountList(parsed, loaded);\n const accountKeys = resolved.accountKeys;\n const instructions = toInstructionViews(parsed, resolved);\n\n const feePayer = accountKeys[0] ?? '';\n\n const preLamports = (meta?.preBalances ?? []).map((n) => BigInt(n));\n const postLamports = (meta?.postBalances ?? []).map((n) => BigInt(n));\n\n const preTokens = tokenBalancesFromMeta(meta?.preTokenBalances, accountKeys);\n const postTokens = tokenBalancesFromMeta(meta?.postTokenBalances, accountKeys);\n\n const inner = meta?.innerInstructions\n ? innerFromMeta(\n meta.innerInstructions,\n accountKeys,\n decodeBase58,\n resolved.isSigner,\n resolved.isWritable,\n )\n : [];\n if (!meta?.innerInstructions) {\n warnings.push({\n code: 'inner-instructions-missing',\n message: 'node did not return inner instructions (CPI tree unavailable)',\n });\n }\n\n const err = meta?.err ?? null;\n const success = err === null || err === undefined;\n const error = success ? undefined : humanizeTxError(err, instructions);\n\n const result: NormalizedTx = {\n source: 'signature',\n signature,\n feePayer,\n success,\n ...(error ? { error } : {}),\n slot: resp.slot,\n blockTime: resp.blockTime,\n feeLamports: BigInt(meta?.fee ?? 0),\n ...(meta?.computeUnitsConsumed !== undefined\n ? { computeUnits: meta.computeUnitsConsumed }\n : {}),\n pre: { accountKeys, lamports: preLamports, tokenBalances: preTokens },\n post: { accountKeys, lamports: postLamports, tokenBalances: postTokens },\n instructions,\n innerInstructions: inner,\n warnings,\n ...(includeRaw ? { raw: resp } : {}),\n };\n return result;\n}\n\nfunction decodeMessageBytes(message: unknown): Uint8Array {\n // base64 message encoding → [\"<base64>\", \"base64\"]\n if (Array.isArray(message) && typeof message[0] === 'string') {\n const enc = message[1];\n if (enc === 'base64') return decodeBase64(message[0]);\n if (enc === 'base58') return decodeBase58(message[0]);\n return decodeBase64(message[0]);\n }\n if (typeof message === 'string') {\n return decodeBase64(message);\n }\n // Some nodes return a structured message even when base64 requested; we can't\n // resolve roles from that here, so surface a decode error.\n throw new RpcError(\n 'RPC_JSON',\n 'Unexpected transaction.message shape; expected base64-encoded message.',\n );\n}\n","/**\n * Simulate acquisition path (unsigned/raw/instructions).\n *\n * The central asymmetry: `simulateTransaction` returns post-state for requested\n * accounts but NOT pre-state, and never preTokenBalances. So we:\n * 1. Decode the wire message → collect writable account keys.\n * 2. `getMultipleAccounts(writable)` for the PRE snapshot.\n * 3. `simulateTransaction(base64, { accounts: { addresses: writable } })` for\n * the POST snapshot + logs + unitsConsumed + err + innerInstructions.\n * 4. Synthesize pre/post token balances from jsonParsed SPL/Token-2022 states\n * on both sides, then diff identically to the signature path.\n */\n\nimport { SimulationError } from '../errors.js';\nimport type { Commitment, Warning } from '../types.js';\nimport type { RawAccount, RpcClient } from '../rpc/types.js';\nimport {\n buildAccountList,\n parseMessage,\n stripSignatures,\n toInstructionViews,\n} from '../decode/message.js';\nimport { decodeBase58, encodeBase64 } from '../input/encoding.js';\nimport {\n innerFromMeta,\n tokenBalanceFromAccount,\n type NormalizedTx,\n} from './normalize.js';\nimport { humanizeTxError } from './tx-error.js';\n\nexport interface FromSimulationArgs {\n rpc: RpcClient;\n txBytes: Uint8Array;\n commitment: Commitment;\n replaceRecentBlockhash: boolean;\n sigVerify: boolean;\n signal?: AbortSignal;\n includeRaw?: boolean;\n /** Note to attach when signatures were not verified. */\n unsignedNote?: boolean;\n}\n\nfunction accountLamports(acc: RawAccount | null): bigint {\n return acc ? BigInt(acc.lamports) : 0n;\n}\n\nexport async function acquireFromSimulation(args: FromSimulationArgs): Promise<NormalizedTx> {\n const { rpc, txBytes, commitment, replaceRecentBlockhash, sigVerify, signal, includeRaw } = args;\n\n const stripped = stripSignatures(txBytes);\n const parsed = parseMessage(stripped);\n const resolved = buildAccountList(parsed); // no loaded addresses pre-sim\n const accountKeys = resolved.accountKeys;\n const instructions = toInstructionViews(parsed, resolved);\n const feePayer = accountKeys[0] ?? '';\n\n const warnings: Warning[] = [];\n if (parsed.version === 0 && parsed.hasUnresolvedLut) {\n warnings.push({\n code: 'lut-unresolved',\n message:\n 'versioned tx references address lookup tables; simulate path diffs only resolved writable keys',\n });\n }\n // Note: with sigVerify:false (the default for unsigned simulation) signatures\n // are intentionally not checked. That is expected behavior, not a failure, so\n // we do not emit a warning for it here.\n\n // Writable account keys = pre/post snapshot targets.\n const writable = accountKeys.filter((_, i) => resolved.isWritable[i]);\n const uniqueWritable = [...new Set(writable)];\n\n // ---- PRE snapshot ----\n const preAccounts = await rpc.getMultipleAccounts(uniqueWritable, {\n commitment,\n encoding: 'jsonParsed',\n ...(signal ? { signal } : {}),\n });\n\n const txBase64 = encodeBase64(txBytes);\n\n // ---- Simulate for POST snapshot ----\n const sim = await rpc.simulateTransaction(txBase64, {\n commitment,\n sigVerify,\n replaceRecentBlockhash,\n innerInstructions: true,\n accounts: { addresses: uniqueWritable, encoding: 'jsonParsed' },\n ...(signal ? { signal } : {}),\n });\n\n const value = sim.value;\n const postAccounts = value.accounts ?? [];\n\n // Build address→pre/post lamports + token balances.\n const preLamportsByAddr = new Map<string, bigint>();\n const postLamportsByAddr = new Map<string, bigint>();\n const preTokens: NormalizedTx['pre']['tokenBalances'] = [];\n const postTokens: NormalizedTx['post']['tokenBalances'] = [];\n\n uniqueWritable.forEach((addr, i) => {\n const preAcc = preAccounts[i] ?? null;\n const postAcc = postAccounts[i] ?? null;\n preLamportsByAddr.set(addr, accountLamports(preAcc));\n // If the node didn't return a post account for an index, fall back to pre\n // (unchanged) so we don't fabricate a drain.\n postLamportsByAddr.set(addr, postAcc ? accountLamports(postAcc) : accountLamports(preAcc));\n\n const preTb = tokenBalanceFromAccount(addr, preAcc);\n if (preTb) preTokens.push(preTb);\n const postTb = tokenBalanceFromAccount(addr, postAcc);\n if (postTb) postTokens.push(postTb);\n });\n\n // Lamport arrays aligned to accountKeys order.\n const preLamports = accountKeys.map((k) => preLamportsByAddr.get(k) ?? 0n);\n const postLamports = accountKeys.map((k) => postLamportsByAddr.get(k) ?? preLamportsByAddr.get(k) ?? 0n);\n\n const inner = value.innerInstructions\n ? innerFromMeta(\n value.innerInstructions,\n accountKeys,\n decodeBase58,\n resolved.isSigner,\n resolved.isWritable,\n )\n : [];\n\n const err = value.err ?? null;\n const success = err === null || err === undefined;\n const error = success ? undefined : humanizeTxError(err, instructions);\n if (!success) {\n warnings.push({\n code: 'simulation-failed',\n message: 'simulation returned a runtime error; balance diff reflects the pre-state',\n });\n }\n\n const result: NormalizedTx = {\n source: 'simulation',\n feePayer,\n success,\n ...(error ? { error } : {}),\n slot: sim.context.slot,\n blockTime: null,\n // Simulation does not surface a fee; fee impact is visible via lamport diff.\n feeLamports: 0n,\n ...(value.unitsConsumed !== undefined ? { computeUnits: value.unitsConsumed } : {}),\n pre: { accountKeys, lamports: preLamports, tokenBalances: preTokens },\n post: { accountKeys, lamports: postLamports, tokenBalances: postTokens },\n instructions,\n innerInstructions: inner,\n warnings,\n ...(includeRaw ? { raw: sim } : {}),\n };\n return result;\n}\n\n/**\n * Detect a node *rejecting* a simulation outright (bad blockhash, missing\n * account, programs that can't simulate). The RPC layer maps some of these to\n * RpcError already; this helper converts a soft \"value.err that is a structural\n * rejection\" into a SimulationError when appropriate.\n */\nexport function rejectionToError(value: {\n err: unknown;\n logs: string[] | null;\n}): SimulationError | null {\n const err = value.err;\n if (err === null || err === undefined) return null;\n // BlockhashNotFound / SanitizeFailure are structural rejections.\n const text = typeof err === 'string' ? err : JSON.stringify(err);\n if (/BlockhashNotFound|SanitizeFailure|AccountNotFound|ProgramAccountNotFound/i.test(text)) {\n const logs = value.logs ?? [];\n return new SimulationError(\n 'SIMULATION_REJECTED',\n `Node rejected the simulation: ${humanizeTxError(err).human}`,\n { logs: logs.slice(-5) },\n );\n }\n return null;\n}\n","/**\n * Assemble a legacy wire message (with empty signature placeholders) from a set\n * of {@link ExplainInstruction}s + a fee payer, so it can be simulated.\n *\n * We build a *legacy* message (sufficient for simulation), compute the canonical\n * account ordering (signers-writable, signers-readonly, nonsigners-writable,\n * nonsigners-readonly), and emit the compact-u16 wire format.\n */\n\nimport { InputError } from '../errors.js';\nimport type { ExplainInstruction } from '../types.js';\nimport { decodeBase58, decodeBase64, looksLikeBase64 } from '../input/encoding.js';\nimport bs58 from 'bs58';\n\ninterface AccountMeta {\n pubkey: string;\n isSigner: boolean;\n isWritable: boolean;\n}\n\nfunction normalizeData(data: ExplainInstruction['data']): Uint8Array {\n if (data instanceof Uint8Array) return data;\n if (Array.isArray(data)) return Uint8Array.from(data);\n // string: prefer base58 (Solana instruction data convention) unless it looks\n // like base64.\n if (looksLikeBase64(data) && /[+/=]/.test(data)) {\n return decodeBase64(data);\n }\n try {\n return decodeBase58(data);\n } catch {\n return decodeBase64(data);\n }\n}\n\nfunction writeCompactU16(out: number[], value: number): void {\n let v = value;\n for (;;) {\n let byte = v & 0x7f;\n v >>= 7;\n if (v === 0) {\n out.push(byte);\n return;\n }\n byte |= 0x80;\n out.push(byte);\n }\n}\n\n/** Assemble a legacy message buffer from instructions + fee payer. */\nexport function buildLegacyMessage(\n instructions: ExplainInstruction[],\n feePayer: string,\n recentBlockhash: string,\n): Uint8Array {\n if (instructions.length === 0) {\n throw new InputError('EMPTY_INPUT', 'No instructions to assemble.');\n }\n\n // Collect all account metas, with the fee payer forced first + signer+writable.\n const metaByKey = new Map<string, AccountMeta>();\n const upsert = (m: AccountMeta) => {\n const cur = metaByKey.get(m.pubkey);\n if (cur) {\n cur.isSigner = cur.isSigner || m.isSigner;\n cur.isWritable = cur.isWritable || m.isWritable;\n } else {\n metaByKey.set(m.pubkey, { ...m });\n }\n };\n\n upsert({ pubkey: feePayer, isSigner: true, isWritable: true });\n for (const ix of instructions) {\n for (const a of ix.accounts) upsert({ ...a });\n // Program ids are readonly non-signers.\n upsert({ pubkey: ix.programId, isSigner: false, isWritable: false });\n }\n\n const all = [...metaByKey.values()];\n // Ensure fee payer is first.\n all.sort((a, b) => {\n if (a.pubkey === feePayer) return -1;\n if (b.pubkey === feePayer) return 1;\n // Order: signer+writable, signer+ro, nonsigner+writable, nonsigner+ro\n const rank = (m: AccountMeta) =>\n m.isSigner ? (m.isWritable ? 0 : 1) : m.isWritable ? 2 : 3;\n const r = rank(a) - rank(b);\n if (r !== 0) return r;\n return a.pubkey.localeCompare(b.pubkey);\n });\n\n const numRequiredSignatures = all.filter((m) => m.isSigner).length;\n const numReadonlySignedAccounts = all.filter((m) => m.isSigner && !m.isWritable).length;\n const numReadonlyUnsignedAccounts = all.filter((m) => !m.isSigner && !m.isWritable).length;\n\n const keyIndex = new Map<string, number>();\n all.forEach((m, i) => keyIndex.set(m.pubkey, i));\n\n const out: number[] = [];\n out.push(numRequiredSignatures, numReadonlySignedAccounts, numReadonlyUnsignedAccounts);\n\n // Account keys.\n writeCompactU16(out, all.length);\n for (const m of all) {\n const bytes = decodePubkey(m.pubkey);\n out.push(...bytes);\n }\n\n // Recent blockhash (32 bytes).\n out.push(...decodePubkey(recentBlockhash));\n\n // Instructions.\n writeCompactU16(out, instructions.length);\n for (const ix of instructions) {\n const programIdIndex = keyIndex.get(ix.programId);\n if (programIdIndex === undefined) {\n throw new InputError('INVALID_INPUT', `programId ${ix.programId} not in account list`);\n }\n out.push(programIdIndex);\n writeCompactU16(out, ix.accounts.length);\n for (const a of ix.accounts) {\n const idx = keyIndex.get(a.pubkey);\n if (idx === undefined) {\n throw new InputError('INVALID_INPUT', `account ${a.pubkey} not in account list`);\n }\n out.push(idx);\n }\n const data = normalizeData(ix.data);\n writeCompactU16(out, data.length);\n out.push(...data);\n }\n\n // Prepend empty signatures so the buffer is a full (unsigned) transaction.\n const message = Uint8Array.from(out);\n const tx: number[] = [];\n writeCompactU16(tx, numRequiredSignatures);\n for (let i = 0; i < numRequiredSignatures; i++) {\n for (let j = 0; j < 64; j++) tx.push(0);\n }\n tx.push(...message);\n return Uint8Array.from(tx);\n}\n\nfunction decodePubkey(pubkey: string): Uint8Array {\n let bytes: Uint8Array;\n try {\n bytes = bs58.decode(pubkey);\n } catch (err) {\n throw new InputError('INVALID_INPUT', `Invalid base58 pubkey: ${pubkey}`, { cause: err });\n }\n if (bytes.length !== 32) {\n throw new InputError(\n 'INVALID_INPUT',\n `Pubkey ${pubkey} decoded to ${bytes.length} bytes (expected 32).`,\n );\n }\n return bytes;\n}\n","/**\n * Pure formatting helpers: lamports→SOL, ui-amount, address shortening,\n * column alignment, number grouping. No I/O, no color.\n */\n\nconst LAMPORTS_PER_SOL = 1_000_000_000n;\n\n/** Group a non-negative integer string with thousands separators. */\nexport function groupThousands(intStr: string): string {\n const neg = intStr.startsWith('-');\n const digits = neg ? intStr.slice(1) : intStr;\n const grouped = digits.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return neg ? `-${grouped}` : grouped;\n}\n\n/** Format a base-unit bigint with `decimals` into a trimmed decimal string. */\nexport function formatUnits(amount: bigint, decimals: number): string {\n const neg = amount < 0n;\n const abs = neg ? -amount : amount;\n if (decimals <= 0) {\n return (neg ? '-' : '') + groupThousands(abs.toString());\n }\n const base = 10n ** BigInt(decimals);\n const whole = abs / base;\n const frac = abs % base;\n let fracStr = frac.toString().padStart(decimals, '0').replace(/0+$/, '');\n const wholeStr = groupThousands(whole.toString());\n const sign = neg ? '-' : '';\n return fracStr.length > 0 ? `${sign}${wholeStr}.${fracStr}` : `${sign}${wholeStr}`;\n}\n\n/** Lamports → SOL string (9 decimals, trimmed). */\nexport function lamportsToSol(lamports: bigint): string {\n return formatUnits(lamports, 9);\n}\n\n/** Lamports → SOL number of decimal places preserved; convenience for \"X SOL\". */\nexport function solLabel(lamports: bigint): string {\n return `${lamportsToSol(lamports)} SOL`;\n}\n\nexport { LAMPORTS_PER_SOL };\n\n/** A signed UI delta like `\"+1.5 SOL\"` / `\"-250 USDC\"`. */\nexport function signedUi(delta: bigint, decimals: number, symbol?: string): string {\n const sign = delta > 0n ? '+' : '';\n const body = formatUnits(delta, decimals);\n const unit = symbol ? ` ${symbol}` : '';\n return `${sign}${body}${unit}`;\n}\n\n/** Shorten a base58 address to `abcd…wxyz` (4 + 4 by default). */\nexport function shortAddr(addr: string, head = 4, tail = 4): string {\n if (addr.length <= head + tail + 1) return addr;\n return `${addr.slice(0, head)}…${addr.slice(-tail)}`;\n}\n\n/** Format a Unix seconds timestamp as `YYYY-MM-DD HH:MM UTC`. */\nexport function formatBlockTime(blockTime: number | null | undefined): string | undefined {\n if (blockTime === null || blockTime === undefined) return undefined;\n const d = new Date(blockTime * 1000);\n if (Number.isNaN(d.getTime())) return undefined;\n const pad = (n: number) => n.toString().padStart(2, '0');\n return (\n `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())} ` +\n `${pad(d.getUTCHours())}:${pad(d.getUTCMinutes())} UTC`\n );\n}\n\n/** Pad a visible string to width (ignoring ANSI is the caller's concern). */\nexport function padEndVisible(s: string, width: number): string {\n return s.length >= width ? s : s + ' '.repeat(width - s.length);\n}\n\n/** Format a count with thousands separators. */\nexport function formatCount(n: number): string {\n return groupThousands(Math.trunc(n).toString());\n}\n","/**\n * `diffBalances`: pure diff of pre/post lamport + token balances into typed\n * {@link BalanceDelta}[]. No I/O.\n *\n * - SOL deltas: by account key index (post − pre).\n * - Token deltas: keyed by token-account address + mint, matching pre/post.\n * Accounts present on only one side are created (post-only) or closed\n * (pre-only).\n */\n\nimport type { BalanceDelta, BalanceSnapshot, TokenBalanceEntry } from '../types.js';\nimport { lamportsToSol, signedUi } from '../render/format.js';\n\nfunction tokenKey(e: { account: string; mint: string }): string {\n return `${e.account}::${e.mint}`;\n}\n\nexport function diffBalances(pre: BalanceSnapshot, post: BalanceSnapshot): BalanceDelta[] {\n const deltas: BalanceDelta[] = [];\n\n // ---- SOL deltas, matched by account address (robust to index drift) ----\n const preLamportsByAddr = new Map<string, bigint>();\n for (let i = 0; i < pre.accountKeys.length; i++) {\n const key = pre.accountKeys[i];\n const lam = pre.lamports[i];\n if (key !== undefined && lam !== undefined) preLamportsByAddr.set(key, lam);\n }\n const seenAddrs = new Set<string>();\n for (let i = 0; i < post.accountKeys.length; i++) {\n const account = post.accountKeys[i];\n const postLam = post.lamports[i];\n if (account === undefined || postLam === undefined) continue;\n seenAddrs.add(account);\n const preLam = preLamportsByAddr.get(account) ?? 0n;\n const delta = postLam - preLam;\n if (delta !== 0n) {\n deltas.push({\n account,\n asset: { kind: 'SOL' },\n pre: preLam,\n post: postLam,\n delta,\n uiDelta: signedUi(delta, 9, 'SOL'),\n });\n }\n }\n // Accounts that vanished (closed) — present in pre only.\n for (const [account, preLam] of preLamportsByAddr) {\n if (seenAddrs.has(account)) continue;\n const delta = 0n - preLam;\n if (delta !== 0n) {\n deltas.push({\n account,\n asset: { kind: 'SOL' },\n pre: preLam,\n post: 0n,\n delta,\n uiDelta: signedUi(delta, 9, 'SOL'),\n });\n }\n }\n\n // ---- Token deltas, keyed by token-account + mint ----\n const preTok = new Map<string, TokenBalanceEntry>();\n for (const e of pre.tokenBalances) preTok.set(tokenKey(e), e);\n const postTok = new Map<string, TokenBalanceEntry>();\n for (const e of post.tokenBalances) postTok.set(tokenKey(e), e);\n\n const allKeys = new Set<string>([...preTok.keys(), ...postTok.keys()]);\n for (const key of allKeys) {\n const p = preTok.get(key);\n const q = postTok.get(key);\n const meta = q ?? p;\n if (!meta) continue;\n const preAmt = p?.amount ?? 0n;\n const postAmt = q?.amount ?? 0n;\n const delta = postAmt - preAmt;\n if (delta === 0n) continue;\n const decimals = meta.decimals;\n deltas.push({\n account: meta.account,\n asset: {\n kind: 'token',\n mint: meta.mint,\n decimals,\n ...(meta.symbol !== undefined ? { symbol: meta.symbol } : {}),\n tokenProgram: meta.tokenProgram,\n },\n pre: preAmt,\n post: postAmt,\n delta,\n uiDelta: signedUi(delta, decimals, meta.symbol),\n ...(meta.owner !== undefined ? { owner: meta.owner } : {}),\n });\n }\n\n // Stable-ish ordering: SOL first, then tokens, by descending |delta|.\n deltas.sort((a, b) => {\n if (a.asset.kind !== b.asset.kind) return a.asset.kind === 'SOL' ? -1 : 1;\n const am = a.delta < 0n ? -a.delta : a.delta;\n const bm = b.delta < 0n ? -b.delta : b.delta;\n return am > bm ? -1 : am < bm ? 1 : 0;\n });\n\n return deltas;\n}\n\n/** Sum SOL deltas grouped by account for summary phrasing. */\nexport function netSolByAccount(deltas: BalanceDelta[]): Map<string, bigint> {\n const m = new Map<string, bigint>();\n for (const d of deltas) {\n if (d.asset.kind === 'SOL') m.set(d.account, (m.get(d.account) ?? 0n) + d.delta);\n }\n return m;\n}\n\n/** Group token deltas by owner+mint to show net per-owner movement. */\nexport function netTokenByOwnerMint(\n deltas: BalanceDelta[],\n): Map<string, { owner: string; mint: string; decimals: number; symbol?: string; delta: bigint }> {\n const m = new Map<\n string,\n { owner: string; mint: string; decimals: number; symbol?: string; delta: bigint }\n >();\n for (const d of deltas) {\n if (d.asset.kind !== 'token') continue;\n const owner = d.owner ?? d.account;\n const key = `${owner}::${d.asset.mint}`;\n const cur = m.get(key);\n if (cur) {\n cur.delta += d.delta;\n } else {\n m.set(key, {\n owner,\n mint: d.asset.mint,\n decimals: d.asset.decimals,\n ...(d.asset.symbol !== undefined ? { symbol: d.asset.symbol } : {}),\n delta: d.delta,\n });\n }\n }\n return m;\n}\n\nexport { lamportsToSol };\n","/**\n * `correlate`: fuse decoded instructions with balance deltas into a\n * high-confidence, ordered {@link Action}[]. Pure, no I/O.\n *\n * Philosophy: the *truth* of \"what changed\" is the balance diff; instruction\n * decoding adds names and intent. When decoding is impossible we degrade to\n * diff-derived narrative, never to nothing.\n */\n\nimport type {\n Action,\n AccountCreation,\n Approval,\n BalanceDelta,\n CompiledInstructionView,\n DecodedInstruction,\n DecoderEffect,\n ProgramInvocation,\n ProgramRegistry,\n TokenBalanceEntry,\n Warning,\n} from '../types.js';\nimport { decodeInstructionRaw } from '../decode/registry.js';\nimport { knownProgram } from '../decode/known-programs.js';\nimport { formatUnits, lamportsToSol } from '../render/format.js';\nimport { isWsol, resolveSymbol } from './token-meta.js';\n\nexport interface CorrelateInput {\n instructions: CompiledInstructionView[];\n innerInstructions?: { index: number; instructions: CompiledInstructionView[] }[];\n deltas: BalanceDelta[];\n tokenBalances: TokenBalanceEntry[];\n registry: ProgramRegistry;\n}\n\nexport interface CorrelateOutput {\n decoded: DecodedInstruction[];\n actions: Action[];\n accountsCreated: AccountCreation[];\n approvals: Approval[];\n programsInvoked: ProgramInvocation[];\n warnings: Warning[];\n}\n\n/** Build a mint→decimals lookup from token balances + decoder effects. */\nfunction mintDecimals(tokenBalances: TokenBalanceEntry[]): Map<string, number> {\n const m = new Map<string, number>();\n for (const tb of tokenBalances) {\n if (!m.has(tb.mint)) m.set(tb.mint, tb.decimals);\n }\n return m;\n}\n\n/** Token account → {mint, owner, decimals, tokenProgram} from balances. */\nfunction tokenAccountMeta(\n tokenBalances: TokenBalanceEntry[],\n): Map<string, { mint: string; owner?: string; decimals: number; tokenProgram: string }> {\n const m = new Map<\n string,\n { mint: string; owner?: string; decimals: number; tokenProgram: string }\n >();\n for (const tb of tokenBalances) {\n m.set(tb.account, {\n mint: tb.mint,\n ...(tb.owner !== undefined ? { owner: tb.owner } : {}),\n decimals: tb.decimals,\n tokenProgram: tb.tokenProgram,\n });\n }\n return m;\n}\n\nfunction uiAmount(amount: bigint, decimals: number): string {\n return formatUnits(amount, decimals);\n}\n\nexport function correlate(input: CorrelateInput): CorrelateOutput {\n const { instructions, innerInstructions, deltas, tokenBalances, registry } = input;\n const decoded: DecodedInstruction[] = [];\n const actions: Action[] = [];\n const accountsCreated: AccountCreation[] = [];\n const approvals: Approval[] = [];\n const warnings: Warning[] = [];\n const invocationCounts = new Map<string, number>();\n\n const decByMint = mintDecimals(tokenBalances);\n const taMeta = tokenAccountMeta(tokenBalances);\n const innerByIndex = new Map<number, CompiledInstructionView[]>();\n for (const grp of innerInstructions ?? []) innerByIndex.set(grp.index, grp.instructions);\n\n const seenSyncNative = new Set<string>();\n\n const handleEffect = (eff: DecoderEffect): void => {\n switch (eff.kind) {\n case 'sol-transfer': {\n actions.push({\n kind: 'sol-transfer',\n from: eff.from,\n to: eff.to,\n lamports: eff.lamports,\n sol: lamportsToSol(eff.lamports),\n });\n break;\n }\n case 'token-transfer': {\n // Resolve mint/decimals from the source/dest token-account state.\n const srcMeta = taMeta.get(eff.from);\n const dstMeta = taMeta.get(eff.to);\n const mint = eff.mint || srcMeta?.mint || dstMeta?.mint || '';\n const decimals =\n eff.decimals ?? srcMeta?.decimals ?? dstMeta?.decimals ?? decByMint.get(mint);\n const symbol = mint ? resolveSymbol(mint) : undefined;\n if (decimals === undefined) {\n warnings.push({\n code: 'ambiguous-amount',\n message: `token transfer of ${eff.amount} raw units lacks decimals; shown in base units`,\n });\n }\n const dec = decimals ?? 0;\n const action: Action = {\n kind: 'token-transfer',\n from: eff.from,\n to: eff.to,\n mint,\n amount: eff.amount,\n uiAmount: uiAmount(eff.amount, dec),\n decimals: dec,\n tokenProgram: eff.tokenProgram,\n ...(symbol !== undefined ? { symbol } : {}),\n };\n actions.push(action);\n break;\n }\n case 'mint': {\n const decimals = eff.decimals ?? decByMint.get(eff.mint) ?? 0;\n actions.push({\n kind: 'mint',\n mint: eff.mint,\n to: eff.to,\n amount: eff.amount,\n uiAmount: uiAmount(eff.amount, decimals),\n });\n break;\n }\n case 'burn': {\n const decimals = eff.decimals ?? decByMint.get(eff.mint) ?? 0;\n actions.push({\n kind: 'burn',\n mint: eff.mint,\n from: eff.from,\n amount: eff.amount,\n uiAmount: uiAmount(eff.amount, decimals),\n });\n break;\n }\n case 'approval': {\n const mint = eff.mint || taMeta.get(eff.owner)?.mint || '';\n const ap: Approval = {\n owner: eff.owner,\n delegate: eff.delegate,\n mint,\n amount: eff.amount,\n ...(eff.revoke !== undefined ? { revoke: eff.revoke } : {}),\n };\n approvals.push(ap);\n actions.push({ kind: 'approval', ...ap });\n break;\n }\n case 'close-account': {\n // Reclaimed lamports = the negative SOL delta on the closed account.\n const d = deltas.find((x) => x.account === eff.account && x.asset.kind === 'SOL');\n const reclaimed = d ? -d.delta : 0n;\n actions.push({\n kind: 'close-account',\n account: eff.account,\n destination: eff.destination,\n reclaimedLamports: reclaimed > 0n ? reclaimed : 0n,\n });\n break;\n }\n case 'account-created': {\n const meta = taMeta.get(eff.address);\n const ac: AccountCreation = {\n address: eff.address,\n owner: eff.owner,\n lamports: eff.lamports ?? 0n,\n ...(eff.space !== undefined ? { space: eff.space } : {}),\n ...(eff.as !== undefined ? { as: eff.as } : meta ? { as: 'token-account' as const } : {}),\n };\n accountsCreated.push(ac);\n actions.push({ kind: 'account-created', ...ac });\n break;\n }\n case 'memo': {\n actions.push({ kind: 'memo', text: eff.text });\n break;\n }\n case 'compute-budget': {\n actions.push({\n kind: 'compute-budget',\n ...(eff.unitLimit !== undefined ? { unitLimit: eff.unitLimit } : {}),\n ...(eff.unitPriceMicroLamports !== undefined\n ? { unitPriceMicroLamports: eff.unitPriceMicroLamports }\n : {}),\n });\n break;\n }\n case 'sync-native': {\n seenSyncNative.add(eff.account);\n break;\n }\n }\n };\n\n // Decode a flat list of inner (CPI) instructions. Solana's getTransaction /\n // simulate returns innerInstructions as a flat array per top-level index, so\n // there is no nesting to recurse — we decode each child once.\n const decodeInner = (views: CompiledInstructionView[]): DecodedInstruction[] =>\n views.map((view) => {\n invocationCounts.set(view.programId, (invocationCounts.get(view.programId) ?? 0) + 1);\n const { decoded: dec, effects, warningCode } = decodeInstructionRaw(view, registry);\n if (!dec.decoded) {\n const known = knownProgram(view.programId);\n warnings.push({\n code: known ? 'partial-decode' : 'unknown-program',\n message: dec.warning ?? (known ? `${known.name} not byte-decoded` : 'unknown program'),\n instructionIndex: view.index,\n });\n } else if (warningCode) {\n warnings.push({\n code: warningCode,\n message: dec.warning ?? 'partial decode',\n instructionIndex: view.index,\n });\n }\n for (const eff of effects) handleEffect(eff);\n return dec;\n });\n\n // Top-level instructions (+ their inner CPI children).\n for (const view of instructions) {\n invocationCounts.set(view.programId, (invocationCounts.get(view.programId) ?? 0) + 1);\n const { decoded: dec, effects, warningCode } = decodeInstructionRaw(view, registry);\n\n if (!dec.decoded) {\n const known = knownProgram(view.programId);\n warnings.push({\n code: known ? 'partial-decode' : 'unknown-program',\n message: dec.warning ?? (known ? `${known.name} not byte-decoded` : 'unknown program'),\n instructionIndex: view.index,\n });\n // Best-effort: emit a program-call action so the instruction isn't silent.\n actions.push({\n kind: 'program-call',\n programId: view.programId,\n ...(known ? { program: known.name } : {}),\n ...(known\n ? { note: 'effect inferred from balance diff (no IDL)' }\n : { note: 'unknown program; see balance changes' }),\n });\n } else if (warningCode) {\n warnings.push({\n code: warningCode,\n message: dec.warning ?? 'partial decode',\n instructionIndex: view.index,\n });\n }\n\n for (const eff of effects) handleEffect(eff);\n\n const inner = innerByIndex.get(view.index);\n if (inner && inner.length > 0) {\n dec.inner = decodeInner(inner);\n }\n\n decoded.push(dec);\n }\n\n // wSOL recognition: if a sync-native happened on an account whose mint is\n // wSOL, annotate any token-transfer on that account as SOL↔wSOL.\n if (seenSyncNative.size > 0) {\n for (const action of actions) {\n if (action.kind === 'token-transfer' && isWsol(action.mint)) {\n // Leave the token-transfer but ensure symbol reads wSOL.\n if (!action.symbol) action.symbol = 'wSOL';\n }\n }\n }\n\n // Account created AND closed within the same tx (e.g. wSOL wrap/unwrap):\n // note it explicitly.\n const createdAddrs = new Set(accountsCreated.map((a) => a.address));\n for (const action of actions) {\n if (action.kind === 'close-account' && createdAddrs.has(action.account)) {\n warnings.push({\n code: 'partial-decode',\n message: `account ${action.account} was created and closed within this transaction (temporary ATA)`,\n });\n }\n }\n\n // Self-transfer note (from == to) → no net movement.\n for (const action of actions) {\n if (\n (action.kind === 'sol-transfer' || action.kind === 'token-transfer') &&\n action.from === action.to\n ) {\n warnings.push({\n code: 'ambiguous-amount',\n message: 'no net token movement (self-transfer)',\n });\n }\n }\n\n const programsInvoked: ProgramInvocation[] = [...invocationCounts.entries()].map(\n ([programId, count]) => {\n const known = knownProgram(programId);\n return { programId, ...(known ? { name: known.name } : {}), count };\n },\n );\n\n return { decoded, actions, accountsCreated, approvals, programsInvoked, warnings };\n}\n","/**\n * `summarize`: one-line plain-English headline using priority heuristics:\n * swap > transfer > mint/burn > approval > account-creation > program-call.\n * Always phrased from `focusAccount` when given (else the fee payer).\n */\n\nimport type { Action, BalanceDelta, ProgramInvocation } from '../types.js';\nimport { formatUnits, lamportsToSol, shortAddr } from '../render/format.js';\nimport { netSolByAccount, netTokenByOwnerMint } from './diff.js';\n\nexport interface SummarizeInput {\n actions: Action[];\n deltas: BalanceDelta[];\n programsInvoked: ProgramInvocation[];\n feePayer: string;\n feeLamports: bigint;\n success: boolean;\n error?: { human: string };\n focusAccount?: string;\n}\n\nfunction aggregatorName(programs: ProgramInvocation[]): string | undefined {\n // Prefer an aggregator (Jupiter) over a raw AMM for the headline.\n const agg = programs.find((p) => p.name && isAggregator(p.name));\n if (agg?.name) return agg.name;\n const amm = programs.find((p) => p.name && isAmm(p.name));\n return amm?.name;\n}\n\nfunction isAggregator(name: string): boolean {\n return /jupiter/i.test(name);\n}\nfunction isAmm(name: string): boolean {\n return /raydium|orca|whirlpool|phoenix|meteora/i.test(name);\n}\n\nexport function summarize(input: SummarizeInput): string {\n const { actions, deltas, programsInvoked, feePayer, feeLamports, success, error, focusAccount } =\n input;\n const focus = focusAccount ?? feePayer;\n const feeSol = lamportsToSol(feeLamports);\n const feeSuffix = feeLamports > 0n ? `, paid ${feeSol} SOL fee` : '';\n\n if (!success) {\n const why = error?.human ? `: ${error.human}` : '';\n return `Transaction FAILED${why}. ${feeLamports > 0n ? `Fee of ${feeSol} SOL was still charged.` : ''}`.trim();\n }\n\n const solByAcc = netSolByAccount(deltas);\n const tokByOwner = netTokenByOwnerMint(deltas);\n\n // \"Meaningful\" deltas exclude a delta that is ONLY the fee on the fee payer,\n // so a memo/compute-only tx (whose only balance change is the fee) is\n // narrated as such rather than as an opaque \"balance changed\".\n const meaningfulDeltas = deltas.filter((d) => {\n if (d.asset.kind === 'token') return true;\n if (d.account !== feePayer) return true;\n return d.delta !== -feeLamports;\n });\n\n // ---- Swap detection: a DEX/aggregator program + focus account has one ----\n // token going out and another coming in (or SOL ↔ token).\n const hasDex = programsInvoked.some((p) => p.name && (isAggregator(p.name) || isAmm(p.name)));\n if (hasDex) {\n const dexName = aggregatorName(programsInvoked) ?? 'a DEX';\n const focusGains: string[] = [];\n const focusLosses: string[] = [];\n // SOL movement on focus (excluding fee — fee already separate-ish; we just\n // describe magnitude).\n const solDelta = solByAcc.get(focus);\n if (solDelta !== undefined && solDelta !== 0n) {\n const label = `${formatUnits(absBig(solDelta), 9)} SOL`;\n (solDelta > 0n ? focusGains : focusLosses).push(label);\n }\n for (const t of tokByOwner.values()) {\n if (t.owner !== focus || t.delta === 0n) continue;\n const label = `${formatUnits(absBig(t.delta), t.decimals)} ${t.symbol ?? shortAddr(t.mint)}`;\n (t.delta > 0n ? focusGains : focusLosses).push(label);\n }\n if (focusLosses.length > 0 && focusGains.length > 0) {\n return `Swapped ${focusLosses.join(' + ')} for ${focusGains.join(' + ')} via ${dexName}${feeSuffix}.`;\n }\n if (focusGains.length > 0 || focusLosses.length > 0) {\n const moved = [...focusGains, ...focusLosses].join(', ');\n return `Routed ${moved} via ${dexName}${feeSuffix}.`;\n }\n }\n\n // ---- Transfer: prefer the largest concrete transfer action ----\n const tokenTransfers = actions.filter((a) => a.kind === 'token-transfer');\n const solTransfers = actions.filter((a) => a.kind === 'sol-transfer');\n\n if (tokenTransfers.length > 0) {\n const biggest = tokenTransfers\n .slice()\n .sort((a, b) => (a.amount > b.amount ? -1 : 1))[0]!;\n const sym = biggest.symbol ?? shortAddr(biggest.mint);\n const dirNote =\n biggest.from === biggest.to ? ' (self-transfer, no net movement)' : '';\n const count =\n tokenTransfers.length > 1 ? ` (+${tokenTransfers.length - 1} more transfer${tokenTransfers.length - 1 > 1 ? 's' : ''})` : '';\n return `Transferred ${biggest.uiAmount} ${sym} from ${shortAddr(biggest.from)} to ${shortAddr(biggest.to)}${dirNote}${count}${feeSuffix}.`;\n }\n\n if (solTransfers.length > 0) {\n const total = solTransfers.reduce((acc, a) => acc + a.lamports, 0n);\n if (solTransfers.length === 1) {\n const a = solTransfers[0]!;\n return `Sent ${a.sol} SOL from ${shortAddr(a.from)} to ${shortAddr(a.to)}${feeSuffix}.`;\n }\n return `Made ${solTransfers.length} SOL transfers totaling ${lamportsToSol(total)} SOL${feeSuffix}.`;\n }\n\n // ---- Mint / burn ----\n const mints = actions.filter((a) => a.kind === 'mint');\n const burns = actions.filter((a) => a.kind === 'burn');\n if (mints.length > 0) {\n const m = mints[0]!;\n return `Minted ${m.uiAmount} of ${shortAddr(m.mint)} to ${shortAddr(m.to)}${feeSuffix}.`;\n }\n if (burns.length > 0) {\n const b = burns[0]!;\n return `Burned ${b.uiAmount} of ${shortAddr(b.mint)}${feeSuffix}.`;\n }\n\n // ---- Approvals ----\n const approvals = actions.filter((a) => a.kind === 'approval');\n if (approvals.length > 0) {\n const ap = approvals[0]!;\n if (ap.revoke) {\n return `Revoked token delegate approval${feeSuffix}.`;\n }\n const amt = ap.amount === 'unlimited' ? 'unlimited' : ap.amount.toString();\n return `Approved delegate ${shortAddr(ap.delegate)} to spend ${amt} tokens${feeSuffix}.`;\n }\n\n // ---- Account creation ----\n const created = actions.filter((a) => a.kind === 'account-created');\n if (created.length > 0) {\n const what = created.some((c) => c.kind === 'account-created' && c.as === 'ata')\n ? 'associated token account'\n : 'account';\n const plural = created.length > 1 ? `${created.length} accounts` : `an ${what}`;\n return `Created ${plural}${feeSuffix}.`;\n }\n\n // ---- Compute / memo only ----\n const memos = actions.filter((a) => a.kind === 'memo');\n const cb = actions.filter((a) => a.kind === 'compute-budget');\n if (memos.length > 0 && meaningfulDeltas.length === 0) {\n const text = memos[0]!.kind === 'memo' ? memos[0]!.text : '';\n const memoNote = `attached memo \"${text}\"`;\n return cb.length > 0 ? `Set compute budget; ${memoNote}${feeSuffix}.` : `${capitalize(memoNote)}${feeSuffix}.`;\n }\n if (\n cb.length > 0 &&\n meaningfulDeltas.length === 0 &&\n actions.every((a) => a.kind === 'compute-budget')\n ) {\n return `Set compute budget only; no balance changes${feeSuffix}.`;\n }\n\n // ---- Program-call fallback ----\n const calls = actions.filter((a) => a.kind === 'program-call');\n if (calls.length > 0) {\n const named = calls.find((c) => c.kind === 'program-call' && c.program);\n const name =\n named && named.kind === 'program-call' && named.program\n ? named.program\n : shortAddr(calls[0]!.kind === 'program-call' ? calls[0]!.programId : '');\n if (deltas.length > 0) {\n return `Interacted with ${name}; see balance changes for the net effect${feeSuffix}.`;\n }\n return `Called ${name} (no net balance change)${feeSuffix}.`;\n }\n\n // ---- Last resort ----\n if (meaningfulDeltas.length > 0) {\n return `Transaction changed ${meaningfulDeltas.length} balance${meaningfulDeltas.length > 1 ? 's' : ''}${feeSuffix}.`;\n }\n return `Transaction succeeded with no net balance change${feeSuffix}.`;\n}\n\nfunction absBig(n: bigint): bigint {\n return n < 0n ? -n : n;\n}\n\nfunction capitalize(s: string): string {\n return s.length === 0 ? s : s[0]!.toUpperCase() + s.slice(1);\n}\n","/**\n * Top-level orchestrators: `explain`, `explainSignature`, `explainTransaction`,\n * `explainInstructions`, and the pure `buildExplanation`.\n *\n * Behavioral contracts:\n * - All public async functions reject ONLY with a SolanaExplainError subclass.\n * - A failed/reverted tx still returns a fully-populated ExplainResult\n * (success:false); it does NOT throw.\n * - explainSignature on a missing sig throws RpcError TX_NOT_FOUND.\n * - Simulation the node outright rejects throws SimulationError.\n */\n\nimport {\n InputError,\n SimulationError,\n SolanaExplainError,\n wrapError,\n} from './errors.js';\nimport type {\n Commitment,\n ExplainInput,\n ExplainInstruction,\n ExplainInstructionsOptions,\n ExplainOptions,\n ExplainResult,\n ExplainSignatureOptions,\n ExplainTransactionOptions,\n ProgramRegistry,\n RpcClient,\n} from './types.js';\nimport { createHttpRpc } from './rpc/http.js';\nimport { defaultRegistry } from './decode/registry.js';\nimport { detectInput, detectTxBytes } from './input/detect.js';\nimport { acquireFromSignature } from './acquire/from-signature.js';\nimport { acquireFromSimulation } from './acquire/from-simulation.js';\nimport type { NormalizedTx } from './acquire/normalize.js';\nimport { buildLegacyMessage } from './decode/build-message.js';\nimport { diffBalances } from './explain/diff.js';\nimport { correlate } from './explain/correlate.js';\nimport { summarize } from './explain/summarize.js';\nimport { resolveSymbol } from './explain/token-meta.js';\n\nfunction resolveRpc(rpc: string | RpcClient, timeoutMs: number): RpcClient {\n if (typeof rpc === 'string') {\n return createHttpRpc(rpc, { timeoutMs });\n }\n return rpc;\n}\n\nfunction resolveRegistry(opts: ExplainOptions): ProgramRegistry {\n if (opts.registry) {\n return defaultRegistry.merge(opts.registry.list());\n }\n return defaultRegistry;\n}\n\nfunction clampTimeout(timeoutMs: number | undefined): { value: number; warning?: string } {\n const def = 30_000;\n if (timeoutMs === undefined) return { value: def };\n if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n return { value: def, warning: `invalid timeout ${timeoutMs}; using ${def}ms` };\n }\n const min = 1_000;\n const max = 600_000;\n if (timeoutMs < min) return { value: min, warning: `timeout clamped up to ${min}ms` };\n if (timeoutMs > max) return { value: max, warning: `timeout clamped down to ${max}ms` };\n return { value: timeoutMs };\n}\n\n/** Pure: given pre/post balances + decoded instructions, produce the narrative. */\nexport function buildExplanation(input: ExplainInput): ExplainResult {\n const deltas = diffBalances(input.pre, input.post);\n\n // Enrich token deltas with known symbols if absent.\n for (const d of deltas) {\n if (d.asset.kind === 'token' && d.asset.symbol === undefined) {\n const sym = resolveSymbol(d.asset.mint);\n if (sym) d.asset.symbol = sym;\n }\n }\n\n const allTokenBalances = [...input.pre.tokenBalances, ...input.post.tokenBalances];\n\n const correlation = correlate({\n instructions: input.instructions,\n ...(input.innerInstructions ? { innerInstructions: input.innerInstructions } : {}),\n deltas,\n tokenBalances: allTokenBalances,\n registry: input.registry,\n });\n\n const summary = summarize({\n actions: correlation.actions,\n deltas,\n programsInvoked: correlation.programsInvoked,\n feePayer: input.feePayer,\n feeLamports: input.feeLamports,\n success: input.success,\n ...(input.error ? { error: input.error } : {}),\n ...(input.focusAccount ? { focusAccount: input.focusAccount } : {}),\n });\n\n const warnings = [...(input.warnings ?? []), ...correlation.warnings];\n\n const result: ExplainResult = {\n source: input.source,\n ...(input.signature ? { signature: input.signature } : {}),\n success: input.success,\n ...(input.error ? { error: input.error } : {}),\n ...(input.slot !== undefined ? { slot: input.slot } : {}),\n ...(input.blockTime !== undefined ? { blockTime: input.blockTime } : {}),\n feeLamports: input.feeLamports,\n ...(input.computeUnits !== undefined ? { computeUnits: input.computeUnits } : {}),\n feePayer: input.feePayer,\n summary,\n actions: correlation.actions,\n balanceChanges: deltas,\n instructions: correlation.decoded,\n accountsCreated: correlation.accountsCreated,\n approvals: correlation.approvals,\n programsInvoked: correlation.programsInvoked,\n warnings,\n ...(input.includeRaw && input.raw !== undefined ? { raw: input.raw } : {}),\n };\n return result;\n}\n\nfunction normalizedToResult(\n norm: NormalizedTx,\n registry: ProgramRegistry,\n opts: ExplainOptions,\n extraWarnings: { code: import('./types.js').WarningCode; message: string }[],\n): ExplainResult {\n const input: ExplainInput = {\n source: norm.source,\n ...(norm.signature ? { signature: norm.signature } : {}),\n feePayer: norm.feePayer,\n success: norm.success,\n ...(norm.error ? { error: norm.error } : {}),\n ...(norm.slot !== undefined ? { slot: norm.slot } : {}),\n blockTime: norm.blockTime ?? null,\n feeLamports: norm.feeLamports,\n ...(norm.computeUnits !== undefined ? { computeUnits: norm.computeUnits } : {}),\n pre: norm.pre,\n post: norm.post,\n instructions: norm.instructions,\n ...(norm.innerInstructions ? { innerInstructions: norm.innerInstructions } : {}),\n registry,\n ...(opts.focusAccount ? { focusAccount: opts.focusAccount } : {}),\n warnings: [...norm.warnings, ...extraWarnings],\n ...(opts.includeRaw && norm.raw !== undefined ? { raw: norm.raw } : {}),\n ...(opts.includeRaw ? { includeRaw: true } : {}),\n };\n const result = buildExplanation(input);\n // Record the commitment a signature was read at, so the renderer tells the\n // truth instead of assuming 'confirmed'. (Simulation has no commitment.)\n if (norm.source === 'signature' && opts.commitment) {\n result.commitment = opts.commitment;\n }\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// explainSignature\n// ---------------------------------------------------------------------------\n\nexport async function explainSignature(\n signature: string,\n options: ExplainSignatureOptions,\n): Promise<ExplainResult> {\n try {\n const { value: timeoutMs, warning } = clampTimeout(options.timeoutMs);\n const rpc = resolveRpc(options.rpc, timeoutMs);\n const registry = resolveRegistry(options);\n const commitment: Commitment = options.commitment ?? 'confirmed';\n\n const norm = await acquireFromSignature({\n rpc,\n signature,\n commitment,\n maxSupportedTransactionVersion: options.maxSupportedTransactionVersion ?? 0,\n ...(options.signal ? { signal: options.signal } : {}),\n ...(options.includeRaw ? { includeRaw: true } : {}),\n });\n\n const extra = warning ? [{ code: 'version-skew' as const, message: warning }] : [];\n return normalizedToResult(norm, registry, options, extra);\n } catch (err) {\n throw asExplainError(err, 'failed to explain signature');\n }\n}\n\n// ---------------------------------------------------------------------------\n// explainTransaction\n// ---------------------------------------------------------------------------\n\nexport async function explainTransaction(\n tx: string | Uint8Array,\n options: ExplainTransactionOptions,\n): Promise<ExplainResult> {\n try {\n const { value: timeoutMs, warning } = clampTimeout(options.timeoutMs);\n const rpc = resolveRpc(options.rpc, timeoutMs);\n const registry = resolveRegistry(options);\n const commitment: Commitment = options.commitment ?? 'confirmed';\n\n let bytes: Uint8Array;\n let ambiguous = false;\n if (tx instanceof Uint8Array) {\n const det = detectInput(tx);\n if (det.kind !== 'tx-bytes') {\n throw new InputError('INVALID_INPUT', 'Provided bytes are not a serialized transaction.');\n }\n bytes = det.bytes;\n } else {\n const det = detectTxBytes(tx, options.encoding ?? 'auto');\n bytes = det.bytes;\n ambiguous = det.ambiguous;\n }\n\n const norm = await acquireFromSimulation({\n rpc,\n txBytes: bytes,\n commitment,\n replaceRecentBlockhash: options.replaceRecentBlockhash ?? true,\n sigVerify: options.sigVerify ?? false,\n ...(options.signal ? { signal: options.signal } : {}),\n ...(options.includeRaw ? { includeRaw: true } : {}),\n });\n\n const extra: { code: import('./types.js').WarningCode; message: string }[] = [];\n if (ambiguous) {\n extra.push({\n code: 'version-skew',\n message: 'input was decodable as both base64 and base58; interpreted as base64',\n });\n }\n if (warning) extra.push({ code: 'version-skew', message: warning });\n\n return normalizedToResult(norm, registry, options, extra);\n } catch (err) {\n throw asExplainError(err, 'failed to explain transaction');\n }\n}\n\n// ---------------------------------------------------------------------------\n// explainInstructions\n// ---------------------------------------------------------------------------\n\nexport async function explainInstructions(\n instructions: ExplainInstruction[],\n options: ExplainInstructionsOptions,\n): Promise<ExplainResult> {\n try {\n if (!options.feePayer || options.feePayer.trim().length === 0) {\n throw new InputError(\n 'INVALID_INPUT',\n 'feePayer is required to assemble a simulatable message from instructions.',\n { hint: 'Pass options.feePayer with the payer pubkey.' },\n );\n }\n if (!Array.isArray(instructions) || instructions.length === 0) {\n throw new InputError('EMPTY_INPUT', 'No instructions provided.');\n }\n\n const { value: timeoutMs, warning } = clampTimeout(options.timeoutMs);\n const rpc = resolveRpc(options.rpc, timeoutMs);\n const registry = resolveRegistry(options);\n const commitment: Commitment = options.commitment ?? 'confirmed';\n\n // Need a recent blockhash to assemble a simulatable message; replaced by\n // the node anyway (replaceRecentBlockhash:true).\n let blockhash: string;\n try {\n const bh = await rpc.getLatestBlockhash({\n commitment,\n ...(options.signal ? { signal: options.signal } : {}),\n });\n blockhash = bh.blockhash;\n } catch {\n // Fall back to an all-1s placeholder; node will replace it.\n blockhash = '11111111111111111111111111111111';\n }\n\n const txBytes = buildLegacyMessage(instructions, options.feePayer, blockhash);\n\n const norm = await acquireFromSimulation({\n rpc,\n txBytes,\n commitment,\n replaceRecentBlockhash: true,\n sigVerify: false,\n ...(options.signal ? { signal: options.signal } : {}),\n ...(options.includeRaw ? { includeRaw: true } : {}),\n });\n\n const extra = warning ? [{ code: 'version-skew' as const, message: warning }] : [];\n return normalizedToResult(norm, registry, options, extra);\n } catch (err) {\n throw asExplainError(err, 'failed to explain instructions');\n }\n}\n\n// ---------------------------------------------------------------------------\n// explain (auto-detect)\n// ---------------------------------------------------------------------------\n\nexport async function explain(\n input: string | Uint8Array | ExplainInstruction[],\n options: ExplainOptions,\n): Promise<ExplainResult> {\n try {\n const detected = detectInput(input);\n switch (detected.kind) {\n case 'signature':\n return await explainSignature(detected.signature, options as ExplainSignatureOptions);\n case 'tx-bytes':\n return await explainTransaction(detected.bytes, {\n ...options,\n encoding: detected.encoding,\n });\n case 'instruction-set': {\n const opts = options as ExplainInstructionsOptions;\n if (!opts.feePayer) {\n throw new InputError(\n 'INVALID_INPUT',\n 'Instruction-set input requires options.feePayer.',\n { hint: 'Add feePayer to options.' },\n );\n }\n return await explainInstructions(detected.instructions, opts);\n }\n }\n } catch (err) {\n throw asExplainError(err, 'failed to explain input');\n }\n}\n\n/** Ensure only SolanaExplainError subclasses escape. */\nfunction asExplainError(err: unknown, context: string): SolanaExplainError {\n if (err instanceof SolanaExplainError) return err;\n return wrapError(err, 'INVALID_INPUT', context);\n}\n\nexport { SimulationError };\n","/**\n * Tiny hand-rolled ANSI styler (~no deps). Color auto-detection built in:\n * off when not a TTY, when `NO_COLOR` is set, or when explicitly disabled.\n */\n\nconst ESC = `${String.fromCharCode(27)}[`;\nconst RESET = `${ESC}0m`;\n\nconst CODES = {\n bold: `${ESC}1m`,\n dim: `${ESC}2m`,\n red: `${ESC}31m`,\n green: `${ESC}32m`,\n yellow: `${ESC}33m`,\n blue: `${ESC}34m`,\n magenta: `${ESC}35m`,\n cyan: `${ESC}36m`,\n gray: `${ESC}90m`,\n // VTX brand blue (#3182ce) via 256-color approximation.\n brand: `${ESC}38;5;33m`,\n} as const;\n\nexport type StyleName = keyof typeof CODES;\n\nexport interface Styler {\n enabled: boolean;\n bold(s: string): string;\n dim(s: string): string;\n red(s: string): string;\n green(s: string): string;\n yellow(s: string): string;\n blue(s: string): string;\n magenta(s: string): string;\n cyan(s: string): string;\n gray(s: string): string;\n brand(s: string): string;\n}\n\nfunction wrap(enabled: boolean, code: string, s: string): string {\n return enabled ? `${code}${s}${RESET}` : s;\n}\n\nexport function createStyler(enabled: boolean): Styler {\n return {\n enabled,\n bold: (s) => wrap(enabled, CODES.bold, s),\n dim: (s) => wrap(enabled, CODES.dim, s),\n red: (s) => wrap(enabled, CODES.red, s),\n green: (s) => wrap(enabled, CODES.green, s),\n yellow: (s) => wrap(enabled, CODES.yellow, s),\n blue: (s) => wrap(enabled, CODES.blue, s),\n magenta: (s) => wrap(enabled, CODES.magenta, s),\n cyan: (s) => wrap(enabled, CODES.cyan, s),\n gray: (s) => wrap(enabled, CODES.gray, s),\n brand: (s) => wrap(enabled, CODES.brand, s),\n };\n}\n\n/**\n * Decide whether color should be on, given an explicit preference and the\n * environment. Explicit `true`/`false` wins; otherwise auto-detect.\n */\nexport function shouldUseColor(opts: {\n explicit?: boolean;\n isTTY?: boolean;\n env?: NodeJS.ProcessEnv;\n}): boolean {\n if (opts.explicit !== undefined) return opts.explicit;\n const env = opts.env ?? {};\n if (env['NO_COLOR'] !== undefined && env['NO_COLOR'] !== '') return false;\n if (env['FORCE_COLOR'] !== undefined && env['FORCE_COLOR'] !== '0' && env['FORCE_COLOR'] !== '') {\n return true;\n }\n return Boolean(opts.isTTY);\n}\n\nconst ANSI_RE = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`, 'g');\n\n/** Strip ANSI escape codes from a string (for width calc / tests). */\nexport function stripAnsi(s: string): string {\n return s.replace(ANSI_RE, '');\n}\n","/**\n * Pure rendering helpers. No I/O.\n * - renderText: sectioned, aligned, optionally colorized\n * - renderMarkdown: GitHub-flavored markdown (great for issues / PRs)\n * - renderJson: BigInt-safe JSON serializer\n *\n * This module is the `@vtx-labs/solana-explain/render` entry point.\n */\n\nimport type { Action, BalanceDelta, ExplainResult, RenderOptions } from '../types.js';\nimport { createStyler, stripAnsi } from './ansi.js';\nimport {\n formatBlockTime,\n formatCount,\n groupThousands,\n lamportsToSol,\n shortAddr,\n} from './format.js';\n\nexport { shouldUseColor, stripAnsi, createStyler } from './ansi.js';\nexport {\n lamportsToSol,\n formatUnits,\n signedUi,\n shortAddr,\n formatBlockTime,\n} from './format.js';\n\nconst INDENT = ' ';\n\n/** Render the human-readable, optionally colorized report. */\nexport function renderText(result: ExplainResult, opts: RenderOptions = {}): string {\n const s = createStyler(opts.color ?? false);\n const lines: string[] = [];\n\n if (opts.quiet) {\n return result.summary;\n }\n\n // Header line.\n const commitmentNote =\n result.source === 'simulation' ? 'simulation' : (result.commitment ?? 'confirmed');\n const when = formatBlockTime(result.blockTime);\n const headParts = [\n `Solana transaction`,\n commitmentNote,\n result.slot !== undefined ? `slot ${formatCount(result.slot)}` : undefined,\n when,\n ].filter(Boolean);\n lines.push('');\n lines.push(`${INDENT}${s.brand(headParts.join(' · '))}`);\n\n // Signature + status.\n const status = result.success ? s.green('✓ Success') : s.red('✗ Failed');\n if (result.signature) {\n lines.push(`${INDENT}${s.dim('Signature')} ${shortAddr(result.signature, 6, 6)} ${status}`);\n } else {\n lines.push(`${INDENT}${s.dim('Source')} ${result.source} ${status}`);\n }\n lines.push('');\n\n // Summary.\n lines.push(`${INDENT}${s.bold('Summary')} ${result.summary}`);\n\n if (!result.success && result.error) {\n lines.push(`${INDENT}${s.red('Error')} ${result.error.human}`);\n }\n\n // Balance changes.\n if (result.balanceChanges.length > 0) {\n lines.push('');\n lines.push(`${INDENT}${s.bold('Balance changes')}`);\n for (const d of groupBalances(result.balanceChanges, result.feePayer)) {\n const label = d.label;\n const focusTag =\n d.account === result.feePayer ? s.dim(' (fee payer)') : '';\n const colored = colorDelta(d.text, s);\n lines.push(`${INDENT}${INDENT}${padRight(label, 22)}${colored}${focusTag}`);\n }\n }\n\n // Actions.\n if (result.actions.length > 0) {\n lines.push('');\n lines.push(`${INDENT}${s.bold('Actions')}`);\n result.actions.forEach((a, i) => {\n lines.push(`${INDENT}${INDENT}${i + 1}. ${describeAction(a)}`);\n });\n }\n\n // Verbose: instruction tree.\n if (opts.verbose && result.instructions.length > 0) {\n lines.push('');\n lines.push(`${INDENT}${s.bold('Instructions')}`);\n for (const ix of result.instructions) {\n renderInstruction(ix, lines, s, 2);\n }\n }\n\n // Programs.\n if (result.programsInvoked.length > 0) {\n const names = result.programsInvoked\n .map((p) => p.name ?? shortAddr(p.programId))\n .filter((v, idx, arr) => arr.indexOf(v) === idx);\n lines.push('');\n lines.push(`${INDENT}${s.bold('Programs')} ${names.join(' · ')}`);\n }\n\n // Fee + compute.\n const feeStr = `${lamportsToSol(result.feeLamports)} SOL`;\n const computeStr =\n result.computeUnits !== undefined ? `${formatCount(result.computeUnits)} units` : 'n/a';\n lines.push(`${INDENT}${s.bold('Fee')} ${feeStr}${' '.repeat(8)}${s.bold('Compute')} ${computeStr}`);\n\n // Warnings.\n if (result.warnings.length > 0) {\n lines.push('');\n lines.push(`${INDENT}${s.yellow(`⚠ ${result.warnings.length} warning${result.warnings.length > 1 ? 's' : ''}`)}`);\n for (const w of result.warnings) {\n const at = w.instructionIndex !== undefined ? ` [ix #${w.instructionIndex}]` : '';\n lines.push(`${INDENT}${INDENT}${s.dim('·')} ${w.message}${s.dim(at)}`);\n }\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nfunction renderInstruction(\n ix: ExplainResult['instructions'][number],\n lines: string[],\n s: ReturnType<typeof createStyler>,\n depth: number,\n): void {\n const pad = INDENT.repeat(depth);\n const name = ix.program ?? shortAddr(ix.programId);\n const type = ix.type ? `.${ix.type}` : '';\n const mark = ix.decoded ? '' : s.dim(' (not decoded)');\n lines.push(`${pad}${s.cyan(`#${ix.index}`)} ${name}${type}${mark}`);\n if (ix.args && Object.keys(ix.args).length > 0) {\n const argStr = Object.entries(ix.args)\n .map(([k, v]) => `${k}=${String(v)}`)\n .join(', ');\n lines.push(`${pad}${INDENT}${s.dim(argStr)}`);\n }\n if (ix.inner) {\n for (const inner of ix.inner) renderInstruction(inner, lines, s, depth + 1);\n }\n}\n\ninterface GroupedBalance {\n account: string;\n label: string;\n text: string;\n}\n\nfunction groupBalances(deltas: BalanceDelta[], feePayer: string): GroupedBalance[] {\n // Group by account; combine SOL + token deltas onto one line per account.\n const byAccount = new Map<string, BalanceDelta[]>();\n for (const d of deltas) {\n const list = byAccount.get(d.account) ?? [];\n list.push(d);\n byAccount.set(d.account, list);\n }\n const out: GroupedBalance[] = [];\n for (const [account, list] of byAccount) {\n const text = list.map((d) => d.uiDelta).join(' ');\n const isFee = account === feePayer;\n out.push({ account, label: shortAddr(account, 4, 4) + (isFee ? '' : ''), text });\n }\n return out;\n}\n\nfunction colorDelta(text: string, s: ReturnType<typeof createStyler>): string {\n return text\n .split(' ')\n .map((part) =>\n part.trim().startsWith('-') ? s.red(part) : part.trim().startsWith('+') ? s.green(part) : part,\n )\n .join(' ');\n}\n\nfunction padRight(str: string, width: number): string {\n const visible = stripAnsi(str);\n return visible.length >= width ? str : str + ' '.repeat(width - visible.length);\n}\n\n/** Human one-liner for an action. */\nexport function describeAction(a: Action): string {\n switch (a.kind) {\n case 'sol-transfer':\n return `Transfer ${a.sol} SOL ${shortAddr(a.from)} → ${shortAddr(a.to)}`;\n case 'token-transfer': {\n const sym = a.symbol ?? shortAddr(a.mint);\n const self = a.from === a.to ? ' (self-transfer)' : '';\n return `Transfer ${a.uiAmount} ${sym} ${shortAddr(a.from)} → ${shortAddr(a.to)}${self}`;\n }\n case 'mint':\n return `Mint ${a.uiAmount} of ${shortAddr(a.mint)} → ${shortAddr(a.to)}`;\n case 'burn':\n return `Burn ${a.uiAmount} of ${shortAddr(a.mint)} from ${shortAddr(a.from)}`;\n case 'account-created': {\n const as = a.as ? ` (${a.as})` : '';\n return `Create account ${shortAddr(a.address)}${as} owned by ${shortAddr(a.owner)}`;\n }\n case 'approval':\n if (a.revoke) return `Revoke delegate on ${shortAddr(a.owner)}`;\n return `Approve ${a.amount === 'unlimited' ? 'unlimited' : a.amount.toString()} to delegate ${shortAddr(a.delegate)}`;\n case 'close-account':\n return `Close account ${shortAddr(a.account)} → reclaim ${lamportsToSol(a.reclaimedLamports)} SOL to ${shortAddr(a.destination)}`;\n case 'memo':\n return `Memo: \"${a.text}\"`;\n case 'compute-budget': {\n const parts: string[] = [];\n if (a.unitLimit !== undefined) parts.push(`unit limit ${groupThousands(a.unitLimit.toString())}`);\n if (a.unitPriceMicroLamports !== undefined)\n parts.push(`price ${a.unitPriceMicroLamports.toString()} µ-lamports`);\n return `Set compute budget: ${parts.join(', ') || '(no-op)'}`;\n }\n case 'program-call': {\n const name = a.program ?? shortAddr(a.programId);\n const note = a.note ? ` — ${a.note}` : '';\n return `Call ${name}${a.instruction ? `.${a.instruction}` : ''}${note}`;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Markdown\n// ---------------------------------------------------------------------------\n\nexport function renderMarkdown(result: ExplainResult): string {\n const lines: string[] = [];\n lines.push(`### Solana transaction — ${result.success ? '✅ Success' : '❌ Failed'}`);\n lines.push('');\n if (result.signature) lines.push(`**Signature:** \\`${result.signature}\\` `);\n if (result.slot !== undefined) lines.push(`**Slot:** ${formatCount(result.slot)} `);\n const when = formatBlockTime(result.blockTime);\n if (when) lines.push(`**Time:** ${when} `);\n lines.push(`**Fee:** ${lamportsToSol(result.feeLamports)} SOL `);\n if (result.computeUnits !== undefined)\n lines.push(`**Compute:** ${formatCount(result.computeUnits)} units `);\n lines.push('');\n lines.push(`> ${result.summary}`);\n lines.push('');\n\n if (!result.success && result.error) {\n lines.push(`**Error:** ${result.error.human}`);\n lines.push('');\n }\n\n if (result.balanceChanges.length > 0) {\n lines.push('#### Balance changes');\n lines.push('');\n lines.push('| Account | Asset | Change |');\n lines.push('| --- | --- | --- |');\n for (const d of result.balanceChanges) {\n const asset =\n d.asset.kind === 'SOL'\n ? 'SOL'\n : `${d.asset.symbol ?? shortAddr(d.asset.mint)}`;\n lines.push(`| \\`${shortAddr(d.account, 6, 6)}\\` | ${asset} | ${d.uiDelta} |`);\n }\n lines.push('');\n }\n\n if (result.actions.length > 0) {\n lines.push('#### Actions');\n lines.push('');\n result.actions.forEach((a, i) => lines.push(`${i + 1}. ${describeAction(a)}`));\n lines.push('');\n }\n\n if (result.programsInvoked.length > 0) {\n lines.push('#### Programs');\n lines.push('');\n for (const p of result.programsInvoked) {\n lines.push(`- ${p.name ?? `\\`${p.programId}\\``} ×${p.count}`);\n }\n lines.push('');\n }\n\n if (result.warnings.length > 0) {\n lines.push('#### Warnings');\n lines.push('');\n for (const w of result.warnings) lines.push(`- ⚠️ ${w.message} \\`(${w.code})\\``);\n lines.push('');\n }\n\n return lines.join('\\n').trimEnd() + '\\n';\n}\n\n// ---------------------------------------------------------------------------\n// JSON (BigInt-safe)\n// ---------------------------------------------------------------------------\n\n/** Serialize an ExplainResult to JSON; BigInts become decimal strings. */\nexport function renderJson(result: ExplainResult, opts?: { pretty?: boolean }): string {\n const replacer = (_key: string, value: unknown): unknown =>\n typeof value === 'bigint' ? value.toString() : value;\n return JSON.stringify(result, replacer, opts?.pretty ? 2 : undefined);\n}\n","/**\n * Branded --help text + examples.\n */\n\nimport { createStyler } from '../render/ansi.js';\n\nexport function helpText(color: boolean): string {\n const s = createStyler(color);\n const b = s.brand;\n const d = s.dim;\n const bold = s.bold;\n\n return `\n${b(' ██╗ ██╗████████╗██╗ ██╗ ██╗ █████╗ ██████╗ ███████╗')}\n${b(' ██║ ██║╚══██╔══╝╚██╗██╔╝ ██║ ██╔══██╗██╔══██╗██╔════╝')}\n${b(' ██║ ██║ ██║ ╚███╔╝ ██║ ███████║██████╔╝███████╗')}\n${b(' ╚██╗ ██╔╝ ██║ ██╔██╗ ██║ ██╔══██║██╔══██╗╚════██║')}\n${b(' ╚████╔╝ ██║ ██╔╝ ██╗ ███████╗██║ ██║██████╔╝███████║')}\n${b(' ╚═══╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚═════╝ ╚══════╝')}\n ${bold('solana-explain')} ${d('· plain-English Solana tx reports · vtxlabs.dev')}\n\n${bold('USAGE')}\n solana-explain <input> [options]\n solana-explain --stdin [options]\n solana-explain --file <path> [options]\n\n <input> is auto-detected: a base58 signature, a base64/base58 serialized\n transaction, or '-' / --stdin for piped data. JSON instruction sets are\n accepted only via --stdin or --file (a JSON array of instructions).\n\n${bold('OPTIONS')}\n -r, --rpc <url> RPC endpoint URL. Falls back to $SOLANA_RPC_URL, then\n $RPC_URL. Required if neither is set.\n -c, --commitment <c> processed | confirmed | finalized ${d('(default: confirmed)')}\n --cluster <name> Preset for -r: mainnet | devnet | testnet | localnet\n --simulate Force the simulate path even for a signature input\n --focus <pubkey> Phrase balance deltas from this account's perspective\n -j, --json Emit machine-readable JSON (the ExplainResult)\n --markdown Emit Markdown (great for issues / PRs / docs)\n --raw Include the raw RPC payload under result.raw (with -j)\n --no-color Disable ANSI color (auto-off when !isTTY or $NO_COLOR)\n --max-tx-version <n> Max supported tx version for getTransaction ${d('(default: 0)')}\n --timeout <ms> Per-run network timeout ${d('(default: 30000)')}\n --stdin Read input from stdin\n --file <path> Read input from a file\n --fee-payer <pubkey> Fee payer for JSON instruction-set input\n -q, --quiet Only the summary line + nonzero exit on failure\n -v, --verbose Show every instruction incl. inner/CPI tree + raw args\n --version Print version and exit\n -h, --help Show this help and exit\n\n${bold('EXAMPLES')}\n ${d('# Explain a confirmed transaction by signature')}\n solana-explain 5Nq...d8 --rpc https://api.mainnet-beta.solana.com\n\n ${d('# Simulate & explain a base64 transaction piped from another tool')}\n cat unsigned.b64 | solana-explain --stdin --simulate -r $SOLANA_RPC_URL\n\n ${d('# Explain an instruction set from a file as machine-readable JSON')}\n solana-explain --file ixs.json --fee-payer 7Bf...a21 --cluster devnet -j\n\n${bold('EXIT CODES')}\n 0 success 2 tx failed 3 not found 4 bad input 5 RPC error\n 6 sim rejected 1 internal error 130 aborted (Ctrl-C)\n`;\n}\n","#!/usr/bin/env node\n/**\n * solana-explain CLI. Thin orchestrator over the library:\n * arg parsing (util.parseArgs), stdin/file reading, env-var RPC fallback,\n * SIGINT → exit 130, and exit-code mapping.\n */\n\nimport { parseArgs } from 'node:util';\nimport { readFile } from 'node:fs/promises';\nimport { pathToFileURL } from 'node:url';\nimport process from 'node:process';\n\nimport {\n explainSignature,\n explainTransaction,\n explainInstructions,\n} from '../explain.js';\nimport { InputError, SimulationError, SolanaExplainError } from '../errors.js';\nimport type {\n Commitment,\n ExplainInstruction,\n ExplainResult,\n} from '../types.js';\nimport { detectInput } from '../input/detect.js';\nimport { renderJson, renderMarkdown, renderText } from '../render/index.js';\nimport { shouldUseColor, createStyler } from '../render/ansi.js';\nimport { helpText } from './help.js';\n\nconst VERSION = '0.1.0';\n\nconst CLUSTER_URLS: Record<string, string> = {\n mainnet: 'https://api.mainnet-beta.solana.com',\n 'mainnet-beta': 'https://api.mainnet-beta.solana.com',\n devnet: 'https://api.devnet.solana.com',\n testnet: 'https://api.testnet.solana.com',\n localnet: 'http://127.0.0.1:8899',\n localhost: 'http://127.0.0.1:8899',\n};\n\n/** Map a SolanaExplainError to a CLI exit code. */\nfunction exitCodeFor(err: SolanaExplainError): number {\n switch (err.code) {\n case 'TX_NOT_FOUND':\n return 3;\n case 'INVALID_INPUT':\n case 'INVALID_SIGNATURE':\n case 'INVALID_ENCODING':\n case 'EMPTY_INPUT':\n case 'DECODE_FAILED':\n case 'UNSUPPORTED_TX_VERSION':\n return 4;\n case 'RPC_HTTP':\n case 'RPC_JSON':\n case 'RPC_TIMEOUT':\n return 5;\n case 'SIMULATION_REJECTED':\n return 6;\n case 'ABORTED':\n return 130;\n default:\n return 1;\n }\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n return new Promise((resolve, reject) => {\n process.stdin.on('data', (c: Buffer) => chunks.push(c));\n process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));\n process.stdin.on('error', reject);\n });\n}\n\ninterface ParsedCli {\n values: Record<string, unknown>;\n positionals: string[];\n}\n\nfunction parse(argv: string[]): ParsedCli {\n const { values, positionals } = parseArgs({\n args: argv,\n allowPositionals: true,\n strict: true,\n options: {\n rpc: { type: 'string', short: 'r' },\n commitment: { type: 'string', short: 'c' },\n cluster: { type: 'string' },\n simulate: { type: 'boolean' },\n focus: { type: 'string' },\n json: { type: 'boolean', short: 'j' },\n markdown: { type: 'boolean' },\n raw: { type: 'boolean' },\n color: { type: 'boolean', default: true }, // --no-color sets false\n 'max-tx-version': { type: 'string' },\n timeout: { type: 'string' },\n stdin: { type: 'boolean' },\n file: { type: 'string' },\n 'fee-payer': { type: 'string' },\n quiet: { type: 'boolean', short: 'q' },\n verbose: { type: 'boolean', short: 'v' },\n version: { type: 'boolean' },\n help: { type: 'boolean', short: 'h' },\n },\n });\n return { values, positionals };\n}\n\nasync function resolveInputString(\n values: Record<string, unknown>,\n positionals: string[],\n stderr: NodeJS.WriteStream,\n): Promise<string> {\n const file = values['file'] as string | undefined;\n const wantsStdin = Boolean(values['stdin']) || positionals[0] === '-';\n\n if (file) {\n try {\n return await readFile(file, 'utf8');\n } catch (err) {\n throw new InputError(\n 'INVALID_INPUT',\n `Cannot read file \"${file}\": ${err instanceof Error ? err.message : String(err)}`,\n { hint: 'Check the path and permissions.' },\n );\n }\n }\n\n if (wantsStdin) {\n if (process.stdin.isTTY) {\n stderr.write('waiting for piped input… (Ctrl-D to end; or pass <input> directly)\\n');\n }\n const data = await readStdin();\n if (data.trim().length === 0) {\n throw new InputError('EMPTY_INPUT', 'Nothing was piped to stdin.', {\n hint: 'Pipe a signature/transaction, or pass <input> as an argument.',\n });\n }\n return data;\n }\n\n const positional = positionals[0];\n if (positional === undefined || positional.trim().length === 0) {\n throw new InputError('EMPTY_INPUT', 'No input provided.', {\n hint: 'Pass a signature/transaction, use --stdin, or --file <path>.',\n });\n }\n return positional;\n}\n\nfunction resolveRpcUrl(values: Record<string, unknown>, env: NodeJS.ProcessEnv): string {\n const cluster = values['cluster'] as string | undefined;\n const explicit = values['rpc'] as string | undefined;\n if (explicit) return explicit;\n if (cluster) {\n const url = CLUSTER_URLS[cluster.toLowerCase()];\n if (!url) {\n throw new InputError(\n 'INVALID_INPUT',\n `Unknown cluster \"${cluster}\". Use mainnet | devnet | testnet | localnet.`,\n );\n }\n return url;\n }\n const fromEnv = env['SOLANA_RPC_URL'] ?? env['RPC_URL'];\n if (fromEnv) return fromEnv;\n throw new InputError('INVALID_INPUT', 'No RPC URL.', {\n hint: 'Pass --rpc <url>, --cluster <name>, or set SOLANA_RPC_URL.',\n });\n}\n\nexport async function run(\n argv: string[],\n io: {\n stdout: NodeJS.WriteStream;\n stderr: NodeJS.WriteStream;\n env: NodeJS.ProcessEnv;\n signal?: AbortSignal;\n },\n): Promise<number> {\n let values: Record<string, unknown>;\n let positionals: string[];\n try {\n const parsed = parse(argv);\n values = parsed.values;\n positionals = parsed.positionals;\n } catch (err) {\n const colorEarly = shouldUseColor({ isTTY: io.stderr.isTTY, env: io.env });\n const s = createStyler(colorEarly);\n io.stderr.write(`${s.red('Error')} ${err instanceof Error ? err.message : String(err)}\\n`);\n io.stderr.write(`Run ${s.bold('solana-explain --help')} for usage.\\n`);\n return 4;\n }\n\n // Color: off for json/markdown, when --no-color, when not a TTY, or $NO_COLOR.\n const machineOutput = Boolean(values['json'] || values['markdown']);\n const colorEnabled =\n !machineOutput &&\n shouldUseColor({\n ...(values['color'] === false ? { explicit: false } : {}),\n isTTY: io.stdout.isTTY,\n env: io.env,\n });\n const s = createStyler(colorEnabled);\n const debug = Boolean(io.env['DEBUG']) || Boolean(values['verbose']);\n\n if (values['help']) {\n io.stdout.write(helpText(colorEnabled));\n return 0;\n }\n if (values['version']) {\n io.stdout.write(`${VERSION}\\n`);\n return 0;\n }\n\n try {\n const inputStr = await resolveInputString(values, positionals, io.stderr);\n const rpcUrl = resolveRpcUrl(values, io.env);\n\n const commitment = (values['commitment'] as Commitment | undefined) ?? 'confirmed';\n if (!['processed', 'confirmed', 'finalized'].includes(commitment)) {\n throw new InputError('INVALID_INPUT', `Invalid commitment \"${commitment}\".`);\n }\n\n const timeoutMs = values['timeout'] ? Number(values['timeout']) : undefined;\n const maxTxVersion = values['max-tx-version'] ? Number(values['max-tx-version']) : 0;\n\n const baseOpts = {\n rpc: rpcUrl,\n commitment,\n ...(values['focus'] ? { focusAccount: values['focus'] as string } : {}),\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(io.signal ? { signal: io.signal } : {}),\n ...(values['raw'] ? { includeRaw: true } : {}),\n };\n\n let result: ExplainResult;\n const detected = detectInput(inputStr);\n\n if (values['simulate'] && detected.kind === 'signature') {\n // Force simulate is only meaningful for tx bytes; a bare signature can't\n // be simulated. Surface a clear input error.\n throw new InputError(\n 'INVALID_INPUT',\n '--simulate requires a serialized transaction, not a signature.',\n { hint: 'Pipe a base64/base58 transaction with --simulate.' },\n );\n }\n\n if (detected.kind === 'signature') {\n result = await explainSignature(detected.signature, {\n ...baseOpts,\n maxSupportedTransactionVersion: maxTxVersion,\n });\n } else if (detected.kind === 'tx-bytes') {\n result = await explainTransaction(detected.bytes, {\n ...baseOpts,\n encoding: detected.encoding,\n });\n } else {\n const feePayer = (values['fee-payer'] as string | undefined) ?? '';\n if (!feePayer) {\n throw new InputError(\n 'INVALID_INPUT',\n 'Instruction-set input requires --fee-payer <pubkey>.',\n { hint: 'Add --fee-payer with the payer pubkey.' },\n );\n }\n result = await explainInstructions(detected.instructions as ExplainInstruction[], {\n ...baseOpts,\n feePayer,\n });\n }\n\n // ---- Output ----\n if (values['json']) {\n io.stdout.write(renderJson(result, { pretty: true }) + '\\n');\n } else if (values['markdown']) {\n io.stdout.write(renderMarkdown(result));\n } else if (values['quiet']) {\n io.stdout.write(result.summary + '\\n');\n // Warnings to stderr in quiet mode.\n for (const w of result.warnings) io.stderr.write(`${s.yellow('⚠')} ${w.message}\\n`);\n } else {\n io.stdout.write(renderText(result, { color: colorEnabled, verbose: Boolean(values['verbose']) }) + '\\n');\n }\n\n // Exit 2 if the tx failed/reverted but was still explained.\n return result.success ? 0 : 2;\n } catch (err) {\n return handleError(err, s, io.stderr, debug);\n }\n}\n\nfunction handleError(\n err: unknown,\n s: ReturnType<typeof createStyler>,\n stderr: NodeJS.WriteStream,\n debug: boolean,\n): number {\n if (err instanceof SimulationError) {\n stderr.write(`${s.red('Error')} ${err.message}\\n`);\n if (err.logs && err.logs.length > 0) {\n stderr.write(`${s.dim('Logs (tail):')}\\n`);\n for (const l of err.logs) stderr.write(`${s.dim(' ' + l)}\\n`);\n }\n if (err.hint) stderr.write(`${s.dim('Hint:')} ${err.hint}\\n`);\n if (debug && err.cause) stderr.write(`${String(err.cause)}\\n`);\n return exitCodeFor(err);\n }\n if (err instanceof SolanaExplainError) {\n stderr.write(`${s.red('Error')} ${err.message}\\n`);\n if (err.hint) stderr.write(`${s.dim('Hint:')} ${err.hint}\\n`);\n if (debug && err.cause) {\n stderr.write(`${s.dim('Cause:')} ${err.cause instanceof Error ? (err.cause.stack ?? err.cause.message) : String(err.cause)}\\n`);\n }\n return exitCodeFor(err);\n }\n // Last-resort internal error.\n stderr.write(`${s.red('Internal error')} ${err instanceof Error ? err.message : String(err)}\\n`);\n stderr.write(\n `${s.dim('This is likely a bug. Please report it: https://github.com/VTX-Labs/solana-explain/issues')}\\n`,\n );\n if (debug && err instanceof Error && err.stack) stderr.write(`${err.stack}\\n`);\n return 1;\n}\n\n// ---------------------------------------------------------------------------\n// Entrypoint\n// ---------------------------------------------------------------------------\n\nasync function main(): Promise<void> {\n const controller = new AbortController();\n const onSigint = () => controller.abort();\n process.on('SIGINT', onSigint);\n\n let exitCode: number;\n try {\n exitCode = await run(process.argv.slice(2), {\n stdout: process.stdout,\n stderr: process.stderr,\n env: process.env,\n signal: controller.signal,\n });\n } catch (err) {\n // run() is contracted not to throw, but be defensive.\n process.stderr.write(`Internal error: ${err instanceof Error ? err.message : String(err)}\\n`);\n exitCode = 1;\n } finally {\n process.off('SIGINT', onSigint);\n }\n\n if (controller.signal.aborted) {\n process.exitCode = 130;\n } else {\n process.exitCode = exitCode;\n }\n}\n\n// Only run main() when executed directly (not when imported by tests). Uses the\n// canonical ESM idiom: compare this module's URL to the invoked script's URL.\nconst isMain = (() => {\n try {\n const invoked = process.argv[1];\n if (!invoked) return false;\n return import.meta.url === pathToFileURL(invoked).href;\n } catch {\n return false;\n }\n})();\n\nif (isMain) {\n void main();\n}\n"]}