@affluent-org/sdk 0.0.5 → 0.0.6

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 (96) hide show
  1. package/dist/affluent.d.ts +3 -3
  2. package/dist/affluent.js +3 -3
  3. package/dist/common/computation.d.ts +6 -0
  4. package/dist/common/computation.js +54 -0
  5. package/dist/common/helper.d.ts +5 -0
  6. package/dist/common/helper.js +29 -0
  7. package/dist/common/service.d.ts +10 -2
  8. package/dist/common/service.js +56 -3
  9. package/dist/common/trace-action.d.ts +92 -0
  10. package/dist/common/trace-action.js +187 -0
  11. package/dist/common/transform.d.ts +15 -21
  12. package/dist/common/transform.js +63 -150
  13. package/dist/common/types.d.ts +9 -13
  14. package/dist/common/types.js +2 -2
  15. package/dist/context.d.ts +3 -0
  16. package/dist/context.js +9 -0
  17. package/dist/contracts/oracle/redstone-onchain-oracle/index.js +2 -0
  18. package/dist/contracts/vault/strategy-vault/index.d.ts +2 -1
  19. package/dist/contracts/vault/strategy-vault/index.js +1 -0
  20. package/dist/factorial.d.ts +18 -8
  21. package/dist/factorial.js +26 -14
  22. package/dist/index.d.ts +4 -2
  23. package/dist/index.js +18 -2
  24. package/dist/lib/send-msg.d.ts +16 -2
  25. package/dist/lib/send-msg.js +23 -2
  26. package/dist/monitor.js +2 -0
  27. package/dist/monitorCacheV1.js +3 -2
  28. package/dist/oracle/oracle.d.ts +3 -2
  29. package/dist/oracle/oracle.js +25 -2
  30. package/dist/pool.d.ts +41 -0
  31. package/dist/pool.js +146 -178
  32. package/dist/poolCacheV1.js +1 -0
  33. package/dist/rfq-auction.d.ts +2 -2
  34. package/dist/rfq-auction.js +6 -6
  35. package/dist/rfq-batch.d.ts +21 -11
  36. package/dist/rfq-batch.js +81 -9
  37. package/dist/services/composite-oracle/computation.d.ts +3 -8
  38. package/dist/services/composite-oracle/computation.js +91 -56
  39. package/dist/services/composite-oracle/index.js +4 -5
  40. package/dist/services/composite-oracle/query.js +1 -3
  41. package/dist/services/pool/computation.js +9 -61
  42. package/dist/services/pool/index.d.ts +10 -59
  43. package/dist/services/pool/index.js +55 -8
  44. package/dist/services/pool/query.js +1 -1
  45. package/dist/services/pool/user/trace.d.ts +90 -0
  46. package/dist/services/pool/user/trace.js +168 -0
  47. package/dist/services/rfq-auction/index.d.ts +7 -23
  48. package/dist/services/rfq-auction/index.js +45 -6
  49. package/dist/services/rfq-auction/user/index.js +1 -1
  50. package/dist/services/rfq-auction/user/trace.d.ts +53 -0
  51. package/dist/services/rfq-auction/user/trace.js +68 -0
  52. package/dist/services/rfq-batch/index.d.ts +16 -13
  53. package/dist/services/rfq-batch/index.js +34 -10
  54. package/dist/services/rfq-batch/user/trace.d.ts +49 -0
  55. package/dist/services/rfq-batch/user/trace.js +67 -0
  56. package/dist/services/share-vault/index.d.ts +12 -56
  57. package/dist/services/share-vault/index.js +37 -10
  58. package/dist/services/share-vault/query.js +1 -1
  59. package/dist/services/share-vault/user/trace.d.ts +54 -0
  60. package/dist/services/share-vault/user/trace.js +84 -0
  61. package/dist/services/strategy-vault/index.d.ts +68 -1981
  62. package/dist/services/strategy-vault/index.js +114 -53
  63. package/dist/services/strategy-vault/oracle.js +1 -0
  64. package/dist/services/strategy-vault/owner/index.d.ts +2 -2
  65. package/dist/services/strategy-vault/owner/index.js +1 -1
  66. package/dist/services/strategy-vault/owner/types.d.ts +4 -0
  67. package/dist/services/strategy-vault/query.js +1 -1
  68. package/dist/services/strategy-vault/user/trace.d.ts +156 -0
  69. package/dist/services/strategy-vault/user/trace.js +264 -0
  70. package/dist/share-vault.d.ts +164 -8
  71. package/dist/share-vault.js +222 -67
  72. package/dist/strategy_vault/base.d.ts +521 -105
  73. package/dist/strategy_vault/base.js +493 -41
  74. package/dist/strategy_vault/steps.d.ts +120 -3
  75. package/dist/strategy_vault/steps.js +161 -0
  76. package/dist/types/sender.d.ts +1 -0
  77. package/dist/utils/_parse_temp/StrategyVault.d.ts +9 -9
  78. package/dist/utils/_parse_temp/StrategyVault.js +48 -40
  79. package/dist/utils/_parse_temp/parseMsgBody.d.ts +2 -2
  80. package/dist/utils/_parse_temp/parseMsgBody.js +84 -84
  81. package/dist/utils/external-message-hash.d.ts +7 -3
  82. package/dist/utils/external-message-hash.js +20 -7
  83. package/dist/utils/oracle/redstone/helper.js +2 -0
  84. package/dist/utils/oracle/redstone/redstoneHelper.d.ts +7 -0
  85. package/dist/utils/oracle/redstone/redstoneHelper.js +103 -1
  86. package/dist/utils/pending-tracker/trackable-sender.d.ts +37 -4
  87. package/dist/utils/pending-tracker/trackable-sender.js +47 -8
  88. package/dist/utils/pending-tracker/v3-client.d.ts +16 -0
  89. package/dist/utils/pending-tracker/v3-client.js +80 -2
  90. package/dist/utils/toncenter/index.d.ts +1 -0
  91. package/dist/utils/toncenter/index.js +17 -0
  92. package/dist/utils/toncenter/transform.d.ts +11 -0
  93. package/dist/utils/toncenter/transform.js +40 -0
  94. package/dist/utils/toncenter/type.d.ts +227 -0
  95. package/dist/utils/toncenter/type.js +2 -0
  96. package/package.json +3 -3
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
@@ -8,6 +41,7 @@ exports.createPayload = createPayload;
8
41
  exports.getHexlifiedFeedIds = getHexlifiedFeedIds;
9
42
  exports.getDataFeedIdTuples = getDataFeedIdTuples;
10
43
  exports.createRedstoneHelper = createRedstoneHelper;
44
+ exports.createRedstoneCustomHelper = createRedstoneCustomHelper;
11
45
  const core_1 = require("@ton/core");
12
46
  const sdk_1 = require("@redstone-finance/sdk");
13
47
  const protocol_1 = require("@redstone-finance/protocol");
@@ -211,13 +245,81 @@ function createRedstoneHelper(type) {
211
245
  getPrices,
212
246
  };
213
247
  }
248
+ function createRedstoneCustomHelper(baseUrl) {
249
+ const SIGNER_COUNT_THRESHOLD = 5;
250
+ async function fetchPayloadHex(assets) {
251
+ const { default: axios } = await Promise.resolve(`${"axios"}`).then(s => __importStar(require(s)));
252
+ const response = await axios.get(`${baseUrl}/prices/latest`, {
253
+ timeout: 10000,
254
+ params: {
255
+ dataFeedIds: assets,
256
+ minimalSignersCount: SIGNER_COUNT_THRESHOLD,
257
+ },
258
+ paramsSerializer: { indexes: null },
259
+ });
260
+ const { SignedDataPackage, RedstonePayload } = await Promise.resolve(`${"@redstone-finance/protocol"}`).then(s => __importStar(require(s)));
261
+ const prices = response.data.prices;
262
+ const flatPackages = assets.flatMap((asset) => prices[asset] || []);
263
+ const signedDataPackages = flatPackages.map((obj) => SignedDataPackage.fromObj(obj));
264
+ const payload = new RedstonePayload(signedDataPackages, "");
265
+ return payload.toBytesHexWithout0xPrefix();
266
+ }
267
+ async function createPayload(assets) {
268
+ if (assets.length === 0)
269
+ return (0, core_1.beginCell)().storeUint(0, 2).endCell();
270
+ const payloadHex = await fetchPayloadHex(assets);
271
+ const { dataPackageChunks, metadata } = splitPayloadHex(payloadHex);
272
+ const payloadCell = (0, core_1.beginCell)();
273
+ const cells = new Map();
274
+ for (let i = 0; i < dataPackageChunks.length; i++) {
275
+ cells.set(BigInt(i), dataPackageChunks[i]);
276
+ }
277
+ const dataPackagesDict = (0, core_1.beginCell)();
278
+ const BASE_KEY_LEN = 16;
279
+ (0, serializeDict_1.serializeDict)(cells, BASE_KEY_LEN, storeSignatureAndData, dataPackagesDict);
280
+ payloadCell.storeRef(dataPackagesDict);
281
+ storeMetadata(metadata, payloadCell);
282
+ return payloadCell.endCell();
283
+ }
284
+ async function getPrices(assets) {
285
+ const payloadHex = await fetchPayloadHex(assets);
286
+ const { dataPackageChunks } = splitPayloadHex(payloadHex);
287
+ const result = [];
288
+ for (let i = 0; i < dataPackageChunks.length; i++) {
289
+ result.push({
290
+ name: assets[i],
291
+ ...parseDataPackageHex(dataPackageChunks[i]),
292
+ });
293
+ }
294
+ return result;
295
+ }
296
+ function getHexlifiedFeedIds(assets) {
297
+ const paramsProvider = new sdk_1.ContractParamsProvider({
298
+ dataServiceId: "redstone-primary-prod",
299
+ uniqueSignersCount: SIGNER_COUNT_THRESHOLD,
300
+ dataPackagesIds: assets,
301
+ });
302
+ return paramsProvider.getHexlifiedFeedIds();
303
+ }
304
+ function getDataFeedIdTuples(assets) {
305
+ const dataFeedIdsTupleBuilder = new core_1.TupleBuilder();
306
+ getHexlifiedFeedIds(assets).forEach((item) => dataFeedIdsTupleBuilder.writeNumber(BigInt(item)));
307
+ return (0, core_1.serializeTuple)(dataFeedIdsTupleBuilder.build());
308
+ }
309
+ return {
310
+ createPayload,
311
+ getHexlifiedFeedIds,
312
+ getDataFeedIdTuples,
313
+ getPrices,
314
+ };
315
+ }
214
316
  exports.default = {
215
317
  getDataFeedIdTuples,
216
318
  getHexlifiedFeedIds,
217
319
  createPayload,
218
320
  createRedstoneHelper,
321
+ createRedstoneCustomHelper,
219
322
  };
220
- const encoder = new TextEncoder();
221
323
  function stringToBytes(value) {
222
324
  const hexArray = value
223
325
  .slice(2)
@@ -1,16 +1,49 @@
1
+ import { SenderArguments, OpenedContract, Address, Cell } from "@ton/core";
1
2
  import { TonClient, WalletContractV5R1 } from "@ton/ton";
2
3
  import { KeyPair } from "@ton/crypto";
3
- import { TrackableSender } from "./type";
4
+ import { MessageHash } from "../external-message-hash";
5
+ export declare const sleep: (ms?: number) => Promise<unknown>;
4
6
  export interface TrackableSenderConfig {
5
7
  client: TonClient;
6
- wallet: WalletContractV5R1;
8
+ wallet: OpenedContract<WalletContractV5R1>;
7
9
  keyPair: KeyPair;
8
10
  }
11
+ export declare function parseExternalMessage(body: Cell): {
12
+ op: number;
13
+ walletId: number;
14
+ timeout: number;
15
+ seqno: number;
16
+ actions: any[];
17
+ signature: Buffer<ArrayBufferLike>;
18
+ };
19
+ export declare function pollExternalTransfer(client: TonClient, address: Address, seqno: number): Promise<MessageHash>;
9
20
  /**
10
21
  * Create a TrackableSender from wallet contract and key pair
11
22
  */
12
- export declare function createTrackableSender(config: TrackableSenderConfig): TrackableSender;
23
+ export declare function createTrackableSender(config: TrackableSenderConfig): {
24
+ address: Address;
25
+ getSeqno(): Promise<number>;
26
+ send(args: SenderArguments): Promise<{
27
+ signedBody: Cell;
28
+ extMsgHash: {
29
+ ext: MessageHash;
30
+ norm: MessageHash;
31
+ };
32
+ seqno: number;
33
+ }>;
34
+ };
13
35
  /**
14
36
  * Create a TrackableSender from mnemonic
15
37
  */
16
- export declare function createTrackableSenderFromMnemonic(client: TonClient, mnemonic: string[], workchain?: number): Promise<TrackableSender>;
38
+ export declare function createTrackableSenderFromMnemonic(client: TonClient, mnemonic: string[], workchain?: number): Promise<{
39
+ address: Address;
40
+ getSeqno(): Promise<number>;
41
+ send(args: SenderArguments): Promise<{
42
+ signedBody: Cell;
43
+ extMsgHash: {
44
+ ext: MessageHash;
45
+ norm: MessageHash;
46
+ };
47
+ seqno: number;
48
+ }>;
49
+ }>;
@@ -33,22 +33,60 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.sleep = void 0;
37
+ exports.parseExternalMessage = parseExternalMessage;
38
+ exports.pollExternalTransfer = pollExternalTransfer;
36
39
  exports.createTrackableSender = createTrackableSender;
37
40
  exports.createTrackableSenderFromMnemonic = createTrackableSenderFromMnemonic;
38
41
  const core_1 = require("@ton/core");
39
42
  const ton_1 = require("@ton/ton");
40
43
  const external_message_hash_1 = require("../external-message-hash");
44
+ const WalletContractV5R1_1 = require("@ton/ton/dist/wallets/WalletContractV5R1");
45
+ const sleep = (ms = 1000) => new Promise(r => setTimeout(r, ms));
46
+ exports.sleep = sleep;
47
+ function parseExternalMessage(body) {
48
+ const slice = body.beginParse();
49
+ const op = Number(slice.loadUint(32));
50
+ const walletId = Number(slice.loadUint(32));
51
+ const timeout = Number(slice.loadUint(32));
52
+ const seqno = Number(slice.loadUint(32));
53
+ const actions = [];
54
+ const outList = slice.loadMaybeRef();
55
+ if (outList)
56
+ actions.push(...(0, core_1.loadOutList)(outList.beginParse()));
57
+ if (slice.loadBit())
58
+ actions.push((0, WalletContractV5R1_1.loadOutActionExtendedV5R1)(slice));
59
+ while (slice.remainingRefs > 0) {
60
+ actions.push((0, WalletContractV5R1_1.loadOutActionExtendedV5R1)(slice.loadRef().beginParse()));
61
+ }
62
+ const signature = slice.loadBuffer(64);
63
+ return { op, walletId, timeout, seqno, actions, signature };
64
+ }
65
+ async function pollExternalTransfer(client, address, seqno) {
66
+ while (true) {
67
+ const txs = await client.getTransactions(address, {
68
+ limit: 100
69
+ });
70
+ const tx = txs
71
+ .filter(tx => tx.inMessage?.info.type === "external-in")
72
+ .find(tx => parseExternalMessage(tx.inMessage?.body).seqno === seqno);
73
+ if (tx) {
74
+ const result = (0, external_message_hash_1.computeExternalMessageHash)(address, tx.inMessage?.body);
75
+ return result.ext;
76
+ }
77
+ await (0, exports.sleep)();
78
+ }
79
+ }
41
80
  /**
42
81
  * Create a TrackableSender from wallet contract and key pair
43
82
  */
44
83
  function createTrackableSender(config) {
45
84
  const { client, wallet, keyPair } = config;
46
- const openedWallet = client.open(wallet);
47
85
  return {
48
86
  address: wallet.address,
49
87
  async getSeqno() {
50
88
  try {
51
- return await openedWallet.getSeqno();
89
+ return await wallet.getSeqno();
52
90
  }
53
91
  catch {
54
92
  return 0;
@@ -61,18 +99,19 @@ function createTrackableSender(config) {
61
99
  value: args.value,
62
100
  body: args.body,
63
101
  bounce: args.bounce ?? true,
64
- init: args.init,
102
+ // init: args.init,
65
103
  });
66
104
  const sendMode = args.sendMode ?? core_1.SendMode.PAY_GAS_SEPARATELY;
67
- const signedBody = openedWallet.createTransfer({
105
+ wallet.send;
106
+ const signedBody = wallet.createTransfer({
68
107
  seqno,
69
108
  secretKey: keyPair.secretKey,
70
109
  sendMode,
71
110
  messages: [internalMessage],
72
111
  });
73
- const { hashHex } = (0, external_message_hash_1.computeExternalMessageHash)(wallet.address, signedBody);
74
- await openedWallet.send(signedBody);
75
- return { extMsgHash: hashHex, seqno };
112
+ const extMsgHash = (0, external_message_hash_1.computeExternalMessageHash)(wallet.address, signedBody);
113
+ await wallet.send(signedBody);
114
+ return { signedBody, extMsgHash, seqno };
76
115
  },
77
116
  };
78
117
  }
@@ -82,6 +121,6 @@ function createTrackableSender(config) {
82
121
  async function createTrackableSenderFromMnemonic(client, mnemonic, workchain = 0) {
83
122
  const { mnemonicToWalletKey } = await Promise.resolve().then(() => __importStar(require("@ton/crypto")));
84
123
  const keyPair = await mnemonicToWalletKey(mnemonic);
85
- const wallet = ton_1.WalletContractV5R1.create({ publicKey: keyPair.publicKey, workchain });
124
+ const wallet = client.open(ton_1.WalletContractV5R1.create({ publicKey: keyPair.publicKey, workchain }));
86
125
  return createTrackableSender({ client, wallet, keyPair });
87
126
  }
@@ -1,4 +1,5 @@
1
1
  import { PendingTraceResponse, TraceResult, WaitOptions } from "./type";
2
+ import { ToncenterPendingTracesResponseRaw, ToncenterTraceRaw } from "../toncenter/type";
2
3
  /**
3
4
  * Toncenter v3 API endpoints
4
5
  */
@@ -19,6 +20,21 @@ export declare class ToncenterV3Client {
19
20
  * Get pending traces by external message hash
20
21
  */
21
22
  getPendingTraces(extMsgHash: string): Promise<PendingTraceResponse>;
23
+ /**
24
+ * Get detailed pending traces (includes transaction details for step tracking)
25
+ */
26
+ getDetailedPendingTraces(extMsgHash: string): Promise<ToncenterPendingTracesResponseRaw>;
27
+ /**
28
+ * Get confirmed traces by message hash
29
+ */
30
+ getTraces(msgHash: string): Promise<ToncenterPendingTracesResponseRaw>;
31
+ /**
32
+ * Poll for detailed trace (for TracerBase compatibility)
33
+ */
34
+ pollDetailedTrace(extMsgHash: string, options?: {
35
+ pollInterval?: number;
36
+ maxRetries?: number;
37
+ }): Promise<ToncenterTraceRaw>;
22
38
  /**
23
39
  * Convert raw trace to simplified TraceResult
24
40
  */
@@ -3,6 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ToncenterV3Client = void 0;
4
4
  const core_1 = require("@ton/core");
5
5
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
6
+ class ToncenterApiError extends Error {
7
+ status;
8
+ statusText;
9
+ payload;
10
+ constructor(status, statusText, payload) {
11
+ super(`Toncenter v3 API error: ${status} ${statusText}`);
12
+ this.status = status;
13
+ this.statusText = statusText;
14
+ this.payload = payload;
15
+ this.name = "ToncenterApiError";
16
+ }
17
+ }
6
18
  /**
7
19
  * Toncenter v3 API endpoints
8
20
  */
@@ -30,7 +42,14 @@ class ToncenterV3Client {
30
42
  }
31
43
  const response = await fetch(url, { headers });
32
44
  if (!response.ok) {
33
- throw new Error(`Toncenter v3 API error: ${response.status} ${response.statusText}`);
45
+ let payload;
46
+ try {
47
+ payload = await response.json();
48
+ }
49
+ catch {
50
+ payload = await response.text();
51
+ }
52
+ throw new ToncenterApiError(response.status, response.statusText, payload);
34
53
  }
35
54
  return response.json();
36
55
  }
@@ -38,7 +57,66 @@ class ToncenterV3Client {
38
57
  * Get pending traces by external message hash
39
58
  */
40
59
  async getPendingTraces(extMsgHash) {
41
- return this.fetch(`/pendingTraces?ext_msg_hash=${extMsgHash}`);
60
+ const param = encodeURIComponent(extMsgHash);
61
+ try {
62
+ return await this.fetch(`/pendingTraces?ext_msg_hash=${param}`);
63
+ }
64
+ catch (error) {
65
+ if (error instanceof ToncenterApiError && error.status === 422) {
66
+ return { traces: [] };
67
+ }
68
+ throw error;
69
+ }
70
+ }
71
+ /**
72
+ * Get detailed pending traces (includes transaction details for step tracking)
73
+ */
74
+ async getDetailedPendingTraces(extMsgHash) {
75
+ const param = encodeURIComponent(extMsgHash);
76
+ try {
77
+ return await this.fetch(`/pendingTraces?ext_msg_hash=${param}`);
78
+ }
79
+ catch (error) {
80
+ if (error instanceof ToncenterApiError && error.status === 422) {
81
+ return { traces: null, address_book: {}, metadata: {} };
82
+ }
83
+ throw error;
84
+ }
85
+ }
86
+ /**
87
+ * Get confirmed traces by message hash
88
+ */
89
+ async getTraces(msgHash) {
90
+ const param = encodeURIComponent(msgHash);
91
+ try {
92
+ return await this.fetch(`/traces?msg_hash=${param}`);
93
+ }
94
+ catch (error) {
95
+ if (error instanceof ToncenterApiError && error.status === 422) {
96
+ return { traces: null, address_book: {}, metadata: {} };
97
+ }
98
+ throw error;
99
+ }
100
+ }
101
+ /**
102
+ * Poll for detailed trace (for TracerBase compatibility)
103
+ */
104
+ async pollDetailedTrace(extMsgHash, options = {}) {
105
+ const { pollInterval = 3000, maxRetries = 30 } = options;
106
+ let count = 0;
107
+ while (count < maxRetries) {
108
+ count++;
109
+ const pending = await this.getDetailedPendingTraces(extMsgHash);
110
+ const pendingTrace = pending.traces?.find(t => t.trace.in_msg_hash === extMsgHash);
111
+ if (pendingTrace)
112
+ return pendingTrace;
113
+ const confirmed = await this.getTraces(extMsgHash);
114
+ const confirmedTrace = confirmed.traces?.find(t => t.trace.in_msg_hash === extMsgHash);
115
+ if (confirmedTrace)
116
+ return confirmedTrace;
117
+ await sleep(pollInterval);
118
+ }
119
+ throw new Error(`Max retries exceeded for trace: ${extMsgHash}`);
42
120
  }
43
121
  /**
44
122
  * Convert raw trace to simplified TraceResult
@@ -0,0 +1 @@
1
+ export * from "./type";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./type"), exports);
@@ -0,0 +1,11 @@
1
+ import { ToncenterPendingTracesResponse, ToncenterPendingTracesResponseRaw } from "./type";
2
+ /**
3
+ * Convert Toncenter raw JSON responses into objects where numeric strings become bigint.
4
+ */
5
+ export declare class ToncenterResponseTransformer {
6
+ static normalize(response: ToncenterPendingTracesResponseRaw): ToncenterPendingTracesResponse;
7
+ static normalize(response: Promise<ToncenterPendingTracesResponseRaw>): Promise<ToncenterPendingTracesResponse>;
8
+ private static deepNormalize;
9
+ private static isNumericString;
10
+ private static isPromise;
11
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToncenterResponseTransformer = void 0;
4
+ /**
5
+ * Convert Toncenter raw JSON responses into objects where numeric strings become bigint.
6
+ */
7
+ class ToncenterResponseTransformer {
8
+ static normalize(response) {
9
+ if (ToncenterResponseTransformer.isPromise(response)) {
10
+ return response.then((value) => ToncenterResponseTransformer.deepNormalize(value));
11
+ }
12
+ return ToncenterResponseTransformer.deepNormalize(response);
13
+ }
14
+ static deepNormalize(value) {
15
+ if (value === null || value === undefined) {
16
+ return value;
17
+ }
18
+ if (typeof value === "string" && ToncenterResponseTransformer.isNumericString(value)) {
19
+ return BigInt(value);
20
+ }
21
+ if (Array.isArray(value)) {
22
+ return value.map((item) => this.deepNormalize(item));
23
+ }
24
+ if (typeof value === "object") {
25
+ const result = {};
26
+ for (const [key, entry] of Object.entries(value)) {
27
+ result[key] = this.deepNormalize(entry);
28
+ }
29
+ return result;
30
+ }
31
+ return value;
32
+ }
33
+ static isNumericString(value) {
34
+ return /^-?\d+$/.test(value);
35
+ }
36
+ static isPromise(value) {
37
+ return typeof value.then === "function";
38
+ }
39
+ }
40
+ exports.ToncenterResponseTransformer = ToncenterResponseTransformer;