@ironwallet/mcp-server 1.1.0 → 1.2.1

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.
Files changed (113) hide show
  1. package/README.md +11 -4
  2. package/dist/api/balances.d.ts +1 -0
  3. package/dist/api/balances.js +1 -1
  4. package/dist/api/balances.js.map +1 -1
  5. package/dist/api/history/index.d.ts +49 -0
  6. package/dist/api/history/index.js +209 -0
  7. package/dist/api/history/index.js.map +1 -0
  8. package/dist/api/history/merge.d.ts +63 -0
  9. package/dist/api/history/merge.js +208 -0
  10. package/dist/api/history/merge.js.map +1 -0
  11. package/dist/api/history/normalize.d.ts +37 -0
  12. package/dist/api/history/normalize.js +149 -0
  13. package/dist/api/history/normalize.js.map +1 -0
  14. package/dist/api/history/pace.d.ts +21 -0
  15. package/dist/api/history/pace.js +40 -0
  16. package/dist/api/history/pace.js.map +1 -0
  17. package/dist/api/history/providers/blockcypher.d.ts +24 -0
  18. package/dist/api/history/providers/blockcypher.js +70 -0
  19. package/dist/api/history/providers/blockcypher.js.map +1 -0
  20. package/dist/api/history/providers/esplora.d.ts +41 -0
  21. package/dist/api/history/providers/esplora.js +100 -0
  22. package/dist/api/history/providers/esplora.js.map +1 -0
  23. package/dist/api/history/providers/etherscan.d.ts +36 -0
  24. package/dist/api/history/providers/etherscan.js +118 -0
  25. package/dist/api/history/providers/etherscan.js.map +1 -0
  26. package/dist/api/history/providers/nodereal.d.ts +27 -0
  27. package/dist/api/history/providers/nodereal.js +93 -0
  28. package/dist/api/history/providers/nodereal.js.map +1 -0
  29. package/dist/api/history/providers/solana.d.ts +47 -0
  30. package/dist/api/history/providers/solana.js +211 -0
  31. package/dist/api/history/providers/solana.js.map +1 -0
  32. package/dist/api/history/providers/ton-shared.d.ts +18 -0
  33. package/dist/api/history/providers/ton-shared.js +38 -0
  34. package/dist/api/history/providers/ton-shared.js.map +1 -0
  35. package/dist/api/history/providers/tonapi.d.ts +52 -0
  36. package/dist/api/history/providers/tonapi.js +183 -0
  37. package/dist/api/history/providers/tonapi.js.map +1 -0
  38. package/dist/api/history/providers/toncenter.d.ts +55 -0
  39. package/dist/api/history/providers/toncenter.js +191 -0
  40. package/dist/api/history/providers/toncenter.js.map +1 -0
  41. package/dist/api/history/providers/trongrid.d.ts +48 -0
  42. package/dist/api/history/providers/trongrid.js +144 -0
  43. package/dist/api/history/providers/trongrid.js.map +1 -0
  44. package/dist/api/history/providers/tronscan.d.ts +55 -0
  45. package/dist/api/history/providers/tronscan.js +153 -0
  46. package/dist/api/history/providers/tronscan.js.map +1 -0
  47. package/dist/api/history/providers/xrp.d.ts +39 -0
  48. package/dist/api/history/providers/xrp.js +150 -0
  49. package/dist/api/history/providers/xrp.js.map +1 -0
  50. package/dist/api/history/types.d.ts +112 -0
  51. package/dist/api/history/types.js +27 -0
  52. package/dist/api/history/types.js.map +1 -0
  53. package/dist/api/swap.d.ts +2 -0
  54. package/dist/api/swap.js +24 -10
  55. package/dist/api/swap.js.map +1 -1
  56. package/dist/config.d.ts +12 -3
  57. package/dist/config.js +83 -7
  58. package/dist/config.js.map +1 -1
  59. package/dist/consent/copy.d.ts +2 -2
  60. package/dist/consent/copy.js +2 -1
  61. package/dist/consent/copy.js.map +1 -1
  62. package/dist/generated/env-config.js +96 -1
  63. package/dist/generated/env-config.js.map +1 -1
  64. package/dist/generated/env-profile.d.ts +7 -0
  65. package/dist/keystore/store.js +33 -4
  66. package/dist/keystore/store.js.map +1 -1
  67. package/dist/local-secrets.d.ts +23 -1
  68. package/dist/local-secrets.js +36 -2
  69. package/dist/local-secrets.js.map +1 -1
  70. package/dist/networks.d.ts +3 -0
  71. package/dist/networks.js +20 -0
  72. package/dist/networks.js.map +1 -1
  73. package/dist/npm-registry.d.ts +45 -0
  74. package/dist/npm-registry.js +175 -0
  75. package/dist/npm-registry.js.map +1 -0
  76. package/dist/policy.d.ts +31 -0
  77. package/dist/policy.js +95 -0
  78. package/dist/policy.js.map +1 -1
  79. package/dist/qr/deposit-qr.d.ts +21 -1
  80. package/dist/qr/deposit-qr.js +100 -21
  81. package/dist/qr/deposit-qr.js.map +1 -1
  82. package/dist/qr/font.js +3 -0
  83. package/dist/qr/font.js.map +1 -1
  84. package/dist/server.js +3 -0
  85. package/dist/server.js.map +1 -1
  86. package/dist/tools/definitions.d.ts +23 -1
  87. package/dist/tools/definitions.js +87 -29
  88. package/dist/tools/definitions.js.map +1 -1
  89. package/dist/tools/helpers.d.ts +10 -0
  90. package/dist/tools/helpers.js +26 -0
  91. package/dist/tools/helpers.js.map +1 -1
  92. package/dist/tools/history.d.ts +7 -0
  93. package/dist/tools/history.js +70 -0
  94. package/dist/tools/history.js.map +1 -0
  95. package/dist/tools/index.js +4 -0
  96. package/dist/tools/index.js.map +1 -1
  97. package/dist/tools/runtime.d.ts +8 -0
  98. package/dist/tools/runtime.js +110 -0
  99. package/dist/tools/runtime.js.map +1 -0
  100. package/dist/tools/swap.d.ts +9 -1
  101. package/dist/tools/swap.js +41 -7
  102. package/dist/tools/swap.js.map +1 -1
  103. package/dist/tools/transfer.d.ts +1 -1
  104. package/dist/tools/transfer.js +5 -2
  105. package/dist/tools/transfer.js.map +1 -1
  106. package/dist/tools/wallets.js +31 -13
  107. package/dist/tools/wallets.js.map +1 -1
  108. package/dist/web/manager.d.ts +6 -0
  109. package/dist/web/manager.js +149 -8
  110. package/dist/web/manager.js.map +1 -1
  111. package/package.json +2 -2
  112. package/server.json +19 -3
  113. package/tools.json +99 -20
@@ -20,6 +20,101 @@ export const BAKED_ENV = {
20
20
  "xrpRpcUrl": "https://xrplcluster.com",
21
21
  "bitcoinTestnet": false,
22
22
  "ratesApiUrl": "https://iwio.ai/mcp",
23
- "staticResourcesUrl": "https://iwio.ai/mcp/Ironwallet"
23
+ "staticResourcesUrl": "https://iwio.ai/mcp/Ironwallet",
24
+ "historyApis": {
25
+ "ethereum": [
26
+ {
27
+ "kind": "etherscan",
28
+ "url": "https://eth.blockscout.com/api"
29
+ }
30
+ ],
31
+ "bsc": [
32
+ {
33
+ "kind": "nodereal",
34
+ "url": "https://bsc-explorer-api.nodereal.io/api"
35
+ }
36
+ ],
37
+ "polygon": [
38
+ {
39
+ "kind": "etherscan",
40
+ "url": "https://polygon.blockscout.com/api"
41
+ }
42
+ ],
43
+ "base": [
44
+ {
45
+ "kind": "etherscan",
46
+ "url": "https://base.blockscout.com/api"
47
+ }
48
+ ],
49
+ "arbitrum": [
50
+ {
51
+ "kind": "etherscan",
52
+ "url": "https://arbitrum.blockscout.com/api"
53
+ }
54
+ ],
55
+ "optimism": [
56
+ {
57
+ "kind": "etherscan",
58
+ "url": "https://optimism.blockscout.com/api"
59
+ }
60
+ ],
61
+ "avalanche": [
62
+ {
63
+ "kind": "etherscan",
64
+ "url": "https://api.routescan.io/v2/network/mainnet/evm/43114/etherscan/api"
65
+ }
66
+ ],
67
+ "tron": [
68
+ {
69
+ "kind": "tronscan",
70
+ "url": "https://tronscanner.org/api/tron"
71
+ },
72
+ {
73
+ "kind": "trongrid"
74
+ }
75
+ ],
76
+ "bitcoin": [
77
+ {
78
+ "kind": "esplora"
79
+ },
80
+ {
81
+ "kind": "esplora",
82
+ "url": "https://mempool.space/api"
83
+ }
84
+ ],
85
+ "litecoin": [
86
+ {
87
+ "kind": "esplora"
88
+ }
89
+ ],
90
+ "doge": [
91
+ {
92
+ "kind": "blockcypher"
93
+ }
94
+ ],
95
+ "solana": [
96
+ {
97
+ "kind": "solana-rpc",
98
+ "url": "https://solana-rpc.publicnode.com"
99
+ },
100
+ {
101
+ "kind": "solana-rpc"
102
+ }
103
+ ],
104
+ "ton": [
105
+ {
106
+ "kind": "toncenter"
107
+ },
108
+ {
109
+ "kind": "tonapi",
110
+ "url": "https://tonapi.io/v2"
111
+ }
112
+ ],
113
+ "xrp": [
114
+ {
115
+ "kind": "xrp-rpc"
116
+ }
117
+ ]
118
+ }
24
119
  };
25
120
  //# sourceMappingURL=env-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"env-config.js","sourceRoot":"","sources":["../../src/generated/env-config.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,SAAS,GAAoB;IACxC,SAAS,EAAE,0BAA0B;IACrC,UAAU,EAAE,6BAA6B;IACzC,cAAc,EAAE,qBAAqB;IACrC,YAAY,EAAE;QACZ,UAAU,EAAE,qCAAqC;QACjD,KAAK,EAAE,gCAAgC;QACvC,SAAS,EAAE,wCAAwC;QACnD,MAAM,EAAE,iCAAiC;QACzC,UAAU,EAAE,yCAAyC;QACrD,UAAU,EAAE,qCAAqC;QACjD,WAAW,EAAE,8CAA8C;KAC5D;IACD,YAAY,EAAE,yBAAyB;IACvC,eAAe,EAAE,8BAA8B;IAC/C,gBAAgB,EAAE,+BAA+B;IACjD,YAAY,EAAE,0CAA0C;IACxD,cAAc,EAAE,qCAAqC;IACrD,WAAW,EAAE,8BAA8B;IAC3C,WAAW,EAAE,yBAAyB;IACtC,gBAAgB,EAAE,KAAK;IACvB,aAAa,EAAE,qBAAqB;IACpC,oBAAoB,EAAE,gCAAgC;CAC9C,CAAC"}
1
+ {"version":3,"file":"env-config.js","sourceRoot":"","sources":["../../src/generated/env-config.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,SAAS,GAAoB;IACxC,SAAS,EAAE,0BAA0B;IACrC,UAAU,EAAE,6BAA6B;IACzC,cAAc,EAAE,qBAAqB;IACrC,YAAY,EAAE;QACZ,UAAU,EAAE,qCAAqC;QACjD,KAAK,EAAE,gCAAgC;QACvC,SAAS,EAAE,wCAAwC;QACnD,MAAM,EAAE,iCAAiC;QACzC,UAAU,EAAE,yCAAyC;QACrD,UAAU,EAAE,qCAAqC;QACjD,WAAW,EAAE,8CAA8C;KAC5D;IACD,YAAY,EAAE,yBAAyB;IACvC,eAAe,EAAE,8BAA8B;IAC/C,gBAAgB,EAAE,+BAA+B;IACjD,YAAY,EAAE,0CAA0C;IACxD,cAAc,EAAE,qCAAqC;IACrD,WAAW,EAAE,8BAA8B;IAC3C,WAAW,EAAE,yBAAyB;IACtC,gBAAgB,EAAE,KAAK;IACvB,aAAa,EAAE,qBAAqB;IACpC,oBAAoB,EAAE,gCAAgC;IACtD,aAAa,EAAE;QACb,UAAU,EAAE;YACV;gBACE,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,gCAAgC;aACxC;SACF;QACD,KAAK,EAAE;YACL;gBACE,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,0CAA0C;aAClD;SACF;QACD,SAAS,EAAE;YACT;gBACE,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,oCAAoC;aAC5C;SACF;QACD,MAAM,EAAE;YACN;gBACE,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,iCAAiC;aACzC;SACF;QACD,UAAU,EAAE;YACV;gBACE,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,qCAAqC;aAC7C;SACF;QACD,UAAU,EAAE;YACV;gBACE,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,qCAAqC;aAC7C;SACF;QACD,WAAW,EAAE;YACX;gBACE,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,qEAAqE;aAC7E;SACF;QACD,MAAM,EAAE;YACN;gBACE,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,kCAAkC;aAC1C;YACD;gBACE,MAAM,EAAE,UAAU;aACnB;SACF;QACD,SAAS,EAAE;YACT;gBACE,MAAM,EAAE,SAAS;aAClB;YACD;gBACE,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,2BAA2B;aACnC;SACF;QACD,UAAU,EAAE;YACV;gBACE,MAAM,EAAE,SAAS;aAClB;SACF;QACD,MAAM,EAAE;YACN;gBACE,MAAM,EAAE,aAAa;aACtB;SACF;QACD,QAAQ,EAAE;YACR;gBACE,MAAM,EAAE,YAAY;gBACpB,KAAK,EAAE,mCAAmC;aAC3C;YACD;gBACE,MAAM,EAAE,YAAY;aACrB;SACF;QACD,KAAK,EAAE;YACL;gBACE,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,sBAAsB;aAC9B;SACF;QACD,KAAK,EAAE;YACL;gBACE,MAAM,EAAE,SAAS;aAClB;SACF;KACF;CACO,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { HistoryApis } from "../api/history/types.js";
1
2
  /** Shape of configurations/config.json baked at build time. */
2
3
  export interface BakedEnvProfile {
3
4
  authUrl: string;
@@ -16,4 +17,10 @@ export interface BakedEnvProfile {
16
17
  tonApiUrl: string;
17
18
  xrpRpcUrl: string;
18
19
  bitcoinTestnet: boolean;
20
+ /**
21
+ * Transaction-history indexers per network, tried in order. Optional: non-EVM
22
+ * networks fall back to the endpoints above; EVM networks without an entry
23
+ * report history as unsupported.
24
+ */
25
+ historyApis?: HistoryApis;
19
26
  }
@@ -4,7 +4,7 @@
4
4
  * signing; they are never returned to callers of these functions except the
5
5
  * local browser wallet manager.
6
6
  */
7
- import { mkdirSync, readFileSync, writeFileSync, existsSync } from "node:fs";
7
+ import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, realpathSync, renameSync, unlinkSync, writeSync, } from "node:fs";
8
8
  import { join } from "node:path";
9
9
  import { getConfig } from "../config.js";
10
10
  import { restrictPrivateFile } from "../restrict-private-file.js";
@@ -38,11 +38,40 @@ export function loadKeystore() {
38
38
  });
39
39
  return parsed;
40
40
  }
41
+ /**
42
+ * Atomic save: write a sibling temp file, fsync, then rename over the live
43
+ * keystore. A crash mid-write must never leave a truncated keystore.json —
44
+ * that file is the only copy of every seed on this machine. The rename keeps
45
+ * the owner-only permissions applied to the temp file. If keystore.json is a
46
+ * symlink, the real target is replaced, not the link. On any failure the temp
47
+ * file is removed and the previous keystore stays as it was.
48
+ */
41
49
  function saveKeystore(ks) {
42
50
  ensureDir();
43
- const path = keystorePath();
44
- writeFileSync(path, JSON.stringify(ks, null, 2), { mode: 0o600 });
45
- restrictPrivateFile(path);
51
+ const configured = keystorePath();
52
+ const path = existsSync(configured) ? realpathSync(configured) : configured;
53
+ const tmp = `${path}.${process.pid}.tmp`;
54
+ try {
55
+ const fd = openSync(tmp, "w", 0o600);
56
+ try {
57
+ writeSync(fd, JSON.stringify(ks, null, 2));
58
+ fsyncSync(fd);
59
+ }
60
+ finally {
61
+ closeSync(fd);
62
+ }
63
+ restrictPrivateFile(tmp);
64
+ renameSync(tmp, path);
65
+ }
66
+ catch (e) {
67
+ try {
68
+ unlinkSync(tmp);
69
+ }
70
+ catch {
71
+ // temp file was never created or is already gone
72
+ }
73
+ throw e;
74
+ }
46
75
  logInfo("keystore.save", {
47
76
  path,
48
77
  walletCount: ks.wallets.length,
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/keystore/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/keystore/store.ts"],"names":[],"mappings":"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"}
@@ -12,5 +12,27 @@ export declare function isUnsetSecret(value: string | undefined): boolean;
12
12
  export declare function resolveRelayApiKey(): string;
13
13
  /** Keystore wrapping secret. Not the recovery phrase. */
14
14
  export declare function resolveKeystorePassphrase(): string;
15
- /** X-Device-Id. UUID, stable per keystore directory. */
15
+ /** Platform tag the backend expects in front of the device UUID. */
16
+ export declare const DEVICE_ID_PLATFORM = "web";
17
+ /**
18
+ * Bare UUID as stored in `device-id` (or `IW_DEVICE_ID`). Stable per keystore
19
+ * directory. Used as fingerprint fallback material; the wire value is
20
+ * `formatDeviceId()` of this.
21
+ */
22
+ export declare function resolveRawDeviceId(): string;
23
+ /**
24
+ * `web:<uuid>` for X-Device-Id. A bare UUID (existing installs, env override)
25
+ * gets the `web:` prefix so the identity part stays the same. A value that
26
+ * already carries a `platform:` prefix is sent as is.
27
+ */
28
+ export declare function formatDeviceId(raw: string): string;
29
+ /** X-Device-Id, `web:<uuid>`. */
16
30
  export declare function resolveDeviceId(): string;
31
+ /**
32
+ * `<uuid>:<unix nanoseconds>` — the X-Installation-ID format the backend
33
+ * expects. Minted once per keystore directory and kept, so a new id means a
34
+ * fresh install (or a wiped keystore).
35
+ */
36
+ export declare function newInstallationId(now?: number): string;
37
+ /** X-Installation-ID. Stable per keystore directory; no env override on purpose. */
38
+ export declare function resolveInstallationId(): string;
@@ -13,6 +13,7 @@ import { restrictPrivateFile } from "./restrict-private-file.js";
13
13
  const RELAY_KEY_FILE = "relay-api-key";
14
14
  const PASSPHRASE_FILE = "keystore-passphrase";
15
15
  const DEVICE_ID_FILE = "device-id";
16
+ const INSTALLATION_ID_FILE = "installation-id";
16
17
  export function resolveKeystoreDir() {
17
18
  if (process.env.IW_KEYSTORE_DIR)
18
19
  return process.env.IW_KEYSTORE_DIR;
@@ -59,11 +60,44 @@ export function resolveKeystorePassphrase() {
59
60
  return fromEnv.trim();
60
61
  return readOrCreate(PASSPHRASE_FILE, () => randomBytes(24).toString("base64url"));
61
62
  }
62
- /** X-Device-Id. UUID, stable per keystore directory. */
63
- export function resolveDeviceId() {
63
+ /** Platform tag the backend expects in front of the device UUID. */
64
+ export const DEVICE_ID_PLATFORM = "web";
65
+ /**
66
+ * Bare UUID as stored in `device-id` (or `IW_DEVICE_ID`). Stable per keystore
67
+ * directory. Used as fingerprint fallback material; the wire value is
68
+ * `formatDeviceId()` of this.
69
+ */
70
+ export function resolveRawDeviceId() {
64
71
  const fromEnv = process.env.IW_DEVICE_ID;
65
72
  if (!isUnsetSecret(fromEnv))
66
73
  return fromEnv.trim();
67
74
  return readOrCreate(DEVICE_ID_FILE, () => randomUUID());
68
75
  }
76
+ /**
77
+ * `web:<uuid>` for X-Device-Id. A bare UUID (existing installs, env override)
78
+ * gets the `web:` prefix so the identity part stays the same. A value that
79
+ * already carries a `platform:` prefix is sent as is.
80
+ */
81
+ export function formatDeviceId(raw) {
82
+ const value = raw.trim();
83
+ if (/^[A-Za-z][A-Za-z0-9_-]*:/.test(value))
84
+ return value;
85
+ return `${DEVICE_ID_PLATFORM}:${value}`;
86
+ }
87
+ /** X-Device-Id, `web:<uuid>`. */
88
+ export function resolveDeviceId() {
89
+ return formatDeviceId(resolveRawDeviceId());
90
+ }
91
+ /**
92
+ * `<uuid>:<unix nanoseconds>` — the X-Installation-ID format the backend
93
+ * expects. Minted once per keystore directory and kept, so a new id means a
94
+ * fresh install (or a wiped keystore).
95
+ */
96
+ export function newInstallationId(now = Date.now()) {
97
+ return `${randomUUID()}:${BigInt(Math.trunc(now)) * 1000000n}`;
98
+ }
99
+ /** X-Installation-ID. Stable per keystore directory; no env override on purpose. */
100
+ export function resolveInstallationId() {
101
+ return readOrCreate(INSTALLATION_ID_FILE, () => newInstallationId());
102
+ }
69
103
  //# sourceMappingURL=local-secrets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-secrets.js","sourceRoot":"","sources":["../src/local-secrets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-secrets.js","sourceRoot":"","sources":["../src/local-secrets.ts"],"names":[],"mappings":"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"}
@@ -3,3 +3,6 @@ export declare const EVM_NETWORKS: readonly ["ethereum", "bsc", "polygon", "base
3
3
  export declare const NON_EVM_NETWORKS: readonly ["tron", "bitcoin", "litecoin", "doge", "solana", "ton", "xrp"];
4
4
  export declare const ALL_NETWORKS: readonly ["ethereum", "bsc", "polygon", "base", "arbitrum", "optimism", "avalanche", "tron", "bitcoin", "litecoin", "doge", "solana", "ton", "xrp"];
5
5
  export type NetworkId = (typeof ALL_NETWORKS)[number];
6
+ /** Human-readable network names for captions (deposit QR, manager). */
7
+ export declare const NETWORK_LABEL: Record<NetworkId, string>;
8
+ export declare function networkLabel(network: string): string;
package/dist/networks.js CHANGED
@@ -18,4 +18,24 @@ export const NON_EVM_NETWORKS = [
18
18
  "xrp",
19
19
  ];
20
20
  export const ALL_NETWORKS = [...EVM_NETWORKS, ...NON_EVM_NETWORKS];
21
+ /** Human-readable network names for captions (deposit QR, manager). */
22
+ export const NETWORK_LABEL = {
23
+ ethereum: "Ethereum",
24
+ bsc: "BSC",
25
+ polygon: "Polygon",
26
+ base: "Base",
27
+ arbitrum: "Arbitrum",
28
+ optimism: "Optimism",
29
+ avalanche: "Avalanche",
30
+ tron: "Tron",
31
+ bitcoin: "Bitcoin",
32
+ litecoin: "Litecoin",
33
+ doge: "Dogecoin",
34
+ solana: "Solana",
35
+ ton: "TON",
36
+ xrp: "XRP",
37
+ };
38
+ export function networkLabel(network) {
39
+ return NETWORK_LABEL[network] ?? network;
40
+ }
21
41
  //# sourceMappingURL=networks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"networks.js","sourceRoot":"","sources":["../src/networks.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU;IACV,KAAK;IACL,SAAS;IACT,MAAM;IACN,UAAU;IACV,UAAU;IACV,WAAW;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM;IACN,SAAS;IACT,UAAU;IACV,MAAM;IACN,QAAQ;IACR,KAAK;IACL,KAAK;CACG,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,gBAAgB,CAAU,CAAC"}
1
+ {"version":3,"file":"networks.js","sourceRoot":"","sources":["../src/networks.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU;IACV,KAAK;IACL,SAAS;IACT,MAAM;IACN,UAAU;IACV,UAAU;IACV,WAAW;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM;IACN,SAAS;IACT,UAAU;IACV,MAAM;IACN,QAAQ;IACR,KAAK;IACL,KAAK;CACG,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,gBAAgB,CAAU,CAAC;AAI5E,uEAAuE;AACvE,MAAM,CAAC,MAAM,aAAa,GAA8B;IACtD,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,KAAK;IACV,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;CACX,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,aAAa,CAAC,OAAoB,CAAC,IAAI,OAAO,CAAC;AACxD,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Resolve the npm registry used for @ironwallet/*, read packument dist-tags,
3
+ * and stage updates into the npx cache. Used by get_runtime_info (read-only)
4
+ * and prepare_update (writes only inside this package's own npx cache dir).
5
+ * The running process is never restarted from here.
6
+ */
7
+ export declare const MCP_PACKAGE = "@ironwallet/mcp-server";
8
+ export declare const DEFAULT_NPM_REGISTRY = "https://registry.npmjs.org";
9
+ export type DistTags = Record<string, string>;
10
+ export type VersionStatus = "current" | "update_available" | "unknown";
11
+ export declare function resolveNpmRegistry(env?: NodeJS.ProcessEnv): string;
12
+ export declare function packumentUrl(registry: string, name?: string): string;
13
+ export declare function parseDistTags(json: unknown): DistTags;
14
+ export declare function versionStatus(running: string, latest: string | undefined): {
15
+ status: VersionStatus;
16
+ updateAvailable: boolean | null;
17
+ };
18
+ export declare function npxRefreshHint(platform?: NodeJS.Platform): string;
19
+ export declare function fetchDistTags(registry: string, opts?: {
20
+ correlationId?: string;
21
+ }): Promise<DistTags>;
22
+ /** Directory containing this package's package.json (works from src/ and dist/). */
23
+ export declare function packageRootDir(): string;
24
+ /**
25
+ * If `packageRoot` lives inside an npx cache extract
26
+ * (`…/_npx/<hash>/node_modules/@ironwallet/mcp-server`), return the
27
+ * `…/_npx/<hash>` directory that the MCP host reuses on every start.
28
+ * Returns null for global installs, local checkouts, and unpacked tarballs.
29
+ */
30
+ export declare function npxCacheDirFor(packageRoot: string): string | null;
31
+ /**
32
+ * Path to npm-cli.js derived from npm_execpath (set by npm/npx when it
33
+ * launched this process). Lets us run npm via `node npm-cli.js …` and avoid
34
+ * the Windows `.cmd` / shell-quoting minefield. Null when unavailable.
35
+ */
36
+ export declare function npmCliCandidate(env?: NodeJS.ProcessEnv): string | null;
37
+ export declare function buildInstallArgs(targetVersion: string): string[];
38
+ /**
39
+ * Install `targetVersion` into the npx cache dir in place, so the next MCP
40
+ * restart picks it up. The running process keeps executing the old code.
41
+ * Throws with npm's stderr tail on failure; verifies the on-disk version.
42
+ */
43
+ export declare function stageUpdate(targetVersion: string, npxDir: string, opts?: {
44
+ timeoutMs?: number;
45
+ }): Promise<void>;
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Resolve the npm registry used for @ironwallet/*, read packument dist-tags,
3
+ * and stage updates into the npx cache. Used by get_runtime_info (read-only)
4
+ * and prepare_update (writes only inside this package's own npx cache dir).
5
+ * The running process is never restarted from here.
6
+ */
7
+ import { spawn } from "node:child_process";
8
+ import { existsSync, readFileSync } from "node:fs";
9
+ import { basename, dirname, join } from "node:path";
10
+ import { fileURLToPath } from "node:url";
11
+ import { httpJson } from "./api/http.js";
12
+ export const MCP_PACKAGE = "@ironwallet/mcp-server";
13
+ export const DEFAULT_NPM_REGISTRY = "https://registry.npmjs.org";
14
+ export function resolveNpmRegistry(env = process.env) {
15
+ const scoped = env["npm_config_@ironwallet:registry"] ??
16
+ env["npm_config_@ironwallet_registry"];
17
+ const raw = (scoped || env.npm_config_registry || DEFAULT_NPM_REGISTRY).trim();
18
+ return raw.replace(/\/+$/, "") || DEFAULT_NPM_REGISTRY;
19
+ }
20
+ export function packumentUrl(registry, name = MCP_PACKAGE) {
21
+ const base = registry.replace(/\/+$/, "");
22
+ return `${base}/${name.replace("/", "%2f")}`;
23
+ }
24
+ export function parseDistTags(json) {
25
+ if (!json || typeof json !== "object")
26
+ return {};
27
+ const raw = json["dist-tags"];
28
+ if (!raw || typeof raw !== "object")
29
+ return {};
30
+ const out = {};
31
+ for (const [tag, ver] of Object.entries(raw)) {
32
+ if (typeof ver === "string" && ver.trim())
33
+ out[tag] = ver.trim();
34
+ }
35
+ return out;
36
+ }
37
+ export function versionStatus(running, latest) {
38
+ if (!latest)
39
+ return { status: "unknown", updateAvailable: null };
40
+ if (latest === running)
41
+ return { status: "current", updateAvailable: false };
42
+ return { status: "update_available", updateAvailable: true };
43
+ }
44
+ export function npxRefreshHint(platform = process.platform) {
45
+ const cache = platform === "win32"
46
+ ? "%LOCALAPPDATA%\\npm-cache\\_npx"
47
+ : "~/.npm/_npx";
48
+ return ("This process does not self-update. Restart the MCP server to pick up a newer npm package. " +
49
+ `If the version stays the same, delete ${cache} and restart.`);
50
+ }
51
+ export async function fetchDistTags(registry, opts = {}) {
52
+ const url = packumentUrl(registry);
53
+ const doc = await httpJson(url, { headers: { Accept: "application/vnd.npm.install-v1+json, application/json" } }, {
54
+ timeoutMs: 8000,
55
+ retries: 1,
56
+ correlationId: opts.correlationId,
57
+ label: "npm.packument",
58
+ });
59
+ return parseDistTags(doc);
60
+ }
61
+ /** Directory containing this package's package.json (works from src/ and dist/). */
62
+ export function packageRootDir() {
63
+ return join(dirname(fileURLToPath(import.meta.url)), "..");
64
+ }
65
+ /**
66
+ * If `packageRoot` lives inside an npx cache extract
67
+ * (`…/_npx/<hash>/node_modules/@ironwallet/mcp-server`), return the
68
+ * `…/_npx/<hash>` directory that the MCP host reuses on every start.
69
+ * Returns null for global installs, local checkouts, and unpacked tarballs.
70
+ */
71
+ export function npxCacheDirFor(packageRoot) {
72
+ const root = packageRoot.replace(/[\\/]+$/, "");
73
+ const scopeDir = dirname(root);
74
+ const nmDir = dirname(scopeDir);
75
+ const hashDir = dirname(nmDir);
76
+ const npxBase = dirname(hashDir);
77
+ if (basename(root) !== "mcp-server")
78
+ return null;
79
+ if (basename(scopeDir) !== "@ironwallet")
80
+ return null;
81
+ if (basename(nmDir) !== "node_modules")
82
+ return null;
83
+ if (basename(npxBase) !== "_npx")
84
+ return null;
85
+ return hashDir;
86
+ }
87
+ /**
88
+ * Path to npm-cli.js derived from npm_execpath (set by npm/npx when it
89
+ * launched this process). Lets us run npm via `node npm-cli.js …` and avoid
90
+ * the Windows `.cmd` / shell-quoting minefield. Null when unavailable.
91
+ */
92
+ export function npmCliCandidate(env = process.env) {
93
+ const execPath = env.npm_execpath?.trim();
94
+ if (!execPath)
95
+ return null;
96
+ const base = basename(execPath).toLowerCase();
97
+ if (base === "npm-cli.js")
98
+ return execPath;
99
+ if (base === "npx-cli.js")
100
+ return join(dirname(execPath), "npm-cli.js");
101
+ return null;
102
+ }
103
+ export function buildInstallArgs(targetVersion) {
104
+ return [
105
+ "install",
106
+ `${MCP_PACKAGE}@${targetVersion}`,
107
+ "--no-save",
108
+ "--no-audit",
109
+ "--no-fund",
110
+ "--loglevel=error",
111
+ ];
112
+ }
113
+ const SAFE_VERSION = /^[0-9A-Za-z.+-]+$/;
114
+ /**
115
+ * Install `targetVersion` into the npx cache dir in place, so the next MCP
116
+ * restart picks it up. The running process keeps executing the old code.
117
+ * Throws with npm's stderr tail on failure; verifies the on-disk version.
118
+ */
119
+ export async function stageUpdate(targetVersion, npxDir, opts = {}) {
120
+ if (!SAFE_VERSION.test(targetVersion)) {
121
+ throw new Error(`Refusing to install suspicious version "${targetVersion}".`);
122
+ }
123
+ const timeoutMs = opts.timeoutMs ?? 180_000;
124
+ const args = buildInstallArgs(targetVersion);
125
+ const npmCli = npmCliCandidate();
126
+ const viaNode = npmCli !== null && existsSync(npmCli);
127
+ await new Promise((resolve, reject) => {
128
+ // Prefer `node npm-cli.js` (no shell). Fall back to `npm` through the
129
+ // platform shell; every token is fixed or SAFE_VERSION-checked above.
130
+ const child = viaNode
131
+ ? spawn(process.execPath, [npmCli, ...args], {
132
+ cwd: npxDir,
133
+ stdio: ["ignore", "pipe", "pipe"],
134
+ windowsHide: true,
135
+ })
136
+ : spawn(["npm", ...args].join(" "), {
137
+ cwd: npxDir,
138
+ stdio: ["ignore", "pipe", "pipe"],
139
+ shell: true,
140
+ windowsHide: true,
141
+ });
142
+ let stderrTail = "";
143
+ const timer = setTimeout(() => {
144
+ child.kill();
145
+ reject(new Error(`npm install timed out after ${timeoutMs} ms.`));
146
+ }, timeoutMs);
147
+ child.stderr?.on("data", (d) => {
148
+ stderrTail = (stderrTail + d.toString()).slice(-2000);
149
+ });
150
+ child.stdout?.resume();
151
+ child.on("error", (e) => {
152
+ clearTimeout(timer);
153
+ reject(e);
154
+ });
155
+ child.on("close", (code) => {
156
+ clearTimeout(timer);
157
+ if (code === 0)
158
+ resolve();
159
+ else
160
+ reject(new Error(`npm install exited with code ${code}: ${stderrTail.trim()}`));
161
+ });
162
+ });
163
+ const installedPkg = join(npxDir, "node_modules", "@ironwallet", "mcp-server", "package.json");
164
+ let installed;
165
+ try {
166
+ installed = JSON.parse(readFileSync(installedPkg, "utf8")).version;
167
+ }
168
+ catch {
169
+ // fall through to the mismatch error below
170
+ }
171
+ if (installed !== targetVersion) {
172
+ throw new Error(`Staged version mismatch: expected ${targetVersion}, found ${installed ?? "none"} in ${npxDir}.`);
173
+ }
174
+ }
175
+ //# sourceMappingURL=npm-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-registry.js","sourceRoot":"","sources":["../src/npm-registry.ts"],"names":[],"mappings":"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"}
package/dist/policy.d.ts CHANGED
@@ -34,6 +34,37 @@ export declare function numberToDecimalString(n: number): string;
34
34
  export declare function multiplyDecimalAmounts(a: string, b: string): string;
35
35
  /** Always-present policy for `list_wallets` (`enabled: false` when unset). */
36
36
  export declare function listWalletPolicy(policy: WalletPolicy | undefined): WalletPolicy;
37
+ /** Restriction fields a policy can carry. */
38
+ export type PolicyRestriction = "readOnly" | "maxPerTxUsd" | "allowedRecipients";
39
+ export interface PolicyFieldChange<T> {
40
+ from: T;
41
+ to: T;
42
+ }
43
+ export interface PolicyDiff {
44
+ /** True when the effective restrictions did not change. */
45
+ unchanged: boolean;
46
+ /** Per-field before/after for fields whose effective value changed. */
47
+ changes: {
48
+ enabled?: PolicyFieldChange<boolean>;
49
+ readOnly?: PolicyFieldChange<boolean>;
50
+ maxPerTxUsd?: PolicyFieldChange<string | null>;
51
+ allowedRecipients?: PolicyFieldChange<string[] | null>;
52
+ };
53
+ /** Restrictions that were in force before and are gone now. */
54
+ removedRestrictions: PolicyRestriction[];
55
+ /**
56
+ * Human-readable alerts for every way the new policy is weaker than the old
57
+ * one. Empty when nothing was loosened.
58
+ */
59
+ warnings: string[];
60
+ }
61
+ /**
62
+ * Compare the restrictions in force before and after a `set_wallet_policy`
63
+ * write. The tool is a full replace, so an omitted field silently disappears;
64
+ * this diff is what makes that visible in the response instead of leaving the
65
+ * agent to compare `previous_policy` and `policy` by eye.
66
+ */
67
+ export declare function diffWalletPolicy(previous: WalletPolicy | undefined, next: WalletPolicy | undefined): PolicyDiff;
37
68
  /** Throws with a clear message if the operation violates the wallet policy. */
38
69
  export declare function enforcePolicy(entry: WalletEntry, check: PolicyCheck): void;
39
70
  /** Pure part of the USD check: amount × rate vs limit. Throws on violation. */