@alchemy/cli 0.6.0 → 0.6.2

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.
@@ -53,7 +53,7 @@ function semverLT(a, b) {
53
53
  return false;
54
54
  }
55
55
  function currentVersion() {
56
- return true ? "0.6.0" : "0.0.0";
56
+ return true ? "0.6.2" : "0.0.0";
57
57
  }
58
58
  function toUpdateStatus(latestVersion, checkedAt) {
59
59
  const current = currentVersion();
package/dist/index.js CHANGED
@@ -29,7 +29,7 @@ import {
29
29
  getAvailableUpdate,
30
30
  getUpdateStatus,
31
31
  printUpdateNotice
32
- } from "./chunk-3W4ICF67.js";
32
+ } from "./chunk-TK3HZ5UT.js";
33
33
  import {
34
34
  bold,
35
35
  brand,
@@ -649,7 +649,7 @@ function registerConfig(program2) {
649
649
 
650
650
  // src/commands/rpc.ts
651
651
  function registerRPC(program2) {
652
- program2.command("rpc").argument("<method>", "JSON-RPC method name (e.g. eth_blockNumber)").argument("[params...]", "Method parameters as JSON values").description("Make a raw JSON-RPC call").addHelpText(
652
+ program2.command("rpc").argument("<method>", "JSON-RPC method name (e.g. eth_blockNumber)").argument("[params...]", "Method parameters as JSON values").description("Sends a raw JSON-RPC request to an Alchemy node (e.g. eth_call, eth_getCode, eth_blockNumber). Use for low-level RPC calls only. For higher-level operations like balances, transfers, simulation, or token data, use the dedicated subcommands instead.").addHelpText(
653
653
  "after",
654
654
  `
655
655
  Examples:
@@ -729,7 +729,7 @@ function resolveBlockParam(block) {
729
729
  return blockParam;
730
730
  }
731
731
  function registerBalance(program2) {
732
- program2.command("balance").argument("[address]", "Wallet address (0x...) or ENS name, or pipe via stdin").alias("bal").description("Get the native token balance of an address").addHelpText(
732
+ program2.command("balance").argument("[address]", "Wallet address (0x...) or ENS name, or pipe via stdin").alias("bal").description("Returns the native token balance (ETH, MATIC, etc.) for a single address on the current network. Use for 'how much ETH does this wallet have' queries only. Does NOT return ERC-20 tokens or multi-network portfolio data \u2014 use `alchemy tokens balances` for ERC-20s, or `alchemy portfolio tokens` for a full cross-network portfolio overview.").addHelpText(
733
733
  "after",
734
734
  `
735
735
  Examples:
@@ -1059,7 +1059,7 @@ function formatNFTRows(nfts) {
1059
1059
  ]);
1060
1060
  }
1061
1061
  function registerNFTs(program2) {
1062
- const cmd = program2.command("nfts").description("NFT API wrappers").argument("[address]", "Wallet address or ENS name (default action: list owned NFTs)").option("--limit <n>", "Maximum number of NFTs to return per page", parseInt).option("--page-key <key>", "Pagination key from a previous response").addHelpText(
1062
+ const cmd = program2.command("nfts").description("Lists all NFTs owned by a wallet address on the current network via the Alchemy NFT API. Use for single-network NFT ownership queries. For all NFTs across multiple networks in a portfolio view, use `alchemy portfolio nfts`.").argument("[address]", "Wallet address or ENS name (default action: list owned NFTs)").option("--limit <n>", "Maximum number of NFTs to return per page", parseInt).option("--page-key <key>", "Pagination key from a previous response").addHelpText(
1063
1063
  "after",
1064
1064
  `
1065
1065
  Examples:
@@ -2057,7 +2057,7 @@ function registerWallet(program2) {
2057
2057
  exitWithError(err);
2058
2058
  }
2059
2059
  });
2060
- cmd.command("address").description("Display the address of the configured wallet").action(() => {
2060
+ cmd.command("address").description("Display the address of the locally configured x402 wallet. This shows the CLI's own signing wallet only \u2014 it does NOT look up arbitrary addresses or retrieve wallet history. To check a wallet's ETH balance, use `alchemy balance`. For transfer history, use `alchemy transfers`. For token portfolio, use `alchemy portfolio tokens`. For NFTs owned by a wallet, use `alchemy nfts`.").action(() => {
2061
2061
  try {
2062
2062
  const key = resolveWalletKey(program2);
2063
2063
  if (!key) throw errWalletKeyRequired();
@@ -2202,7 +2202,7 @@ function formatTransferRows(transfers) {
2202
2202
  });
2203
2203
  }
2204
2204
  function registerTransfers(program2) {
2205
- program2.command("transfers").argument("[address]", "Wallet address or ENS name \u2014 queries outgoing transfers (use --to-address for incoming)").description("Get transfer history (alchemy_getAssetTransfers)").option("--from-address <address>", "Filter sender address").option("--to-address <address>", "Filter recipient address").option("--from-block <block>", "Start block (default: 0x0)").option("--to-block <block>", "End block (default: latest)").option("--category <list>", "Comma-separated categories (erc20,erc721,erc1155,external,internal,specialnft)").option("--max-count <hexOrDecimal>", "Max records to return per page").option("--page-key <key>", "Pagination key").addHelpText(
2205
+ program2.command("transfers").argument("[address]", "Wallet address or ENS name \u2014 queries outgoing transfers (use --to-address for incoming)").description("Retrieves transfer history \u2014 all inbound and outbound asset movements (ERC-20, ERC-721, ERC-1155, and native ETH) for a wallet address. USE WHEN: user asks for transaction history, past transfers, or asset movements. Does NOT return current balances \u2014 use `alchemy balance` or `alchemy tokens balances` for that.").option("--from-address <address>", "Filter sender address").option("--to-address <address>", "Filter recipient address").option("--from-block <block>", "Start block (default: 0x0)").option("--to-block <block>", "End block (default: latest)").option("--category <list>", "Comma-separated categories (erc20,erc721,erc1155,external,internal,specialnft)").option("--max-count <hexOrDecimal>", "Max records to return per page").option("--page-key <key>", "Pagination key").addHelpText(
2206
2206
  "after",
2207
2207
  `
2208
2208
  Examples:
@@ -2424,7 +2424,7 @@ async function runDataCall(program2, title, path, body) {
2424
2424
  }
2425
2425
  function registerPortfolio(program2) {
2426
2426
  const cmd = program2.command("portfolio").description("Portfolio API wrappers");
2427
- cmd.command("tokens").description("Get token portfolio by address/network pairs").requiredOption("--body <json>", "JSON body for /assets/tokens/by-address").action(async (opts) => {
2427
+ cmd.command("tokens").description("Returns a full cross-network portfolio of all ERC-20 token holdings and USD values for a wallet address. USE WHEN: user asks for portfolio overview, all tokens held, or assets across multiple networks. For NFTs only, use `alchemy nfts`. For native ETH balance only, use `alchemy balance`.").requiredOption("--body <json>", "JSON body for /assets/tokens/by-address").action(async (opts) => {
2428
2428
  try {
2429
2429
  const result = await runDataCall(
2430
2430
  program2,
@@ -2452,7 +2452,7 @@ function registerPortfolio(program2) {
2452
2452
  exitWithError(err);
2453
2453
  }
2454
2454
  });
2455
- cmd.command("nfts").description("Get NFT portfolio by address/network pairs").requiredOption("--body <json>", "JSON body for /assets/nfts/by-address").action(async (opts) => {
2455
+ cmd.command("nfts").description("Returns all NFTs owned by a wallet address across one or more networks. Use to list all NFTs a wallet holds in a portfolio view. For metadata on a specific NFT by contract + token ID, use `alchemy nfts metadata`.").requiredOption("--body <json>", "JSON body for /assets/nfts/by-address").action(async (opts) => {
2456
2456
  try {
2457
2457
  const result = await runDataCall(
2458
2458
  program2,
@@ -2494,7 +2494,7 @@ async function runSimulateCall(program2, options) {
2494
2494
  }
2495
2495
  function registerSimulate(program2) {
2496
2496
  const cmd = program2.command("simulate").description("Simulation API wrappers");
2497
- cmd.command("asset-changes").description("Call alchemy_simulateAssetChanges").requiredOption("--tx <json>", "Transaction object JSON").option("--block-tag <tag>", "Block tag (default latest)", "latest").action(async (opts) => {
2497
+ cmd.command("asset-changes").description("Simulates a transaction and returns a human-readable breakdown of asset changes (token transfers, ETH movements, NFT transfers) before it is broadcast. Use to preview what a transaction will do. For raw JSON-RPC calls, use `alchemy rpc` instead.").requiredOption("--tx <json>", "Transaction object JSON").option("--block-tag <tag>", "Block tag (default latest)", "latest").action(async (opts) => {
2498
2498
  try {
2499
2499
  await runSimulateCall(program2, {
2500
2500
  method: "alchemy_simulateAssetChanges",
@@ -2544,7 +2544,7 @@ function resolveWebhookApiKey(opts) {
2544
2544
  function registerWebhooks(program2) {
2545
2545
  const cmd = program2.command("webhooks").description("Notify API wrappers");
2546
2546
  cmd.option("--webhook-api-key <key>", "Webhook API key").option("--notify-token <token>", "Deprecated alias for webhook API key");
2547
- cmd.command("list").description("List team webhooks").action(async () => {
2547
+ cmd.command("list").description("Lists all existing registered Alchemy webhooks (read-only). USE WHEN: user wants to view, see, audit, or check current webhooks. DOES NOT create or modify webhooks \u2014 use `alchemy webhooks create` to register a new one.").action(async () => {
2548
2548
  try {
2549
2549
  const token = resolveWebhookApiKey(cmd.opts());
2550
2550
  const result = await withSpinner(
@@ -2558,7 +2558,7 @@ function registerWebhooks(program2) {
2558
2558
  exitWithError(err);
2559
2559
  }
2560
2560
  });
2561
- cmd.command("create").description("Create webhook").requiredOption("--body <json>", "Create webhook JSON payload").option("--dry-run", "Preview without executing").action(async (opts) => {
2561
+ cmd.command("create").description("Creates and registers a NEW Alchemy webhook endpoint (write operation). USE WHEN: user wants to set up, add, register, or create a webhook for address activity, mined/dropped transactions, etc. DOES NOT list existing webhooks \u2014 use `alchemy webhooks list` for that.").requiredOption("--body <json>", "Create webhook JSON payload").option("--dry-run", "Preview without executing").action(async (opts) => {
2562
2562
  try {
2563
2563
  const payload = parseRequiredJSON(opts.body, "--body");
2564
2564
  if (opts.dryRun) {
@@ -3397,7 +3397,7 @@ function resetUpdateNoticeState() {
3397
3397
  }
3398
3398
  program.name("alchemy").description(
3399
3399
  "The Alchemy CLI lets you query blockchain data, call JSON-RPC methods, and manage your Alchemy configuration."
3400
- ).version("0.6.0", "-v, --version", "display CLI version").option("--api-key <key>", "Alchemy API key (env: ALCHEMY_API_KEY)").option("--access-key <key>", "Alchemy access key (env: ALCHEMY_ACCESS_KEY)").option(
3400
+ ).version("0.6.2", "-v, --version", "display CLI version").option("--api-key <key>", "Alchemy API key (env: ALCHEMY_API_KEY)").option("--access-key <key>", "Alchemy access key (env: ALCHEMY_ACCESS_KEY)").option(
3401
3401
  "-n, --network <network>",
3402
3402
  "Target network (default: eth-mainnet) (env: ALCHEMY_NETWORK)"
3403
3403
  ).option("--x402", "Use x402 wallet-based gateway auth").option("--wallet-key-file <path>", "Path to wallet private key file for x402").option("--json", "Force JSON output (auto-enabled when piped)").option("-q, --quiet", "Suppress non-essential output").option("--verbose", "Enable verbose output").option("--no-color", "Disable color output").option("--reveal", "Show secrets in plain text").option("--timeout <ms>", "Request timeout in milliseconds (default: none)", parseInt).option("--debug", "Enable debug diagnostics").option("--no-interactive", "Disable REPL and prompt-driven interactions").addHelpCommand(false).allowExcessArguments(true).exitOverride((err) => {
@@ -3600,7 +3600,7 @@ ${styledLine}`;
3600
3600
  if (isInteractiveAllowed(program)) {
3601
3601
  let latestForInteractiveStartup = null;
3602
3602
  if (shouldRunOnboarding(program, cfg)) {
3603
- const { runOnboarding } = await import("./onboarding-S3GAP4OV.js");
3603
+ const { runOnboarding } = await import("./onboarding-IP4R44EQ.js");
3604
3604
  const latest = getAvailableUpdateOnce();
3605
3605
  const completed = await runOnboarding(program, latest);
3606
3606
  updateShownDuringInteractiveStartup = Boolean(latest);
@@ -3612,7 +3612,7 @@ ${styledLine}`;
3612
3612
  latestForInteractiveStartup = getAvailableUpdateOnce();
3613
3613
  updateShownDuringInteractiveStartup = Boolean(latestForInteractiveStartup);
3614
3614
  }
3615
- const { startREPL } = await import("./interactive-OM476LBG.js");
3615
+ const { startREPL } = await import("./interactive-UGD7GYJM.js");
3616
3616
  program.exitOverride();
3617
3617
  program.configureOutput({
3618
3618
  writeErr: () => {
@@ -9,7 +9,7 @@ import "./chunk-ATX65U7J.js";
9
9
  import "./chunk-JQRGILIS.js";
10
10
  import {
11
11
  getUpdateNoticeLines
12
- } from "./chunk-3W4ICF67.js";
12
+ } from "./chunk-TK3HZ5UT.js";
13
13
  import {
14
14
  bold,
15
15
  brand,
@@ -2,7 +2,7 @@
2
2
  if(process.argv.includes("--no-color"))process.env.NO_COLOR="1";
3
3
  import {
4
4
  getUpdateNoticeLines
5
- } from "./chunk-3W4ICF67.js";
5
+ } from "./chunk-TK3HZ5UT.js";
6
6
  import {
7
7
  bold,
8
8
  brand,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alchemy/cli",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "description": "Alchemy CLI — interact with blockchain data",
5
5
  "type": "module",
6
6
  "bin": {