@tonappchain/sdk 0.7.3-rc8 → 0.8.1-rc1

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 (98) hide show
  1. package/README.md +5 -0
  2. package/dist/artifacts/dev/tac/internal/artifacts/contracts/interfaces/ICrossChainLayer.sol/ICrossChainLayer.json +0 -7
  3. package/dist/artifacts/dev/tac/internal/artifacts/contracts/interfaces/ISettings.sol/ISettings.json +0 -7
  4. package/dist/artifacts/dev/tac/internal/artifacts/contracts/interfaces/ITokenUtils.sol/ITokenUtils.json +0 -7
  5. package/dist/artifacts/dev/tac/internal/artifacts/contracts/smart-account/interfaces/ISAFactory.sol/ISAFactory.json +0 -7
  6. package/dist/artifacts/dev/tac/internal/typechain-types/contracts/interfaces/ICrossChainLayer.d.ts +1 -5
  7. package/dist/artifacts/dev/tac/internal/typechain-types/contracts/interfaces/ISettings.d.ts +1 -5
  8. package/dist/artifacts/dev/tac/internal/typechain-types/contracts/interfaces/ITokenUtils.d.ts +1 -5
  9. package/dist/artifacts/dev/tac/internal/typechain-types/contracts/smart-account/interfaces/ISAFactory.d.ts +1 -5
  10. package/dist/artifacts/dev/ton/internal/build/Settings.compiled.json +1 -1
  11. package/dist/artifacts/dev/ton/internal/wrappers/Settings.d.ts +1 -0
  12. package/dist/artifacts/dev/ton/internal/wrappers/Settings.js +11 -7
  13. package/dist/artifacts/index.d.ts +5 -3
  14. package/dist/artifacts/index.js +6 -3
  15. package/dist/artifacts/mainnet/tac/internal/artifacts/contracts/interfaces/ICrossChainLayer.sol/ICrossChainLayer.json +0 -7
  16. package/dist/artifacts/mainnet/tac/internal/artifacts/contracts/interfaces/ISettings.sol/ISettings.json +0 -7
  17. package/dist/artifacts/mainnet/tac/internal/artifacts/contracts/interfaces/ITokenUtils.sol/ITokenUtils.json +0 -7
  18. package/dist/artifacts/mainnet/tac/internal/artifacts/contracts/smart-account/interfaces/ISAFactory.sol/ISAFactory.json +0 -7
  19. package/dist/artifacts/mainnet/tac/internal/typechain-types/contracts/interfaces/ICrossChainLayer.d.ts +1 -5
  20. package/dist/artifacts/mainnet/tac/internal/typechain-types/contracts/interfaces/ISettings.d.ts +1 -5
  21. package/dist/artifacts/mainnet/tac/internal/typechain-types/contracts/interfaces/ITokenUtils.d.ts +1 -5
  22. package/dist/artifacts/mainnet/tac/internal/typechain-types/contracts/smart-account/interfaces/ISAFactory.d.ts +1 -5
  23. package/dist/artifacts/mainnet/ton/internal/build/CrossChainLayer.compiled.json +1 -1
  24. package/dist/artifacts/mainnet/ton/internal/build/Executor.compiled.json +1 -1
  25. package/dist/artifacts/mainnet/ton/internal/build/JettonMinter.compiled.json +1 -1
  26. package/dist/artifacts/mainnet/ton/internal/build/JettonProxy.compiled.json +1 -1
  27. package/dist/artifacts/mainnet/ton/internal/build/JettonWallet.compiled.json +1 -1
  28. package/dist/artifacts/mainnet/ton/internal/build/NFTCollection.compiled.json +1 -1
  29. package/dist/artifacts/mainnet/ton/internal/build/NFTItem.compiled.json +1 -1
  30. package/dist/artifacts/mainnet/ton/internal/build/NFTProxy.compiled.json +1 -1
  31. package/dist/artifacts/mainnet/ton/internal/build/Settings.compiled.json +1 -1
  32. package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.d.ts +65 -6
  33. package/dist/artifacts/mainnet/ton/internal/wrappers/CrossChainLayer.js +169 -18
  34. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.d.ts +4 -2
  35. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonMinter.js +5 -3
  36. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonProxy.d.ts +9 -0
  37. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonProxy.js +11 -2
  38. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonWallet.d.ts +7 -0
  39. package/dist/artifacts/mainnet/ton/internal/wrappers/JettonWallet.js +9 -2
  40. package/dist/artifacts/mainnet/ton/internal/wrappers/NFTCollection.d.ts +11 -1
  41. package/dist/artifacts/mainnet/ton/internal/wrappers/NFTCollection.js +17 -5
  42. package/dist/artifacts/mainnet/ton/internal/wrappers/NFTItem.d.ts +9 -1
  43. package/dist/artifacts/mainnet/ton/internal/wrappers/NFTItem.js +15 -5
  44. package/dist/artifacts/mainnet/ton/internal/wrappers/NFTProxy.d.ts +9 -1
  45. package/dist/artifacts/mainnet/ton/internal/wrappers/NFTProxy.js +16 -6
  46. package/dist/artifacts/mainnet/ton/internal/wrappers/Settings.d.ts +2 -0
  47. package/dist/artifacts/mainnet/ton/internal/wrappers/Settings.js +11 -6
  48. package/dist/artifacts/mainnet/ton/internal/wrappers/utils/CrossChainLayerPayload.d.ts +10 -0
  49. package/dist/artifacts/mainnet/ton/internal/wrappers/utils/CrossChainLayerPayload.js +24 -0
  50. package/dist/artifacts/mainnet/ton/internal/wrappers/utils/MerkleRoots.d.ts +2 -1
  51. package/dist/artifacts/mainnet/ton/internal/wrappers/utils/MerkleRoots.js +9 -1
  52. package/dist/artifacts/testnet/tac/internal/artifacts/contracts/interfaces/ICrossChainLayer.sol/ICrossChainLayer.json +0 -7
  53. package/dist/artifacts/testnet/tac/internal/artifacts/contracts/interfaces/ISettings.sol/ISettings.json +0 -7
  54. package/dist/artifacts/testnet/tac/internal/artifacts/contracts/interfaces/ITokenUtils.sol/ITokenUtils.json +0 -7
  55. package/dist/artifacts/testnet/tac/internal/artifacts/contracts/smart-account/interfaces/ISAFactory.sol/ISAFactory.json +0 -7
  56. package/dist/artifacts/testnet/tac/internal/typechain-types/contracts/interfaces/ICrossChainLayer.d.ts +1 -5
  57. package/dist/artifacts/testnet/tac/internal/typechain-types/contracts/interfaces/ISettings.d.ts +1 -5
  58. package/dist/artifacts/testnet/tac/internal/typechain-types/contracts/interfaces/ITokenUtils.d.ts +1 -5
  59. package/dist/artifacts/testnet/tac/internal/typechain-types/contracts/smart-account/interfaces/ISAFactory.d.ts +1 -5
  60. package/dist/artifacts/testnet/ton/internal/build/Settings.compiled.json +1 -1
  61. package/dist/artifacts/testnet/ton/internal/wrappers/Settings.d.ts +1 -0
  62. package/dist/artifacts/testnet/ton/internal/wrappers/Settings.js +11 -7
  63. package/dist/src/adapters/RetryableContractOpener.js +5 -2
  64. package/dist/src/adapters/ToncenterV3Indexer.js +1 -1
  65. package/dist/src/assets/AssetCache.d.ts +4 -4
  66. package/dist/src/assets/AssetCache.js +11 -6
  67. package/dist/src/assets/AssetFactory.js +2 -2
  68. package/dist/src/errors/index.d.ts +1 -1
  69. package/dist/src/errors/index.js +2 -1
  70. package/dist/src/errors/instances.d.ts +1 -0
  71. package/dist/src/errors/instances.js +3 -1
  72. package/dist/src/index.d.ts +1 -0
  73. package/dist/src/index.js +3 -1
  74. package/dist/src/interfaces/IConfiguration.d.ts +2 -2
  75. package/dist/src/interfaces/ITonConnectUI.d.ts +21 -0
  76. package/dist/src/interfaces/ITonConnectUI.js +2 -0
  77. package/dist/src/interfaces/index.d.ts +1 -0
  78. package/dist/src/interfaces/index.js +1 -0
  79. package/dist/src/sdk/Artifacts.d.ts +3 -0
  80. package/dist/src/sdk/Artifacts.js +17 -0
  81. package/dist/src/sdk/Configuration.d.ts +4 -4
  82. package/dist/src/sdk/Configuration.js +3 -3
  83. package/dist/src/sdk/Consts.d.ts +2 -1
  84. package/dist/src/sdk/Consts.js +4 -3
  85. package/dist/src/sdk/LiteSequencerClient.js +2 -1
  86. package/dist/src/sdk/StartTracking.js +2 -2
  87. package/dist/src/sdk/TACTransactionManager.js +5 -5
  88. package/dist/src/sdk/TONTransactionManager.js +23 -21
  89. package/dist/src/sdk/TacExplorerClient.js +4 -3
  90. package/dist/src/sdk/TacSdk.js +2 -15
  91. package/dist/src/sdk/TxFinalizer.js +1 -1
  92. package/dist/src/sdk/Utils.js +37 -4
  93. package/dist/src/sender/SenderFactory.d.ts +2 -3
  94. package/dist/src/sender/SenderFactory.js +2 -1
  95. package/dist/src/sender/TonConnectSender.d.ts +3 -4
  96. package/dist/src/sender/TonConnectSender.js +8 -6
  97. package/dist/src/structs/Struct.d.ts +4 -4
  98. package/package.json +8 -3
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TacSdk = void 0;
4
- const artifacts_1 = require("../../artifacts");
5
4
  const assets_1 = require("../assets");
6
5
  const Struct_1 = require("../structs/Struct");
6
+ const Artifacts_1 = require("./Artifacts");
7
7
  const Configuration_1 = require("./Configuration");
8
8
  const Consts_1 = require("./Consts");
9
9
  const Logger_1 = require("./Logger");
@@ -27,20 +27,7 @@ class TacSdk {
27
27
  const network = sdkParams.network;
28
28
  const delay = sdkParams.delay ?? Consts_1.DEFAULT_DELAY;
29
29
  const passLoggerToOpeners = sdkParams.passLoggerToOpeners ?? true;
30
- let artifacts;
31
- switch (network) {
32
- case Struct_1.Network.MAINNET:
33
- artifacts = artifacts_1.mainnet;
34
- break;
35
- case Struct_1.Network.TESTNET:
36
- artifacts = artifacts_1.testnet;
37
- break;
38
- case Struct_1.Network.DEV:
39
- artifacts = artifacts_1.dev;
40
- break;
41
- default:
42
- throw new Error(`Unsupported network: ${network}`);
43
- }
30
+ const artifacts = (0, Artifacts_1.getArtifacts)(network);
44
31
  const config = await Configuration_1.Configuration.create(network, artifacts, sdkParams.TONParams, sdkParams.TACParams, sdkParams.customLiteSequencerEndpoints, delay, logger, passLoggerToOpeners);
45
32
  const operationTracker = new OperationTracker_1.OperationTracker(config, logger);
46
33
  const explorerClient = new TacExplorerClient_1.TacExplorerClient(artifacts.TAC_EXPLORER_API_ENDPOINT);
@@ -7,7 +7,7 @@ const Consts_1 = require("./Consts");
7
7
  const Logger_1 = require("./Logger");
8
8
  const Utils_1 = require("./Utils");
9
9
  class TonTxFinalizer {
10
- constructor(apiConfig, logger = new Logger_1.NoopLogger(), httpClient = new AxiosHttpClient_1.AxiosHttpClient()) {
10
+ constructor(apiConfig, logger = new Logger_1.NoopLogger(), httpClient = new AxiosHttpClient_1.AxiosHttpClient({ timeout: Consts_1.DEFAULT_HTTP_CLIENT_TIMEOUT_MS })) {
11
11
  this.apiConfig = apiConfig;
12
12
  this.logger = logger;
13
13
  this.httpClient = httpClient;
@@ -108,11 +108,44 @@ const convertKeysToCamelCase = (data) => {
108
108
  return data;
109
109
  };
110
110
  exports.convertKeysToCamelCase = convertKeysToCamelCase;
111
+ function formatFiniteNumber(amount) {
112
+ const amountString = amount.toString();
113
+ if (!amountString.includes('e')) {
114
+ return amountString;
115
+ }
116
+ const [coefficient, exponentString] = amountString.split('e');
117
+ const exponent = Number(exponentString);
118
+ const [integerPart, fractionalPart = ''] = coefficient.split('.');
119
+ const digits = integerPart + fractionalPart;
120
+ const decimalIndex = integerPart.length + exponent;
121
+ let expanded;
122
+ if (decimalIndex <= 0) {
123
+ expanded = `0.${'0'.repeat(-decimalIndex)}${digits}`;
124
+ }
125
+ else if (decimalIndex >= digits.length) {
126
+ expanded = `${digits}${'0'.repeat(decimalIndex - digits.length)}`;
127
+ }
128
+ else {
129
+ expanded = `${digits.slice(0, decimalIndex)}.${digits.slice(decimalIndex)}`;
130
+ }
131
+ return expanded;
132
+ }
111
133
  const calculateRawAmount = (amount, decimals) => {
112
- const [integerPart, fractionalPart = ''] = amount.toString().split('.');
113
- // Ensure the fractional part has enough digits
114
- const paddedFraction = fractionalPart.padEnd(decimals, '0').slice(0, decimals);
115
- return BigInt(integerPart + paddedFraction);
134
+ if (!Number.isFinite(amount)) {
135
+ throw (0, errors_1.invalidAmountError)('Amount must be finite');
136
+ }
137
+ if (amount < 0) {
138
+ throw (0, errors_1.invalidAmountError)('Amount must be non-negative');
139
+ }
140
+ if (!Number.isInteger(decimals) || decimals < 0) {
141
+ throw (0, errors_1.invalidAmountError)('Token decimals must be a non-negative integer');
142
+ }
143
+ const amountString = formatFiniteNumber(amount);
144
+ const [integerPart, fractionalPart = ''] = amountString.split('.');
145
+ if (fractionalPart.length > decimals) {
146
+ throw (0, errors_1.invalidAmountError)('Amount has more fractional digits than token decimals');
147
+ }
148
+ return BigInt(integerPart + fractionalPart.padEnd(decimals, '0'));
116
149
  };
117
150
  exports.calculateRawAmount = calculateRawAmount;
118
151
  const calculateAmount = (rawAmount, decimals) => {
@@ -1,6 +1,5 @@
1
1
  import { WalletContractV2R1, WalletContractV2R2, WalletContractV3R1, WalletContractV3R2, WalletContractV4, WalletContractV5R1 } from '@ton/ton';
2
- import { TonConnectUI } from '@tonconnect/ui';
3
- import { SenderAbstraction } from '../interfaces';
2
+ import { ITonConnectUI, SenderAbstraction } from '../interfaces';
4
3
  import { Network } from '../structs/Struct';
5
4
  import { HighloadWalletV3 } from '../wrappers/HighloadWalletV3';
6
5
  export type WalletVersion = 'V2R1' | 'V2R2' | 'V3R1' | 'V3R2' | 'V4' | 'V5R1' | 'HIGHLOAD_V3';
@@ -28,6 +27,6 @@ export declare class SenderFactory {
28
27
  };
29
28
  };
30
29
  } | {
31
- tonConnect: TonConnectUI;
30
+ tonConnect: ITonConnectUI;
32
31
  }): Promise<SenderAbstraction>;
33
32
  }
@@ -4,6 +4,7 @@ exports.SenderFactory = exports.wallets = void 0;
4
4
  const ton_1 = require("@ton/ton");
5
5
  const ton_crypto_1 = require("ton-crypto");
6
6
  const errors_1 = require("../errors");
7
+ const Consts_1 = require("../sdk/Consts");
7
8
  const Struct_1 = require("../structs/Struct");
8
9
  const HighloadWalletV3_1 = require("../wrappers/HighloadWalletV3");
9
10
  const BatchSender_1 = require("./BatchSender");
@@ -38,7 +39,7 @@ class SenderFactory {
38
39
  if (params.version === 'V5R1') {
39
40
  // manual setup of wallet id required to support wallet w5 both on mainnet and testnet
40
41
  config.walletId = {
41
- networkGlobalId: params.network === Struct_1.Network.MAINNET ? -239 : -3,
42
+ networkGlobalId: params.network === Struct_1.Network.MAINNET ? Consts_1.TON_MAINNET_GLOBAL_ID : Consts_1.TON_TESTNET_GLOBAL_ID,
42
43
  context: {
43
44
  walletVersion: 'v5r1',
44
45
  workchain: 0,
@@ -1,10 +1,9 @@
1
- import { TonConnectUI } from '@tonconnect/ui';
2
- import { Asset, ContractOpener, SenderAbstraction } from '../interfaces';
1
+ import { Asset, ContractOpener, ITonConnectUI, SenderAbstraction } from '../interfaces';
3
2
  import type { SendResult, ShardTransaction } from '../structs/InternalStruct';
4
3
  import { Network } from '../structs/Struct';
5
4
  export declare class TonConnectSender implements SenderAbstraction {
6
- readonly tonConnect: TonConnectUI;
7
- constructor(tonConnect: TonConnectUI);
5
+ readonly tonConnect: ITonConnectUI;
6
+ constructor(tonConnect: ITonConnectUI);
8
7
  getBalanceOf(asset: Asset): Promise<bigint>;
9
8
  getBalance(contractOpener: ContractOpener): Promise<bigint>;
10
9
  private sendChunkedMessages;
@@ -2,8 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TonConnectSender = void 0;
4
4
  const ton_1 = require("@ton/ton");
5
- const protocol_1 = require("@tonconnect/protocol");
6
- const ui_1 = require("@tonconnect/ui");
5
+ const Consts_1 = require("../sdk/Consts");
7
6
  const Utils_1 = require("../sdk/Utils");
8
7
  const Struct_1 = require("../structs/Struct");
9
8
  const CHUNK_SIZE = 4;
@@ -22,13 +21,16 @@ class TonConnectSender {
22
21
  async sendChunkedMessages(messages, validUntil, chain) {
23
22
  const responses = [];
24
23
  let currentMessageIndex = 0;
25
- const chunkSize = this.tonConnect.wallet?.device.features.find((feat) => Object.prototype.hasOwnProperty.call(feat, 'maxMessages'))?.maxMessages || CHUNK_SIZE;
24
+ const chunkSize = this.tonConnect.wallet?.device.features.find((feature) => typeof feature === 'object' &&
25
+ feature !== null &&
26
+ 'maxMessages' in feature &&
27
+ typeof feature.maxMessages === 'number')?.maxMessages || CHUNK_SIZE;
26
28
  for (let i = 0; i < messages.length; i += chunkSize) {
27
29
  const chunk = messages.slice(i, i + chunkSize);
28
30
  const transaction = {
29
31
  validUntil,
30
32
  messages: chunk,
31
- network: chain == Struct_1.Network.MAINNET ? ui_1.CHAIN.MAINNET : ui_1.CHAIN.TESTNET,
33
+ network: (chain === Struct_1.Network.MAINNET ? Consts_1.TON_MAINNET_GLOBAL_ID : Consts_1.TON_TESTNET_GLOBAL_ID).toString(),
32
34
  };
33
35
  try {
34
36
  const response = await this.tonConnect.sendTransaction(transaction);
@@ -63,7 +65,7 @@ class TonConnectSender {
63
65
  allMessages.push({
64
66
  address: message.address,
65
67
  amount: message.value.toString(),
66
- payload: protocol_1.Base64.encode(message.payload.toBoc()).toString(),
68
+ payload: message.payload.toBoc().toString('base64'),
67
69
  });
68
70
  }
69
71
  minValidUntil = Math.min(minValidUntil, transaction.validUntil);
@@ -79,7 +81,7 @@ class TonConnectSender {
79
81
  messages.push({
80
82
  address: message.address,
81
83
  amount: message.value.toString(),
82
- payload: protocol_1.Base64.encode(message.payload.toBoc()).toString(),
84
+ payload: message.payload.toBoc().toString('base64'),
83
85
  });
84
86
  }
85
87
  const responses = await this.sendChunkedMessages(messages, shardTransaction.validUntil, chain);
@@ -468,7 +468,7 @@ export type CrossChainTransactionOptions = {
468
468
  * Retry policy used while resolving the operation ID.
469
469
  * Use this to control timeout, attempts, delay, logger, callbacks, and success criteria.
470
470
  */
471
- waitOptions?: WaitOptions<string>;
471
+ waitOperationIdOptions?: WaitOptions<string>;
472
472
  /**
473
473
  * If true, waits for full cross-chain finalization after the operation ID is known:
474
474
  * the SDK waits for a final operation type, fetches stage profiling, and validates
@@ -489,10 +489,10 @@ export type CrossChainTransactionOptions = {
489
489
  */
490
490
  evmDataBuilder?: evmDataBuilder;
491
491
  };
492
- export type BatchCrossChainTransactionOptions = Omit<CrossChainTransactionOptions, 'waitOperationId' | 'waitOptions' | 'ensureTxExecuted' | 'waitFinalization' | 'finalizationWaitOptions'>;
492
+ export type BatchCrossChainTransactionOptions = Omit<CrossChainTransactionOptions, 'waitOperationId' | 'waitOperationIdOptions' | 'ensureTxExecuted' | 'waitFinalization' | 'finalizationWaitOptions'>;
493
493
  export type CrossChainTransactionsOptions = {
494
494
  waitOperationIds?: boolean;
495
- waitOptions?: WaitOptions<OperationIdsByShardsKey>;
495
+ waitOperationIdOptions?: WaitOptions<OperationIdsByShardsKey>;
496
496
  };
497
497
  export type CrossChainTransactionToTONOptions = {
498
498
  /**
@@ -522,7 +522,7 @@ export type CrossChainTransactionToTONOptions = {
522
522
  * Retry policy used while resolving the operation ID.
523
523
  * Use this to control timeout, attempts, delay, logger, callbacks, and success criteria.
524
524
  */
525
- waitOptions?: WaitOptions<string>;
525
+ waitOperationIdOptions?: WaitOptions<string>;
526
526
  /**
527
527
  * Wait options used to finalize the cross-chain operation after operationId resolution.
528
528
  * Use this to configure retries, delay, logger, successCheck, and onSuccess callback
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonappchain/sdk",
3
- "version": "0.7.3-rc8",
3
+ "version": "0.8.1-rc1",
4
4
  "repository": "https://github.com/TacBuild/tac-sdk.git",
5
5
  "author": "TAC. <developers@tac>",
6
6
  "license": "MIT",
@@ -78,10 +78,15 @@
78
78
  },
79
79
  "peerDependencies": {
80
80
  "@ton/ton": ">=15",
81
- "@tonconnect/ui": ">=2",
81
+ "@tonconnect/ui": ">=3",
82
82
  "ethers": ">=6",
83
83
  "ton-crypto": ">=3"
84
84
  },
85
+ "peerDependenciesMeta": {
86
+ "@tonconnect/ui": {
87
+ "optional": true
88
+ }
89
+ },
85
90
  "keywords": [],
86
91
  "description": "",
87
92
  "devDependencies": {
@@ -91,7 +96,7 @@
91
96
  "@ton/sandbox": "^0.27.1",
92
97
  "@ton/test-utils": "^0.5.0",
93
98
  "@ton/ton": "16.2.2",
94
- "@tonconnect/ui": "^2.0.11",
99
+ "@tonconnect/ui": "^3.0.0",
95
100
  "@types/bn.js": "^5.1.6",
96
101
  "@types/jest": "^29.5.14",
97
102
  "eslint": "^9.26.0",