@tonappchain/sdk 0.7.2-scaled-ui-support-2 → 0.7.2

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 (171) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +198 -198
  3. package/dist/artifacts/dev/index.d.ts +2 -2
  4. package/dist/artifacts/dev/index.js +2 -1
  5. package/dist/artifacts/dev/tac/endpoints.d.ts +1 -0
  6. package/dist/artifacts/dev/tac/endpoints.js +2 -1
  7. package/dist/artifacts/dev/ton/internal/build/CrossChainLayer.compiled.json +1 -1
  8. package/dist/artifacts/dev/ton/internal/build/Executor.compiled.json +1 -1
  9. package/dist/artifacts/dev/ton/internal/build/JettonProxy.compiled.json +1 -1
  10. package/dist/artifacts/dev/ton/internal/build/JettonWallet.compiled.json +1 -1
  11. package/dist/artifacts/dev/ton/internal/build/NFTItem.compiled.json +1 -1
  12. package/dist/artifacts/dev/ton/internal/build/NFTProxy.compiled.json +1 -1
  13. package/dist/artifacts/dev/ton/internal/build/Settings.compiled.json +1 -1
  14. package/dist/artifacts/dev/ton/internal/wrappers/CrossChainLayer.d.ts +53 -6
  15. package/dist/artifacts/dev/ton/internal/wrappers/CrossChainLayer.js +130 -17
  16. package/dist/artifacts/dev/ton/internal/wrappers/JettonMinter.d.ts +2 -0
  17. package/dist/artifacts/dev/ton/internal/wrappers/JettonMinter.js +3 -1
  18. package/dist/artifacts/dev/ton/internal/wrappers/JettonProxy.d.ts +9 -0
  19. package/dist/artifacts/dev/ton/internal/wrappers/JettonProxy.js +10 -1
  20. package/dist/artifacts/dev/ton/internal/wrappers/JettonWallet.d.ts +7 -0
  21. package/dist/artifacts/dev/ton/internal/wrappers/JettonWallet.js +9 -2
  22. package/dist/artifacts/dev/ton/internal/wrappers/NFTCollection.d.ts +9 -0
  23. package/dist/artifacts/dev/ton/internal/wrappers/NFTCollection.js +9 -0
  24. package/dist/artifacts/dev/ton/internal/wrappers/NFTItem.d.ts +7 -0
  25. package/dist/artifacts/dev/ton/internal/wrappers/NFTItem.js +7 -0
  26. package/dist/artifacts/dev/ton/internal/wrappers/NFTProxy.d.ts +7 -0
  27. package/dist/artifacts/dev/ton/internal/wrappers/NFTProxy.js +8 -1
  28. package/dist/artifacts/dev/ton/internal/wrappers/Settings.d.ts +1 -0
  29. package/dist/artifacts/dev/ton/internal/wrappers/Settings.js +1 -0
  30. package/dist/artifacts/dev/ton/internal/wrappers/utils/CrossChainLayerPayload.d.ts +10 -0
  31. package/dist/artifacts/dev/ton/internal/wrappers/utils/CrossChainLayerPayload.js +24 -0
  32. package/dist/artifacts/dev/ton/internal/wrappers/utils/MerkleRoots.d.ts +2 -1
  33. package/dist/artifacts/dev/ton/internal/wrappers/utils/MerkleRoots.js +9 -1
  34. package/dist/artifacts/mainnet/index.d.ts +2 -2
  35. package/dist/artifacts/mainnet/index.js +2 -1
  36. package/dist/artifacts/mainnet/tac/endpoints.d.ts +1 -0
  37. package/dist/artifacts/mainnet/tac/endpoints.js +2 -1
  38. package/dist/artifacts/mainnet/ton/endpoints.d.ts +1 -1
  39. package/dist/artifacts/mainnet/ton/endpoints.js +1 -1
  40. package/dist/artifacts/mainnet/ton/internal/build/CrossChainLayer.compiled.json +1 -1
  41. package/dist/artifacts/mainnet/ton/internal/build/Executor.compiled.json +1 -1
  42. package/dist/artifacts/mainnet/ton/internal/build/JettonMinter.compiled.json +1 -1
  43. package/dist/artifacts/mainnet/ton/internal/build/JettonProxy.compiled.json +1 -1
  44. package/dist/artifacts/mainnet/ton/internal/build/JettonWallet.compiled.json +1 -1
  45. package/dist/artifacts/mainnet/ton/internal/build/NFTItem.compiled.json +1 -1
  46. package/dist/artifacts/mainnet/ton/internal/build/NFTProxy.compiled.json +1 -1
  47. package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.d.ts +1 -13
  48. package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.js +7 -45
  49. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.d.ts +2 -2
  50. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.js +2 -2
  51. package/dist/artifacts/testnet/index.d.ts +2 -2
  52. package/dist/artifacts/testnet/index.js +2 -1
  53. package/dist/artifacts/testnet/tac/endpoints.d.ts +1 -0
  54. package/dist/artifacts/testnet/tac/endpoints.js +2 -1
  55. package/dist/artifacts/testnet/ton/endpoints.d.ts +1 -1
  56. package/dist/artifacts/testnet/ton/endpoints.js +1 -1
  57. package/dist/artifacts/testnet/ton/internal/build/CrossChainLayer.compiled.json +1 -1
  58. package/dist/artifacts/testnet/ton/internal/build/Executor.compiled.json +1 -1
  59. package/dist/artifacts/testnet/ton/internal/build/JettonProxy.compiled.json +1 -1
  60. package/dist/artifacts/testnet/ton/internal/build/JettonWallet.compiled.json +1 -1
  61. package/dist/artifacts/testnet/ton/internal/build/NFTItem.compiled.json +1 -1
  62. package/dist/artifacts/testnet/ton/internal/build/NFTProxy.compiled.json +1 -1
  63. package/dist/artifacts/testnet/ton/internal/build/Settings.compiled.json +1 -1
  64. package/dist/artifacts/testnet/ton/internal/wrappers/CrossChainLayer.d.ts +53 -6
  65. package/dist/artifacts/testnet/ton/internal/wrappers/CrossChainLayer.js +130 -17
  66. package/dist/artifacts/testnet/ton/internal/wrappers/JettonMinter.d.ts +2 -0
  67. package/dist/artifacts/testnet/ton/internal/wrappers/JettonMinter.js +3 -1
  68. package/dist/artifacts/testnet/ton/internal/wrappers/JettonProxy.d.ts +9 -0
  69. package/dist/artifacts/testnet/ton/internal/wrappers/JettonProxy.js +10 -1
  70. package/dist/artifacts/testnet/ton/internal/wrappers/JettonWallet.d.ts +7 -0
  71. package/dist/artifacts/testnet/ton/internal/wrappers/JettonWallet.js +9 -2
  72. package/dist/artifacts/testnet/ton/internal/wrappers/NFTCollection.d.ts +9 -0
  73. package/dist/artifacts/testnet/ton/internal/wrappers/NFTCollection.js +9 -0
  74. package/dist/artifacts/testnet/ton/internal/wrappers/NFTItem.d.ts +7 -0
  75. package/dist/artifacts/testnet/ton/internal/wrappers/NFTItem.js +7 -0
  76. package/dist/artifacts/testnet/ton/internal/wrappers/NFTProxy.d.ts +7 -0
  77. package/dist/artifacts/testnet/ton/internal/wrappers/NFTProxy.js +8 -1
  78. package/dist/artifacts/testnet/ton/internal/wrappers/Settings.d.ts +1 -0
  79. package/dist/artifacts/testnet/ton/internal/wrappers/Settings.js +1 -0
  80. package/dist/artifacts/testnet/ton/internal/wrappers/utils/CrossChainLayerPayload.d.ts +10 -0
  81. package/dist/artifacts/testnet/ton/internal/wrappers/utils/CrossChainLayerPayload.js +24 -0
  82. package/dist/artifacts/testnet/ton/internal/wrappers/utils/MerkleRoots.d.ts +2 -1
  83. package/dist/artifacts/testnet/ton/internal/wrappers/utils/MerkleRoots.js +9 -1
  84. package/dist/src/adapters/BaseContractOpener.d.ts +76 -0
  85. package/dist/src/adapters/BaseContractOpener.js +440 -0
  86. package/dist/src/adapters/LiteClientOpener.d.ts +38 -0
  87. package/dist/src/adapters/LiteClientOpener.js +141 -0
  88. package/dist/src/adapters/OpenerUtils.d.ts +3 -0
  89. package/dist/src/adapters/OpenerUtils.js +40 -0
  90. package/dist/src/adapters/RetryableContractOpener.d.ts +40 -0
  91. package/dist/src/adapters/RetryableContractOpener.js +290 -0
  92. package/dist/src/adapters/SandboxOpener.d.ts +15 -0
  93. package/dist/src/adapters/SandboxOpener.js +35 -0
  94. package/dist/src/adapters/TonClient4Opener.d.ts +24 -0
  95. package/dist/src/adapters/TonClient4Opener.js +95 -0
  96. package/dist/src/adapters/TonClientOpener.d.ts +19 -0
  97. package/dist/src/adapters/TonClientOpener.js +82 -0
  98. package/dist/src/adapters/index.d.ts +7 -2
  99. package/dist/src/adapters/index.js +7 -2
  100. package/dist/src/assets/AssetCache.d.ts +8 -8
  101. package/dist/src/assets/AssetCache.js +3 -0
  102. package/dist/src/assets/AssetFactory.js +8 -2
  103. package/dist/src/assets/FT.d.ts +2 -3
  104. package/dist/src/assets/FT.js +4 -7
  105. package/dist/src/assets/NFT.d.ts +1 -1
  106. package/dist/src/assets/NFT.js +1 -1
  107. package/dist/src/assets/TON.d.ts +3 -2
  108. package/dist/src/assets/TON.js +2 -1
  109. package/dist/src/errors/errors.d.ts +12 -1
  110. package/dist/src/errors/errors.js +66 -2
  111. package/dist/src/errors/index.d.ts +2 -2
  112. package/dist/src/errors/index.js +4 -1
  113. package/dist/src/errors/instances.d.ts +7 -2
  114. package/dist/src/errors/instances.js +67 -2
  115. package/dist/src/index.d.ts +3 -1
  116. package/dist/src/index.js +6 -4
  117. package/dist/src/interfaces/Asset.d.ts +4 -9
  118. package/dist/src/interfaces/ContractOpener.d.ts +76 -2
  119. package/dist/src/interfaces/IOperationTracker.d.ts +22 -22
  120. package/dist/src/interfaces/ISimulator.d.ts +9 -1
  121. package/dist/src/interfaces/ITONTransactionManager.d.ts +20 -1
  122. package/dist/src/interfaces/ITacExplorerClient.d.ts +8 -0
  123. package/dist/src/interfaces/ITacExplorerClient.js +2 -0
  124. package/dist/src/interfaces/ITacSDK.d.ts +25 -1
  125. package/dist/src/interfaces/ITxFinalizer.d.ts +4 -0
  126. package/dist/src/interfaces/ITxFinalizer.js +2 -0
  127. package/dist/src/interfaces/WalletInstanse.d.ts +4 -8
  128. package/dist/src/interfaces/index.d.ts +1 -0
  129. package/dist/src/interfaces/index.js +1 -0
  130. package/dist/src/sdk/Configuration.d.ts +5 -3
  131. package/dist/src/sdk/Configuration.js +54 -7
  132. package/dist/src/sdk/Consts.d.ts +18 -1
  133. package/dist/src/sdk/Consts.js +21 -2
  134. package/dist/src/sdk/Fees.d.ts +21 -0
  135. package/dist/src/sdk/Fees.js +201 -0
  136. package/dist/src/sdk/LiteSequencerClient.d.ts +1 -0
  137. package/dist/src/sdk/LiteSequencerClient.js +39 -17
  138. package/dist/src/sdk/OperationTracker.d.ts +11 -11
  139. package/dist/src/sdk/OperationTracker.js +46 -94
  140. package/dist/src/sdk/Simulator.d.ts +10 -2
  141. package/dist/src/sdk/Simulator.js +102 -0
  142. package/dist/src/sdk/StartTracking.d.ts +12 -7
  143. package/dist/src/sdk/StartTracking.js +75 -49
  144. package/dist/src/sdk/TONTransactionManager.d.ts +5 -4
  145. package/dist/src/sdk/TONTransactionManager.js +63 -8
  146. package/dist/src/sdk/TacExplorerClient.d.ts +8 -0
  147. package/dist/src/sdk/TacExplorerClient.js +22 -0
  148. package/dist/src/sdk/TacSdk.d.ts +8 -2
  149. package/dist/src/sdk/TacSdk.js +27 -4
  150. package/dist/src/sdk/TxFinalizer.d.ts +4 -3
  151. package/dist/src/sdk/TxFinalizer.js +41 -41
  152. package/dist/src/sdk/Utils.d.ts +20 -1
  153. package/dist/src/sdk/Utils.js +158 -10
  154. package/dist/src/sender/BatchSender.js +19 -0
  155. package/dist/src/sender/MockSender.d.ts +2 -0
  156. package/dist/src/sender/MockSender.js +13 -0
  157. package/dist/src/sender/RawSender.js +34 -1
  158. package/dist/src/sender/SenderFactory.js +1 -1
  159. package/dist/src/sender/TonConnectSender.js +2 -0
  160. package/dist/src/sender/index.d.ts +1 -0
  161. package/dist/src/sender/index.js +1 -0
  162. package/dist/src/structs/InternalStruct.d.ts +98 -4
  163. package/dist/src/structs/Struct.d.ts +183 -7
  164. package/dist/src/structs/Struct.js +4 -3
  165. package/dist/src/wrappers/HighloadWalletV3.d.ts +5 -3
  166. package/dist/src/wrappers/HighloadWalletV3.js +14 -3
  167. package/package.json +121 -117
  168. package/dist/src/adapters/contractOpener.d.ts +0 -20
  169. package/dist/src/adapters/contractOpener.js +0 -126
  170. package/dist/src/adapters/retryableContractOpener.d.ts +0 -24
  171. package/dist/src/adapters/retryableContractOpener.js +0 -111
@@ -35,96 +35,78 @@ class OperationTracker {
35
35
  this.logger = logger;
36
36
  }
37
37
  async getOperationIdByTransactionHash(transactionHash, waitOptions) {
38
- this.logger.debug(`Getting operation ID for transactionHash: ${(0, Utils_1.formatObjectForLogging)(transactionHash)}`);
39
38
  const requestFn = async () => {
40
39
  let lastError;
41
40
  for (const client of this.clients) {
42
41
  try {
43
42
  const id = await client.getOperationIdByTransactionHash(transactionHash);
44
- this.logger.debug(`Operation ID ${id == '' ? 'does not exist' : 'retrieved successfully'}`);
45
43
  return id;
46
44
  }
47
45
  catch (error) {
48
- this.logger.warn(`Failed to get OperationId by transactionHash using one of the endpoints`);
49
46
  lastError = error;
50
47
  }
51
48
  }
52
- this.logger.error('All endpoints failed to get operation id by transactionHash');
53
- throw (0, errors_1.allEndpointsFailedError)(lastError);
49
+ throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
54
50
  };
55
- return waitOptions
56
- ? await (0, Utils_1.waitUntilSuccess)(waitOptions, requestFn, 'OperationTracker: Getting operation ID by transaction hash')
57
- : await requestFn();
51
+ return waitOptions === null
52
+ ? await requestFn()
53
+ : await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation ID by transaction hash ${(0, Utils_1.formatObjectForLogging)(transactionHash)}`);
58
54
  }
59
55
  async getOperationType(operationId, waitOptions) {
60
- this.logger.debug(`Getting operation type for ${(0, Utils_1.formatObjectForLogging)(operationId)}`);
61
56
  const requestFn = async () => {
62
57
  let lastError;
63
58
  for (const client of this.clients) {
64
59
  try {
65
60
  const type = await client.getOperationType(operationId);
66
- this.logger.debug(`Operation retrieved successfully`);
67
61
  return type;
68
62
  }
69
63
  catch (error) {
70
- this.logger.warn(`Failed to get operationType using one of the endpoints`);
71
64
  lastError = error;
72
65
  }
73
66
  }
74
- this.logger.error('All endpoints failed to get operation type');
75
- throw (0, errors_1.allEndpointsFailedError)(lastError);
67
+ throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
76
68
  };
77
- return waitOptions
78
- ? await (0, Utils_1.waitUntilSuccess)(waitOptions, requestFn, 'OperationTracker: Getting operation type')
79
- : await requestFn();
69
+ return waitOptions === null
70
+ ? await requestFn()
71
+ : await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation type for ${(0, Utils_1.formatObjectForLogging)(operationId)}`);
80
72
  }
81
73
  async getOperationId(transactionLinker, waitOptions) {
82
- this.logger.debug(`Getting operation ID for transaction linker: ${(0, Utils_1.formatObjectForLogging)(transactionLinker)}`);
83
74
  const requestFn = async () => {
84
75
  let lastError;
85
76
  for (const client of this.clients) {
86
77
  try {
87
78
  const id = await client.getOperationId(transactionLinker);
88
- this.logger.debug(`Operation ID ${id == '' ? 'does not exist' : 'retrieved successfully'}`);
89
79
  return id;
90
80
  }
91
81
  catch (error) {
92
- this.logger.warn(`Failed to get OperationId using one of the endpoints`);
93
82
  lastError = error;
94
83
  }
95
84
  }
96
- this.logger.error('All endpoints failed to get operation id');
97
- throw (0, errors_1.allEndpointsFailedError)(lastError);
85
+ throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
98
86
  };
99
- return waitOptions
100
- ? await (0, Utils_1.waitUntilSuccess)(waitOptions, requestFn, 'OperationTracker: Getting operation ID by transaction linker')
101
- : await requestFn();
87
+ return waitOptions === null
88
+ ? await requestFn()
89
+ : await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation ID by transaction linker ${(0, Utils_1.formatObjectForLogging)(transactionLinker)}`);
102
90
  }
103
91
  async getOperationIdsByShardsKeys(shardsKeys, caller, waitOptions, chunkSize = 100) {
104
- this.logger.debug(`Getting operation IDs for shards keys: ${(0, Utils_1.formatObjectForLogging)(shardsKeys)}`);
105
- this.logger.debug(`Caller: ${caller}, Chunk size: ${chunkSize}`);
106
92
  const requestFn = async () => {
107
93
  let lastError;
108
94
  for (const client of this.clients) {
109
95
  try {
110
96
  const result = await client.getOperationIdsByShardsKeys(shardsKeys, caller, chunkSize);
111
- this.logger.debug(`Operation IDs by shards keys retrieved successfully`);
112
97
  return result;
113
98
  }
114
99
  catch (error) {
115
- this.logger.warn(`Failed to get OperationIds using one of the endpoints`);
116
100
  lastError = error;
117
101
  }
118
102
  }
119
- this.logger.error('All endpoints failed to get operation ids by shards keys');
120
- throw (0, errors_1.allEndpointsFailedError)(lastError);
103
+ throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
121
104
  };
122
- return waitOptions
123
- ? await (0, Utils_1.waitUntilSuccess)(waitOptions, requestFn, 'OperationTracker: Getting operation IDs by shards keys')
124
- : await requestFn();
105
+ return waitOptions === null
106
+ ? await requestFn()
107
+ : await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation IDs by shards keys ${(0, Utils_1.formatObjectForLogging)(shardsKeys)} caller=${caller} chunkSize=${chunkSize}`);
125
108
  }
126
109
  async getStageProfiling(operationId, waitOptions) {
127
- this.logger.debug(`Getting stage profiling for operation ${operationId}`);
128
110
  const requestFn = async () => {
129
111
  let lastError;
130
112
  for (const client of this.clients) {
@@ -132,72 +114,57 @@ class OperationTracker {
132
114
  const map = await client.getStageProfilings([operationId]);
133
115
  const result = map[operationId];
134
116
  if (!result) {
135
- this.logger.warn(`No stageProfiling data for operationId=${operationId}`);
136
117
  throw new Error(`No stageProfiling data for operationId=${operationId}`);
137
118
  }
138
- this.logger.debug(`Stage profiling retrieved successfully`);
139
119
  return result;
140
120
  }
141
121
  catch (error) {
142
- this.logger.warn(`Failed to get stage profiling using one of the endpoints`);
143
122
  lastError = error;
144
123
  }
145
124
  }
146
- this.logger.error('All endpoints failed to get stage profiling');
147
- throw (0, errors_1.allEndpointsFailedError)(lastError);
125
+ throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
148
126
  };
149
- return waitOptions
150
- ? await (0, Utils_1.waitUntilSuccess)(waitOptions, requestFn, 'OperationTracker: Getting stage profiling')
151
- : await requestFn();
127
+ return waitOptions === null
128
+ ? await requestFn()
129
+ : await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting stage profiling for operation ${operationId}`);
152
130
  }
153
131
  async getStageProfilings(operationIds, waitOptions, chunkSize = 100) {
154
- this.logger.debug(`Getting stage profilings for operations: ${operationIds.join(', ')}`);
155
- this.logger.debug(`Chunk size: ${chunkSize}`);
156
132
  const requestFn = async () => {
157
133
  let lastError;
158
134
  for (const client of this.clients) {
159
135
  try {
160
136
  const result = await client.getStageProfilings(operationIds, chunkSize);
161
- this.logger.debug(`Stage profilings retrieved successfully`);
162
137
  return result;
163
138
  }
164
139
  catch (error) {
165
- this.logger.warn(`Failed to get stage profilings using one of the endpoints`);
166
140
  lastError = error;
167
141
  }
168
142
  }
169
- this.logger.error('All endpoints failed to get stage profilings');
170
- throw (0, errors_1.allEndpointsFailedError)(lastError);
143
+ throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
171
144
  };
172
- return waitOptions
173
- ? await (0, Utils_1.waitUntilSuccess)(waitOptions, requestFn, 'OperationTracker: Getting stage profilings')
174
- : await requestFn();
145
+ return waitOptions === null
146
+ ? await requestFn()
147
+ : await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting stage profilings for operations: ${operationIds.join(', ')} chunkSize=${chunkSize}`);
175
148
  }
176
149
  async getOperationStatuses(operationIds, waitOptions, chunkSize = 100) {
177
- this.logger.debug(`Getting operation statuses for operations: ${(0, Utils_1.formatObjectForLogging)(operationIds)}`);
178
- this.logger.debug(`Chunk size: ${chunkSize}`);
179
150
  const requestFn = async () => {
180
151
  let lastError;
181
152
  for (const client of this.clients) {
182
153
  try {
183
154
  const result = await client.getOperationStatuses(operationIds, chunkSize);
184
- this.logger.debug(`Operation statuses retrieved successfully`);
185
155
  return result;
186
156
  }
187
157
  catch (error) {
188
- this.logger.warn(`Failed to get operation statuses using one of the endpoints`);
189
158
  lastError = error;
190
159
  }
191
160
  }
192
- this.logger.error('All endpoints failed to get operation statuses');
193
- throw (0, errors_1.allEndpointsFailedError)(lastError);
161
+ throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
194
162
  };
195
- return waitOptions
196
- ? await (0, Utils_1.waitUntilSuccess)(waitOptions, requestFn, 'OperationTracker: Getting operation statuses')
197
- : await requestFn();
163
+ return waitOptions === null
164
+ ? await requestFn()
165
+ : await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation statuses for operations: ${(0, Utils_1.formatObjectForLogging)(operationIds)} chunkSize=${chunkSize}`);
198
166
  }
199
167
  async getOperationStatus(operationId, waitOptions) {
200
- this.logger.debug(`Getting operation status for ${(0, Utils_1.formatObjectForLogging)(operationId)}`);
201
168
  const requestFn = async () => {
202
169
  let lastError;
203
170
  for (const client of this.clients) {
@@ -205,26 +172,23 @@ class OperationTracker {
205
172
  const map = await client.getOperationStatuses([operationId]);
206
173
  const result = map[operationId];
207
174
  if (!result) {
208
- this.logger.warn(`No operation status for operationId=${operationId}`);
209
175
  throw new Error(`No operation status for operationId=${operationId}`);
210
176
  }
211
- this.logger.debug(`Operation status retrieved successfully`);
212
177
  return result;
213
178
  }
214
179
  catch (error) {
215
- this.logger.warn(`Failed to get operation status using one of the endpoints`);
216
180
  lastError = error;
217
181
  }
218
182
  }
219
- this.logger.error('All endpoints failed to get operation status');
220
- throw (0, errors_1.allEndpointsFailedError)(lastError);
183
+ throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
221
184
  };
222
- return waitOptions
223
- ? await (0, Utils_1.waitUntilSuccess)(waitOptions, requestFn, 'OperationTracker: Getting operation status')
224
- : await requestFn();
185
+ const status = waitOptions === null
186
+ ? await requestFn()
187
+ : await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting operation status for ${(0, Utils_1.formatObjectForLogging)(operationId)}`);
188
+ this.logger.debug(`operation status resolved stage=${status.stage ?? 'unknown'} success=${String(status.success)}`);
189
+ return status;
225
190
  }
226
191
  async getSimplifiedOperationStatus(transactionLinker) {
227
- this.logger.debug(`Getting simplified operation status for transaction linker: ${(0, Utils_1.formatObjectForLogging)(transactionLinker)}`);
228
192
  const operationId = await this.getOperationId(transactionLinker);
229
193
  if (operationId == '') {
230
194
  this.logger.warn('Operation ID not found');
@@ -243,71 +207,59 @@ class OperationTracker {
243
207
  if (params.value <= 0n) {
244
208
  throw instances_1.convertCurrencyNegativeOrZeroValueError;
245
209
  }
246
- this.logger.debug(`Converting currency: ${(0, Utils_1.formatObjectForLogging)(params)}`);
247
210
  const requestFn = async () => {
248
211
  let lastError;
249
212
  for (const client of this.clients) {
250
213
  try {
251
214
  const result = await client.convertCurrency(params);
252
- this.logger.debug(`Conversion result retrieved successfully`);
253
215
  return result;
254
216
  }
255
217
  catch (error) {
256
- this.logger.warn(`Failed to convert currency using one of the endpoints`);
257
218
  lastError = error;
258
219
  }
259
220
  }
260
- this.logger.error('All endpoints failed to convert currency');
261
- throw (0, errors_1.allEndpointsFailedError)(lastError);
221
+ throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
262
222
  };
263
- return waitOptions
264
- ? await (0, Utils_1.waitUntilSuccess)(waitOptions, requestFn, 'OperationTracker: Converting currency')
265
- : await requestFn();
223
+ return waitOptions === null
224
+ ? await requestFn()
225
+ : await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Converting currency ${(0, Utils_1.formatObjectForLogging)(params)}`);
266
226
  }
267
227
  async simulateTACMessage(params, waitOptions) {
268
228
  Validator_1.Validator.validateTACSimulationParams(params);
269
- this.logger.debug(`Simulating TAC message: ${(0, Utils_1.formatObjectForLogging)(params)}`);
270
229
  const requestFn = async () => {
271
230
  let lastError;
272
231
  for (const client of this.clients) {
273
232
  try {
274
233
  const result = await client.simulateTACMessage(params);
275
- this.logger.debug(`Simulation result retrieved successfully`);
276
234
  return result;
277
235
  }
278
236
  catch (error) {
279
- this.logger.warn(`Failed to simulate TAC message using one of the endpoints`);
280
237
  lastError = error;
281
238
  }
282
239
  }
283
- this.logger.error('All endpoints failed to simulate TAC message');
284
- throw (0, errors_1.allEndpointsFailedError)(lastError);
240
+ throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
285
241
  };
286
- return waitOptions
287
- ? await (0, Utils_1.waitUntilSuccess)(waitOptions, requestFn, 'OperationTracker: Simulating TAC message')
288
- : await requestFn();
242
+ return waitOptions === null
243
+ ? await requestFn()
244
+ : await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Simulating TAC message ${(0, Utils_1.formatObjectForLogging)(params)}`);
289
245
  }
290
246
  async getTVMExecutorFee(params, waitOptions) {
291
- this.logger.debug(`get TVM executor fee: ${(0, Utils_1.formatObjectForLogging)(params)}`);
292
247
  const requestFn = async () => {
293
248
  let lastError;
294
249
  for (const client of this.clients) {
295
250
  try {
296
251
  const result = await client.getTVMExecutorFee(params);
297
- this.logger.debug(`Suggested TVM executor fee retrieved successfully`);
298
252
  return result;
299
253
  }
300
254
  catch (error) {
301
- this.logger.warn(`Failed to get TVM executor fee using one of the endpoints`);
302
255
  lastError = error;
303
256
  }
304
257
  }
305
- this.logger.error('All endpoints failed to get TVM executor fee');
306
- throw (0, errors_1.allEndpointsFailedError)(lastError);
258
+ throw (0, errors_1.allEndpointsFailedError)(lastError, waitOptions?.includeErrorTrace ?? false);
307
259
  };
308
- return waitOptions
309
- ? await (0, Utils_1.waitUntilSuccess)(waitOptions, requestFn, 'OperationTracker: Getting TVM executor fee')
310
- : await requestFn();
260
+ return waitOptions === null
261
+ ? await requestFn()
262
+ : await (0, Utils_1.waitUntilSuccess)({ logger: this.logger, ...waitOptions }, requestFn, `OperationTracker: Getting TVM executor fee ${(0, Utils_1.formatObjectForLogging)(params)}`);
311
263
  }
312
264
  }
313
265
  exports.OperationTracker = OperationTracker;
@@ -1,6 +1,6 @@
1
- import { IConfiguration, ILogger, IOperationTracker, ISimulator } from '../interfaces';
1
+ import { Asset, IConfiguration, ILogger, IOperationTracker, ISimulator } from '../interfaces';
2
2
  import type { SenderAbstraction } from '../sender';
3
- import { CrosschainTx, ExecutionFeeEstimationResult } from '../structs/Struct';
3
+ import { CrosschainTx, ExecutionFeeEstimationResult, GeneratePayloadParams } from '../structs/Struct';
4
4
  export declare class Simulator implements ISimulator {
5
5
  private readonly config;
6
6
  private readonly operationTracker;
@@ -8,4 +8,12 @@ export declare class Simulator implements ISimulator {
8
8
  constructor(config: IConfiguration, operationTracker: IOperationTracker, logger?: ILogger);
9
9
  getSimulationsInfo(sender: SenderAbstraction, txs: CrosschainTx[]): Promise<ExecutionFeeEstimationResult[]>;
10
10
  getSimulationInfo(sender: SenderAbstraction, tx: CrosschainTx): Promise<ExecutionFeeEstimationResult>;
11
+ private calculateTONFees;
12
+ private calculateTransactionPipeline;
13
+ private calculateTONCrosschainFee;
14
+ private calculateJettonTransferCrosschainFee;
15
+ private calculateJettonBurnCrosschainFee;
16
+ private calculateNftTransferCrosschainFee;
17
+ private calculateNftBurnCrosschainFee;
18
+ estimateTONFee(asset: Asset, params: GeneratePayloadParams): bigint;
11
19
  }
@@ -2,6 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Simulator = void 0;
4
4
  const ton_1 = require("@ton/ton");
5
+ const assets_1 = require("../assets");
6
+ const errors_1 = require("../errors");
7
+ const instances_1 = require("../errors/instances");
8
+ const Struct_1 = require("../structs/Struct");
9
+ const Fees_1 = require("./Fees");
5
10
  const Logger_1 = require("./Logger");
6
11
  const Utils_1 = require("./Utils");
7
12
  const Validator_1 = require("./Validator");
@@ -66,5 +71,102 @@ class Simulator {
66
71
  }
67
72
  return { feeParams, simulation };
68
73
  }
74
+ calculateTONFees({
75
+ // Contract usage
76
+ accountBits, accountCells, timeDelta,
77
+ // Message size
78
+ msgBits, msgCells,
79
+ // Gas and computation
80
+ gasUsed, accountBitPrice, accountCellPrice, lumpPrice, gasPrice, firstFrac, ihrPriceFactor, msgBitPrice, msgCellPrice, }) {
81
+ // Storage Fee (nanotons)
82
+ const storageFee = Math.ceil(((accountBits * accountBitPrice + accountCells * accountCellPrice) * timeDelta) / Fees_1.FIXED_POINT_SHIFT);
83
+ // Computation Fee (nanotons)
84
+ const computeFee = (gasUsed * gasPrice) / Fees_1.FIXED_POINT_SHIFT;
85
+ // Forwarding Fee (nanotons)
86
+ const msgFwdFees = lumpPrice + Math.ceil((msgBitPrice * msgBits + msgCellPrice * msgCells) / Fees_1.FIXED_POINT_SHIFT);
87
+ const ihrFwdFees = Math.ceil((msgFwdFees * ihrPriceFactor) / Fees_1.FIXED_POINT_SHIFT);
88
+ const totalFwdFees = msgFwdFees + ihrFwdFees;
89
+ // Action Fee (nanotons)
90
+ const actionFee = Math.floor((msgFwdFees * firstFrac) / Fees_1.FIXED_POINT_SHIFT);
91
+ // Combine all fees
92
+ const totalFees = storageFee + computeFee + actionFee + totalFwdFees;
93
+ return BigInt(Math.ceil(totalFees));
94
+ }
95
+ calculateTransactionPipeline(steps) {
96
+ return steps.reduce((total, step) => total + this.calculateTONFees({ ...step, ...this.config.TONParams.feesParams }), 0n);
97
+ }
98
+ calculateTONCrosschainFee(msgBits, msgCells) {
99
+ return this.calculateTransactionPipeline([
100
+ (0, Fees_1.createCrossChainLayerTvmMsgToEvmStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
101
+ ]);
102
+ }
103
+ calculateJettonTransferCrosschainFee(msgBits, msgCells) {
104
+ return this.calculateTransactionPipeline([
105
+ (0, Fees_1.createJettonWalletInternalTransferStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
106
+ (0, Fees_1.createJettonWalletReceiveStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
107
+ (0, Fees_1.createJettonProxyOwnershipAssignedStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
108
+ (0, Fees_1.createCrossChainLayerTvmMsgToEvmStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
109
+ (0, Fees_1.createErrorNotificationGasStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
110
+ (0, Fees_1.createEstimatedSendTransferGasStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
111
+ (0, Fees_1.createEstimatedReceiveTransferGasStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
112
+ ]);
113
+ }
114
+ calculateJettonBurnCrosschainFee(msgBits, msgCells) {
115
+ return this.calculateTransactionPipeline([
116
+ (0, Fees_1.createJettonWalletBurnStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
117
+ (0, Fees_1.createJettonMinterBurnNotificationStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
118
+ (0, Fees_1.createCrossChainLayerTvmMsgToEvmStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
119
+ (0, Fees_1.createMintAfterErrorGasStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
120
+ (0, Fees_1.createJettonWalletReceiveStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
121
+ ]);
122
+ }
123
+ calculateNftTransferCrosschainFee(msgBits, msgCells) {
124
+ return this.calculateTransactionPipeline([
125
+ (0, Fees_1.createNftItemSendStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
126
+ (0, Fees_1.createNftProxyOwnershipAssignedStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
127
+ (0, Fees_1.createCrossChainLayerTvmMsgToEvmStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
128
+ (0, Fees_1.createNftProxyErrorNotificationStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
129
+ (0, Fees_1.createNftItemSendStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
130
+ ]);
131
+ }
132
+ calculateNftBurnCrosschainFee(msgBits, msgCells) {
133
+ return this.calculateTransactionPipeline([
134
+ (0, Fees_1.createNftItemBurnStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
135
+ (0, Fees_1.createCrossChainLayerTvmMsgToEvmStep)(this.config.TONParams.contractFeeUsageParams, msgBits, msgCells),
136
+ (0, Fees_1.createNftItemErrorNotificationStep)(this.config.TONParams.contractFeeUsageParams),
137
+ ]);
138
+ }
139
+ estimateTONFee(asset, params) {
140
+ const payload = asset.generatePayload(params);
141
+ const { bits: msgBits, cells: msgCells } = (0, Utils_1.recurisivelyCollectCellStats)(payload);
142
+ switch (asset.type) {
143
+ case Struct_1.AssetType.FT:
144
+ if (asset instanceof assets_1.TON) {
145
+ // Pipeline: wallet -> ccl -> log
146
+ return this.calculateTONCrosschainFee(msgBits, msgCells);
147
+ }
148
+ if (asset.origin === Struct_1.Origin.TON) {
149
+ // Pipeline: wallet -> jetton wallet -> jetton wallet -> jetton proxy -> ccl -> log
150
+ return this.calculateJettonTransferCrosschainFee(msgBits, msgCells);
151
+ }
152
+ if (asset.origin === Struct_1.Origin.TAC) {
153
+ // Pipeline: wallet -> jetton wallet -> jetton minter -> ccl -> log
154
+ return this.calculateJettonBurnCrosschainFee(msgBits, msgCells);
155
+ }
156
+ throw (0, instances_1.unknownAssetOriginError)(asset.origin);
157
+ case Struct_1.AssetType.NFT:
158
+ if (asset.origin === Struct_1.Origin.TON) {
159
+ // Pipeline: wallet -> nft item -> nft proxy -> ccl -> log
160
+ return this.calculateNftTransferCrosschainFee(msgBits, msgCells);
161
+ }
162
+ if (asset.origin === Struct_1.Origin.TAC) {
163
+ // Pipeline: wallet -> nft item -> ccl -> log
164
+ return this.calculateNftBurnCrosschainFee(msgBits, msgCells);
165
+ }
166
+ throw (0, instances_1.unknownAssetOriginError)(asset.origin);
167
+ default:
168
+ throw (0, errors_1.unknownTokenTypeError)(asset.type);
169
+ }
170
+ }
69
171
  }
70
172
  exports.Simulator = Simulator;
@@ -1,21 +1,26 @@
1
- import { ILogger } from '../interfaces';
2
- import { TxFinalizerConfig } from '../structs/InternalStruct';
3
- import { ExecutionStages, Network, TransactionLinker } from '../structs/Struct';
4
- export declare function startTracking(transactionLinker: TransactionLinker, network: Network, options?: {
1
+ import { ContractOpener, ILogger } from '../interfaces';
2
+ import { ITxFinalizer } from '../interfaces/ITxFinalizer';
3
+ import { ExecutionStages, Network, TransactionLinkerWithOperationId } from '../structs/Struct';
4
+ export declare function startTracking(transactionLinker: TransactionLinkerWithOperationId, network: Network, options?: {
5
5
  customLiteSequencerEndpoints?: string[];
6
6
  delay?: number;
7
7
  maxIterationCount?: number;
8
8
  returnValue?: boolean;
9
9
  tableView?: boolean;
10
- txFinalizerConfig?: TxFinalizerConfig;
11
10
  logger?: ILogger;
11
+ txFinalizer?: ITxFinalizer;
12
+ contractOpener?: ContractOpener;
13
+ cclAddress?: string;
12
14
  }): Promise<void | ExecutionStages>;
13
- export declare function startTrackingMultiple(transactionLinkers: TransactionLinker[], network: Network, options?: {
15
+ export declare function startTrackingMultiple(transactionLinkers: TransactionLinkerWithOperationId[], network: Network, options?: {
14
16
  customLiteSequencerEndpoints?: string[];
15
17
  delay?: number;
16
18
  maxIterationCount?: number;
17
19
  returnValue?: boolean;
18
20
  tableView?: boolean;
19
- txFinalizerConfig?: TxFinalizerConfig;
20
21
  logger?: ILogger;
22
+ txFinalizer?: ITxFinalizer;
23
+ contractOpener?: ContractOpener;
24
+ cclAddress?: string;
21
25
  }): Promise<void | ExecutionStages[]>;
26
+ export declare function printExecutionStagesTable(stages: ExecutionStages, logger: ILogger): void;