@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../../src/api/history/providers/solana.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Address and opcode helpers shared by the TON history providers (TonCenter,
3
+ * TonAPI). Both indexers emit raw `0:HEX` addresses; the agent gets the
4
+ * user-friendly non-bounceable form.
5
+ */
6
+ export type TonAddressBook = Record<string, {
7
+ user_friendly?: string;
8
+ }>;
9
+ /** Raw or friendly TON address → user-friendly form; `book` wins when it has the entry. */
10
+ export declare function tonAddr(raw: string | null | undefined, book?: TonAddressBook): string | null;
11
+ export declare function tonEquals(a: string | null | undefined, b: string): boolean;
12
+ /** Plain transfer: no opcode, or opcode 0 (text comment). */
13
+ export declare function isPlainOpcode(opcode: string | null | undefined): boolean;
14
+ export declare const TON_NATIVE_ASSET: {
15
+ readonly symbol: "TON";
16
+ readonly contractAddress: null;
17
+ readonly decimals: 9;
18
+ };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Address and opcode helpers shared by the TON history providers (TonCenter,
3
+ * TonAPI). Both indexers emit raw `0:HEX` addresses; the agent gets the
4
+ * user-friendly non-bounceable form.
5
+ */
6
+ import { Address } from "@ton/ton";
7
+ /** Raw or friendly TON address → user-friendly form; `book` wins when it has the entry. */
8
+ export function tonAddr(raw, book) {
9
+ if (!raw)
10
+ return null;
11
+ const friendly = book?.[raw]?.user_friendly ?? book?.[raw.toUpperCase()]?.user_friendly;
12
+ if (friendly)
13
+ return friendly;
14
+ try {
15
+ return Address.parse(raw).toString({ bounceable: false });
16
+ }
17
+ catch {
18
+ return raw;
19
+ }
20
+ }
21
+ export function tonEquals(a, b) {
22
+ if (!a)
23
+ return false;
24
+ try {
25
+ return Address.parse(a).equals(Address.parse(b));
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ /** Plain transfer: no opcode, or opcode 0 (text comment). */
32
+ export function isPlainOpcode(opcode) {
33
+ if (!opcode)
34
+ return true;
35
+ return /^0x0*$/i.test(opcode);
36
+ }
37
+ export const TON_NATIVE_ASSET = { symbol: "TON", contractAddress: null, decimals: 9 };
38
+ //# sourceMappingURL=ton-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ton-shared.js","sourceRoot":"","sources":["../../../../src/api/history/providers/ton-shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAInC,2FAA2F;AAC3F,MAAM,UAAU,OAAO,CACrB,GAA8B,EAC9B,IAAqB;IAErB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,QAAQ,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,aAAa,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,aAAa,CAAC;IACxF,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,CAA4B,EAAE,CAAS;IAC/D,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,MAAiC;IAC7D,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAW,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * TonAPI v2 (tonapi.io) — fallback indexer for TON when TonCenter is rate
3
+ * limited or down. `/blockchain/accounts/{a}/transactions` for native moves
4
+ * and `/accounts/{a}/jettons/history` for jetton moves; both page by
5
+ * `before_lt` (exclusive), so the cursor is the last logical time seen.
6
+ *
7
+ * Keyless access is about one request per second per IP; `IW_TONAPI_KEY`
8
+ * (Bearer) lifts that. Amounts come as JSON numbers: exact below 2^53
9
+ * nanotons (~9 million TON), which covers a hot wallet.
10
+ */
11
+ import type { HistoryProvider, SourceItem } from "../types.js";
12
+ interface TonapiAccount {
13
+ address?: string;
14
+ }
15
+ interface TonapiMsg {
16
+ value?: number | string;
17
+ source?: TonapiAccount | null;
18
+ destination?: TonapiAccount | null;
19
+ op_code?: string | null;
20
+ }
21
+ export interface TonapiTx {
22
+ hash?: string;
23
+ lt?: number | string;
24
+ utime?: number;
25
+ success?: boolean;
26
+ aborted?: boolean;
27
+ total_fees?: number | string;
28
+ /** "(workchain,shard,seqno)" */
29
+ block?: string;
30
+ in_msg?: TonapiMsg | null;
31
+ out_msgs?: TonapiMsg[];
32
+ }
33
+ export interface TonapiJettonOp {
34
+ operation?: string;
35
+ utime?: number;
36
+ lt?: number | string;
37
+ transaction_hash?: string;
38
+ source?: TonapiAccount | null;
39
+ destination?: TonapiAccount | null;
40
+ amount?: string | number;
41
+ jetton?: {
42
+ address?: string;
43
+ symbol?: string;
44
+ decimals?: unknown;
45
+ };
46
+ }
47
+ /** "(0,8000000000000000,94053862)" → 94053862 */
48
+ export declare function tonapiBlockSeqno(block: string | undefined): number | null;
49
+ export declare function mapTonapiTx(tx: TonapiTx, address: string): SourceItem | null;
50
+ export declare function mapTonapiJettonOp(row: TonapiJettonOp, address: string): SourceItem | null;
51
+ export declare function tonapiProvider(base: string, address: string): HistoryProvider;
52
+ export {};
@@ -0,0 +1,183 @@
1
+ /**
2
+ * TonAPI v2 (tonapi.io) — fallback indexer for TON when TonCenter is rate
3
+ * limited or down. `/blockchain/accounts/{a}/transactions` for native moves
4
+ * and `/accounts/{a}/jettons/history` for jetton moves; both page by
5
+ * `before_lt` (exclusive), so the cursor is the last logical time seen.
6
+ *
7
+ * Keyless access is about one request per second per IP; `IW_TONAPI_KEY`
8
+ * (Bearer) lifts that. Amounts come as JSON numbers: exact below 2^53
9
+ * nanotons (~9 million TON), which covers a hot wallet.
10
+ */
11
+ import { httpJson } from "../../http.js";
12
+ import { logInfo } from "../../../log.js";
13
+ import { paced as pacedGate, retryRateLimited } from "../pace.js";
14
+ import { amountOf, asString, clampDecimals, feeOf, sanitizeSymbol, timeFrom, toBigInt, tokenAsset, } from "../normalize.js";
15
+ import { TON_NATIVE_ASSET, isPlainOpcode, tonAddr, tonEquals } from "./ton-shared.js";
16
+ /** "(0,8000000000000000,94053862)" → 94053862 */
17
+ export function tonapiBlockSeqno(block) {
18
+ if (!block)
19
+ return null;
20
+ const m = /,(\d+)\)$/.exec(block);
21
+ return m ? Number.parseInt(m[1], 10) : null;
22
+ }
23
+ export function mapTonapiTx(tx, address) {
24
+ const hash = asString(tx.hash);
25
+ if (!hash)
26
+ return null;
27
+ const time = timeFrom(tx.utime);
28
+ const status = tx.aborted === true || tx.success === false ? "failed" : "confirmed";
29
+ const fees = toBigInt(tx.total_fees ?? 0);
30
+ const inMsg = tx.in_msg ?? null;
31
+ const inValue = toBigInt(inMsg?.value ?? 0);
32
+ const outMsgs = tx.out_msgs ?? [];
33
+ const outValue = outMsgs.reduce((s, m) => s + toBigInt(m.value ?? 0), 0n);
34
+ const block = tonapiBlockSeqno(tx.block);
35
+ const asset = { ...TON_NATIVE_ASSET };
36
+ const self = tonAddr(address) ?? address;
37
+ let item;
38
+ if (outValue > 0n) {
39
+ const first = outMsgs.find((m) => toBigInt(m.value ?? 0) > 0n) ?? outMsgs[0];
40
+ const dest = first?.destination?.address;
41
+ item = {
42
+ hash,
43
+ timestamp: time?.iso ?? null,
44
+ block,
45
+ kind: isPlainOpcode(first?.op_code) ? "transfer" : "contract_call",
46
+ direction: tonEquals(dest, address) ? "self" : "out",
47
+ status,
48
+ from: self,
49
+ to: tonAddr(dest),
50
+ asset,
51
+ amount: amountOf(outValue, 9),
52
+ fee: feeOf(fees, 9, "TON"),
53
+ };
54
+ }
55
+ else if (inValue > 0n && inMsg?.source?.address) {
56
+ item = {
57
+ hash,
58
+ timestamp: time?.iso ?? null,
59
+ block,
60
+ kind: isPlainOpcode(inMsg.op_code) ? "transfer" : "other",
61
+ direction: tonEquals(inMsg.source.address, address) ? "self" : "in",
62
+ status,
63
+ from: tonAddr(inMsg.source.address),
64
+ to: self,
65
+ asset,
66
+ amount: amountOf(inValue, 9),
67
+ fee: null,
68
+ };
69
+ }
70
+ else {
71
+ const src = inMsg?.source?.address;
72
+ item = {
73
+ hash,
74
+ timestamp: time?.iso ?? null,
75
+ block,
76
+ kind: "other",
77
+ direction: src ? "in" : "out",
78
+ status,
79
+ from: tonAddr(src),
80
+ to: self,
81
+ asset,
82
+ amount: amountOf(0n, 9),
83
+ fee: src ? null : feeOf(fees, 9, "TON"),
84
+ };
85
+ }
86
+ return { ts: time?.ts ?? 0, item };
87
+ }
88
+ export function mapTonapiJettonOp(row, address) {
89
+ const hash = asString(row.transaction_hash);
90
+ const master = asString(row.jetton?.address);
91
+ if (!hash || !master)
92
+ return null;
93
+ const time = timeFrom(row.utime);
94
+ const src = row.source?.address;
95
+ const dst = row.destination?.address;
96
+ const fromSelf = tonEquals(src, address);
97
+ const toSelf = tonEquals(dst, address);
98
+ const symbol = sanitizeSymbol(row.jetton?.symbol, "JETTON");
99
+ const decimals = clampDecimals(row.jetton?.decimals, 9);
100
+ const item = {
101
+ hash,
102
+ timestamp: time?.iso ?? null,
103
+ block: null,
104
+ kind: "token_transfer",
105
+ direction: fromSelf && toSelf ? "self" : fromSelf ? "out" : "in",
106
+ status: "confirmed",
107
+ from: tonAddr(src),
108
+ to: tonAddr(dst),
109
+ asset: tokenAsset(symbol, "JETTON", tonAddr(master) ?? master, decimals),
110
+ amount: amountOf(toBigInt(row.amount), decimals),
111
+ fee: null,
112
+ };
113
+ return { ts: time?.ts ?? 0, item };
114
+ }
115
+ /** Cursor is the `lt` of the last row; tonapi's `before_lt` is exclusive. */
116
+ function beforeLt(cursor) {
117
+ if (cursor === null)
118
+ return "";
119
+ if (!/^\d+$/.test(cursor))
120
+ throw new Error("Invalid cursor for tonapi source.");
121
+ return `&before_lt=${cursor}`;
122
+ }
123
+ function nextFrom(rows, pageSize) {
124
+ if (rows.length < pageSize)
125
+ return null;
126
+ const last = rows[rows.length - 1]?.lt;
127
+ return last === undefined ? null : String(last);
128
+ }
129
+ function apiKey() {
130
+ const key = process.env.IW_TONAPI_KEY?.trim();
131
+ return key && key.length > 0 ? key : undefined;
132
+ }
133
+ function headers() {
134
+ const key = apiKey();
135
+ return key ? { Authorization: `Bearer ${key}` } : undefined;
136
+ }
137
+ const KEYLESS_GAP_MS = 1100;
138
+ const RATE_LIMIT_WAIT_MS = 2500;
139
+ const RATE_LIMIT_ATTEMPTS = 2;
140
+ function paced(fn, ctx) {
141
+ const call = () => (apiKey() ? fn() : pacedGate("tonapi", KEYLESS_GAP_MS, fn));
142
+ return retryRateLimited(call, {
143
+ waitMs: RATE_LIMIT_WAIT_MS,
144
+ attempts: RATE_LIMIT_ATTEMPTS,
145
+ onRetry: (attempt) => logInfo("history.tonapi.rate_limited", {
146
+ correlationId: ctx.correlationId,
147
+ attempt,
148
+ waitMs: RATE_LIMIT_WAIT_MS,
149
+ }),
150
+ });
151
+ }
152
+ export function tonapiProvider(base, address) {
153
+ const acct = encodeURIComponent(address);
154
+ const native = {
155
+ name: "native",
156
+ async fetchPage(cursor, pageSize, ctx) {
157
+ const url = `${base}/blockchain/accounts/${acct}/transactions?limit=${pageSize}&sort_order=desc` +
158
+ beforeLt(cursor);
159
+ const res = await paced(() => httpJson(url, { method: "GET", headers: headers() }, { ...ctx.http, label: "history.tonapi.transactions" }), ctx);
160
+ const rows = Array.isArray(res?.transactions) ? res.transactions : null;
161
+ if (!rows)
162
+ throw new Error("tonapi transactions: unexpected response");
163
+ const items = rows.map((tx) => mapTonapiTx(tx, address)).filter((x) => x !== null);
164
+ return { items, next: nextFrom(rows, pageSize) };
165
+ },
166
+ };
167
+ const jettons = {
168
+ name: "jetton",
169
+ async fetchPage(cursor, pageSize, ctx) {
170
+ const url = `${base}/accounts/${acct}/jettons/history?limit=${pageSize}` + beforeLt(cursor);
171
+ const res = await paced(() => httpJson(url, { method: "GET", headers: headers() }, { ...ctx.http, label: "history.tonapi.jettons" }), ctx);
172
+ const rows = Array.isArray(res?.operations) ? res.operations : null;
173
+ if (!rows)
174
+ throw new Error("tonapi jettons/history: unexpected response");
175
+ const items = rows
176
+ .map((row) => mapTonapiJettonOp(row, address))
177
+ .filter((x) => x !== null);
178
+ return { items, next: nextFrom(rows, pageSize) };
179
+ },
180
+ };
181
+ return { label: "tonapi", sources: [native, jettons] };
182
+ }
183
+ //# sourceMappingURL=tonapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tonapi.js","sourceRoot":"","sources":["../../../../src/api/history/providers/tonapi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * TonCenter v3 indexer: `/transactions` (account transactions, newest first)
3
+ * and `/jetton/transfers` (owner-scoped jetton moves). Offset-based. Raw
4
+ * `0:HEX` addresses are turned into user-friendly form via `address_book`
5
+ * or @ton/ton when missing.
6
+ */
7
+ import type { HistoryProvider, SourceItem } from "../types.js";
8
+ import { type TonAddressBook } from "./ton-shared.js";
9
+ interface TonMsg {
10
+ source?: string | null;
11
+ destination?: string | null;
12
+ value?: string | null;
13
+ opcode?: string | null;
14
+ }
15
+ export interface TonTx {
16
+ hash?: string;
17
+ lt?: string;
18
+ now?: number;
19
+ mc_block_seqno?: number;
20
+ total_fees?: string;
21
+ description?: {
22
+ aborted?: boolean;
23
+ compute_ph?: {
24
+ success?: boolean;
25
+ exit_code?: number;
26
+ };
27
+ };
28
+ in_msg?: TonMsg | null;
29
+ out_msgs?: TonMsg[];
30
+ }
31
+ export interface TonJettonTransfer {
32
+ transaction_hash?: string;
33
+ transaction_now?: number;
34
+ transaction_aborted?: boolean;
35
+ source?: string | null;
36
+ destination?: string | null;
37
+ amount?: string;
38
+ jetton_master?: string;
39
+ }
40
+ type AddressBook = TonAddressBook;
41
+ type JettonMetadata = Record<string, {
42
+ token_info?: Array<{
43
+ type?: string;
44
+ symbol?: string;
45
+ extra?: {
46
+ decimals?: unknown;
47
+ };
48
+ }>;
49
+ }>;
50
+ export declare function mapTonTx(tx: TonTx, address: string, book: AddressBook | undefined): SourceItem | null;
51
+ export declare function mapTonJettonTransfer(row: TonJettonTransfer, address: string, book: AddressBook | undefined, metadata: JettonMetadata | undefined): SourceItem | null;
52
+ /** `…/api/v2` → `…/api/v3`; a v3 URL is used as is. */
53
+ export declare function toncenterV3(base: string): string | null;
54
+ export declare function toncenterProvider(v3Base: string, address: string): HistoryProvider;
55
+ export {};
@@ -0,0 +1,191 @@
1
+ /**
2
+ * TonCenter v3 indexer: `/transactions` (account transactions, newest first)
3
+ * and `/jetton/transfers` (owner-scoped jetton moves). Offset-based. Raw
4
+ * `0:HEX` addresses are turned into user-friendly form via `address_book`
5
+ * or @ton/ton when missing.
6
+ */
7
+ import { httpJson } from "../../http.js";
8
+ import { logInfo } from "../../../log.js";
9
+ import { paced as pacedGate, retryRateLimited } from "../pace.js";
10
+ import { amountOf, asString, clampDecimals, feeOf, sanitizeSymbol, timeFrom, toBigInt, tokenAsset, } from "../normalize.js";
11
+ import { TON_NATIVE_ASSET, isPlainOpcode, tonAddr, tonEquals } from "./ton-shared.js";
12
+ export function mapTonTx(tx, address, book) {
13
+ const hash = asString(tx.hash);
14
+ if (!hash)
15
+ return null;
16
+ const time = timeFrom(tx.now);
17
+ const aborted = tx.description?.aborted === true || tx.description?.compute_ph?.success === false;
18
+ const status = aborted ? "failed" : "confirmed";
19
+ const fees = toBigInt(tx.total_fees ?? 0);
20
+ const inMsg = tx.in_msg ?? null;
21
+ const inValue = toBigInt(inMsg?.value ?? 0);
22
+ const outMsgs = tx.out_msgs ?? [];
23
+ const outValue = outMsgs.reduce((s, m) => s + toBigInt(m.value ?? 0), 0n);
24
+ const block = typeof tx.mc_block_seqno === "number" ? tx.mc_block_seqno : null;
25
+ const asset = { ...TON_NATIVE_ASSET };
26
+ let item;
27
+ if (outValue > 0n) {
28
+ const first = outMsgs.find((m) => toBigInt(m.value ?? 0) > 0n) ?? outMsgs[0];
29
+ const to = tonAddr(first?.destination, book);
30
+ item = {
31
+ hash,
32
+ timestamp: time?.iso ?? null,
33
+ block,
34
+ kind: isPlainOpcode(first?.opcode) ? "transfer" : "contract_call",
35
+ direction: tonEquals(first?.destination, address) ? "self" : "out",
36
+ status,
37
+ from: tonAddr(address, book) ?? address,
38
+ to,
39
+ asset,
40
+ amount: amountOf(outValue, 9),
41
+ fee: feeOf(fees, 9, "TON"),
42
+ };
43
+ }
44
+ else if (inValue > 0n && inMsg?.source) {
45
+ item = {
46
+ hash,
47
+ timestamp: time?.iso ?? null,
48
+ block,
49
+ kind: isPlainOpcode(inMsg.opcode) ? "transfer" : "other",
50
+ direction: tonEquals(inMsg.source, address) ? "self" : "in",
51
+ status,
52
+ from: tonAddr(inMsg.source, book),
53
+ to: tonAddr(address, book) ?? address,
54
+ asset,
55
+ amount: amountOf(inValue, 9),
56
+ fee: null,
57
+ };
58
+ }
59
+ else {
60
+ item = {
61
+ hash,
62
+ timestamp: time?.iso ?? null,
63
+ block,
64
+ kind: "other",
65
+ direction: inMsg?.source ? "in" : "out",
66
+ status,
67
+ from: tonAddr(inMsg?.source, book),
68
+ to: tonAddr(address, book) ?? address,
69
+ asset,
70
+ amount: amountOf(0n, 9),
71
+ fee: inMsg?.source ? null : feeOf(fees, 9, "TON"),
72
+ };
73
+ }
74
+ return { ts: time?.ts ?? 0, item };
75
+ }
76
+ function jettonMeta(master, metadata) {
77
+ const entry = master ? metadata?.[master] ?? metadata?.[master.toUpperCase()] : undefined;
78
+ const info = entry?.token_info?.find((t) => t.type === "jetton_masters") ?? entry?.token_info?.[0];
79
+ return {
80
+ symbol: sanitizeSymbol(info?.symbol, "JETTON"),
81
+ decimals: clampDecimals(info?.extra?.decimals, 9),
82
+ };
83
+ }
84
+ export function mapTonJettonTransfer(row, address, book, metadata) {
85
+ const hash = asString(row.transaction_hash);
86
+ const master = asString(row.jetton_master);
87
+ if (!hash || !master)
88
+ return null;
89
+ const time = timeFrom(row.transaction_now);
90
+ const meta = jettonMeta(master, metadata);
91
+ const fromSelf = tonEquals(row.source, address);
92
+ const toSelf = tonEquals(row.destination, address);
93
+ const item = {
94
+ hash,
95
+ timestamp: time?.iso ?? null,
96
+ block: null,
97
+ kind: "token_transfer",
98
+ direction: fromSelf && toSelf ? "self" : fromSelf ? "out" : "in",
99
+ status: row.transaction_aborted ? "failed" : "confirmed",
100
+ from: tonAddr(row.source, book),
101
+ to: tonAddr(row.destination, book),
102
+ asset: tokenAsset(meta.symbol, "JETTON", tonAddr(master, book) ?? master, meta.decimals),
103
+ amount: amountOf(toBigInt(row.amount), meta.decimals),
104
+ fee: null,
105
+ };
106
+ return { ts: time?.ts ?? 0, item };
107
+ }
108
+ function offsetOf(cursor) {
109
+ if (cursor === null)
110
+ return 0;
111
+ const n = Number.parseInt(cursor, 10);
112
+ if (!Number.isInteger(n) || n < 0)
113
+ throw new Error("Invalid cursor for toncenter source.");
114
+ return n;
115
+ }
116
+ function apiKey() {
117
+ const key = process.env.IW_TON_API_KEY?.trim();
118
+ return key && key.length > 0 ? key : undefined;
119
+ }
120
+ function headers() {
121
+ const key = apiKey();
122
+ return key ? { "X-Api-Key": key } : undefined;
123
+ }
124
+ /**
125
+ * Keyless TonCenter allows about one request per second per IP and answers
126
+ * bursts with 429. The two sources of this provider (and their second pages)
127
+ * are spaced out through one process-wide gate; with an API key the gate is off.
128
+ *
129
+ * Measured: a third request within a second gets 429 and the IP stays
130
+ * suspended for ~2 s, without Retry-After. Traffic from another MCP process
131
+ * or another machine behind the same NAT eats the same budget, so on 429 we
132
+ * wait past the suspension and try again instead of failing the provider.
133
+ */
134
+ const KEYLESS_GAP_MS = 1100;
135
+ const RATE_LIMIT_WAIT_MS = 2500;
136
+ const RATE_LIMIT_ATTEMPTS = 2;
137
+ function paced(fn, ctx) {
138
+ const call = () => (apiKey() ? fn() : pacedGate("toncenter", KEYLESS_GAP_MS, fn));
139
+ return retryRateLimited(call, {
140
+ waitMs: RATE_LIMIT_WAIT_MS,
141
+ attempts: RATE_LIMIT_ATTEMPTS,
142
+ onRetry: (attempt) => logInfo("history.toncenter.rate_limited", {
143
+ correlationId: ctx.correlationId,
144
+ attempt,
145
+ waitMs: RATE_LIMIT_WAIT_MS,
146
+ }),
147
+ });
148
+ }
149
+ /** `…/api/v2` → `…/api/v3`; a v3 URL is used as is. */
150
+ export function toncenterV3(base) {
151
+ const b = base.replace(/\/$/, "");
152
+ if (b.endsWith("/api/v3"))
153
+ return b;
154
+ if (b.endsWith("/api/v2"))
155
+ return `${b.slice(0, -1)}3`;
156
+ return null;
157
+ }
158
+ export function toncenterProvider(v3Base, address) {
159
+ const native = {
160
+ name: "native",
161
+ async fetchPage(cursor, pageSize, ctx) {
162
+ const offset = offsetOf(cursor);
163
+ const url = `${v3Base}/transactions?account=${encodeURIComponent(address)}` +
164
+ `&limit=${pageSize}&offset=${offset}&sort=desc`;
165
+ const res = await paced(() => httpJson(url, { method: "GET", headers: headers() }, { ...ctx.http, label: "history.toncenter.transactions" }), ctx);
166
+ const rows = Array.isArray(res.transactions) ? res.transactions : null;
167
+ if (!rows)
168
+ throw new Error("toncenter transactions: unexpected response");
169
+ const items = rows.map((tx) => mapTonTx(tx, address, res.address_book)).filter((x) => x !== null);
170
+ return { items, next: rows.length < pageSize ? null : String(offset + rows.length) };
171
+ },
172
+ };
173
+ const jettons = {
174
+ name: "jetton",
175
+ async fetchPage(cursor, pageSize, ctx) {
176
+ const offset = offsetOf(cursor);
177
+ const url = `${v3Base}/jetton/transfers?owner_address=${encodeURIComponent(address)}` +
178
+ `&limit=${pageSize}&offset=${offset}&sort=desc`;
179
+ const res = await paced(() => httpJson(url, { method: "GET", headers: headers() }, { ...ctx.http, label: "history.toncenter.jettons" }), ctx);
180
+ const rows = Array.isArray(res.jetton_transfers) ? res.jetton_transfers : null;
181
+ if (!rows)
182
+ throw new Error("toncenter jetton/transfers: unexpected response");
183
+ const items = rows
184
+ .map((row) => mapTonJettonTransfer(row, address, res.address_book, res.metadata))
185
+ .filter((x) => x !== null);
186
+ return { items, next: rows.length < pageSize ? null : String(offset + rows.length) };
187
+ },
188
+ };
189
+ return { label: "toncenter", sources: [native, jettons] };
190
+ }
191
+ //# sourceMappingURL=toncenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toncenter.js","sourceRoot":"","sources":["../../../../src/api/history/providers/toncenter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * TronGrid `/v1/accounts/{address}/transactions` (+ `/trc20`). Independent
3
+ * fallback for Tron. Cursor-based via `meta.fingerprint`; addresses in the
4
+ * raw transaction are hex (41…) and are re-encoded to base58 here.
5
+ */
6
+ import { type HistoryProvider, type SourceItem } from "../types.js";
7
+ export interface TronGridTx {
8
+ txID?: string;
9
+ blockNumber?: number;
10
+ block_timestamp?: number;
11
+ ret?: Array<{
12
+ contractRet?: string;
13
+ fee?: number;
14
+ }>;
15
+ raw_data?: {
16
+ contract?: Array<{
17
+ type?: string;
18
+ parameter?: {
19
+ value?: {
20
+ amount?: number | string;
21
+ owner_address?: string;
22
+ to_address?: string;
23
+ contract_address?: string;
24
+ asset_name?: string;
25
+ call_value?: number;
26
+ };
27
+ };
28
+ }>;
29
+ };
30
+ }
31
+ export interface TronGridTrc20 {
32
+ transaction_id?: string;
33
+ block_timestamp?: number;
34
+ from?: string;
35
+ to?: string;
36
+ type?: string;
37
+ value?: string;
38
+ token_info?: {
39
+ symbol?: string;
40
+ address?: string;
41
+ decimals?: number;
42
+ };
43
+ }
44
+ /** 41-prefixed hex → base58check "T…" address. Returns the input when it is not hex. */
45
+ export declare function tronHexToBase58(value: string | undefined | null): string | null;
46
+ export declare function mapTronGridTx(tx: TronGridTx, address: string): SourceItem | null;
47
+ export declare function mapTronGridTrc20(row: TronGridTrc20, address: string): SourceItem | null;
48
+ export declare function trongridProvider(baseUrl: string, address: string): HistoryProvider;