@dynamic-labs-sdk/ton 0.0.0 → 0.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/README.md +16 -0
  2. package/dist/TonNetworkProvider.types.d.ts +8 -0
  3. package/dist/TonNetworkProvider.types.d.ts.map +1 -0
  4. package/dist/TonWalletAccount.types.d.ts +8 -0
  5. package/dist/TonWalletAccount.types.d.ts.map +1 -0
  6. package/dist/TonWalletProvider.types.d.ts +23 -0
  7. package/dist/TonWalletProvider.types.d.ts.map +1 -0
  8. package/dist/addTonExtension/addTonExtension.d.ts +13 -0
  9. package/dist/addTonExtension/addTonExtension.d.ts.map +1 -0
  10. package/dist/addTonExtension/index.d.ts +2 -0
  11. package/dist/addTonExtension/index.d.ts.map +1 -0
  12. package/dist/addWaasTonExtension-B8tYiMfm.esm.js +664 -0
  13. package/dist/addWaasTonExtension-B8tYiMfm.esm.js.map +1 -0
  14. package/dist/addWaasTonExtension-Dzrb4rja.cjs.js +717 -0
  15. package/dist/addWaasTonExtension-Dzrb4rja.cjs.js.map +1 -0
  16. package/dist/errors/InvalidBocError.d.ts +10 -0
  17. package/dist/errors/InvalidBocError.d.ts.map +1 -0
  18. package/dist/errors/InvalidSignatureLengthError.d.ts +10 -0
  19. package/dist/errors/InvalidSignatureLengthError.d.ts.map +1 -0
  20. package/dist/errors/NotTonProviderError.d.ts +8 -0
  21. package/dist/errors/NotTonProviderError.d.ts.map +1 -0
  22. package/dist/errors/PublicKeyNotFoundError.d.ts +5 -0
  23. package/dist/errors/PublicKeyNotFoundError.d.ts.map +1 -0
  24. package/dist/errors/TransactionExecutionFailedError.d.ts +5 -0
  25. package/dist/errors/TransactionExecutionFailedError.d.ts.map +1 -0
  26. package/dist/exports/index.d.ts +14 -0
  27. package/dist/exports/index.d.ts.map +1 -0
  28. package/dist/exports/waas.d.ts +5 -0
  29. package/dist/exports/waas.d.ts.map +1 -0
  30. package/dist/index.cjs.js +100 -0
  31. package/dist/index.cjs.js.map +1 -0
  32. package/dist/index.esm.js +92 -0
  33. package/dist/index.esm.js.map +1 -0
  34. package/dist/isTonNetworkProvider/index.d.ts +2 -0
  35. package/dist/isTonNetworkProvider/index.d.ts.map +1 -0
  36. package/dist/isTonNetworkProvider/isTonNetworkProvider.d.ts +11 -0
  37. package/dist/isTonNetworkProvider/isTonNetworkProvider.d.ts.map +1 -0
  38. package/dist/isTonWalletAccount/index.d.ts +2 -0
  39. package/dist/isTonWalletAccount/index.d.ts.map +1 -0
  40. package/dist/isTonWalletAccount/isTonWalletAccount.d.ts +11 -0
  41. package/dist/isTonWalletAccount/isTonWalletAccount.d.ts.map +1 -0
  42. package/dist/isTonWalletProvider/index.d.ts +2 -0
  43. package/dist/isTonWalletProvider/index.d.ts.map +1 -0
  44. package/dist/isTonWalletProvider/isTonWalletProvider.d.ts +11 -0
  45. package/dist/isTonWalletProvider/isTonWalletProvider.d.ts.map +1 -0
  46. package/dist/registerTonNetworkProviderBuilder/index.d.ts +2 -0
  47. package/dist/registerTonNetworkProviderBuilder/index.d.ts.map +1 -0
  48. package/dist/registerTonNetworkProviderBuilder/registerTonNetworkProviderBuilder.d.ts +4 -0
  49. package/dist/registerTonNetworkProviderBuilder/registerTonNetworkProviderBuilder.d.ts.map +1 -0
  50. package/dist/sendJetton/index.d.ts +2 -0
  51. package/dist/sendJetton/index.d.ts.map +1 -0
  52. package/dist/sendJetton/sendJetton.d.ts +19 -0
  53. package/dist/sendJetton/sendJetton.d.ts.map +1 -0
  54. package/dist/sendTon/index.d.ts +2 -0
  55. package/dist/sendTon/index.d.ts.map +1 -0
  56. package/dist/sendTon/sendTon.d.ts +19 -0
  57. package/dist/sendTon/sendTon.d.ts.map +1 -0
  58. package/dist/ton.types.d.ts +48 -0
  59. package/dist/ton.types.d.ts.map +1 -0
  60. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  61. package/dist/utils/constants.d.ts +6 -0
  62. package/dist/utils/constants.d.ts.map +1 -0
  63. package/dist/utils/convertTonSendTransactionRequest/convertTonSendTransactionRequest.d.ts +5 -0
  64. package/dist/utils/convertTonSendTransactionRequest/convertTonSendTransactionRequest.d.ts.map +1 -0
  65. package/dist/utils/convertTonSendTransactionRequest/createInternalMessage/createInternalMessage.d.ts +28 -0
  66. package/dist/utils/convertTonSendTransactionRequest/createInternalMessage/createInternalMessage.d.ts.map +1 -0
  67. package/dist/utils/convertTonSendTransactionRequest/createInternalMessage/index.d.ts +2 -0
  68. package/dist/utils/convertTonSendTransactionRequest/createInternalMessage/index.d.ts.map +1 -0
  69. package/dist/utils/convertTonSendTransactionRequest/createSendMsgAction/createSendMsgAction.d.ts +5 -0
  70. package/dist/utils/convertTonSendTransactionRequest/createSendMsgAction/createSendMsgAction.d.ts.map +1 -0
  71. package/dist/utils/convertTonSendTransactionRequest/createSendMsgAction/index.d.ts +2 -0
  72. package/dist/utils/convertTonSendTransactionRequest/createSendMsgAction/index.d.ts.map +1 -0
  73. package/dist/utils/convertTonSendTransactionRequest/determineBounceFlag/determineBounceFlag.d.ts +3 -0
  74. package/dist/utils/convertTonSendTransactionRequest/determineBounceFlag/determineBounceFlag.d.ts.map +1 -0
  75. package/dist/utils/convertTonSendTransactionRequest/determineBounceFlag/index.d.ts +2 -0
  76. package/dist/utils/convertTonSendTransactionRequest/determineBounceFlag/index.d.ts.map +1 -0
  77. package/dist/utils/convertTonSendTransactionRequest/index.d.ts +2 -0
  78. package/dist/utils/convertTonSendTransactionRequest/index.d.ts.map +1 -0
  79. package/dist/utils/convertTonSendTransactionRequest/parsePayload/index.d.ts +2 -0
  80. package/dist/utils/convertTonSendTransactionRequest/parsePayload/index.d.ts.map +1 -0
  81. package/dist/utils/convertTonSendTransactionRequest/parsePayload/parsePayload.d.ts +4 -0
  82. package/dist/utils/convertTonSendTransactionRequest/parsePayload/parsePayload.d.ts.map +1 -0
  83. package/dist/utils/convertTonSendTransactionRequest/parseStateInit/index.d.ts +2 -0
  84. package/dist/utils/convertTonSendTransactionRequest/parseStateInit/index.d.ts.map +1 -0
  85. package/dist/utils/convertTonSendTransactionRequest/parseStateInit/parseStateInit.d.ts +7 -0
  86. package/dist/utils/convertTonSendTransactionRequest/parseStateInit/parseStateInit.d.ts.map +1 -0
  87. package/dist/utils/createTonClient/createTonClient.d.ts +8 -0
  88. package/dist/utils/createTonClient/createTonClient.d.ts.map +1 -0
  89. package/dist/utils/createTonClient/index.d.ts +2 -0
  90. package/dist/utils/createTonClient/index.d.ts.map +1 -0
  91. package/dist/utils/createTonNetworkProvider/createTonNetworkProvider.d.ts +5 -0
  92. package/dist/utils/createTonNetworkProvider/createTonNetworkProvider.d.ts.map +1 -0
  93. package/dist/utils/createTonNetworkProvider/index.d.ts +2 -0
  94. package/dist/utils/createTonNetworkProvider/index.d.ts.map +1 -0
  95. package/dist/utils/createTonWalletStateInit/createTonWalletStateInit.d.ts +9 -0
  96. package/dist/utils/createTonWalletStateInit/createTonWalletStateInit.d.ts.map +1 -0
  97. package/dist/utils/createTonWalletStateInit/index.d.ts +2 -0
  98. package/dist/utils/createTonWalletStateInit/index.d.ts.map +1 -0
  99. package/dist/utils/executeTonTransaction/executeTonTransaction.d.ts +15 -0
  100. package/dist/utils/executeTonTransaction/executeTonTransaction.d.ts.map +1 -0
  101. package/dist/utils/executeTonTransaction/index.d.ts +2 -0
  102. package/dist/utils/executeTonTransaction/index.d.ts.map +1 -0
  103. package/dist/utils/fetchTonBalance/fetchTonBalance.d.ts +9 -0
  104. package/dist/utils/fetchTonBalance/fetchTonBalance.d.ts.map +1 -0
  105. package/dist/utils/fetchTonBalance/index.d.ts +2 -0
  106. package/dist/utils/fetchTonBalance/index.d.ts.map +1 -0
  107. package/dist/utils/generateTonConnectProofHash/generateTonConnectProofHash.d.ts +11 -0
  108. package/dist/utils/generateTonConnectProofHash/generateTonConnectProofHash.d.ts.map +1 -0
  109. package/dist/utils/generateTonConnectProofHash/generateTonConnectProofMessage/generateTonConnectProofMessage.d.ts +11 -0
  110. package/dist/utils/generateTonConnectProofHash/generateTonConnectProofMessage/generateTonConnectProofMessage.d.ts.map +1 -0
  111. package/dist/utils/generateTonConnectProofHash/generateTonConnectProofMessage/index.d.ts +2 -0
  112. package/dist/utils/generateTonConnectProofHash/generateTonConnectProofMessage/index.d.ts.map +1 -0
  113. package/dist/utils/generateTonConnectProofHash/index.d.ts +2 -0
  114. package/dist/utils/generateTonConnectProofHash/index.d.ts.map +1 -0
  115. package/dist/utils/getJettonWalletAddress/getJettonWalletAddress.d.ts +10 -0
  116. package/dist/utils/getJettonWalletAddress/getJettonWalletAddress.d.ts.map +1 -0
  117. package/dist/utils/getJettonWalletAddress/index.d.ts +2 -0
  118. package/dist/utils/getJettonWalletAddress/index.d.ts.map +1 -0
  119. package/dist/utils/getTonWalletSeqno/getTonWalletSeqno.d.ts +9 -0
  120. package/dist/utils/getTonWalletSeqno/getTonWalletSeqno.d.ts.map +1 -0
  121. package/dist/utils/getTonWalletSeqno/index.d.ts +2 -0
  122. package/dist/utils/getTonWalletSeqno/index.d.ts.map +1 -0
  123. package/dist/utils/isTonWalletDeployed/index.d.ts +2 -0
  124. package/dist/utils/isTonWalletDeployed/index.d.ts.map +1 -0
  125. package/dist/utils/isTonWalletDeployed/isTonWalletDeployed.d.ts +9 -0
  126. package/dist/utils/isTonWalletDeployed/isTonWalletDeployed.d.ts.map +1 -0
  127. package/dist/utils/prepareJettonTransfer/index.d.ts +2 -0
  128. package/dist/utils/prepareJettonTransfer/index.d.ts.map +1 -0
  129. package/dist/utils/prepareJettonTransfer/prepareJettonTransfer.d.ts +19 -0
  130. package/dist/utils/prepareJettonTransfer/prepareJettonTransfer.d.ts.map +1 -0
  131. package/dist/utils/prepareTonNativeTransfer/index.d.ts +2 -0
  132. package/dist/utils/prepareTonNativeTransfer/index.d.ts.map +1 -0
  133. package/dist/utils/prepareTonNativeTransfer/prepareTonNativeTransfer.d.ts +13 -0
  134. package/dist/utils/prepareTonNativeTransfer/prepareTonNativeTransfer.d.ts.map +1 -0
  135. package/dist/utils/prepareTonTransaction/index.d.ts +2 -0
  136. package/dist/utils/prepareTonTransaction/index.d.ts.map +1 -0
  137. package/dist/utils/prepareTonTransaction/prepareTonTransaction.d.ts +20 -0
  138. package/dist/utils/prepareTonTransaction/prepareTonTransaction.d.ts.map +1 -0
  139. package/dist/utils/tonTransferAmount/index.d.ts +2 -0
  140. package/dist/utils/tonTransferAmount/index.d.ts.map +1 -0
  141. package/dist/utils/tonTransferAmount/tonTransferAmount.d.ts +7 -0
  142. package/dist/utils/tonTransferAmount/tonTransferAmount.d.ts.map +1 -0
  143. package/dist/waas/WaasTonWalletProvider.types.d.ts +4 -0
  144. package/dist/waas/WaasTonWalletProvider.types.d.ts.map +1 -0
  145. package/dist/waas/addWaasTonExtension/addWaasTonExtension.d.ts +12 -0
  146. package/dist/waas/addWaasTonExtension/addWaasTonExtension.d.ts.map +1 -0
  147. package/dist/waas/addWaasTonExtension/index.d.ts +2 -0
  148. package/dist/waas/addWaasTonExtension/index.d.ts.map +1 -0
  149. package/dist/waas/utils/createWalletProviderForWaasTon/createWalletProviderForWaasTon.d.ts +5 -0
  150. package/dist/waas/utils/createWalletProviderForWaasTon/createWalletProviderForWaasTon.d.ts.map +1 -0
  151. package/dist/waas/utils/createWalletProviderForWaasTon/index.d.ts +2 -0
  152. package/dist/waas/utils/createWalletProviderForWaasTon/index.d.ts.map +1 -0
  153. package/dist/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.d.ts +7 -0
  154. package/dist/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.d.ts.map +1 -0
  155. package/dist/waas.cjs.js +11 -0
  156. package/dist/waas.cjs.js.map +1 -0
  157. package/dist/waas.esm.js +9 -0
  158. package/dist/waas.esm.js.map +1 -0
  159. package/package.json +45 -1
@@ -0,0 +1,717 @@
1
+ let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
2
+ let _ton_ton = require("@ton/ton");
3
+ let _dynamic_labs_sdk_client_waas_core = require("@dynamic-labs-sdk/client/waas/core");
4
+ let _dynamic_labs_sdk_api_core = require("@dynamic-labs/sdk-api-core");
5
+ let _tonconnect_sdk = require("@tonconnect/sdk");
6
+ let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
7
+ let _ton_core = require("@ton/core");
8
+ let _ton_crypto = require("@ton/crypto");
9
+
10
+ //#region package.json
11
+ var name = "@dynamic-labs-sdk/ton";
12
+ var version = "0.22.1";
13
+
14
+ //#endregion
15
+ //#region src/utils/createTonClient/createTonClient.ts
16
+ /** @not-instrumented */
17
+ const createTonClient = ({ rpcUrl }) => new _ton_ton.TonClient({ endpoint: rpcUrl });
18
+
19
+ //#endregion
20
+ //#region src/utils/fetchTonBalance/fetchTonBalance.ts
21
+ /** @not-instrumented */
22
+ const fetchTonBalance = async ({ address, client }) => {
23
+ try {
24
+ return (0, _ton_ton.fromNano)(await client.getBalance(_ton_ton.Address.parse(address)));
25
+ } catch {
26
+ return null;
27
+ }
28
+ };
29
+
30
+ //#endregion
31
+ //#region src/utils/createTonNetworkProvider/createTonNetworkProvider.ts
32
+ /** @not-instrumented */
33
+ const createTonNetworkProvider = (networkData) => ({
34
+ ...(0, _dynamic_labs_sdk_client_core.createBaseNetworkProvider)("TON", networkData),
35
+ getBalance: async ({ address }) => ({ balance: await fetchTonBalance({
36
+ address,
37
+ client: createTonClient({ rpcUrl: networkData.rpcUrls.http[0] })
38
+ }) })
39
+ });
40
+
41
+ //#endregion
42
+ //#region src/registerTonNetworkProviderBuilder/registerTonNetworkProviderBuilder.ts
43
+ /** @not-instrumented */
44
+ const registerTonNetworkProviderBuilder = (client) => {
45
+ const networkProviderBuilderRegistry = (0, _dynamic_labs_sdk_client_core.getNetworkProviderBuilderRegistry)(client);
46
+ if (networkProviderBuilderRegistry.get().get("TON")) return;
47
+ networkProviderBuilderRegistry.register({
48
+ builder: createTonNetworkProvider,
49
+ chain: "TON"
50
+ });
51
+ };
52
+
53
+ //#endregion
54
+ //#region src/errors/TransactionExecutionFailedError.ts
55
+ var TransactionExecutionFailedError = class extends _dynamic_labs_sdk_client.BaseError {
56
+ constructor(message) {
57
+ super({
58
+ cause: null,
59
+ code: "transaction_execution_failed_error",
60
+ details: message,
61
+ docsUrl: null,
62
+ name: "TransactionExecutionFailedError",
63
+ shortMessage: "Failed to execute TON transaction"
64
+ });
65
+ }
66
+ };
67
+
68
+ //#endregion
69
+ //#region src/utils/constants.ts
70
+ const DEFAULT_TIMEOUT = 60;
71
+ const DEFAULT_JETTON_GAS = BigInt(5e7);
72
+ const NANOTON_PER_TON = BigInt(1e9);
73
+ const TON_PROOF_PREFIX = "ton-proof-item-v2/";
74
+ const TON_CONNECT_PREFIX = "ton-connect";
75
+
76
+ //#endregion
77
+ //#region src/utils/convertTonSendTransactionRequest/createInternalMessage/createInternalMessage.ts
78
+ /** @not-instrumented */
79
+ const createInternalMessage = (destAddr, amount, body, bounce, init) => ({
80
+ body,
81
+ info: {
82
+ bounce,
83
+ bounced: false,
84
+ createdAt: 0,
85
+ createdLt: BigInt(0),
86
+ dest: destAddr,
87
+ forwardFee: BigInt(0),
88
+ ihrDisabled: true,
89
+ ihrFee: BigInt(0),
90
+ src: null,
91
+ type: "internal",
92
+ value: { coins: amount }
93
+ },
94
+ ...init && { init }
95
+ });
96
+
97
+ //#endregion
98
+ //#region src/utils/convertTonSendTransactionRequest/createSendMsgAction/createSendMsgAction.ts
99
+ /** @not-instrumented */
100
+ const createSendMsgAction = (internalMessage) => ({
101
+ mode: _ton_core.SendMode.PAY_GAS_SEPARATELY | _ton_core.SendMode.IGNORE_ERRORS,
102
+ outMsg: internalMessage,
103
+ type: "sendMsg"
104
+ });
105
+
106
+ //#endregion
107
+ //#region src/utils/convertTonSendTransactionRequest/determineBounceFlag/determineBounceFlag.ts
108
+ /** @not-instrumented */
109
+ const determineBounceFlag = (address) => !address.startsWith("UQ") && !address.startsWith("0Q");
110
+
111
+ //#endregion
112
+ //#region src/errors/InvalidBocError.ts
113
+ var InvalidBocError = class extends _dynamic_labs_sdk_client.BaseError {
114
+ constructor({ cause, type }) {
115
+ super({
116
+ cause,
117
+ code: "invalid_boc_error",
118
+ docsUrl: null,
119
+ name: "InvalidBocError",
120
+ shortMessage: `Invalid ${type} BOC`
121
+ });
122
+ }
123
+ };
124
+
125
+ //#endregion
126
+ //#region src/utils/convertTonSendTransactionRequest/parsePayload/parsePayload.ts
127
+ /** @not-instrumented */
128
+ const parsePayload = (payload) => {
129
+ if (!payload) return (0, _ton_ton.beginCell)().endCell();
130
+ try {
131
+ return _ton_ton.Cell.fromBase64(payload);
132
+ } catch (e) {
133
+ throw new InvalidBocError({
134
+ cause: e instanceof Error ? e : null,
135
+ type: "payload"
136
+ });
137
+ }
138
+ };
139
+
140
+ //#endregion
141
+ //#region src/utils/convertTonSendTransactionRequest/parseStateInit/parseStateInit.ts
142
+ /** @not-instrumented */
143
+ const parseStateInit = (stateInit) => {
144
+ if (!stateInit) return;
145
+ try {
146
+ const slice = _ton_ton.Cell.fromBase64(stateInit).beginParse();
147
+ slice.skip(2);
148
+ return {
149
+ code: slice.loadRef(),
150
+ data: slice.loadRef()
151
+ };
152
+ } catch (e) {
153
+ throw new InvalidBocError({
154
+ cause: e instanceof Error ? e : null,
155
+ type: "stateInit"
156
+ });
157
+ }
158
+ };
159
+
160
+ //#endregion
161
+ //#region src/utils/convertTonSendTransactionRequest/convertTonSendTransactionRequest.ts
162
+ /** @not-instrumented */
163
+ const convertTonSendTransactionRequest = (request) => {
164
+ const actions = [];
165
+ for (const msg of request.messages) {
166
+ const destAddr = _ton_ton.Address.parse(msg.address);
167
+ const amount = BigInt(msg.amount);
168
+ const body = parsePayload(msg.payload);
169
+ const init = parseStateInit(msg.stateInit);
170
+ const internalMessage = createInternalMessage(destAddr, amount, body, determineBounceFlag(msg.address), init);
171
+ actions.push(createSendMsgAction(internalMessage));
172
+ }
173
+ return actions;
174
+ };
175
+
176
+ //#endregion
177
+ //#region src/utils/createTonWalletStateInit/createTonWalletStateInit.ts
178
+ /** @not-instrumented */
179
+ const createTonWalletStateInit = ({ publicKey, workchain = 0 }) => {
180
+ return _ton_ton.WalletContractV5R1.create({
181
+ publicKey,
182
+ workchain
183
+ }).init;
184
+ };
185
+
186
+ //#endregion
187
+ //#region src/errors/InvalidSignatureLengthError.ts
188
+ var InvalidSignatureLengthError = class extends _dynamic_labs_sdk_client.BaseError {
189
+ constructor({ actual, expected }) {
190
+ super({
191
+ cause: null,
192
+ code: "invalid_signature_length_error",
193
+ docsUrl: null,
194
+ name: "InvalidSignatureLengthError",
195
+ shortMessage: `Invalid signature length: expected ${expected} bytes, got ${actual}`
196
+ });
197
+ }
198
+ };
199
+
200
+ //#endregion
201
+ //#region src/utils/executeTonTransaction/executeTonTransaction.ts
202
+ /** @not-instrumented */
203
+ const executeTonTransaction = async ({ transactionData, signature, client, stateInit }) => {
204
+ const signatureBuffer = (0, _dynamic_labs_sdk_client_core.getBuffer)().from(signature, "base64");
205
+ if (signatureBuffer.length !== 64) throw new InvalidSignatureLengthError({
206
+ actual: signatureBuffer.length,
207
+ expected: 64
208
+ });
209
+ const signingMessageCell = _ton_ton.Cell.fromBase64(transactionData.messageBody);
210
+ const externalMsg = (0, _ton_core.external)({
211
+ body: (0, _ton_ton.beginCell)().storeSlice(signingMessageCell.beginParse()).storeBuffer(signatureBuffer).endCell(),
212
+ to: _ton_ton.Address.parse(transactionData.address),
213
+ ...stateInit ? { init: stateInit } : {}
214
+ });
215
+ const externalMessage = (0, _ton_ton.beginCell)().store((0, _ton_core.storeMessage)(externalMsg, { forceRef: true })).endCell();
216
+ const boc = externalMessage.toBoc();
217
+ await client.sendFile(boc);
218
+ return { transactionHash: externalMessage.hash().toString("hex") };
219
+ };
220
+
221
+ //#endregion
222
+ //#region src/utils/generateTonConnectProofHash/generateTonConnectProofMessage/generateTonConnectProofMessage.ts
223
+ /** @not-instrumented */
224
+ const generateTonConnectProofMessage = ({ address: addressStr, domain, payload, timestamp }) => {
225
+ const BufferImpl = (0, _dynamic_labs_sdk_client_core.getBuffer)();
226
+ const address = _ton_ton.Address.parse(addressStr);
227
+ const domainBytes = BufferImpl.from(domain.value);
228
+ const wc = BufferImpl.alloc(4);
229
+ wc.writeUInt32BE(address.workChain, 0);
230
+ const ts = BufferImpl.alloc(8);
231
+ ts.writeBigUInt64LE(BigInt(timestamp), 0);
232
+ const dl = BufferImpl.alloc(4);
233
+ dl.writeUInt32LE(domain.lengthBytes, 0);
234
+ return BufferImpl.concat([
235
+ BufferImpl.from(TON_PROOF_PREFIX),
236
+ wc,
237
+ address.hash,
238
+ dl,
239
+ domainBytes,
240
+ ts,
241
+ BufferImpl.from(payload)
242
+ ]);
243
+ };
244
+
245
+ //#endregion
246
+ //#region src/utils/generateTonConnectProofHash/generateTonConnectProofHash.ts
247
+ /** @not-instrumented */
248
+ const generateTonConnectProofHash = async ({ address, domain, payload, timestamp }) => {
249
+ const BufferImpl = (0, _dynamic_labs_sdk_client_core.getBuffer)();
250
+ const message = generateTonConnectProofMessage({
251
+ address,
252
+ domain,
253
+ payload,
254
+ timestamp
255
+ });
256
+ const messageHash = BufferImpl.from(await (0, _ton_crypto.sha256)(message));
257
+ const fullMsg = BufferImpl.concat([
258
+ BufferImpl.from([255, 255]),
259
+ BufferImpl.from(TON_CONNECT_PREFIX),
260
+ messageHash
261
+ ]);
262
+ return BufferImpl.from(await (0, _ton_crypto.sha256)(fullMsg)).toString("hex");
263
+ };
264
+
265
+ //#endregion
266
+ //#region src/utils/getTonWalletSeqno/getTonWalletSeqno.ts
267
+ /** @not-instrumented */
268
+ const getTonWalletSeqno = async ({ walletAddress, client }) => {
269
+ const address = _ton_ton.Address.parse(walletAddress);
270
+ return (await client.runMethod(address, "seqno")).stack.readNumber();
271
+ };
272
+
273
+ //#endregion
274
+ //#region src/utils/isTonWalletDeployed/isTonWalletDeployed.ts
275
+ /** @not-instrumented */
276
+ const isTonWalletDeployed = async ({ walletAddress, client }) => {
277
+ const address = _ton_ton.Address.parse(walletAddress);
278
+ return (await client.getContractState(address)).state === "active";
279
+ };
280
+
281
+ //#endregion
282
+ //#region src/utils/getJettonWalletAddress/getJettonWalletAddress.ts
283
+ /** @not-instrumented */
284
+ const getJettonWalletAddress = async ({ jettonMasterAddress, ownerAddress, client }) => {
285
+ const masterAddress = _ton_ton.Address.parse(jettonMasterAddress);
286
+ const owner = _ton_ton.Address.parse(ownerAddress);
287
+ const ownerCell = (0, _ton_ton.beginCell)().storeAddress(owner).endCell();
288
+ return (await client.runMethod(masterAddress, "get_wallet_address", [{
289
+ cell: ownerCell,
290
+ type: "slice"
291
+ }])).stack.readAddress().toString({
292
+ bounceable: true,
293
+ testOnly: false,
294
+ urlSafe: true
295
+ });
296
+ };
297
+
298
+ //#endregion
299
+ //#region src/utils/prepareJettonTransfer/prepareJettonTransfer.ts
300
+ /** @not-instrumented */
301
+ const prepareJettonTransfer = async ({ walletAddress, jettonMasterAddress, recipientAddress, jettonAmount, forwardTonAmount, client, forwardPayload = "", timeout = DEFAULT_TIMEOUT, gasAmount = DEFAULT_JETTON_GAS, network = _tonconnect_sdk.CHAIN.MAINNET }) => {
302
+ const validUntil = Math.floor(Date.now() / 1e3) + timeout;
303
+ const jettonWalletAddr = _ton_ton.Address.parse(await getJettonWalletAddress({
304
+ client,
305
+ jettonMasterAddress,
306
+ ownerAddress: walletAddress
307
+ }));
308
+ const recipientAddr = _ton_ton.Address.parse(recipientAddress);
309
+ const walletAddr = _ton_ton.Address.parse(walletAddress);
310
+ const isTestnet = network === _tonconnect_sdk.CHAIN.TESTNET;
311
+ const forwardPayloadCell = forwardPayload ? (0, _ton_ton.beginCell)().storeUint(0, 32).storeStringTail(forwardPayload).endCell() : (0, _ton_ton.beginCell)().endCell();
312
+ const jettonTransferBody = (0, _ton_ton.beginCell)().storeUint(260734629, 32).storeUint(0, 64).storeCoins(jettonAmount).storeAddress(recipientAddr).storeAddress(walletAddr).storeBit(0).storeCoins(forwardTonAmount).storeBit(0).storeSlice(forwardPayloadCell.beginParse()).endCell();
313
+ const totalAmount = forwardTonAmount + gasAmount;
314
+ const message = {
315
+ address: jettonWalletAddr.toString({
316
+ bounceable: true,
317
+ testOnly: isTestnet,
318
+ urlSafe: true
319
+ }),
320
+ amount: totalAmount.toString(),
321
+ payload: jettonTransferBody.toBoc().toString("base64")
322
+ };
323
+ return {
324
+ from: walletAddr.toString({
325
+ bounceable: false,
326
+ testOnly: isTestnet,
327
+ urlSafe: true
328
+ }),
329
+ messages: [message],
330
+ network,
331
+ validUntil
332
+ };
333
+ };
334
+
335
+ //#endregion
336
+ //#region src/utils/prepareTonTransaction/prepareTonTransaction.ts
337
+ /** @not-instrumented */
338
+ const prepareTonTransaction = ({ actionsArray, walletAddress, seqno, validUntil, timeout, networkGlobalId = _tonconnect_sdk.CHAIN.MAINNET }) => {
339
+ const walletAddr = _ton_ton.Address.parse(walletAddress);
340
+ const actionsCell = (0, _ton_ton.beginCell)().store((0, _ton_core.storeOutList)(actionsArray)).endCell();
341
+ const actions = (0, _ton_ton.beginCell)().storeBit(1).storeRef(actionsCell).storeBit(0).endCell();
342
+ const context = (0, _ton_ton.beginCell)().storeUint(1, 1).storeInt(walletAddr.workChain, 8).storeUint(0, 8).storeUint(0, 15).endCell().beginParse().loadInt(32);
343
+ const walletIdValue = BigInt(networkGlobalId) ^ BigInt(context);
344
+ const signingMessage = (0, _ton_ton.beginCell)().storeUint(_ton_ton.WalletContractV5R1.OpCodes.auth_signed_external, 32).storeInt(walletIdValue, 32);
345
+ if (seqno === 0) for (let i = 0; i < 32; i++) signingMessage.storeBit(1);
346
+ else signingMessage.storeUint(validUntil, 32);
347
+ signingMessage.storeUint(seqno, 32).storeSlice(actions.beginParse());
348
+ const dataToSign = signingMessage.endCell();
349
+ const hashToSign = dataToSign.hash();
350
+ return {
351
+ hashToSign,
352
+ hashToSignHex: hashToSign.toString("hex"),
353
+ transactionData: {
354
+ address: walletAddress,
355
+ messageBody: dataToSign.toBoc().toString("base64"),
356
+ seqno,
357
+ timeout
358
+ }
359
+ };
360
+ };
361
+
362
+ //#endregion
363
+ //#region src/utils/prepareTonNativeTransfer/prepareTonNativeTransfer.ts
364
+ /** @not-instrumented */
365
+ const prepareTonNativeTransfer = ({ walletAddress, recipient, amountInNanoton, timeout = DEFAULT_TIMEOUT, network = _tonconnect_sdk.CHAIN.MAINNET }) => {
366
+ const validUntil = Math.floor(Date.now() / 1e3) + timeout;
367
+ const recipientAddress = _ton_ton.Address.parse(recipient);
368
+ const walletAddr = _ton_ton.Address.parse(walletAddress);
369
+ const isTestnet = network === _tonconnect_sdk.CHAIN.TESTNET;
370
+ const message = {
371
+ address: recipientAddress.toString({
372
+ bounceable: false,
373
+ testOnly: isTestnet,
374
+ urlSafe: true
375
+ }),
376
+ amount: amountInNanoton
377
+ };
378
+ return {
379
+ from: walletAddr.toString({
380
+ bounceable: false,
381
+ testOnly: isTestnet,
382
+ urlSafe: true
383
+ }),
384
+ messages: [message],
385
+ network,
386
+ validUntil
387
+ };
388
+ };
389
+
390
+ //#endregion
391
+ //#region src/errors/NotTonProviderError.ts
392
+ var NotTonProviderError = class extends _dynamic_labs_sdk_client.BaseError {
393
+ providerKey;
394
+ constructor(params) {
395
+ super({
396
+ cause: null,
397
+ code: "not_ton_provider_error",
398
+ docsUrl: null,
399
+ name: "NotTonProviderError",
400
+ shortMessage: "Provider is not a TON wallet provider"
401
+ });
402
+ this.providerKey = params.providerKey;
403
+ }
404
+ };
405
+
406
+ //#endregion
407
+ //#region src/isTonWalletProvider/isTonWalletProvider.ts
408
+ /**
409
+ * Type guard function to check if a wallet provider is a TON wallet provider.
410
+ *
411
+ * @param provider - The wallet provider to check.
412
+ * @returns True if the wallet provider is a TON wallet provider, false otherwise.
413
+ * @not-instrumented
414
+ */
415
+ const isTonWalletProvider = (provider) => provider.chain === "TON";
416
+
417
+ //#endregion
418
+ //#region src/utils/tonTransferAmount/tonTransferAmount.ts
419
+ const DEFAULT_DECIMALS = 9;
420
+ /** @not-instrumented */
421
+ const tonTransferAmount = async ({ amount, recipient, token, walletAccount }, client) => {
422
+ const provider = (0, _dynamic_labs_sdk_client_core.getWalletProviderFromWalletAccount)({ walletAccount }, client);
423
+ if (!isTonWalletProvider(provider)) throw new NotTonProviderError({ providerKey: provider.key });
424
+ if (token) {
425
+ const rawAmount$1 = (0, _dynamic_labs_sdk_client_core.parseAmountToSmallestUnit)({
426
+ amount,
427
+ decimals: token.decimals ?? DEFAULT_DECIMALS
428
+ });
429
+ return provider.sendJetton({
430
+ transaction: {
431
+ amount: rawAmount$1,
432
+ jettonMasterAddress: token.address,
433
+ recipientAddress: recipient
434
+ },
435
+ walletAccount
436
+ });
437
+ }
438
+ const rawAmount = (0, _dynamic_labs_sdk_client_core.parseAmountToSmallestUnit)({
439
+ amount,
440
+ decimals: DEFAULT_DECIMALS
441
+ });
442
+ return provider.sendTon({
443
+ transaction: {
444
+ amount: rawAmount,
445
+ recipientAddress: recipient
446
+ },
447
+ walletAccount
448
+ });
449
+ };
450
+
451
+ //#endregion
452
+ //#region src/errors/PublicKeyNotFoundError.ts
453
+ var PublicKeyNotFoundError = class extends _dynamic_labs_sdk_client.BaseError {
454
+ constructor(address) {
455
+ super({
456
+ cause: null,
457
+ code: "public_key_not_found_error",
458
+ docsUrl: null,
459
+ name: "PublicKeyNotFoundError",
460
+ shortMessage: `No public key found for address ${address}`
461
+ });
462
+ }
463
+ };
464
+
465
+ //#endregion
466
+ //#region src/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.ts
467
+ /**
468
+ * Gets the public key for a wallet account from the user's verified credentials
469
+ * @not-instrumented
470
+ */
471
+ const getPublicKeyForWalletAccount = (walletAccount, client) => {
472
+ const user = (0, _dynamic_labs_sdk_client_core.getCore)(client).state.get().user;
473
+ for (const credential of user?.verifiedCredentials ?? []) {
474
+ const additionalAddress = credential.walletAdditionalAddresses?.find((addr) => addr.address === walletAccount.address);
475
+ if (additionalAddress?.publicKey) return additionalAddress.publicKey;
476
+ }
477
+ throw new PublicKeyNotFoundError(walletAccount.address);
478
+ };
479
+
480
+ //#endregion
481
+ //#region src/waas/utils/createWalletProviderForWaasTon/createWalletProviderForWaasTon.ts
482
+ /** @not-instrumented */
483
+ const createWalletProviderForWaasTon = (sdkClient) => {
484
+ const chain = "TON";
485
+ const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.EmbeddedWallet;
486
+ const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
487
+ chain,
488
+ displayName: _dynamic_labs_sdk_client_waas_core.DYNAMIC_WAAS_METADATA.displayName,
489
+ walletProviderType
490
+ });
491
+ const waasProvider = (0, _dynamic_labs_sdk_client_waas_core.createWaasProvider)({
492
+ chain,
493
+ sdkClient
494
+ });
495
+ const getTonClientForActiveNetwork = async () => {
496
+ const { networkId } = await getActiveNetworkId();
497
+ return createTonClient({ rpcUrl: (0, _dynamic_labs_sdk_client_core.getNetworkProviderFromNetworkId)({
498
+ chain: "TON",
499
+ networkId
500
+ }, sdkClient).rpcUrls.http[0] });
501
+ };
502
+ const getActiveNetworkId = async () => (0, _dynamic_labs_sdk_client_core.getActiveNetworkIdFromLastKnownRegistry)({
503
+ client: sdkClient,
504
+ walletProviderKey: key
505
+ });
506
+ const switchActiveNetwork = async ({ networkId }) => (0, _dynamic_labs_sdk_client_core.switchActiveNetworkInLastKnownRegistry)({
507
+ client: sdkClient,
508
+ networkId,
509
+ walletProviderKey: key
510
+ });
511
+ const getConnectedAddresses = async () => ({ addresses: (0, _dynamic_labs_sdk_client_waas_core.getAllUserWaasAddressesForChain)({ chain }, sdkClient) });
512
+ const signMessage = async ({ message, walletAccount }) => {
513
+ (0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account is required");
514
+ return waasProvider.signMessage({
515
+ message,
516
+ walletAccount
517
+ });
518
+ };
519
+ const sendTransaction = async ({ request, walletAccount }) => {
520
+ (0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account is required");
521
+ const client = await getTonClientForActiveNetwork();
522
+ const walletAddress = request.from || walletAccount.address;
523
+ const deployed = await isTonWalletDeployed({
524
+ client,
525
+ walletAddress
526
+ });
527
+ const seqno = deployed ? await getTonWalletSeqno({
528
+ client,
529
+ walletAddress
530
+ }) : 0;
531
+ const publicKeyHex = getPublicKeyForWalletAccount(walletAccount, sdkClient);
532
+ const stateInit = deployed ? void 0 : createTonWalletStateInit({
533
+ publicKey: (0, _dynamic_labs_sdk_client_core.getBuffer)().from(publicKeyHex, "hex"),
534
+ workchain: 0
535
+ });
536
+ const actionsArray = convertTonSendTransactionRequest(request);
537
+ const timeoutSeconds = request.validUntil - Math.floor(Date.now() / 1e3);
538
+ if (timeoutSeconds <= 0) throw new TransactionExecutionFailedError("Transaction validUntil is in the past");
539
+ const { hashToSignHex, transactionData } = prepareTonTransaction({
540
+ actionsArray,
541
+ networkGlobalId: request.network || _tonconnect_sdk.CHAIN.MAINNET,
542
+ seqno,
543
+ timeout: timeoutSeconds,
544
+ validUntil: request.validUntil,
545
+ walletAddress
546
+ });
547
+ const waasClient = await waasProvider.getWaasClient();
548
+ const { signature: signedSessionId } = await (0, _dynamic_labs_sdk_client_core.getSignedSessionId)(sdkClient);
549
+ const mfaToken = await (0, _dynamic_labs_sdk_client_core.consumeMfaTokenIfRequiredForAction)({ mfaAction: _dynamic_labs_sdk_api_core.MFAAction.WalletWaasSign }, sdkClient);
550
+ return executeTonTransaction({
551
+ client,
552
+ signature: await waasClient.signTransaction({
553
+ authToken: sdkClient.token ?? void 0,
554
+ mfaToken,
555
+ senderAddress: walletAccount.address,
556
+ signedSessionId,
557
+ transaction: hashToSignHex
558
+ }),
559
+ stateInit,
560
+ transactionData
561
+ });
562
+ };
563
+ const sendTon = async ({ transaction, walletAccount }) => {
564
+ (0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account is required");
565
+ return sendTransaction({
566
+ request: prepareTonNativeTransfer({
567
+ amountInNanoton: transaction.amount.toString(),
568
+ recipient: transaction.recipientAddress,
569
+ timeout: DEFAULT_TIMEOUT,
570
+ walletAddress: walletAccount.address
571
+ }),
572
+ walletAccount
573
+ });
574
+ };
575
+ const sendJetton = async ({ transaction, walletAccount }) => {
576
+ (0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account is required");
577
+ return sendTransaction({
578
+ request: await prepareJettonTransfer({
579
+ client: await getTonClientForActiveNetwork(),
580
+ forwardTonAmount: transaction.forwardTonAmount ?? BigInt(0),
581
+ gasAmount: transaction.gasAmount ?? DEFAULT_JETTON_GAS,
582
+ jettonAmount: transaction.amount,
583
+ jettonMasterAddress: transaction.jettonMasterAddress,
584
+ recipientAddress: transaction.recipientAddress,
585
+ timeout: DEFAULT_TIMEOUT,
586
+ walletAddress: walletAccount.address
587
+ }),
588
+ walletAccount
589
+ });
590
+ };
591
+ const generateTonConnectProof = async ({ payload, walletAccount }) => {
592
+ (0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account is required");
593
+ const host = globalThis.location?.host || "";
594
+ const timestamp = Math.floor(Date.now() / 1e3);
595
+ const domain = {
596
+ lengthBytes: new TextEncoder().encode(host).length,
597
+ value: host
598
+ };
599
+ const { signature } = await signMessage({
600
+ message: await generateTonConnectProofHash({
601
+ address: walletAccount.address,
602
+ domain,
603
+ payload,
604
+ timestamp
605
+ }),
606
+ walletAccount
607
+ });
608
+ return {
609
+ address: walletAccount.address,
610
+ domain,
611
+ payload,
612
+ signature,
613
+ timestamp
614
+ };
615
+ };
616
+ return {
617
+ ...waasProvider,
618
+ chain,
619
+ generateTonConnectProof,
620
+ getActiveNetworkId,
621
+ getConnectedAddresses,
622
+ groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(_dynamic_labs_sdk_client_waas_core.DYNAMIC_WAAS_METADATA.displayName),
623
+ key,
624
+ metadata: {
625
+ displayName: _dynamic_labs_sdk_client_waas_core.DYNAMIC_WAAS_METADATA.displayName,
626
+ icon: _dynamic_labs_sdk_client_waas_core.DYNAMIC_WAAS_METADATA.icon
627
+ },
628
+ sendJetton,
629
+ sendTon,
630
+ sendTransaction,
631
+ signMessage,
632
+ switchActiveNetwork,
633
+ transferAmount: (args) => tonTransferAmount(args, sdkClient),
634
+ walletProviderType
635
+ };
636
+ };
637
+
638
+ //#endregion
639
+ //#region src/waas/addWaasTonExtension/addWaasTonExtension.ts
640
+ const WAAS_TON_EXTENSION_KEY = "waasTon";
641
+ /**
642
+ * Adds the Dynamic WaaS (Wallet as a Service) TON extension to the Dynamic client.
643
+ *
644
+ * This extension enables embedded wallet functionality for the TON blockchain,
645
+ * allowing users to have wallets managed by Dynamic's infrastructure.
646
+ *
647
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
648
+ * @not-instrumented
649
+ */
650
+ const addWaasTonExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
651
+ if ((0, _dynamic_labs_sdk_client_core.hasExtension)({ extensionKey: WAAS_TON_EXTENSION_KEY }, client)) return;
652
+ (0, _dynamic_labs_sdk_client_core.registerExtension)({ extensionKey: WAAS_TON_EXTENSION_KEY }, client);
653
+ registerTonNetworkProviderBuilder(client);
654
+ const walletProviderRegistry = (0, _dynamic_labs_sdk_client_core.getWalletProviderRegistry)(client);
655
+ const walletProvider = createWalletProviderForWaasTon(client);
656
+ walletProviderRegistry.register({
657
+ priority: _dynamic_labs_sdk_client_core.WalletProviderPriority.WALLET_SDK,
658
+ walletProvider
659
+ });
660
+ };
661
+
662
+ //#endregion
663
+ Object.defineProperty(exports, 'NANOTON_PER_TON', {
664
+ enumerable: true,
665
+ get: function () {
666
+ return NANOTON_PER_TON;
667
+ }
668
+ });
669
+ Object.defineProperty(exports, 'NotTonProviderError', {
670
+ enumerable: true,
671
+ get: function () {
672
+ return NotTonProviderError;
673
+ }
674
+ });
675
+ Object.defineProperty(exports, 'TransactionExecutionFailedError', {
676
+ enumerable: true,
677
+ get: function () {
678
+ return TransactionExecutionFailedError;
679
+ }
680
+ });
681
+ Object.defineProperty(exports, 'addWaasTonExtension', {
682
+ enumerable: true,
683
+ get: function () {
684
+ return addWaasTonExtension;
685
+ }
686
+ });
687
+ Object.defineProperty(exports, 'isTonWalletProvider', {
688
+ enumerable: true,
689
+ get: function () {
690
+ return isTonWalletProvider;
691
+ }
692
+ });
693
+ Object.defineProperty(exports, 'name', {
694
+ enumerable: true,
695
+ get: function () {
696
+ return name;
697
+ }
698
+ });
699
+ Object.defineProperty(exports, 'prepareJettonTransfer', {
700
+ enumerable: true,
701
+ get: function () {
702
+ return prepareJettonTransfer;
703
+ }
704
+ });
705
+ Object.defineProperty(exports, 'prepareTonNativeTransfer', {
706
+ enumerable: true,
707
+ get: function () {
708
+ return prepareTonNativeTransfer;
709
+ }
710
+ });
711
+ Object.defineProperty(exports, 'version', {
712
+ enumerable: true,
713
+ get: function () {
714
+ return version;
715
+ }
716
+ });
717
+ //# sourceMappingURL=addWaasTonExtension-Dzrb4rja.cjs.js.map