{"version":3,"file":"transfers.mjs","names":[],"sources":["../../src/commands/transfers.ts"],"sourcesContent":["/** List fungible-token transfers (supports ENS) */\nimport { defineCommand } from \"citty\";\nimport type { TokenTransfer } from \"../core/types.js\";\nimport {\n  failCommand,\n  parsePositiveInteger,\n  print,\n  reportCommandError,\n  withSelectedProvider,\n} from \"./shared.js\";\n\nfunction renderTransfers(\n  providerName: string,\n  address: string,\n  chain: string,\n  /* oxlint-disable-next-line typescript/prefer-readonly-parameter-types */\n  transfers: readonly TokenTransfer[],\n): void {\n  print(`[${providerName}] ${transfers.length} token transfers for ${address} on ${chain}`);\n  print(\"\");\n  for (const transfer of transfers) {\n    print(\n      `  ${transfer.txHash.slice(0, 18)}…  ${transfer.from.slice(0, 10)}… → ${transfer.to.slice(0, 10)}…  ${transfer.valueFormatted} ${transfer.symbol}`,\n    );\n  }\n}\n\nexport default defineCommand({\n  meta: {\n    name: \"transfers\",\n    description: \"List token transfers involving an address (supports ENS)\",\n  },\n  args: {\n    address: {\n      type: \"positional\",\n      description: \"Blockchain address or ENS name\",\n      required: true,\n    },\n    chain: {\n      type: \"string\",\n      alias: \"c\",\n      description: \"Chain\",\n    },\n    provider: {\n      type: \"string\",\n      alias: \"p\",\n      description: \"Provider\",\n    },\n    token: {\n      type: \"string\",\n      alias: \"t\",\n      description: \"Only transfers of this token contract\",\n    },\n    limit: {\n      type: \"string\",\n      alias: \"n\",\n      description: \"Max results\",\n      default: \"10\",\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        \"tokenTransfers\",\n        async (selected) => {\n          const getTokenTransfers = selected.provider.getTokenTransfers?.bind(selected.provider);\n          if (!selected.provider.capabilities.tokenTransfers || !getTokenTransfers) {\n            failCommand(`Provider \"${selected.name}\" does not support token transfers`);\n          }\n          const limit = parsePositiveInteger(args.limit as string, \"Invalid --limit value\");\n          const { address } = await resolveInput(args.address as string, selected.chain);\n          const transfers = await getTokenTransfers(address, selected.chain, {\n            limit,\n            token: args.token as string | undefined,\n          });\n          renderTransfers(selected.name, address, selected.chain, transfers);\n        },\n      );\n    } catch (error) {\n      reportCommandError(error);\n    }\n  },\n});\n"],"mappings":";;AAWA,SAAS,gBACP,cACA,SACA,OAEA,WACM;CACN,MAAM,IAAI,aAAa,IAAI,UAAU,OAAO,uBAAuB,QAAQ,MAAM,OAAO;CACxF,MAAM,EAAE;CACR,KAAK,MAAM,YAAY,WACrB,MACE,KAAK,SAAS,OAAO,MAAM,GAAG,EAAE,EAAE,KAAK,SAAS,KAAK,MAAM,GAAG,EAAE,EAAE,MAAM,SAAS,GAAG,MAAM,GAAG,EAAE,EAAE,KAAK,SAAS,eAAe,GAAG,SAAS,QAC5I;AAEJ;AAEA,IAAA,oBAAe,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;EACA,OAAO;GACL,MAAM;GACN,OAAO;GACP,aAAa;EACf;EACA,OAAO;GACL,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;EACX;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,kBACA,OAAO,aAAa;IAClB,MAAM,oBAAoB,SAAS,SAAS,mBAAmB,KAAK,SAAS,QAAQ;IACrF,IAAI,CAAC,SAAS,SAAS,aAAa,kBAAkB,CAAC,mBACrD,YAAY,aAAa,SAAS,KAAK,mCAAmC;IAE5E,MAAM,QAAQ,qBAAqB,KAAK,OAAiB,uBAAuB;IAChF,MAAM,EAAE,YAAY,MAAM,aAAa,KAAK,SAAmB,SAAS,KAAK;IAC7E,MAAM,YAAY,MAAM,kBAAkB,SAAS,SAAS,OAAO;KACjE;KACA,OAAO,KAAK;IACd,CAAC;IACD,gBAAgB,SAAS,MAAM,SAAS,SAAS,OAAO,SAAS;GACnE,CACF;EACF,SAAS,OAAO;GACd,mBAAmB,KAAK;EAC1B;CACF;AACF,CAAC"}