@ironwallet/mcp-server 1.2.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.
- package/README.md +5 -2
- package/dist/api/history/index.js +3 -0
- package/dist/api/history/index.js.map +1 -1
- package/dist/api/history/pace.d.ts +13 -0
- package/dist/api/history/pace.js +23 -0
- package/dist/api/history/pace.js.map +1 -1
- package/dist/api/history/providers/ton-shared.d.ts +18 -0
- package/dist/api/history/providers/ton-shared.js +38 -0
- package/dist/api/history/providers/ton-shared.js.map +1 -0
- package/dist/api/history/providers/tonapi.d.ts +52 -0
- package/dist/api/history/providers/tonapi.js +183 -0
- package/dist/api/history/providers/tonapi.js.map +1 -0
- package/dist/api/history/providers/toncenter.d.ts +2 -3
- package/dist/api/history/providers/toncenter.js +24 -36
- package/dist/api/history/providers/toncenter.js.map +1 -1
- package/dist/api/history/types.d.ts +1 -1
- package/dist/api/history/types.js +1 -0
- package/dist/api/history/types.js.map +1 -1
- package/dist/config.d.ts +6 -3
- package/dist/config.js +17 -7
- package/dist/config.js.map +1 -1
- package/dist/generated/env-config.js +4 -0
- package/dist/generated/env-config.js.map +1 -1
- package/dist/local-secrets.d.ts +23 -1
- package/dist/local-secrets.js +36 -2
- package/dist/local-secrets.js.map +1 -1
- package/dist/networks.d.ts +3 -0
- package/dist/networks.js +20 -0
- package/dist/networks.js.map +1 -1
- package/dist/policy.d.ts +31 -0
- package/dist/policy.js +95 -0
- package/dist/policy.js.map +1 -1
- package/dist/qr/deposit-qr.d.ts +21 -1
- package/dist/qr/deposit-qr.js +100 -21
- package/dist/qr/deposit-qr.js.map +1 -1
- package/dist/qr/font.js +3 -0
- package/dist/qr/font.js.map +1 -1
- package/dist/tools/definitions.js +15 -9
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/helpers.d.ts +10 -0
- package/dist/tools/helpers.js +26 -0
- package/dist/tools/helpers.js.map +1 -1
- package/dist/tools/swap.d.ts +9 -1
- package/dist/tools/swap.js +41 -7
- package/dist/tools/swap.js.map +1 -1
- package/dist/tools/transfer.d.ts +1 -1
- package/dist/tools/transfer.js +5 -2
- package/dist/tools/transfer.js.map +1 -1
- package/dist/tools/wallets.js +31 -13
- package/dist/tools/wallets.js.map +1 -1
- package/dist/web/manager.js +7 -4
- package/dist/web/manager.js.map +1 -1
- package/package.json +2 -2
- package/server.json +2 -2
- package/tools.json +11 -10
package/README.md
CHANGED
|
@@ -121,7 +121,7 @@ Swaps are a separate flow from transfers.
|
|
|
121
121
|
2. `list_swap_assets` (`direction=from`, then `direction=to` with the chosen sell asset)
|
|
122
122
|
3. Copy **network, symbol, address, decimals** from the catalog into `estimate_swap` / `execute_swap` (especially for tokens)
|
|
123
123
|
4. `estimate_swap` for a preview, or go straight to `execute_swap`
|
|
124
|
-
5. Poll with `get_swap_status` using `operationId`
|
|
124
|
+
5. Poll with `get_swap_status` using the `operationId` from `execute_swap` (`estimate_swap` is a quote and has no status)
|
|
125
125
|
|
|
126
126
|
**Useful options**
|
|
127
127
|
|
|
@@ -146,13 +146,16 @@ The user-facing backup is the **recovery phrase** in the wallet manager, not tho
|
|
|
146
146
|
| `IW_PASSPHRASE` | generated locally | Override keystore wrapping secret |
|
|
147
147
|
| `IW_READ_ONLY` | `false` | Process-wide: reject `send_transfer` and `execute_swap`. `true`/`1` enable; `false`/`0`/`off`/`no` disable. Distinct from per-wallet `policy.readOnly`. |
|
|
148
148
|
| `IW_RELAY_API_KEY` | generated UUID | Override `x-api-key` |
|
|
149
|
-
| `IW_DEVICE_ID` | generated UUID | Override `X-Device-Id`
|
|
149
|
+
| `IW_DEVICE_ID` | generated UUID | Override the device UUID (stable per keystore directory). Sent as `X-Device-Id: web:<uuid>`; a value that already has a `platform:` prefix is sent unchanged |
|
|
150
150
|
| `IW_KEYSTORE_DIR` | `~/.ironwallet-mcp` | Keystore directory |
|
|
151
151
|
| `IW_RATES_API_URL` | baked profile | Rates backend for `maxPerTxUsd` valuation. Unset in the profile → USD limits reject (fail closed) |
|
|
152
152
|
| `IW_STATIC_RESOURCES_URL` | baked profile | Static asset catalogs (token → rates id) |
|
|
153
153
|
| `IW_HTTP_TIMEOUT_MS` | `15000` | General HTTP timeout (1s–120s) |
|
|
154
154
|
| `IW_HTTP_FORWARD_TIMEOUT_MS` | `60000` | Longer timeout for broadcast-style calls. A client timeout does not always mean the operation failed — check status |
|
|
155
155
|
| `IW_HTTP_RETRIES` | `2` | Retries for safe/idempotent calls; broadcasts are not auto-retried |
|
|
156
|
+
| `IW_HISTORY_APIS` | baked profile | JSON `{ "<network>": [{ "kind", "url"? }, …] }` — per-network chain of history indexers for `get_transaction_history`, tried in order. Kinds: `etherscan`, `nodereal`, `tronscan`, `trongrid`, `esplora`, `blockcypher`, `solana-rpc`, `toncenter`, `tonapi`, `xrp-rpc` |
|
|
157
|
+
| `IW_TON_API_KEY` | unset | TonCenter API key. Keyless TonCenter is ~1 request/s per IP (shared by every process behind the same NAT) |
|
|
158
|
+
| `IW_TONAPI_KEY` | unset | tonapi.io Bearer token for the `tonapi` history fallback; keyless is ~1 request/s per IP |
|
|
156
159
|
| `IW_LOG_ENABLED` | `1` | JSONL diagnostics to a log file (`0` to disable) |
|
|
157
160
|
| `IW_LOG_FILE` | `{keystoreDir}/logs/iw-mcp-YYYY-MM-DD.jsonl` | Log path |
|
|
158
161
|
| `IW_LOG_LEVEL` | `info` | `debug` / `info` / `warn` / `error` |
|
|
@@ -16,6 +16,7 @@ import { esploraProvider } from "./providers/esplora.js";
|
|
|
16
16
|
import { etherscanProvider } from "./providers/etherscan.js";
|
|
17
17
|
import { noderealProvider } from "./providers/nodereal.js";
|
|
18
18
|
import { solanaProvider } from "./providers/solana.js";
|
|
19
|
+
import { tonapiProvider } from "./providers/tonapi.js";
|
|
19
20
|
import { toncenterProvider, toncenterV3 } from "./providers/toncenter.js";
|
|
20
21
|
import { trongridProvider } from "./providers/trongrid.js";
|
|
21
22
|
import { tronscanProvider } from "./providers/tronscan.js";
|
|
@@ -72,6 +73,8 @@ export function buildProvider(spec, network, address) {
|
|
|
72
73
|
return network === "solana" ? solanaProvider(url, address) : null;
|
|
73
74
|
case "toncenter":
|
|
74
75
|
return network === "ton" ? toncenterProvider(toncenterV3(url) ?? url, address) : null;
|
|
76
|
+
case "tonapi":
|
|
77
|
+
return network === "ton" ? tonapiProvider(url, address) : null;
|
|
75
78
|
case "xrp-rpc":
|
|
76
79
|
return network === "xrp" ? xrpProvider(url, address) : null;
|
|
77
80
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/history/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/history/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,3 +6,16 @@
|
|
|
6
6
|
*/
|
|
7
7
|
/** Run `fn` no sooner than `gapMs` after the previous call through the same gate. */
|
|
8
8
|
export declare function paced<T>(gate: string, gapMs: number, fn: () => Promise<T>): Promise<T>;
|
|
9
|
+
export declare function isRateLimited(e: unknown): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* The gate only spaces this process's own calls. Another MCP host on the same
|
|
12
|
+
* machine, or colleagues behind one NAT, share the per-IP budget, and the
|
|
13
|
+
* indexers answer the overflow with 429 and no Retry-After — so the generic
|
|
14
|
+
* HTTP retry (~0.3 s) fires inside the penalty window and fails again. Wait
|
|
15
|
+
* out the penalty, then go through the gate once more.
|
|
16
|
+
*/
|
|
17
|
+
export declare function retryRateLimited<T>(fn: () => Promise<T>, opts: {
|
|
18
|
+
waitMs: number;
|
|
19
|
+
attempts: number;
|
|
20
|
+
onRetry?: (attempt: number) => void;
|
|
21
|
+
}): Promise<T>;
|
package/dist/api/history/pace.js
CHANGED
|
@@ -14,4 +14,27 @@ export async function paced(gate, gapMs, fn) {
|
|
|
14
14
|
await new Promise((resolve) => setTimeout(resolve, startAt - now));
|
|
15
15
|
return fn();
|
|
16
16
|
}
|
|
17
|
+
export function isRateLimited(e) {
|
|
18
|
+
return e instanceof Error && e.status === 429;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The gate only spaces this process's own calls. Another MCP host on the same
|
|
22
|
+
* machine, or colleagues behind one NAT, share the per-IP budget, and the
|
|
23
|
+
* indexers answer the overflow with 429 and no Retry-After — so the generic
|
|
24
|
+
* HTTP retry (~0.3 s) fires inside the penalty window and fails again. Wait
|
|
25
|
+
* out the penalty, then go through the gate once more.
|
|
26
|
+
*/
|
|
27
|
+
export async function retryRateLimited(fn, opts) {
|
|
28
|
+
for (let attempt = 0;; attempt++) {
|
|
29
|
+
try {
|
|
30
|
+
return await fn();
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
if (!isRateLimited(e) || attempt >= opts.attempts)
|
|
34
|
+
throw e;
|
|
35
|
+
opts.onRetry?.(attempt + 1);
|
|
36
|
+
await new Promise((resolve) => setTimeout(resolve, opts.waitMs));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
17
40
|
//# sourceMappingURL=pace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pace.js","sourceRoot":"","sources":["../../../src/api/history/pace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;AAExC,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,KAAK,CAAI,IAAY,EAAE,KAAa,EAAE,EAAoB;IAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;IACjC,IAAI,OAAO,GAAG,GAAG;QAAE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;IACtF,OAAO,EAAE,EAAE,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"pace.js","sourceRoot":"","sources":["../../../src/api/history/pace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;AAExC,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,KAAK,CAAI,IAAY,EAAE,KAAa,EAAE,EAAoB;IAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;IACjC,IAAI,OAAO,GAAG,GAAG;QAAE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;IACtF,OAAO,EAAE,EAAE,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAU;IACtC,OAAO,CAAC,YAAY,KAAK,IAAK,CAAyB,CAAC,MAAM,KAAK,GAAG,CAAC;AACzE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAoB,EACpB,IAA+E;IAE/E,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ;gBAAE,MAAM,CAAC,CAAC;YAC3D,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAC5B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -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":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,KAAK,EACL,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,UAAU,GACX,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAqCtF,iDAAiD;AACjD,MAAM,UAAU,gBAAgB,CAAC,KAAyB;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAY,EAAE,OAAe;IACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,KAAK,IAAI,IAAI,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;IACpF,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC;IAChC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;IAEzC,IAAI,IAAiB,CAAC;IACtB,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC;QACzC,IAAI,GAAG;YACL,IAAI;YACJ,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI;YAC5B,KAAK;YACL,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe;YAClE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;YACpD,MAAM;YACN,IAAI,EAAE,IAAI;YACV,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;YACjB,KAAK;YACL,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7B,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;SAC3B,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,GAAG,EAAE,IAAI,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAClD,IAAI,GAAG;YACL,IAAI;YACJ,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI;YAC5B,KAAK;YACL,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;YACzD,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YACnE,MAAM;YACN,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;YACnC,EAAE,EAAE,IAAI;YACR,KAAK;YACL,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5B,GAAG,EAAE,IAAI;SACV,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;QACnC,IAAI,GAAG;YACL,IAAI;YACJ,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI;YAC5B,KAAK;YACL,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;YAC7B,MAAM;YACN,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;YAClB,EAAE,EAAE,IAAI;YACR,KAAK;YACL,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;SACxC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAmB,EAAE,OAAe;IACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAChC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;IACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,IAAI,GAAgB;QACxB,IAAI;QACJ,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI;QAC5B,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAChE,MAAM,EAAE,WAAW;QACnB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;QAClB,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC;QAChB,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,QAAQ,CAAC;QACxE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;QAChD,GAAG,EAAE,IAAI;KACV,CAAC;IACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,6EAA6E;AAC7E,SAAS,QAAQ,CAAC,MAAqB;IACrC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAChF,OAAO,cAAc,MAAM,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,QAAQ,CAAC,IAAqC,EAAE,QAAgB;IACvE,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IACvC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,MAAM;IACb,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9C,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED,SAAS,OAAO;IACd,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9D,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,SAAS,KAAK,CAAI,EAAoB,EAAE,GAAkB;IACxD,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/E,OAAO,gBAAgB,CAAC,IAAI,EAAE;QAC5B,MAAM,EAAE,kBAAkB;QAC1B,QAAQ,EAAE,mBAAmB;QAC7B,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CACnB,OAAO,CAAC,6BAA6B,EAAE;YACrC,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,OAAO;YACP,MAAM,EAAE,kBAAkB;SAC3B,CAAC;KACL,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAe;IAC1D,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAkB;QAC5B,IAAI,EAAE,QAAQ;QACd,KAAK,CAAC,SAAS,CAAC,MAAqB,EAAE,QAAgB,EAAE,GAAkB;YACzE,MAAM,GAAG,GACP,GAAG,IAAI,wBAAwB,IAAI,uBAAuB,QAAQ,kBAAkB;gBACpF,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnB,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,EAAE,CACH,QAAQ,CACN,GAAG,EACH,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EACrC,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,6BAA6B,EAAE,CACtD,EACH,GAAG,CACJ,CAAC;YACF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAmB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACpG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QACnD,CAAC;KACF,CAAC;IACF,MAAM,OAAO,GAAkB;QAC7B,IAAI,EAAE,QAAQ;QACd,KAAK,CAAC,SAAS,CAAC,MAAqB,EAAE,QAAgB,EAAE,GAAkB;YACzE,MAAM,GAAG,GAAG,GAAG,IAAI,aAAa,IAAI,0BAA0B,QAAQ,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5F,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,EAAE,CACH,QAAQ,CACN,GAAG,EACH,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EACrC,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,wBAAwB,EAAE,CACjD,EACH,GAAG,CACJ,CAAC;YACF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YACpE,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC1E,MAAM,KAAK,GAAG,IAAI;iBACf,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;iBAC7C,MAAM,CAAC,CAAC,CAAC,EAAmB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAC9C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QACnD,CAAC;KACF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AACzD,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* or @ton/ton when missing.
|
|
6
6
|
*/
|
|
7
7
|
import type { HistoryProvider, SourceItem } from "../types.js";
|
|
8
|
+
import { type TonAddressBook } from "./ton-shared.js";
|
|
8
9
|
interface TonMsg {
|
|
9
10
|
source?: string | null;
|
|
10
11
|
destination?: string | null;
|
|
@@ -36,9 +37,7 @@ export interface TonJettonTransfer {
|
|
|
36
37
|
amount?: string;
|
|
37
38
|
jetton_master?: string;
|
|
38
39
|
}
|
|
39
|
-
type AddressBook =
|
|
40
|
-
user_friendly?: string;
|
|
41
|
-
}>;
|
|
40
|
+
type AddressBook = TonAddressBook;
|
|
42
41
|
type JettonMetadata = Record<string, {
|
|
43
42
|
token_info?: Array<{
|
|
44
43
|
type?: string;
|
|
@@ -4,39 +4,11 @@
|
|
|
4
4
|
* `0:HEX` addresses are turned into user-friendly form via `address_book`
|
|
5
5
|
* or @ton/ton when missing.
|
|
6
6
|
*/
|
|
7
|
-
import { Address } from "@ton/ton";
|
|
8
7
|
import { httpJson } from "../../http.js";
|
|
9
|
-
import {
|
|
8
|
+
import { logInfo } from "../../../log.js";
|
|
9
|
+
import { paced as pacedGate, retryRateLimited } from "../pace.js";
|
|
10
10
|
import { amountOf, asString, clampDecimals, feeOf, sanitizeSymbol, timeFrom, toBigInt, tokenAsset, } from "../normalize.js";
|
|
11
|
-
|
|
12
|
-
if (!raw)
|
|
13
|
-
return null;
|
|
14
|
-
const friendly = book?.[raw]?.user_friendly ?? book?.[raw.toUpperCase()]?.user_friendly;
|
|
15
|
-
if (friendly)
|
|
16
|
-
return friendly;
|
|
17
|
-
try {
|
|
18
|
-
return Address.parse(raw).toString({ bounceable: false });
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return raw;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
function tonEquals(a, b) {
|
|
25
|
-
if (!a)
|
|
26
|
-
return false;
|
|
27
|
-
try {
|
|
28
|
-
return Address.parse(a).equals(Address.parse(b));
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
/** Plain transfer: no opcode, or opcode 0 (text comment). */
|
|
35
|
-
function isPlainOpcode(opcode) {
|
|
36
|
-
if (!opcode)
|
|
37
|
-
return true;
|
|
38
|
-
return /^0x0*$/i.test(opcode);
|
|
39
|
-
}
|
|
11
|
+
import { TON_NATIVE_ASSET, isPlainOpcode, tonAddr, tonEquals } from "./ton-shared.js";
|
|
40
12
|
export function mapTonTx(tx, address, book) {
|
|
41
13
|
const hash = asString(tx.hash);
|
|
42
14
|
if (!hash)
|
|
@@ -50,7 +22,7 @@ export function mapTonTx(tx, address, book) {
|
|
|
50
22
|
const outMsgs = tx.out_msgs ?? [];
|
|
51
23
|
const outValue = outMsgs.reduce((s, m) => s + toBigInt(m.value ?? 0), 0n);
|
|
52
24
|
const block = typeof tx.mc_block_seqno === "number" ? tx.mc_block_seqno : null;
|
|
53
|
-
const asset = {
|
|
25
|
+
const asset = { ...TON_NATIVE_ASSET };
|
|
54
26
|
let item;
|
|
55
27
|
if (outValue > 0n) {
|
|
56
28
|
const first = outMsgs.find((m) => toBigInt(m.value ?? 0) > 0n) ?? outMsgs[0];
|
|
@@ -153,10 +125,26 @@ function headers() {
|
|
|
153
125
|
* Keyless TonCenter allows about one request per second per IP and answers
|
|
154
126
|
* bursts with 429. The two sources of this provider (and their second pages)
|
|
155
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.
|
|
156
133
|
*/
|
|
157
134
|
const KEYLESS_GAP_MS = 1100;
|
|
158
|
-
|
|
159
|
-
|
|
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
|
+
});
|
|
160
148
|
}
|
|
161
149
|
/** `…/api/v2` → `…/api/v3`; a v3 URL is used as is. */
|
|
162
150
|
export function toncenterV3(base) {
|
|
@@ -174,7 +162,7 @@ export function toncenterProvider(v3Base, address) {
|
|
|
174
162
|
const offset = offsetOf(cursor);
|
|
175
163
|
const url = `${v3Base}/transactions?account=${encodeURIComponent(address)}` +
|
|
176
164
|
`&limit=${pageSize}&offset=${offset}&sort=desc`;
|
|
177
|
-
const res = await paced(() => httpJson(url, { method: "GET", headers: headers() }, { ...ctx.http, label: "history.toncenter.transactions" }));
|
|
165
|
+
const res = await paced(() => httpJson(url, { method: "GET", headers: headers() }, { ...ctx.http, label: "history.toncenter.transactions" }), ctx);
|
|
178
166
|
const rows = Array.isArray(res.transactions) ? res.transactions : null;
|
|
179
167
|
if (!rows)
|
|
180
168
|
throw new Error("toncenter transactions: unexpected response");
|
|
@@ -188,7 +176,7 @@ export function toncenterProvider(v3Base, address) {
|
|
|
188
176
|
const offset = offsetOf(cursor);
|
|
189
177
|
const url = `${v3Base}/jetton/transfers?owner_address=${encodeURIComponent(address)}` +
|
|
190
178
|
`&limit=${pageSize}&offset=${offset}&sort=desc`;
|
|
191
|
-
const res = await paced(() => httpJson(url, { method: "GET", headers: headers() }, { ...ctx.http, label: "history.toncenter.jettons" }));
|
|
179
|
+
const res = await paced(() => httpJson(url, { method: "GET", headers: headers() }, { ...ctx.http, label: "history.toncenter.jettons" }), ctx);
|
|
192
180
|
const rows = Array.isArray(res.jetton_transfers) ? res.jetton_transfers : null;
|
|
193
181
|
if (!rows)
|
|
194
182
|
throw new Error("toncenter jetton/transfers: unexpected response");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toncenter.js","sourceRoot":"","sources":["../../../../src/api/history/providers/toncenter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"toncenter.js","sourceRoot":"","sources":["../../../../src/api/history/providers/toncenter.ts"],"names":[],"mappings":"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"}
|
|
@@ -95,7 +95,7 @@ export interface HistoryProvider {
|
|
|
95
95
|
label: string;
|
|
96
96
|
sources: HistorySource[];
|
|
97
97
|
}
|
|
98
|
-
export type HistoryApiKind = "etherscan" | "nodereal" | "tronscan" | "trongrid" | "esplora" | "blockcypher" | "solana-rpc" | "toncenter" | "xrp-rpc";
|
|
98
|
+
export type HistoryApiKind = "etherscan" | "nodereal" | "tronscan" | "trongrid" | "esplora" | "blockcypher" | "solana-rpc" | "toncenter" | "tonapi" | "xrp-rpc";
|
|
99
99
|
/** One entry of the per-network provider chain in the baked profile. */
|
|
100
100
|
export interface HistoryApiSpec {
|
|
101
101
|
kind: HistoryApiKind;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/history/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/history/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAyHH,sFAAsF;AACtF,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC,MAAM,CAAC,MAAM,iBAAiB,GAA8B;IAC1D,WAAW;IACX,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,aAAa;IACb,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,SAAS;CACV,CAAC"}
|