@vultisig/cli 7.7.0 → 8.0.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # @vultisig/cli
2
2
 
3
+ ## 8.0.0
4
+
5
+ ### Patch Changes
6
+
7
+ - [#2435](https://github.com/vultisig/vultisig-sdk/pull/2435) [`2b91950`](https://github.com/vultisig/vultisig-sdk/commit/2b91950ffd1aa86b8afd710ab7c6d30f919ba9af) Thanks [@neavra](https://github.com/neavra)! - Reject mixed-case EVM recipient addresses whose EIP-55 checksum does not match. WalletCore accepted any `0x` + 40 hex regardless of letter case, so a one-character typo in a checksummed address passed `send`, max-send, fee estimation and `address-book --add`. All-lowercase and all-uppercase addresses are still accepted; the invalid-address error now names the checksum mismatch so it does not read as a formatting problem. `isValidTokenId` for EVM chains is now checksum-strict for mixed-case ids as well; the built-in token registry was corrected accordingly.
8
+
9
+ - [#2431](https://github.com/vultisig/vultisig-sdk/pull/2431) [`77b78da`](https://github.com/vultisig/vultisig-sdk/commit/77b78da36fc0d6032fb596bd3fbfd6dd84fb1d18) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Export the canonical token price-ID resolver from the root and React Native SDK entry points.
10
+
11
+ - [#2138](https://github.com/vultisig/vultisig-sdk/pull/2138) [`601ff4f`](https://github.com/vultisig/vultisig-sdk/commit/601ff4f1d1449d452b8e7025df392c1e2f4c5ca7) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - Widen the public tx-normalization types to include camelCase routing metadata and accept camelCase normalization args, matching the metadata `splitMultiTx` already preserves at runtime.
12
+
13
+ - [#2426](https://github.com/vultisig/vultisig-sdk/pull/2426) [`c368202`](https://github.com/vultisig/vultisig-sdk/commit/c36820249569823bb3d3e24b06bcb66a34144f2a) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Reject all-zero Bittensor and Polkadot transfer destinations before producing signing inputs or unsigned transfer bytes, including alternate zero-account encodings accepted by the direct Bittensor builder.
14
+
15
+ - Updated dependencies [[`b38628f`](https://github.com/vultisig/vultisig-sdk/commit/b38628f1ad09fa9dac3e23b2056b24c0040500fe), [`23177e5`](https://github.com/vultisig/vultisig-sdk/commit/23177e5ec12fe0d3e23ffd8ad0a1b5fffbfe9e20), [`2b91950`](https://github.com/vultisig/vultisig-sdk/commit/2b91950ffd1aa86b8afd710ab7c6d30f919ba9af), [`2620db4`](https://github.com/vultisig/vultisig-sdk/commit/2620db498bba40fbced5b5e256a260dccb12ad33), [`77b78da`](https://github.com/vultisig/vultisig-sdk/commit/77b78da36fc0d6032fb596bd3fbfd6dd84fb1d18), [`42bb615`](https://github.com/vultisig/vultisig-sdk/commit/42bb615809a91fd6e8c304c7dba58b3c3c0f80c5), [`30dd259`](https://github.com/vultisig/vultisig-sdk/commit/30dd259d7d495df27d4e59bb27fdf40a6879831d), [`ade50d1`](https://github.com/vultisig/vultisig-sdk/commit/ade50d15fa87b3379d24aaed793b1a76b05c863c), [`a58d6fb`](https://github.com/vultisig/vultisig-sdk/commit/a58d6fbb40fd05bc357fde4b60b8f5cb41639302), [`601ff4f`](https://github.com/vultisig/vultisig-sdk/commit/601ff4f1d1449d452b8e7025df392c1e2f4c5ca7), [`c368202`](https://github.com/vultisig/vultisig-sdk/commit/c36820249569823bb3d3e24b06bcb66a34144f2a), [`4f73cf4`](https://github.com/vultisig/vultisig-sdk/commit/4f73cf425e63f8e0a9cd44e50920cb3f5f7561ad), [`d190033`](https://github.com/vultisig/vultisig-sdk/commit/d190033bf7116466fc138197319c38d5e98e1c64), [`4a79633`](https://github.com/vultisig/vultisig-sdk/commit/4a796338d0d15821cc39d8efc07cbd6e9a32e892), [`8a690b5`](https://github.com/vultisig/vultisig-sdk/commit/8a690b5ae7ce5a249eab0ba0d0be1c63d7c10a85), [`371f012`](https://github.com/vultisig/vultisig-sdk/commit/371f0127f9e213f1f1779cdbc8e85ccaa2ec0caf), [`5f18a09`](https://github.com/vultisig/vultisig-sdk/commit/5f18a090def42d1cd910b708fd2dada848e1fe46), [`9da4962`](https://github.com/vultisig/vultisig-sdk/commit/9da49628203c6b0a774d0f758e1b2935c2628fa5)]:
16
+ - @vultisig/core-chain@6.0.0
17
+ - @vultisig/sdk@8.0.0
18
+ - @vultisig/client-shared@0.3.7
19
+
20
+ ## 7.8.0
21
+
22
+ ### Minor Changes
23
+
24
+ - [#2406](https://github.com/vultisig/vultisig-sdk/pull/2406) [`abecd22`](https://github.com/vultisig/vultisig-sdk/commit/abecd22fcb409bcdbf50bbe1c068e531a19b08d1) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - Add gasless TON jetton sends through the TonAPI relay for W5 accounts. `prepareSendTx`, `send`, `getMaxSendAmount` and the vault-free prep helpers take `tonGasless`/`gasless`; the relay's quote is recorded in `TonSpecific.gasless` (new `TonGasless` message), validated by every signer against the approved transfer before hashing, signed as a W5 `internal_signed` request, and handed to the relay at broadcast. The fee of such a send is the relay commission in the jetton itself — `getKeysignFeeCoin` tells which coin a payload's fee is denominated in — and the status resolver finds the relayed transaction by the signed body's hash. The CLI's `send` command gains `--gasless`. Also fixes the seqno of a deployed W5 wallet: toncenter returns W5 accounts raw, so the seqno is now read from the data cell instead of defaulting to 0, which had every W5 send after the first rejected as a replay.
25
+
26
+ ### Patch Changes
27
+
28
+ - Updated dependencies [[`493da34`](https://github.com/vultisig/vultisig-sdk/commit/493da34ca8baad592b34f97947550415d74b3abf), [`abecd22`](https://github.com/vultisig/vultisig-sdk/commit/abecd22fcb409bcdbf50bbe1c068e531a19b08d1)]:
29
+ - @vultisig/core-chain@5.6.0
30
+ - @vultisig/sdk@7.8.0
31
+
3
32
  ## 7.7.0
4
33
 
5
34
  ### Patch Changes
package/dist/index.js CHANGED
@@ -10680,7 +10680,7 @@ async function previewDryRun(vault, params, dryResult, to) {
10680
10680
  dryResult.keysignPayload
10681
10681
  );
10682
10682
  const isTokenSend = balance.tokenId !== void 0;
10683
- const shouldCheckNativeFeeBalance = isTokenSend && params.amount !== "max";
10683
+ const shouldCheckNativeFeeBalance = isTokenSend && params.amount !== "max" && !params.gasless;
10684
10684
  const feeBalance = shouldCheckNativeFeeBalance ? await vault.balance(params.chain).catch(() => void 0) : void 0;
10685
10685
  const warnings = [];
10686
10686
  if (hasInsufficientBalance) {
@@ -10761,6 +10761,7 @@ async function sendTransaction(vault, params) {
10761
10761
  symbol: params.tokenId,
10762
10762
  memo: params.memo,
10763
10763
  destinationTag,
10764
+ gasless: params.gasless,
10764
10765
  dryRun: true
10765
10766
  });
10766
10767
  prepareSpinner.succeed("Transaction prepared");
@@ -10815,7 +10816,8 @@ async function sendTransaction(vault, params) {
10815
10816
  amount: params.amount,
10816
10817
  symbol: params.tokenId,
10817
10818
  memo: params.memo,
10818
- destinationTag
10819
+ destinationTag,
10820
+ gasless: params.gasless
10819
10821
  });
10820
10822
  if (result.dryRun) throw new Error("unreachable");
10821
10823
  return result;
@@ -19660,7 +19662,7 @@ var cachedVersion = null;
19660
19662
  function getVersion() {
19661
19663
  if (cachedVersion) return cachedVersion;
19662
19664
  if (true) {
19663
- cachedVersion = "7.7.0";
19665
+ cachedVersion = "8.0.0";
19664
19666
  return cachedVersion;
19665
19667
  }
19666
19668
  try {
@@ -21837,13 +21839,17 @@ Examples:
21837
21839
  });
21838
21840
  })
21839
21841
  );
21840
- program2.command("send <chain> <to> [amount]").description(descriptions.send.cliDescription).option("--max", "Send maximum amount (balance minus fees)").option("--token <tokenId>", "Token to send (default: native)").option("--memo <memo>", "Transaction memo").option("--destination-tag <tag>", "XRP DestinationTag (0 to 4294967295)").option("--dry-run", "Preview transaction without signing or broadcasting").option("--confirm", "Confirm and broadcast (required to execute non-interactively; use --dry-run to preview)").option("-y, --yes", "Alias for --confirm").option("--force", "Bypass the duplicate-broadcast guard (re-send an identical, recently-broadcast tx)").option("--password <password>", "Vault password for signing").addHelpText(
21842
+ program2.command("send <chain> <to> [amount]").description(descriptions.send.cliDescription).option("--max", "Send maximum amount (balance minus fees)").option("--token <tokenId>", "Token to send (default: native)").option("--memo <memo>", "Transaction memo").option("--destination-tag <tag>", "XRP DestinationTag (0 to 4294967295)").option(
21843
+ "--gasless",
21844
+ "TON jettons on a W5 account: pay the network fee in the jetton through the relay, no TON needed"
21845
+ ).option("--dry-run", "Preview transaction without signing or broadcasting").option("--confirm", "Confirm and broadcast (required to execute non-interactively; use --dry-run to preview)").option("-y, --yes", "Alias for --confirm").option("--force", "Bypass the duplicate-broadcast guard (re-send an identical, recently-broadcast tx)").option("--password <password>", "Vault password for signing").addHelpText(
21841
21846
  "after",
21842
21847
  `
21843
21848
  Examples:
21844
21849
  vultisig send Ethereum 0x1234...abcd 0.1
21845
21850
  vultisig send Bitcoin bc1q... --max --confirm
21846
21851
  vultisig send Ethereum 0x... 0.5 --dry-run --output json
21852
+ vultisig send Ton UQ... 25 --token USDT --gasless --dry-run
21847
21853
 
21848
21854
  Environment variables:
21849
21855
  VAULT_PASSWORD Vault password (bypasses prompt)
@@ -21859,6 +21865,9 @@ See also: balance, tx-status`
21859
21865
  if (options.destinationTag !== void 0 && chain !== Chain14.Ripple) {
21860
21866
  throw new Error("--destination-tag is only supported for XRP");
21861
21867
  }
21868
+ if (options.gasless && (chain !== Chain14.Ton || !options.token)) {
21869
+ throw new Error("--gasless is only supported for TON jetton sends (pass --token)");
21870
+ }
21862
21871
  const destinationTag = options.destinationTag === void 0 ? void 0 : Number(options.destinationTag);
21863
21872
  if (options.destinationTag !== void 0 && (!/^(0|[1-9]\d*)$/.test(options.destinationTag) || !Number.isSafeInteger(destinationTag) || destinationTag > 4294967295)) {
21864
21873
  throw new Error("Invalid XRP DestinationTag: expected an integer from 0 to 4294967295");
@@ -21871,6 +21880,7 @@ See also: balance, tx-status`
21871
21880
  tokenId: options.token,
21872
21881
  memo: options.memo,
21873
21882
  destinationTag,
21883
+ gasless: options.gasless,
21874
21884
  dryRun: options.dryRun,
21875
21885
  yes: options.yes || options.confirm,
21876
21886
  force: options.force,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vultisig/cli",
3
- "version": "7.7.0",
3
+ "version": "8.0.0",
4
4
  "description": "The self-custody MPC wallet CLI for AI coding agents (Claude Code, Cursor, OpenCode). Natural-language agent mode, 36+ chains, DKLS23 threshold signatures. Seedless.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -73,10 +73,10 @@
73
73
  "@msgpack/msgpack": "^3.1.2",
74
74
  "@napi-rs/keyring": "^1.3.0",
75
75
  "@noble/hashes": "^2.2.0",
76
- "@vultisig/client-shared": "^0.3.6",
77
- "@vultisig/core-chain": "^5.5.1",
76
+ "@vultisig/client-shared": "^0.3.7",
77
+ "@vultisig/core-chain": "^6.0.0",
78
78
  "@vultisig/rujira": "^71.0.1",
79
- "@vultisig/sdk": "^7.7.0",
79
+ "@vultisig/sdk": "^8.0.0",
80
80
  "chalk": "^5.6.2",
81
81
  "cli-table3": "^0.6.5",
82
82
  "commander": "^15.0.0",
@@ -94,7 +94,7 @@
94
94
  "@types/node": "^26.1.1",
95
95
  "@types/tabtab": "^3.0.4",
96
96
  "@types/ws": "^8.18.1",
97
- "@vultisig/core-mpc": "^3.3.1",
97
+ "@vultisig/core-mpc": "^4.0.0",
98
98
  "esbuild": "^0.28.1",
99
99
  "ethers": "^6.17.0",
100
100
  "node-pty": "^1.1.0",