{"version":3,"file":"utxos.mjs","names":[],"sources":["../../src/commands/utxos.ts"],"sourcesContent":["/** List the unspent outputs an address still controls */\nimport { defineCommand } from \"citty\";\nimport type { Utxo } from \"../core/types.js\";\nimport { failCommand, print, reportCommandError, withSelectedProvider } from \"./shared.js\";\n\nfunction renderUtxos(\n  providerName: string,\n  address: string,\n  chain: string,\n  utxos: readonly Readonly<Utxo>[],\n): void {\n  const confirmed = utxos.filter((utxo) => utxo.confirmed);\n  const total = confirmed.reduce((sum, utxo) => sum + BigInt(utxo.value), 0n);\n  print(`[${providerName}] ${utxos.length} unspent outputs for ${address} on ${chain}`);\n  print(`  Confirmed total: ${total} base units`);\n  if (confirmed.length < utxos.length) {\n    print(`  Pending: ${utxos.length - confirmed.length}`);\n  }\n  print(\"\");\n  for (const utxo of utxos) {\n    const position = utxo.confirmed ? `block ${utxo.blockNumber ?? \"unknown\"}` : \"pending\";\n    print(`  ${utxo.txid}:${utxo.vout}  ${utxo.valueFormatted}  [${position}]`);\n  }\n}\n\nexport default defineCommand({\n  meta: {\n    name: \"utxos\",\n    description: \"List the unspent outputs a Bitcoin-like address still controls\",\n  },\n  args: {\n    address: {\n      type: \"positional\",\n      description: \"Blockchain address\",\n      required: true,\n    },\n    chain: {\n      type: \"string\",\n      alias: \"c\",\n      description: \"Chain (bitcoin, litecoin, pepecoin)\",\n    },\n    provider: {\n      type: \"string\",\n      alias: \"p\",\n      description: \"Provider (mempool, blockstream)\",\n    },\n  },\n  async run({ args }) {\n    try {\n      const { resolveInput } = await import(\"../core/input.js\");\n      await withSelectedProvider(\n        args.chain as string | undefined,\n        args.provider as string | undefined,\n        \"utxos\",\n        async (selected) => {\n          const getUtxos = selected.provider.getUtxos?.bind(selected.provider);\n          if (!selected.provider.capabilities.utxos || !getUtxos) {\n            failCommand(`Provider \"${selected.name}\" does not support unspent outputs`);\n          }\n          const { address } = await resolveInput(args.address as string, selected.chain);\n          const utxos = await getUtxos(address, selected.chain);\n          renderUtxos(selected.name, address, selected.chain, utxos);\n        },\n      );\n    } catch (error) {\n      reportCommandError(error);\n    }\n  },\n});\n"],"mappings":";;AAKA,SAAS,YACP,cACA,SACA,OACA,OACM;CACN,MAAM,YAAY,MAAM,QAAQ,SAAS,KAAK,SAAS;CACvD,MAAM,QAAQ,UAAU,QAAQ,KAAK,SAAS,MAAM,OAAO,KAAK,KAAK,GAAG,EAAE;CAC1E,MAAM,IAAI,aAAa,IAAI,MAAM,OAAO,uBAAuB,QAAQ,MAAM,OAAO;CACpF,MAAM,sBAAsB,MAAM,YAAY;CAC9C,IAAI,UAAU,SAAS,MAAM,QAC3B,MAAM,cAAc,MAAM,SAAS,UAAU,QAAQ;CAEvD,MAAM,EAAE;CACR,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,WAAW,KAAK,YAAY,SAAS,KAAK,eAAe,cAAc;EAC7E,MAAM,KAAK,KAAK,KAAK,GAAG,KAAK,KAAK,IAAI,KAAK,eAAe,KAAK,SAAS,EAAE;CAC5E;AACF;AAEA,IAAA,gBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;EACJ,SAAS;GACP,MAAM;GACN,aAAa;GACb,UAAU;EACZ;EACA,OAAO;GACL,MAAM;GACN,OAAO;GACP,aAAa;EACf;EACA,UAAU;GACR,MAAM;GACN,OAAO;GACP,aAAa;EACf;CACF;CACA,MAAM,IAAI,EAAE,QAAQ;EAClB,IAAI;GACF,MAAM,EAAE,iBAAiB,MAAM,OAAO,cAAmB,CAAA,MAAA,MAAA,EAAA,aAAA;GACzD,MAAM,qBACJ,KAAK,OACL,KAAK,UACL,SACA,OAAO,aAAa;IAClB,MAAM,WAAW,SAAS,SAAS,UAAU,KAAK,SAAS,QAAQ;IACnE,IAAI,CAAC,SAAS,SAAS,aAAa,SAAS,CAAC,UAC5C,YAAY,aAAa,SAAS,KAAK,mCAAmC;IAE5E,MAAM,EAAE,YAAY,MAAM,aAAa,KAAK,SAAmB,SAAS,KAAK;IAC7E,MAAM,QAAQ,MAAM,SAAS,SAAS,SAAS,KAAK;IACpD,YAAY,SAAS,MAAM,SAAS,SAAS,OAAO,KAAK;GAC3D,CACF;EACF,SAAS,OAAO;GACd,mBAAmB,KAAK;EAC1B;CACF;AACF,CAAC"}