@dynamic-labs-sdk/ton 1.12.2 → 1.14.0

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 (87) hide show
  1. package/dist/{addTonConnectExtension-Bl9l3Yx9.esm.js → addTonConnectExtension-DeiHC0tO.esm.js} +7 -7
  2. package/dist/addTonConnectExtension-DeiHC0tO.esm.js.map +1 -0
  3. package/dist/{addTonConnectExtension-BvDBUqVK.cjs → addTonConnectExtension-bMHrg2hj.cjs} +7 -7
  4. package/dist/addTonConnectExtension-bMHrg2hj.cjs.map +1 -0
  5. package/dist/addTonExtension/addTonExtension.d.ts +1 -1
  6. package/dist/{addWaasTonExtension-Cab7lRyH.esm.js → addWaasTonExtension-BrVHTnYf.esm.js} +18 -18
  7. package/dist/addWaasTonExtension-BrVHTnYf.esm.js.map +1 -0
  8. package/dist/{addWaasTonExtension-BkAOUb4X.cjs → addWaasTonExtension-CNdkzT9j.cjs} +18 -18
  9. package/dist/addWaasTonExtension-CNdkzT9j.cjs.map +1 -0
  10. package/dist/generateTonConnectProof/generateTonConnectProof.d.ts +1 -1
  11. package/dist/index.cjs +10 -10
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.esm.js +10 -10
  14. package/dist/index.esm.js.map +1 -1
  15. package/dist/isTonNetworkProvider/isTonNetworkProvider.d.ts +1 -1
  16. package/dist/isTonWalletAccount/isTonWalletAccount.d.ts +1 -1
  17. package/dist/isTonWalletProvider/isTonWalletProvider.d.ts +1 -1
  18. package/dist/registerTonNetworkProviderBuilder/registerTonNetworkProviderBuilder.d.ts +1 -1
  19. package/dist/registerTonNetworkProviderBuilder/registerTonNetworkProviderBuilder.d.ts.map +1 -1
  20. package/dist/sendJetton/sendJetton.d.ts +1 -1
  21. package/dist/sendTon/sendTon.d.ts +1 -1
  22. package/dist/sendTransaction/sendTransaction.d.ts +1 -1
  23. package/dist/tonConnect/addTonConnectExtension/addTonConnectExtension.d.ts +1 -1
  24. package/dist/tonConnect/utils/createDefaultTonConnectUI/createDefaultTonConnectUI.d.ts +1 -1
  25. package/dist/tonConnect/utils/createWalletProviderFromTonConnect/createWalletProviderFromTonConnect.d.ts +1 -1
  26. package/dist/tonConnect/utils/discoverAndRegisterWallets/discoverAndRegisterWallets.d.ts +1 -1
  27. package/dist/tonConnect/utils/extractPublicKeyFromStateInit/extractPublicKeyFromStateInit.d.ts +1 -1
  28. package/dist/tonConnect.cjs +2 -2
  29. package/dist/tonConnect.esm.js +2 -2
  30. package/dist/{tonTransferAmount-M9yHPDUW.esm.js → tonTransferAmount-bYGAoQzO.esm.js} +11 -11
  31. package/dist/tonTransferAmount-bYGAoQzO.esm.js.map +1 -0
  32. package/dist/{tonTransferAmount-C0I7SiC0.cjs → tonTransferAmount-ojUTvwg9.cjs} +11 -11
  33. package/dist/tonTransferAmount-ojUTvwg9.cjs.map +1 -0
  34. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  35. package/dist/utils/convertTonSendTransactionRequest/convertTonSendTransactionRequest.d.ts +1 -1
  36. package/dist/utils/convertTonSendTransactionRequest/convertTonSendTransactionRequest.d.ts.map +1 -1
  37. package/dist/utils/convertTonSendTransactionRequest/createInternalMessage/createInternalMessage.d.ts +1 -1
  38. package/dist/utils/convertTonSendTransactionRequest/createInternalMessage/createInternalMessage.d.ts.map +1 -1
  39. package/dist/utils/convertTonSendTransactionRequest/createSendMsgAction/createSendMsgAction.d.ts +1 -1
  40. package/dist/utils/convertTonSendTransactionRequest/createSendMsgAction/createSendMsgAction.d.ts.map +1 -1
  41. package/dist/utils/convertTonSendTransactionRequest/determineBounceFlag/determineBounceFlag.d.ts +1 -1
  42. package/dist/utils/convertTonSendTransactionRequest/determineBounceFlag/determineBounceFlag.d.ts.map +1 -1
  43. package/dist/utils/convertTonSendTransactionRequest/parsePayload/parsePayload.d.ts +1 -1
  44. package/dist/utils/convertTonSendTransactionRequest/parsePayload/parsePayload.d.ts.map +1 -1
  45. package/dist/utils/convertTonSendTransactionRequest/parseStateInit/parseStateInit.d.ts +1 -1
  46. package/dist/utils/convertTonSendTransactionRequest/parseStateInit/parseStateInit.d.ts.map +1 -1
  47. package/dist/utils/createTonClient/createTonClient.d.ts +1 -1
  48. package/dist/utils/createTonClient/createTonClient.d.ts.map +1 -1
  49. package/dist/utils/createTonNetworkProvider/createTonNetworkProvider.d.ts +1 -1
  50. package/dist/utils/createTonNetworkProvider/createTonNetworkProvider.d.ts.map +1 -1
  51. package/dist/utils/createTonWalletStateInit/createTonWalletStateInit.d.ts +1 -1
  52. package/dist/utils/createTonWalletStateInit/createTonWalletStateInit.d.ts.map +1 -1
  53. package/dist/utils/executeTonTransaction/executeTonTransaction.d.ts +1 -1
  54. package/dist/utils/executeTonTransaction/executeTonTransaction.d.ts.map +1 -1
  55. package/dist/utils/fetchTonBalance/fetchTonBalance.d.ts +1 -1
  56. package/dist/utils/fetchTonBalance/fetchTonBalance.d.ts.map +1 -1
  57. package/dist/utils/generateTonConnectProofHash/generateTonConnectProofHash.d.ts +1 -1
  58. package/dist/utils/generateTonConnectProofHash/generateTonConnectProofHash.d.ts.map +1 -1
  59. package/dist/utils/generateTonConnectProofHash/generateTonConnectProofMessage/generateTonConnectProofMessage.d.ts +1 -1
  60. package/dist/utils/generateTonConnectProofHash/generateTonConnectProofMessage/generateTonConnectProofMessage.d.ts.map +1 -1
  61. package/dist/utils/getJettonWalletAddress/getJettonWalletAddress.d.ts +1 -1
  62. package/dist/utils/getJettonWalletAddress/getJettonWalletAddress.d.ts.map +1 -1
  63. package/dist/utils/getTonWalletSeqno/getTonWalletSeqno.d.ts +1 -1
  64. package/dist/utils/getTonWalletSeqno/getTonWalletSeqno.d.ts.map +1 -1
  65. package/dist/utils/isTonWalletDeployed/isTonWalletDeployed.d.ts +1 -1
  66. package/dist/utils/isTonWalletDeployed/isTonWalletDeployed.d.ts.map +1 -1
  67. package/dist/utils/prepareJettonTransfer/prepareJettonTransfer.d.ts +1 -1
  68. package/dist/utils/prepareJettonTransfer/prepareJettonTransfer.d.ts.map +1 -1
  69. package/dist/utils/prepareTonNativeTransfer/prepareTonNativeTransfer.d.ts +1 -1
  70. package/dist/utils/prepareTonNativeTransfer/prepareTonNativeTransfer.d.ts.map +1 -1
  71. package/dist/utils/prepareTonTransaction/prepareTonTransaction.d.ts +1 -1
  72. package/dist/utils/prepareTonTransaction/prepareTonTransaction.d.ts.map +1 -1
  73. package/dist/utils/tonTransferAmount/tonTransferAmount.d.ts +1 -1
  74. package/dist/utils/tonTransferAmount/tonTransferAmount.d.ts.map +1 -1
  75. package/dist/waas/addWaasTonExtension/addWaasTonExtension.d.ts +1 -1
  76. package/dist/waas/utils/createWalletProviderForWaasTon/createWalletProviderForWaasTon.d.ts +1 -1
  77. package/dist/waas/utils/createWalletProviderForWaasTon/createWalletProviderForWaasTon.d.ts.map +1 -1
  78. package/dist/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.d.ts +1 -1
  79. package/dist/waas.cjs +2 -2
  80. package/dist/waas.esm.js +2 -2
  81. package/package.json +3 -3
  82. package/dist/addTonConnectExtension-Bl9l3Yx9.esm.js.map +0 -1
  83. package/dist/addTonConnectExtension-BvDBUqVK.cjs.map +0 -1
  84. package/dist/addWaasTonExtension-BkAOUb4X.cjs.map +0 -1
  85. package/dist/addWaasTonExtension-Cab7lRyH.esm.js.map +0 -1
  86. package/dist/tonTransferAmount-C0I7SiC0.cjs.map +0 -1
  87. package/dist/tonTransferAmount-M9yHPDUW.esm.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { a as prepareJettonTransfer, d as registerTonNetworkProviderBuilder, f as createTonClient, i as prepareTonNativeTransfer, o as DEFAULT_JETTON_GAS, s as DEFAULT_TIMEOUT, t as tonTransferAmount } from "./tonTransferAmount-M9yHPDUW.esm.js";
1
+ import { a as prepareJettonTransfer, d as registerTonNetworkProviderBuilder, f as createTonClient, i as prepareTonNativeTransfer, o as DEFAULT_JETTON_GAS, s as DEFAULT_TIMEOUT, t as tonTransferAmount } from "./tonTransferAmount-bYGAoQzO.esm.js";
2
2
  import { WalletProviderPriority, assertDefined, createWalletProviderEventEmitter, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getCore, getDefaultClient, getNetworkProviderFromNetworkId, getNonce, getWalletProviderRegistry, hasExtension, registerExtension, switchActiveNetworkInLastKnownRegistry } from "@dynamic-labs-sdk/client/core";
3
3
  import { Cell } from "@ton/ton";
4
4
  import { TonConnectUI } from "@tonconnect/ui";
@@ -16,7 +16,7 @@ import { BaseError } from "@dynamic-labs-sdk/client";
16
16
  *
17
17
  * @param client - The Dynamic client instance.
18
18
  * @throws When the environment's universal link is not configured.
19
- * @not-instrumented
19
+ * @notInstrumented
20
20
  */
21
21
  const createDefaultTonConnectUI = (client) => {
22
22
  const universalLink = getCore(client).metadata?.universalLink;
@@ -126,7 +126,7 @@ const PUBLIC_KEY_BYTES = 32;
126
126
  * Parses the base64-encoded StateInit cell to retrieve the 32-byte public key
127
127
  * from the data cell, handling both V5R1 and standard wallet contract layouts.
128
128
  *
129
- * @not-instrumented
129
+ * @notInstrumented
130
130
  */
131
131
  const extractPublicKeyFromStateInit = ({ stateInitBase64 }) => {
132
132
  const stateInit = loadStateInit(Cell.fromBase64(stateInitBase64).beginParse());
@@ -150,7 +150,7 @@ const CONNECTION_TIMEOUT_MS = 3e4;
150
150
  * Wraps the TonConnect UI instance to provide connect, disconnect, sign, and
151
151
  * send operations for an external TON wallet (Tonkeeper, MyTonWallet, etc.).
152
152
  *
153
- * @not-instrumented
153
+ * @notInstrumented
154
154
  */
155
155
  const createWalletProviderFromTonConnect = ({ dynamicClient, tonConnectUI, walletInfo }) => {
156
156
  const chain = "TON";
@@ -462,7 +462,7 @@ const createWalletProviderFromTonConnect = ({ dynamicClient, tonConnectUI, walle
462
462
  * taken from the registry by default; a small override map handles wallets
463
463
  * whose registry name would otherwise be too generic (e.g. Telegram Wallet).
464
464
  *
465
- * @not-instrumented
465
+ * @notInstrumented
466
466
  */
467
467
  const discoverAndRegisterWallets = async ({ client, tonConnectUI }) => {
468
468
  const walletProviderRegistry = getWalletProviderRegistry(client);
@@ -499,7 +499,7 @@ const TON_CONNECT_EXTENSION_KEY = "tonConnect";
499
499
  * @param [params] - Optional configuration for the TonConnect extension.
500
500
  * @param [params.tonConnectUI] - An external TonConnectUI instance to reuse.
501
501
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
502
- * @not-instrumented
502
+ * @notInstrumented
503
503
  */
504
504
  const addTonConnectExtension = ({ tonConnectUI } = {}, client = getDefaultClient()) => {
505
505
  if (hasExtension({ extensionKey: TON_CONNECT_EXTENSION_KEY }, client)) return;
@@ -513,4 +513,4 @@ const addTonConnectExtension = ({ tonConnectUI } = {}, client = getDefaultClient
513
513
 
514
514
  //#endregion
515
515
  export { addTonConnectExtension as t };
516
- //# sourceMappingURL=addTonConnectExtension-Bl9l3Yx9.esm.js.map
516
+ //# sourceMappingURL=addTonConnectExtension-DeiHC0tO.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addTonConnectExtension-DeiHC0tO.esm.js","names":["TON_CONNECT_DISPLAY_NAME_OVERRIDES: Record<string, string>","connectedWallet: ConnectedWallet | null","cachedProofNonce: string | undefined","getActiveNetworkId: TonWalletProvider['getActiveNetworkId']","switchActiveNetwork: TonWalletProvider['switchActiveNetwork']","Address","getConnectedAddresses: TonWalletProvider['getConnectedAddresses']","connectionTimeoutRef: {\n id: ReturnType<typeof setTimeout> | undefined;\n }","statusUnsubRef: { fn?: () => void }","modalUnsub: (() => void) | undefined","connect: TonWalletProvider['connect']","publicKey","account","proofNonce: string | undefined","signMessage: TonWalletProvider['signMessage']","sendTransaction: TonWalletProvider['sendTransaction']","sendTon: TonWalletProvider['sendTon']","sendJetton: TonWalletProvider['sendJetton']","generateTonConnectProof: TonWalletProvider['generateTonConnectProof']","destroy: TonWalletProvider['destroy']"],"sources":["../src/tonConnect/utils/createDefaultTonConnectUI/createDefaultTonConnectUI.ts","../src/tonConnect/tonConnectDisplayNameOverrides.ts","../src/errors/TonConnectProofNotAvailableError.ts","../src/errors/TonConnectReconnectedError.ts","../src/errors/TonConnectRejectedError.ts","../src/errors/TonConnectTimeoutError.ts","../src/errors/StateInitMissingError.ts","../src/tonConnect/utils/extractPublicKeyFromStateInit/extractPublicKeyFromStateInit.ts","../src/tonConnect/utils/createWalletProviderFromTonConnect/createWalletProviderFromTonConnect.ts","../src/tonConnect/utils/discoverAndRegisterWallets/discoverAndRegisterWallets.ts","../src/tonConnect/addTonConnectExtension/addTonConnectExtension.ts"],"sourcesContent":["import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n getCore,\n} from '@dynamic-labs-sdk/client/core';\nimport { TonConnectUI } from '@tonconnect/ui';\n\n/**\n * Creates a default TonConnectUI instance using the Dynamic environment's\n * universal link as the source for the TonConnect manifest URL.\n *\n * Used as a fallback when the consumer does not pass an external\n * TonConnectUI into `addTonConnectExtension`.\n *\n * @param client - The Dynamic client instance.\n * @throws When the environment's universal link is not configured.\n * @notInstrumented\n */\nexport const createDefaultTonConnectUI = (\n client: DynamicClient,\n): TonConnectUI => {\n const universalLink = getCore(client).metadata?.universalLink;\n assertDefined(universalLink, 'Universal link is not set');\n\n return new TonConnectUI({\n manifestUrl: `${universalLink}/tonconnect-manifest.json`,\n });\n};\n","/**\n * Display-name overrides for wallets returned by TonConnect's registry.\n *\n * TonConnect's `getWallets()` returns the full ecosystem catalog. Each wallet\n * comes with its own `name`, which we use as-is by default. A small number of\n * wallets ship a name that is too generic to render (e.g. Telegram Wallet's\n * registry name is just `'Wallet'`); we override those here.\n *\n * IMPORTANT: the wallet's normalized display name is what `formatWalletProviderKey`\n * uses to derive the persisted `walletProviderKey`. Changing an override breaks\n * re-login for any user who linked under the previous name. Treat this map as\n * append-only: never edit existing values, only add new ones.\n *\n * Keys are TonConnect `appName` identifiers; values are the display names we\n * want to render and persist.\n */\nexport const TON_CONNECT_DISPLAY_NAME_OVERRIDES: Record<string, string> = {\n 'telegram-wallet': 'Telegram Wallet',\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class TonConnectProofNotAvailableError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'ton_connect_proof_not_available_error',\n docsUrl: null,\n name: 'TonConnectProofNotAvailableError',\n shortMessage: 'TonConnect proof not available',\n });\n }\n}\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class TonConnectReconnectedError extends BaseError {\n constructor(params: { walletName: string }) {\n super({\n cause: null,\n code: 'ton_connect_reconnected_error',\n docsUrl: null,\n name: 'TonConnectReconnectedError',\n shortMessage: `Reconnected to ${params.walletName}. Please try the action again.`,\n });\n }\n}\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class TonConnectRejectedError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'ton_connect_rejected_error',\n docsUrl: null,\n name: 'TonConnectRejectedError',\n shortMessage: 'User rejected connection',\n });\n }\n}\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class TonConnectTimeoutError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'ton_connect_timeout_error',\n docsUrl: null,\n name: 'TonConnectTimeoutError',\n shortMessage: 'Connection timed out — wallet did not respond',\n });\n }\n}\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class StateInitMissingError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'state_init_missing_error',\n docsUrl: null,\n name: 'StateInitMissingError',\n shortMessage: 'StateInit missing code or data cell',\n });\n }\n}\n","import { loadStateInit } from '@ton/core';\nimport { Cell } from '@ton/ton';\n\nimport { StateInitMissingError } from '../../../errors/StateInitMissingError';\n\nconst V5R1_CODE_HASHES = new Set([\n '2e39545f25bdc993f3bc2c1f5a3db09c1f30b70e3dd35c7ef3c25a12764fe4d0',\n '20cbb8a4c59a2521eb6e890a04b27d4f72827646a0b4bc9e20d04d8ff49e2a00',\n]);\n\nconst V5R1_SKIP_BITS = 65;\nconst DEFAULT_SKIP_BITS = 64;\nconst PUBLIC_KEY_BYTES = 32;\n\ntype ExtractPublicKeyFromStateInitParams = {\n stateInitBase64: string;\n};\n\n/**\n * Extracts the public key from a TON wallet's StateInit.\n *\n * Parses the base64-encoded StateInit cell to retrieve the 32-byte public key\n * from the data cell, handling both V5R1 and standard wallet contract layouts.\n *\n * @notInstrumented\n */\nexport const extractPublicKeyFromStateInit = ({\n stateInitBase64,\n}: ExtractPublicKeyFromStateInitParams): string => {\n const stateInitCell = Cell.fromBase64(stateInitBase64);\n const slice = stateInitCell.beginParse();\n\n const stateInit = loadStateInit(slice);\n\n const codeCell = stateInit.code;\n const dataCell = stateInit.data;\n\n if (!codeCell || !dataCell) {\n throw new StateInitMissingError();\n }\n\n const codeHash = codeCell.hash().toString('hex');\n const isV5R1 = V5R1_CODE_HASHES.has(codeHash);\n\n const dataSlice = dataCell.beginParse();\n const bitsToSkip = isV5R1 ? V5R1_SKIP_BITS : DEFAULT_SKIP_BITS;\n dataSlice.skip(bitsToSkip);\n\n const publicKeyBuffer = dataSlice.loadBuffer(PUBLIC_KEY_BYTES);\n\n return publicKeyBuffer.toString('hex');\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n getCore,\n getNetworkProviderFromNetworkId,\n getNonce,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Address } from '@ton/core';\nimport type { TonClient } from '@ton/ton';\nimport type {\n ConnectedWallet,\n TonConnectUI,\n WalletsModalState,\n} from '@tonconnect/ui';\n\nimport { TonConnectProofNotAvailableError } from '../../../errors/TonConnectProofNotAvailableError';\nimport { TonConnectReconnectedError } from '../../../errors/TonConnectReconnectedError';\nimport { TonConnectRejectedError } from '../../../errors/TonConnectRejectedError';\nimport { TonConnectTimeoutError } from '../../../errors/TonConnectTimeoutError';\nimport type { TonWalletProvider } from '../../../TonWalletProvider.types';\nimport { DEFAULT_JETTON_GAS, DEFAULT_TIMEOUT } from '../../../utils/constants';\nimport { createTonClient } from '../../../utils/createTonClient';\nimport { prepareJettonTransfer } from '../../../utils/prepareJettonTransfer';\nimport { prepareTonNativeTransfer } from '../../../utils/prepareTonNativeTransfer';\nimport { tonTransferAmount } from '../../../utils/tonTransferAmount';\nimport { extractPublicKeyFromStateInit } from '../extractPublicKeyFromStateInit';\n\nconst CONNECTION_TIMEOUT_MS = 30_000;\n\ntype CreateWalletProviderFromTonConnectParams = {\n dynamicClient: DynamicClient;\n tonConnectUI: TonConnectUI;\n walletInfo: {\n appName: string;\n icon: string;\n jsBridgeKey?: string;\n name: string;\n };\n};\n\n/**\n * Creates a TonWalletProvider from a TonConnect wallet.\n *\n * Wraps the TonConnect UI instance to provide connect, disconnect, sign, and\n * send operations for an external TON wallet (Tonkeeper, MyTonWallet, etc.).\n *\n * @notInstrumented\n */\nexport const createWalletProviderFromTonConnect = ({\n dynamicClient,\n tonConnectUI,\n walletInfo,\n}: CreateWalletProviderFromTonConnectParams): TonWalletProvider => {\n const chain = 'TON' as const;\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n let connectedWallet: ConnectedWallet | null = null;\n let suppressStatusEvents = false;\n let cachedProofNonce: string | undefined;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: walletInfo.name,\n walletProviderType,\n });\n\n const getTonClientForActiveNetwork = async (): Promise<TonClient> => {\n const { networkId } = await getActiveNetworkId();\n const networkProvider = getNetworkProviderFromNetworkId(\n { chain: 'TON', networkId },\n dynamicClient\n );\n\n return createTonClient({ rpcUrl: networkProvider.rpcUrls.http[0] });\n };\n\n const getActiveNetworkId: TonWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n const switchActiveNetwork: TonWalletProvider['switchActiveNetwork'] = async ({\n networkId,\n }: {\n networkId: string;\n }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: dynamicClient,\n networkId,\n walletProviderKey: key,\n });\n\n const isConnectedWalletType = (\n wallet: typeof tonConnectUI.wallet\n ): wallet is ConnectedWallet => wallet !== null && 'appName' in wallet;\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const convertAddressToUserFriendly = (address: string): string => {\n try {\n if (address.startsWith('EQ') || address.startsWith('UQ')) {\n return address;\n }\n\n const isTestnet = tonConnectUI.account?.chain === '-3';\n\n return Address.parse(address).toString({\n bounceable: false,\n testOnly: isTestnet,\n urlSafe: true,\n });\n } catch {\n return address;\n }\n };\n\n const getConnectedAddresses: TonWalletProvider['getConnectedAddresses'] =\n async () => {\n await tonConnectUI.connectionRestored;\n\n const wallet = tonConnectUI.wallet;\n\n if (\n !isConnectedWalletType(wallet) ||\n wallet.appName !== walletInfo.appName\n ) {\n return { addresses: [] };\n }\n\n return {\n addresses: [convertAddressToUserFriendly(wallet.account.address)],\n };\n };\n\n // TonConnect supports only one active connection. If another TON wallet\n // took over the session, reconnect to this wallet first, then throw so\n // the actual operation happens on a separate user action.\n //\n // In Telegram Mini Apps (TMA), programmatic deep links fail on the second\n // consecutive deep link, only user triggered deep links work reliably.\n // By splitting reconnect and the actual operation into two\n // separate user actions, each gets its own deep link and both succeed.\n const ensureCorrectWalletConnected = async (): Promise<void> => {\n await tonConnectUI.connectionRestored;\n\n const current = tonConnectUI.wallet;\n\n if (\n isConnectedWalletType(current) &&\n current.appName === walletInfo.appName\n )\n return;\n\n if (tonConnectUI.connected) {\n await tonConnectUI.disconnect();\n connectedWallet = null;\n }\n\n await connectWithModal();\n\n throw new TonConnectReconnectedError({ walletName: walletInfo.name });\n };\n\n // Connect via the TonConnect UI modal.\n const connectWithModal = (tonProofPayload?: string): Promise<void> =>\n new Promise((resolve, reject) => {\n if (tonProofPayload) {\n tonConnectUI.setConnectRequestParameters({\n state: 'ready',\n value: { tonProof: tonProofPayload },\n });\n }\n\n // Mutable handle. onStatusChange may fire synchronously on subscribe,\n // so the timeout id must live in an object assigned before registration\n // to avoid the temporal dead zone when clearing.\n const connectionTimeoutRef: {\n id: ReturnType<typeof setTimeout> | undefined;\n } = { id: undefined };\n\n // Holds the onStatusChange unsubscribe. When the callback fires\n // synchronously, `fn` isn't assigned yet; handledMatchingWalletInThisConnect\n // detaches the listener right after registration.\n const statusUnsubRef: { fn?: () => void } = {};\n let handledMatchingWalletInThisConnect = false;\n\n const handleModalClose = (state: {\n closeReason?: string | null;\n status: string;\n }) => {\n if (state.status !== 'closed') return;\n // 'wallet-selected' means a deep link was initiated — don't reject yet\n if (state.closeReason === 'wallet-selected') return;\n\n clearTimeout(connectionTimeoutRef.id);\n cleanup();\n\n const error: Error = new TonConnectRejectedError();\n reject(error);\n };\n\n let modalUnsub: (() => void) | undefined;\n\n if (walletInfo.appName) {\n modalUnsub =\n tonConnectUI.onSingleWalletModalStateChange(handleModalClose);\n } else {\n modalUnsub = tonConnectUI.onModalStateChange(\n handleModalClose as (state: WalletsModalState) => void\n );\n }\n\n const cleanup = () => {\n statusUnsubRef.fn?.();\n modalUnsub?.();\n tonConnectUI.setConnectRequestParameters(null);\n };\n\n statusUnsubRef.fn = tonConnectUI.onStatusChange(\n (wallet: ConnectedWallet | null) => {\n if (wallet?.appName !== walletInfo.appName) return;\n\n connectedWallet = wallet;\n statusUnsubRef.fn?.();\n clearTimeout(connectionTimeoutRef.id);\n handledMatchingWalletInThisConnect = true;\n resolve();\n try {\n cleanup();\n } catch {\n // setConnectRequestParameters may throw WalletAlreadyConnectedError\n // in TMA context. Safe to ignore since the wallet is connected.\n }\n }\n );\n\n if (handledMatchingWalletInThisConnect) {\n statusUnsubRef.fn?.();\n }\n\n connectionTimeoutRef.id = setTimeout(() => {\n cleanup();\n\n const error: Error = new TonConnectTimeoutError();\n reject(error);\n }, CONNECTION_TIMEOUT_MS);\n\n const handleOpenError = (error: unknown) => {\n cleanup();\n reject(error);\n };\n\n if (walletInfo.appName) {\n tonConnectUI\n .openSingleWalletModal(walletInfo.appName)\n .catch(handleOpenError);\n } else {\n tonConnectUI.openModal().catch(handleOpenError);\n }\n });\n\n const connect: TonWalletProvider['connect'] = async () => {\n await tonConnectUI.connectionRestored;\n\n const currentWallet = tonConnectUI.wallet;\n const isOurWallet =\n isConnectedWalletType(currentWallet) &&\n currentWallet.appName === walletInfo.appName;\n\n // Already connected to the correct wallet — return early\n if (tonConnectUI.connected && isOurWallet) {\n connectedWallet = currentWallet;\n const { account } = currentWallet!;\n const publicKey =\n account.publicKey ??\n extractPublicKeyFromStateInit({\n stateInitBase64: account.walletStateInit,\n });\n\n return {\n addresses: [\n { address: convertAddressToUserFriendly(account.address), publicKey },\n ],\n };\n }\n\n // Disconnect stale session before reconnecting\n if (tonConnectUI.connected && !isOurWallet) {\n await tonConnectUI.disconnect();\n connectedWallet = null;\n }\n\n // Fetch a nonce and bundle it as tonProof in the connection request.\n // This lets the wallet return both address and proof in a single\n // handshake, avoiding a second deep link during verification (critical\n // for TMA where sequential deep links fail).\n let proofNonce: string | undefined;\n try {\n proofNonce = await getNonce(dynamicClient);\n } catch {\n // Nonce fetch may fail if settings aren't loaded yet, connect\n // without proof and fall back to the disconnect/reconnect flow\n // during verification.\n }\n\n await connectWithModal(proofNonce);\n\n // Store the nonce so verification can reuse it in the SIWE message,\n // matching the cached tonProof payload.\n cachedProofNonce = proofNonce;\n\n const wallet = tonConnectUI.wallet;\n assertDefined(wallet, 'Wallet not connected after successful connection');\n\n const { account } = wallet;\n const publicKey =\n account.publicKey ??\n extractPublicKeyFromStateInit({\n stateInitBase64: account.walletStateInit,\n });\n\n return {\n addresses: [\n { address: convertAddressToUserFriendly(account.address), publicKey },\n ],\n };\n };\n\n const signMessage: TonWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n // Verification messages (SIWE-style) contain a nonce. For TON external\n // wallets, we use tonProof instead of raw signing, it includes state_init\n // and public_key which the backend needs to verify ownership of a TON\n // smart contract wallet.\n const nonceMatch = message.match(/Nonce:\\s*([^\\n\\r]+)/i);\n if (nonceMatch?.[1]) {\n const nonce = nonceMatch[1].trim().slice(0, 128);\n const proof = await generateTonConnectProof!({\n payload: nonce,\n walletAccount,\n });\n\n const stateInit = connectedWallet?.account.walletStateInit;\n const publicKey =\n connectedWallet?.account.publicKey ??\n (stateInit\n ? extractPublicKeyFromStateInit({ stateInitBase64: stateInit })\n : undefined);\n\n return {\n signature: JSON.stringify({\n address: connectedWallet?.account.address ?? walletAccount.address,\n proof: {\n domain: proof.domain,\n payload: proof.payload,\n signature: proof.signature,\n state_init: stateInit,\n timestamp: proof.timestamp,\n },\n public_key: publicKey,\n }),\n };\n }\n\n await ensureCorrectWalletConnected();\n\n const result = await tonConnectUI.signData({\n text: message,\n type: 'text',\n });\n\n return { signature: result.signature };\n };\n\n const sendTransaction: TonWalletProvider['sendTransaction'] = async ({\n request,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n await ensureCorrectWalletConnected();\n\n const result = await tonConnectUI.sendTransaction({\n messages: request.messages.map((msg) => ({\n address: msg.address,\n amount: msg.amount,\n payload: msg.payload,\n stateInit: msg.stateInit,\n })),\n validUntil: request.validUntil,\n });\n\n return { transactionHash: result.boc };\n };\n\n const sendTon: TonWalletProvider['sendTon'] = async ({\n transaction,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const request = prepareTonNativeTransfer({\n amountInNanoton: transaction.amount.toString(),\n recipient: transaction.recipientAddress,\n timeout: DEFAULT_TIMEOUT,\n walletAddress: walletAccount.address,\n });\n\n return sendTransaction({ request, walletAccount });\n };\n\n const sendJetton: TonWalletProvider['sendJetton'] = async ({\n transaction,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const client = await getTonClientForActiveNetwork();\n\n const request = await prepareJettonTransfer({\n client,\n forwardTonAmount: transaction.forwardTonAmount ?? BigInt(0),\n gasAmount: transaction.gasAmount ?? DEFAULT_JETTON_GAS,\n jettonAmount: transaction.amount,\n jettonMasterAddress: transaction.jettonMasterAddress,\n recipientAddress: transaction.recipientAddress,\n timeout: DEFAULT_TIMEOUT,\n walletAddress: walletAccount.address,\n });\n\n return sendTransaction({ request, walletAccount });\n };\n\n // Disconnects the current TonConnect session and reconnects with a\n // proof payload via the modal.\n // eslint-disable-next-line custom-rules/require-single-object-param\n const reconnectWithProof = async (payload: string) => {\n if (tonConnectUI.connected) {\n connectedWallet = null;\n await tonConnectUI.disconnect();\n }\n\n await connectWithModal(payload);\n };\n\n // Returns a cached proof from the initial connection handshake when\n // available. Falls back to a disconnect/reconnect cycle with the\n // requested payload when the cached proof is missing or stale.\n const generateTonConnectProof: TonWalletProvider['generateTonConnectProof'] =\n async ({ payload, walletAccount }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n // Return cached proof if already connected with matching payload\n if (connectedWallet?.connectItems?.tonProof) {\n const { tonProof } = connectedWallet.connectItems;\n\n if ('proof' in tonProof && tonProof.proof.payload === payload) {\n // Clear after use, nonces are one-time-use on the backend\n cachedProofNonce = undefined;\n\n return {\n address: walletAccount.address,\n domain: tonProof.proof.domain,\n payload: tonProof.proof.payload,\n signature: tonProof.proof.signature,\n timestamp: tonProof.proof.timestamp,\n };\n }\n }\n\n // Suppress SDK events during the disconnect/reconnect cycle so the\n // wallet management layer doesn't see a sudden disconnect + accounts\n // change during verification.\n suppressStatusEvents = true;\n\n try {\n await reconnectWithProof(payload);\n } finally {\n suppressStatusEvents = false;\n }\n\n const wallet = tonConnectUI.wallet;\n const proof = isConnectedWalletType(wallet)\n ? wallet.connectItems?.tonProof\n : undefined;\n\n if (!proof || !('proof' in proof)) {\n throw new TonConnectProofNotAvailableError();\n }\n\n return {\n address: walletAccount.address,\n domain: proof.proof.domain,\n payload: proof.proof.payload,\n signature: proof.proof.signature,\n timestamp: proof.proof.timestamp,\n };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter<VoidFunction>({\n removeEventListeners: ({\n setupReturnValue,\n }: {\n setupReturnValue: VoidFunction | undefined;\n }) => {\n assertDefined(setupReturnValue, 'Setup return value not defined');\n setupReturnValue();\n },\n\n setupEventListeners: ({\n handleAccountsChanged,\n handleDisconnected,\n }: {\n handleAccountsChanged: (args: { addresses: string[] }) => void;\n handleDisconnected: () => void;\n }) =>\n tonConnectUI.onStatusChange((wallet: ConnectedWallet | null) => {\n if (suppressStatusEvents) return;\n\n if (wallet?.appName !== walletInfo.appName) {\n if (connectedWallet) {\n connectedWallet = null;\n handleDisconnected();\n }\n return;\n }\n\n connectedWallet = wallet;\n handleAccountsChanged({\n addresses: [convertAddressToUserFriendly(wallet.account.address)],\n });\n }),\n\n supportedEvents: ['accountsChanged', 'disconnected'],\n });\n\n const destroy: TonWalletProvider['destroy'] = async () => {\n cleanupEventEmitter();\n try {\n const currentWallet = tonConnectUI.wallet;\n\n if (\n tonConnectUI.connected &&\n (!isConnectedWalletType(currentWallet) ||\n currentWallet.appName === walletInfo.appName)\n ) {\n await tonConnectUI.disconnect();\n }\n\n connectedWallet = null;\n } catch (err) {\n getCore(dynamicClient).logger.error(\n `[${key}] destroy: remote signal failed`,\n err\n );\n }\n };\n\n return {\n chain,\n connect,\n destroy,\n get events() {\n return getEventEmitter();\n },\n generateTonConnectProof,\n getActiveNetworkId,\n getConnectedAddresses,\n getConnectProofNonce: () => cachedProofNonce,\n groupKey: formatWalletProviderGroupKey(walletInfo.name),\n key,\n metadata: {\n displayName: walletInfo.name,\n icon: walletInfo.icon,\n },\n sendJetton,\n sendTon,\n sendTransaction,\n signMessage,\n switchActiveNetwork,\n transferAmount: (args) => tonTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n WalletProviderPriority,\n getWalletProviderRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport type { TonConnectUI } from '@tonconnect/ui';\n\nimport { TON_CONNECT_DISPLAY_NAME_OVERRIDES } from '../../tonConnectDisplayNameOverrides';\nimport { createWalletProviderFromTonConnect } from '../createWalletProviderFromTonConnect';\n\ntype DiscoverAndRegisterWalletsParams = {\n client: DynamicClient;\n tonConnectUI: TonConnectUI;\n};\n\n/**\n * Discovers TonConnect wallets and registers each as a wallet provider.\n *\n * Queries the TonConnect registry for the full wallet catalog and registers\n * every entry as a wallet provider with the Dynamic client. Display names are\n * taken from the registry by default; a small override map handles wallets\n * whose registry name would otherwise be too generic (e.g. Telegram Wallet).\n *\n * @notInstrumented\n */\nexport const discoverAndRegisterWallets = async ({\n client,\n tonConnectUI,\n}: DiscoverAndRegisterWalletsParams): Promise<void> => {\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const wallets = await tonConnectUI.connector.getWallets();\n\n for (const wallet of wallets) {\n const isInjected =\n 'jsBridgeKey' in wallet &&\n 'injected' in wallet &&\n (wallet as unknown as { injected: boolean }).injected === true;\n\n const walletProvider = createWalletProviderFromTonConnect({\n dynamicClient: client,\n tonConnectUI,\n walletInfo: {\n appName: wallet.appName,\n icon: wallet.imageUrl,\n jsBridgeKey: isInjected\n ? (wallet as unknown as { jsBridgeKey: string }).jsBridgeKey\n : undefined,\n name:\n TON_CONNECT_DISPLAY_NAME_OVERRIDES[wallet.appName] ?? wallet.name,\n },\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,\n walletProvider,\n });\n }\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n getDefaultClient,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\nimport type { TonConnectUI } from '@tonconnect/ui';\n\nimport { registerTonNetworkProviderBuilder } from '../../registerTonNetworkProviderBuilder';\nimport { createDefaultTonConnectUI } from '../utils/createDefaultTonConnectUI';\nimport { discoverAndRegisterWallets } from '../utils/discoverAndRegisterWallets';\n\nexport const TON_CONNECT_EXTENSION_KEY = 'tonConnect';\n\nexport type AddTonConnectExtensionParams = {\n /**\n * An external TonConnectUI instance to reuse. When omitted, a new instance\n * is created internally using the Dynamic environment's universal link as\n * the manifest URL. Provide this when your app already manages a\n * TonConnectUI singleton.\n */\n tonConnectUI?: TonConnectUI;\n};\n\n/**\n * Adds the TonConnect extension to the Dynamic client.\n *\n * This extension enables external TON wallet support via the TonConnect protocol,\n * discovering and registering supported wallets (Tonkeeper, MyTonWallet, etc.)\n * as wallet providers.\n *\n * @param [params] - Optional configuration for the TonConnect extension.\n * @param [params.tonConnectUI] - An external TonConnectUI instance to reuse.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addTonConnectExtension = (\n { tonConnectUI }: AddTonConnectExtensionParams = {},\n client: DynamicClient = getDefaultClient()\n): void => {\n if (hasExtension({ extensionKey: TON_CONNECT_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: TON_CONNECT_EXTENSION_KEY }, client);\n registerTonNetworkProviderBuilder(client);\n\n const resolvedTonConnectUI =\n tonConnectUI ?? createDefaultTonConnectUI(client);\n\n void discoverAndRegisterWallets({\n client,\n tonConnectUI: resolvedTonConnectUI,\n });\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const require_tonTransferAmount = require('./tonTransferAmount-C0I7SiC0.cjs');
1
+ const require_tonTransferAmount = require('./tonTransferAmount-ojUTvwg9.cjs');
2
2
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
3
3
  let _ton_ton = require("@ton/ton");
4
4
  let _tonconnect_ui = require("@tonconnect/ui");
@@ -16,7 +16,7 @@ let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
16
16
  *
17
17
  * @param client - The Dynamic client instance.
18
18
  * @throws When the environment's universal link is not configured.
19
- * @not-instrumented
19
+ * @notInstrumented
20
20
  */
21
21
  const createDefaultTonConnectUI = (client) => {
22
22
  const universalLink = (0, _dynamic_labs_sdk_client_core.getCore)(client).metadata?.universalLink;
@@ -126,7 +126,7 @@ const PUBLIC_KEY_BYTES = 32;
126
126
  * Parses the base64-encoded StateInit cell to retrieve the 32-byte public key
127
127
  * from the data cell, handling both V5R1 and standard wallet contract layouts.
128
128
  *
129
- * @not-instrumented
129
+ * @notInstrumented
130
130
  */
131
131
  const extractPublicKeyFromStateInit = ({ stateInitBase64 }) => {
132
132
  const stateInit = (0, _ton_core.loadStateInit)(_ton_ton.Cell.fromBase64(stateInitBase64).beginParse());
@@ -150,7 +150,7 @@ const CONNECTION_TIMEOUT_MS = 3e4;
150
150
  * Wraps the TonConnect UI instance to provide connect, disconnect, sign, and
151
151
  * send operations for an external TON wallet (Tonkeeper, MyTonWallet, etc.).
152
152
  *
153
- * @not-instrumented
153
+ * @notInstrumented
154
154
  */
155
155
  const createWalletProviderFromTonConnect = ({ dynamicClient, tonConnectUI, walletInfo }) => {
156
156
  const chain = "TON";
@@ -462,7 +462,7 @@ const createWalletProviderFromTonConnect = ({ dynamicClient, tonConnectUI, walle
462
462
  * taken from the registry by default; a small override map handles wallets
463
463
  * whose registry name would otherwise be too generic (e.g. Telegram Wallet).
464
464
  *
465
- * @not-instrumented
465
+ * @notInstrumented
466
466
  */
467
467
  const discoverAndRegisterWallets = async ({ client, tonConnectUI }) => {
468
468
  const walletProviderRegistry = (0, _dynamic_labs_sdk_client_core.getWalletProviderRegistry)(client);
@@ -499,7 +499,7 @@ const TON_CONNECT_EXTENSION_KEY = "tonConnect";
499
499
  * @param [params] - Optional configuration for the TonConnect extension.
500
500
  * @param [params.tonConnectUI] - An external TonConnectUI instance to reuse.
501
501
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
502
- * @not-instrumented
502
+ * @notInstrumented
503
503
  */
504
504
  const addTonConnectExtension = ({ tonConnectUI } = {}, client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
505
505
  if ((0, _dynamic_labs_sdk_client_core.hasExtension)({ extensionKey: TON_CONNECT_EXTENSION_KEY }, client)) return;
@@ -518,4 +518,4 @@ Object.defineProperty(exports, 'addTonConnectExtension', {
518
518
  return addTonConnectExtension;
519
519
  }
520
520
  });
521
- //# sourceMappingURL=addTonConnectExtension-BvDBUqVK.cjs.map
521
+ //# sourceMappingURL=addTonConnectExtension-bMHrg2hj.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addTonConnectExtension-bMHrg2hj.cjs","names":["TonConnectUI","TON_CONNECT_DISPLAY_NAME_OVERRIDES: Record<string, string>","BaseError","BaseError","BaseError","BaseError","BaseError","Cell","WalletProviderEnum","connectedWallet: ConnectedWallet | null","cachedProofNonce: string | undefined","createTonClient","getActiveNetworkId: TonWalletProvider['getActiveNetworkId']","switchActiveNetwork: TonWalletProvider['switchActiveNetwork']","Address","getConnectedAddresses: TonWalletProvider['getConnectedAddresses']","connectionTimeoutRef: {\n id: ReturnType<typeof setTimeout> | undefined;\n }","statusUnsubRef: { fn?: () => void }","modalUnsub: (() => void) | undefined","connect: TonWalletProvider['connect']","publicKey","account","proofNonce: string | undefined","signMessage: TonWalletProvider['signMessage']","sendTransaction: TonWalletProvider['sendTransaction']","sendTon: TonWalletProvider['sendTon']","prepareTonNativeTransfer","DEFAULT_TIMEOUT","sendJetton: TonWalletProvider['sendJetton']","prepareJettonTransfer","DEFAULT_JETTON_GAS","generateTonConnectProof: TonWalletProvider['generateTonConnectProof']","destroy: TonWalletProvider['destroy']","tonTransferAmount","WalletProviderPriority"],"sources":["../src/tonConnect/utils/createDefaultTonConnectUI/createDefaultTonConnectUI.ts","../src/tonConnect/tonConnectDisplayNameOverrides.ts","../src/errors/TonConnectProofNotAvailableError.ts","../src/errors/TonConnectReconnectedError.ts","../src/errors/TonConnectRejectedError.ts","../src/errors/TonConnectTimeoutError.ts","../src/errors/StateInitMissingError.ts","../src/tonConnect/utils/extractPublicKeyFromStateInit/extractPublicKeyFromStateInit.ts","../src/tonConnect/utils/createWalletProviderFromTonConnect/createWalletProviderFromTonConnect.ts","../src/tonConnect/utils/discoverAndRegisterWallets/discoverAndRegisterWallets.ts","../src/tonConnect/addTonConnectExtension/addTonConnectExtension.ts"],"sourcesContent":["import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n getCore,\n} from '@dynamic-labs-sdk/client/core';\nimport { TonConnectUI } from '@tonconnect/ui';\n\n/**\n * Creates a default TonConnectUI instance using the Dynamic environment's\n * universal link as the source for the TonConnect manifest URL.\n *\n * Used as a fallback when the consumer does not pass an external\n * TonConnectUI into `addTonConnectExtension`.\n *\n * @param client - The Dynamic client instance.\n * @throws When the environment's universal link is not configured.\n * @notInstrumented\n */\nexport const createDefaultTonConnectUI = (\n client: DynamicClient,\n): TonConnectUI => {\n const universalLink = getCore(client).metadata?.universalLink;\n assertDefined(universalLink, 'Universal link is not set');\n\n return new TonConnectUI({\n manifestUrl: `${universalLink}/tonconnect-manifest.json`,\n });\n};\n","/**\n * Display-name overrides for wallets returned by TonConnect's registry.\n *\n * TonConnect's `getWallets()` returns the full ecosystem catalog. Each wallet\n * comes with its own `name`, which we use as-is by default. A small number of\n * wallets ship a name that is too generic to render (e.g. Telegram Wallet's\n * registry name is just `'Wallet'`); we override those here.\n *\n * IMPORTANT: the wallet's normalized display name is what `formatWalletProviderKey`\n * uses to derive the persisted `walletProviderKey`. Changing an override breaks\n * re-login for any user who linked under the previous name. Treat this map as\n * append-only: never edit existing values, only add new ones.\n *\n * Keys are TonConnect `appName` identifiers; values are the display names we\n * want to render and persist.\n */\nexport const TON_CONNECT_DISPLAY_NAME_OVERRIDES: Record<string, string> = {\n 'telegram-wallet': 'Telegram Wallet',\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class TonConnectProofNotAvailableError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'ton_connect_proof_not_available_error',\n docsUrl: null,\n name: 'TonConnectProofNotAvailableError',\n shortMessage: 'TonConnect proof not available',\n });\n }\n}\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class TonConnectReconnectedError extends BaseError {\n constructor(params: { walletName: string }) {\n super({\n cause: null,\n code: 'ton_connect_reconnected_error',\n docsUrl: null,\n name: 'TonConnectReconnectedError',\n shortMessage: `Reconnected to ${params.walletName}. Please try the action again.`,\n });\n }\n}\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class TonConnectRejectedError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'ton_connect_rejected_error',\n docsUrl: null,\n name: 'TonConnectRejectedError',\n shortMessage: 'User rejected connection',\n });\n }\n}\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class TonConnectTimeoutError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'ton_connect_timeout_error',\n docsUrl: null,\n name: 'TonConnectTimeoutError',\n shortMessage: 'Connection timed out — wallet did not respond',\n });\n }\n}\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class StateInitMissingError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'state_init_missing_error',\n docsUrl: null,\n name: 'StateInitMissingError',\n shortMessage: 'StateInit missing code or data cell',\n });\n }\n}\n","import { loadStateInit } from '@ton/core';\nimport { Cell } from '@ton/ton';\n\nimport { StateInitMissingError } from '../../../errors/StateInitMissingError';\n\nconst V5R1_CODE_HASHES = new Set([\n '2e39545f25bdc993f3bc2c1f5a3db09c1f30b70e3dd35c7ef3c25a12764fe4d0',\n '20cbb8a4c59a2521eb6e890a04b27d4f72827646a0b4bc9e20d04d8ff49e2a00',\n]);\n\nconst V5R1_SKIP_BITS = 65;\nconst DEFAULT_SKIP_BITS = 64;\nconst PUBLIC_KEY_BYTES = 32;\n\ntype ExtractPublicKeyFromStateInitParams = {\n stateInitBase64: string;\n};\n\n/**\n * Extracts the public key from a TON wallet's StateInit.\n *\n * Parses the base64-encoded StateInit cell to retrieve the 32-byte public key\n * from the data cell, handling both V5R1 and standard wallet contract layouts.\n *\n * @notInstrumented\n */\nexport const extractPublicKeyFromStateInit = ({\n stateInitBase64,\n}: ExtractPublicKeyFromStateInitParams): string => {\n const stateInitCell = Cell.fromBase64(stateInitBase64);\n const slice = stateInitCell.beginParse();\n\n const stateInit = loadStateInit(slice);\n\n const codeCell = stateInit.code;\n const dataCell = stateInit.data;\n\n if (!codeCell || !dataCell) {\n throw new StateInitMissingError();\n }\n\n const codeHash = codeCell.hash().toString('hex');\n const isV5R1 = V5R1_CODE_HASHES.has(codeHash);\n\n const dataSlice = dataCell.beginParse();\n const bitsToSkip = isV5R1 ? V5R1_SKIP_BITS : DEFAULT_SKIP_BITS;\n dataSlice.skip(bitsToSkip);\n\n const publicKeyBuffer = dataSlice.loadBuffer(PUBLIC_KEY_BYTES);\n\n return publicKeyBuffer.toString('hex');\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n getCore,\n getNetworkProviderFromNetworkId,\n getNonce,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Address } from '@ton/core';\nimport type { TonClient } from '@ton/ton';\nimport type {\n ConnectedWallet,\n TonConnectUI,\n WalletsModalState,\n} from '@tonconnect/ui';\n\nimport { TonConnectProofNotAvailableError } from '../../../errors/TonConnectProofNotAvailableError';\nimport { TonConnectReconnectedError } from '../../../errors/TonConnectReconnectedError';\nimport { TonConnectRejectedError } from '../../../errors/TonConnectRejectedError';\nimport { TonConnectTimeoutError } from '../../../errors/TonConnectTimeoutError';\nimport type { TonWalletProvider } from '../../../TonWalletProvider.types';\nimport { DEFAULT_JETTON_GAS, DEFAULT_TIMEOUT } from '../../../utils/constants';\nimport { createTonClient } from '../../../utils/createTonClient';\nimport { prepareJettonTransfer } from '../../../utils/prepareJettonTransfer';\nimport { prepareTonNativeTransfer } from '../../../utils/prepareTonNativeTransfer';\nimport { tonTransferAmount } from '../../../utils/tonTransferAmount';\nimport { extractPublicKeyFromStateInit } from '../extractPublicKeyFromStateInit';\n\nconst CONNECTION_TIMEOUT_MS = 30_000;\n\ntype CreateWalletProviderFromTonConnectParams = {\n dynamicClient: DynamicClient;\n tonConnectUI: TonConnectUI;\n walletInfo: {\n appName: string;\n icon: string;\n jsBridgeKey?: string;\n name: string;\n };\n};\n\n/**\n * Creates a TonWalletProvider from a TonConnect wallet.\n *\n * Wraps the TonConnect UI instance to provide connect, disconnect, sign, and\n * send operations for an external TON wallet (Tonkeeper, MyTonWallet, etc.).\n *\n * @notInstrumented\n */\nexport const createWalletProviderFromTonConnect = ({\n dynamicClient,\n tonConnectUI,\n walletInfo,\n}: CreateWalletProviderFromTonConnectParams): TonWalletProvider => {\n const chain = 'TON' as const;\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n let connectedWallet: ConnectedWallet | null = null;\n let suppressStatusEvents = false;\n let cachedProofNonce: string | undefined;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: walletInfo.name,\n walletProviderType,\n });\n\n const getTonClientForActiveNetwork = async (): Promise<TonClient> => {\n const { networkId } = await getActiveNetworkId();\n const networkProvider = getNetworkProviderFromNetworkId(\n { chain: 'TON', networkId },\n dynamicClient\n );\n\n return createTonClient({ rpcUrl: networkProvider.rpcUrls.http[0] });\n };\n\n const getActiveNetworkId: TonWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n const switchActiveNetwork: TonWalletProvider['switchActiveNetwork'] = async ({\n networkId,\n }: {\n networkId: string;\n }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: dynamicClient,\n networkId,\n walletProviderKey: key,\n });\n\n const isConnectedWalletType = (\n wallet: typeof tonConnectUI.wallet\n ): wallet is ConnectedWallet => wallet !== null && 'appName' in wallet;\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const convertAddressToUserFriendly = (address: string): string => {\n try {\n if (address.startsWith('EQ') || address.startsWith('UQ')) {\n return address;\n }\n\n const isTestnet = tonConnectUI.account?.chain === '-3';\n\n return Address.parse(address).toString({\n bounceable: false,\n testOnly: isTestnet,\n urlSafe: true,\n });\n } catch {\n return address;\n }\n };\n\n const getConnectedAddresses: TonWalletProvider['getConnectedAddresses'] =\n async () => {\n await tonConnectUI.connectionRestored;\n\n const wallet = tonConnectUI.wallet;\n\n if (\n !isConnectedWalletType(wallet) ||\n wallet.appName !== walletInfo.appName\n ) {\n return { addresses: [] };\n }\n\n return {\n addresses: [convertAddressToUserFriendly(wallet.account.address)],\n };\n };\n\n // TonConnect supports only one active connection. If another TON wallet\n // took over the session, reconnect to this wallet first, then throw so\n // the actual operation happens on a separate user action.\n //\n // In Telegram Mini Apps (TMA), programmatic deep links fail on the second\n // consecutive deep link, only user triggered deep links work reliably.\n // By splitting reconnect and the actual operation into two\n // separate user actions, each gets its own deep link and both succeed.\n const ensureCorrectWalletConnected = async (): Promise<void> => {\n await tonConnectUI.connectionRestored;\n\n const current = tonConnectUI.wallet;\n\n if (\n isConnectedWalletType(current) &&\n current.appName === walletInfo.appName\n )\n return;\n\n if (tonConnectUI.connected) {\n await tonConnectUI.disconnect();\n connectedWallet = null;\n }\n\n await connectWithModal();\n\n throw new TonConnectReconnectedError({ walletName: walletInfo.name });\n };\n\n // Connect via the TonConnect UI modal.\n const connectWithModal = (tonProofPayload?: string): Promise<void> =>\n new Promise((resolve, reject) => {\n if (tonProofPayload) {\n tonConnectUI.setConnectRequestParameters({\n state: 'ready',\n value: { tonProof: tonProofPayload },\n });\n }\n\n // Mutable handle. onStatusChange may fire synchronously on subscribe,\n // so the timeout id must live in an object assigned before registration\n // to avoid the temporal dead zone when clearing.\n const connectionTimeoutRef: {\n id: ReturnType<typeof setTimeout> | undefined;\n } = { id: undefined };\n\n // Holds the onStatusChange unsubscribe. When the callback fires\n // synchronously, `fn` isn't assigned yet; handledMatchingWalletInThisConnect\n // detaches the listener right after registration.\n const statusUnsubRef: { fn?: () => void } = {};\n let handledMatchingWalletInThisConnect = false;\n\n const handleModalClose = (state: {\n closeReason?: string | null;\n status: string;\n }) => {\n if (state.status !== 'closed') return;\n // 'wallet-selected' means a deep link was initiated — don't reject yet\n if (state.closeReason === 'wallet-selected') return;\n\n clearTimeout(connectionTimeoutRef.id);\n cleanup();\n\n const error: Error = new TonConnectRejectedError();\n reject(error);\n };\n\n let modalUnsub: (() => void) | undefined;\n\n if (walletInfo.appName) {\n modalUnsub =\n tonConnectUI.onSingleWalletModalStateChange(handleModalClose);\n } else {\n modalUnsub = tonConnectUI.onModalStateChange(\n handleModalClose as (state: WalletsModalState) => void\n );\n }\n\n const cleanup = () => {\n statusUnsubRef.fn?.();\n modalUnsub?.();\n tonConnectUI.setConnectRequestParameters(null);\n };\n\n statusUnsubRef.fn = tonConnectUI.onStatusChange(\n (wallet: ConnectedWallet | null) => {\n if (wallet?.appName !== walletInfo.appName) return;\n\n connectedWallet = wallet;\n statusUnsubRef.fn?.();\n clearTimeout(connectionTimeoutRef.id);\n handledMatchingWalletInThisConnect = true;\n resolve();\n try {\n cleanup();\n } catch {\n // setConnectRequestParameters may throw WalletAlreadyConnectedError\n // in TMA context. Safe to ignore since the wallet is connected.\n }\n }\n );\n\n if (handledMatchingWalletInThisConnect) {\n statusUnsubRef.fn?.();\n }\n\n connectionTimeoutRef.id = setTimeout(() => {\n cleanup();\n\n const error: Error = new TonConnectTimeoutError();\n reject(error);\n }, CONNECTION_TIMEOUT_MS);\n\n const handleOpenError = (error: unknown) => {\n cleanup();\n reject(error);\n };\n\n if (walletInfo.appName) {\n tonConnectUI\n .openSingleWalletModal(walletInfo.appName)\n .catch(handleOpenError);\n } else {\n tonConnectUI.openModal().catch(handleOpenError);\n }\n });\n\n const connect: TonWalletProvider['connect'] = async () => {\n await tonConnectUI.connectionRestored;\n\n const currentWallet = tonConnectUI.wallet;\n const isOurWallet =\n isConnectedWalletType(currentWallet) &&\n currentWallet.appName === walletInfo.appName;\n\n // Already connected to the correct wallet — return early\n if (tonConnectUI.connected && isOurWallet) {\n connectedWallet = currentWallet;\n const { account } = currentWallet!;\n const publicKey =\n account.publicKey ??\n extractPublicKeyFromStateInit({\n stateInitBase64: account.walletStateInit,\n });\n\n return {\n addresses: [\n { address: convertAddressToUserFriendly(account.address), publicKey },\n ],\n };\n }\n\n // Disconnect stale session before reconnecting\n if (tonConnectUI.connected && !isOurWallet) {\n await tonConnectUI.disconnect();\n connectedWallet = null;\n }\n\n // Fetch a nonce and bundle it as tonProof in the connection request.\n // This lets the wallet return both address and proof in a single\n // handshake, avoiding a second deep link during verification (critical\n // for TMA where sequential deep links fail).\n let proofNonce: string | undefined;\n try {\n proofNonce = await getNonce(dynamicClient);\n } catch {\n // Nonce fetch may fail if settings aren't loaded yet, connect\n // without proof and fall back to the disconnect/reconnect flow\n // during verification.\n }\n\n await connectWithModal(proofNonce);\n\n // Store the nonce so verification can reuse it in the SIWE message,\n // matching the cached tonProof payload.\n cachedProofNonce = proofNonce;\n\n const wallet = tonConnectUI.wallet;\n assertDefined(wallet, 'Wallet not connected after successful connection');\n\n const { account } = wallet;\n const publicKey =\n account.publicKey ??\n extractPublicKeyFromStateInit({\n stateInitBase64: account.walletStateInit,\n });\n\n return {\n addresses: [\n { address: convertAddressToUserFriendly(account.address), publicKey },\n ],\n };\n };\n\n const signMessage: TonWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n // Verification messages (SIWE-style) contain a nonce. For TON external\n // wallets, we use tonProof instead of raw signing, it includes state_init\n // and public_key which the backend needs to verify ownership of a TON\n // smart contract wallet.\n const nonceMatch = message.match(/Nonce:\\s*([^\\n\\r]+)/i);\n if (nonceMatch?.[1]) {\n const nonce = nonceMatch[1].trim().slice(0, 128);\n const proof = await generateTonConnectProof!({\n payload: nonce,\n walletAccount,\n });\n\n const stateInit = connectedWallet?.account.walletStateInit;\n const publicKey =\n connectedWallet?.account.publicKey ??\n (stateInit\n ? extractPublicKeyFromStateInit({ stateInitBase64: stateInit })\n : undefined);\n\n return {\n signature: JSON.stringify({\n address: connectedWallet?.account.address ?? walletAccount.address,\n proof: {\n domain: proof.domain,\n payload: proof.payload,\n signature: proof.signature,\n state_init: stateInit,\n timestamp: proof.timestamp,\n },\n public_key: publicKey,\n }),\n };\n }\n\n await ensureCorrectWalletConnected();\n\n const result = await tonConnectUI.signData({\n text: message,\n type: 'text',\n });\n\n return { signature: result.signature };\n };\n\n const sendTransaction: TonWalletProvider['sendTransaction'] = async ({\n request,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n await ensureCorrectWalletConnected();\n\n const result = await tonConnectUI.sendTransaction({\n messages: request.messages.map((msg) => ({\n address: msg.address,\n amount: msg.amount,\n payload: msg.payload,\n stateInit: msg.stateInit,\n })),\n validUntil: request.validUntil,\n });\n\n return { transactionHash: result.boc };\n };\n\n const sendTon: TonWalletProvider['sendTon'] = async ({\n transaction,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const request = prepareTonNativeTransfer({\n amountInNanoton: transaction.amount.toString(),\n recipient: transaction.recipientAddress,\n timeout: DEFAULT_TIMEOUT,\n walletAddress: walletAccount.address,\n });\n\n return sendTransaction({ request, walletAccount });\n };\n\n const sendJetton: TonWalletProvider['sendJetton'] = async ({\n transaction,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const client = await getTonClientForActiveNetwork();\n\n const request = await prepareJettonTransfer({\n client,\n forwardTonAmount: transaction.forwardTonAmount ?? BigInt(0),\n gasAmount: transaction.gasAmount ?? DEFAULT_JETTON_GAS,\n jettonAmount: transaction.amount,\n jettonMasterAddress: transaction.jettonMasterAddress,\n recipientAddress: transaction.recipientAddress,\n timeout: DEFAULT_TIMEOUT,\n walletAddress: walletAccount.address,\n });\n\n return sendTransaction({ request, walletAccount });\n };\n\n // Disconnects the current TonConnect session and reconnects with a\n // proof payload via the modal.\n // eslint-disable-next-line custom-rules/require-single-object-param\n const reconnectWithProof = async (payload: string) => {\n if (tonConnectUI.connected) {\n connectedWallet = null;\n await tonConnectUI.disconnect();\n }\n\n await connectWithModal(payload);\n };\n\n // Returns a cached proof from the initial connection handshake when\n // available. Falls back to a disconnect/reconnect cycle with the\n // requested payload when the cached proof is missing or stale.\n const generateTonConnectProof: TonWalletProvider['generateTonConnectProof'] =\n async ({ payload, walletAccount }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n // Return cached proof if already connected with matching payload\n if (connectedWallet?.connectItems?.tonProof) {\n const { tonProof } = connectedWallet.connectItems;\n\n if ('proof' in tonProof && tonProof.proof.payload === payload) {\n // Clear after use, nonces are one-time-use on the backend\n cachedProofNonce = undefined;\n\n return {\n address: walletAccount.address,\n domain: tonProof.proof.domain,\n payload: tonProof.proof.payload,\n signature: tonProof.proof.signature,\n timestamp: tonProof.proof.timestamp,\n };\n }\n }\n\n // Suppress SDK events during the disconnect/reconnect cycle so the\n // wallet management layer doesn't see a sudden disconnect + accounts\n // change during verification.\n suppressStatusEvents = true;\n\n try {\n await reconnectWithProof(payload);\n } finally {\n suppressStatusEvents = false;\n }\n\n const wallet = tonConnectUI.wallet;\n const proof = isConnectedWalletType(wallet)\n ? wallet.connectItems?.tonProof\n : undefined;\n\n if (!proof || !('proof' in proof)) {\n throw new TonConnectProofNotAvailableError();\n }\n\n return {\n address: walletAccount.address,\n domain: proof.proof.domain,\n payload: proof.proof.payload,\n signature: proof.proof.signature,\n timestamp: proof.proof.timestamp,\n };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter<VoidFunction>({\n removeEventListeners: ({\n setupReturnValue,\n }: {\n setupReturnValue: VoidFunction | undefined;\n }) => {\n assertDefined(setupReturnValue, 'Setup return value not defined');\n setupReturnValue();\n },\n\n setupEventListeners: ({\n handleAccountsChanged,\n handleDisconnected,\n }: {\n handleAccountsChanged: (args: { addresses: string[] }) => void;\n handleDisconnected: () => void;\n }) =>\n tonConnectUI.onStatusChange((wallet: ConnectedWallet | null) => {\n if (suppressStatusEvents) return;\n\n if (wallet?.appName !== walletInfo.appName) {\n if (connectedWallet) {\n connectedWallet = null;\n handleDisconnected();\n }\n return;\n }\n\n connectedWallet = wallet;\n handleAccountsChanged({\n addresses: [convertAddressToUserFriendly(wallet.account.address)],\n });\n }),\n\n supportedEvents: ['accountsChanged', 'disconnected'],\n });\n\n const destroy: TonWalletProvider['destroy'] = async () => {\n cleanupEventEmitter();\n try {\n const currentWallet = tonConnectUI.wallet;\n\n if (\n tonConnectUI.connected &&\n (!isConnectedWalletType(currentWallet) ||\n currentWallet.appName === walletInfo.appName)\n ) {\n await tonConnectUI.disconnect();\n }\n\n connectedWallet = null;\n } catch (err) {\n getCore(dynamicClient).logger.error(\n `[${key}] destroy: remote signal failed`,\n err\n );\n }\n };\n\n return {\n chain,\n connect,\n destroy,\n get events() {\n return getEventEmitter();\n },\n generateTonConnectProof,\n getActiveNetworkId,\n getConnectedAddresses,\n getConnectProofNonce: () => cachedProofNonce,\n groupKey: formatWalletProviderGroupKey(walletInfo.name),\n key,\n metadata: {\n displayName: walletInfo.name,\n icon: walletInfo.icon,\n },\n sendJetton,\n sendTon,\n sendTransaction,\n signMessage,\n switchActiveNetwork,\n transferAmount: (args) => tonTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n WalletProviderPriority,\n getWalletProviderRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport type { TonConnectUI } from '@tonconnect/ui';\n\nimport { TON_CONNECT_DISPLAY_NAME_OVERRIDES } from '../../tonConnectDisplayNameOverrides';\nimport { createWalletProviderFromTonConnect } from '../createWalletProviderFromTonConnect';\n\ntype DiscoverAndRegisterWalletsParams = {\n client: DynamicClient;\n tonConnectUI: TonConnectUI;\n};\n\n/**\n * Discovers TonConnect wallets and registers each as a wallet provider.\n *\n * Queries the TonConnect registry for the full wallet catalog and registers\n * every entry as a wallet provider with the Dynamic client. Display names are\n * taken from the registry by default; a small override map handles wallets\n * whose registry name would otherwise be too generic (e.g. Telegram Wallet).\n *\n * @notInstrumented\n */\nexport const discoverAndRegisterWallets = async ({\n client,\n tonConnectUI,\n}: DiscoverAndRegisterWalletsParams): Promise<void> => {\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const wallets = await tonConnectUI.connector.getWallets();\n\n for (const wallet of wallets) {\n const isInjected =\n 'jsBridgeKey' in wallet &&\n 'injected' in wallet &&\n (wallet as unknown as { injected: boolean }).injected === true;\n\n const walletProvider = createWalletProviderFromTonConnect({\n dynamicClient: client,\n tonConnectUI,\n walletInfo: {\n appName: wallet.appName,\n icon: wallet.imageUrl,\n jsBridgeKey: isInjected\n ? (wallet as unknown as { jsBridgeKey: string }).jsBridgeKey\n : undefined,\n name:\n TON_CONNECT_DISPLAY_NAME_OVERRIDES[wallet.appName] ?? wallet.name,\n },\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,\n walletProvider,\n });\n }\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n getDefaultClient,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\nimport type { TonConnectUI } from '@tonconnect/ui';\n\nimport { registerTonNetworkProviderBuilder } from '../../registerTonNetworkProviderBuilder';\nimport { createDefaultTonConnectUI } from '../utils/createDefaultTonConnectUI';\nimport { discoverAndRegisterWallets } from '../utils/discoverAndRegisterWallets';\n\nexport const TON_CONNECT_EXTENSION_KEY = 'tonConnect';\n\nexport type AddTonConnectExtensionParams = {\n /**\n * An external TonConnectUI instance to reuse. When omitted, a new instance\n * is created internally using the Dynamic environment's universal link as\n * the manifest URL. Provide this when your app already manages a\n * TonConnectUI singleton.\n */\n tonConnectUI?: TonConnectUI;\n};\n\n/**\n * Adds the TonConnect extension to the Dynamic client.\n *\n * This extension enables external TON wallet support via the TonConnect protocol,\n * discovering and registering supported wallets (Tonkeeper, MyTonWallet, etc.)\n * as wallet providers.\n *\n * @param [params] - Optional configuration for the TonConnect extension.\n * @param [params.tonConnectUI] - An external TonConnectUI instance to reuse.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addTonConnectExtension = (\n { tonConnectUI }: AddTonConnectExtensionParams = {},\n client: DynamicClient = getDefaultClient()\n): void => {\n if (hasExtension({ extensionKey: TON_CONNECT_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: TON_CONNECT_EXTENSION_KEY }, client);\n registerTonNetworkProviderBuilder(client);\n\n const resolvedTonConnectUI =\n tonConnectUI ?? createDefaultTonConnectUI(client);\n\n void discoverAndRegisterWallets({\n client,\n tonConnectUI: resolvedTonConnectUI,\n });\n};\n"],"mappings":"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"}
@@ -12,7 +12,7 @@ export type AddTonExtensionParams = AddTonConnectExtensionParams;
12
12
  * @param [params] - Optional configuration forwarded to the TonConnect extension.
13
13
  * @param [params.tonConnectUI] - An external TonConnectUI instance to reuse.
14
14
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
15
- * @not-instrumented
15
+ * @notInstrumented
16
16
  */
17
17
  export declare const addTonExtension: (params?: AddTonExtensionParams, client?: DynamicClient) => void;
18
18
  //# sourceMappingURL=addTonExtension.d.ts.map
@@ -1,4 +1,4 @@
1
- import { a as prepareJettonTransfer, d as registerTonNetworkProviderBuilder, f as createTonClient, i as prepareTonNativeTransfer, l as TON_CONNECT_PREFIX, o as DEFAULT_JETTON_GAS, s as DEFAULT_TIMEOUT, t as tonTransferAmount, u as TON_PROOF_PREFIX } from "./tonTransferAmount-M9yHPDUW.esm.js";
1
+ import { a as prepareJettonTransfer, d as registerTonNetworkProviderBuilder, f as createTonClient, i as prepareTonNativeTransfer, l as TON_CONNECT_PREFIX, o as DEFAULT_JETTON_GAS, s as DEFAULT_TIMEOUT, t as tonTransferAmount, u as TON_PROOF_PREFIX } from "./tonTransferAmount-bYGAoQzO.esm.js";
2
2
  import { WalletProviderPriority, assertDefined, consumeMfaTokenIfRequiredForAction, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getBuffer, getCore, getDefaultClient, getNetworkProviderFromNetworkId, getSignedSessionId, getWalletProviderRegistry, hasExtension, registerExtension, switchActiveNetworkInLastKnownRegistry } from "@dynamic-labs-sdk/client/core";
3
3
  import { Address, Cell, WalletContractV5R1, beginCell } from "@ton/ton";
4
4
  import { MFAAction, WalletProviderEnum } from "@dynamic-labs/sdk-api-core";
@@ -24,7 +24,7 @@ var TransactionExecutionFailedError = class extends BaseError {
24
24
 
25
25
  //#endregion
26
26
  //#region src/utils/convertTonSendTransactionRequest/createInternalMessage/createInternalMessage.ts
27
- /** @not-instrumented */
27
+ /** @notInstrumented */
28
28
  const createInternalMessage = (destAddr, amount, body, bounce, init) => ({
29
29
  body,
30
30
  info: {
@@ -45,7 +45,7 @@ const createInternalMessage = (destAddr, amount, body, bounce, init) => ({
45
45
 
46
46
  //#endregion
47
47
  //#region src/utils/convertTonSendTransactionRequest/createSendMsgAction/createSendMsgAction.ts
48
- /** @not-instrumented */
48
+ /** @notInstrumented */
49
49
  const createSendMsgAction = (internalMessage) => ({
50
50
  mode: SendMode.PAY_GAS_SEPARATELY | SendMode.IGNORE_ERRORS,
51
51
  outMsg: internalMessage,
@@ -54,7 +54,7 @@ const createSendMsgAction = (internalMessage) => ({
54
54
 
55
55
  //#endregion
56
56
  //#region src/utils/convertTonSendTransactionRequest/determineBounceFlag/determineBounceFlag.ts
57
- /** @not-instrumented */
57
+ /** @notInstrumented */
58
58
  const determineBounceFlag = (address) => !address.startsWith("UQ") && !address.startsWith("0Q");
59
59
 
60
60
  //#endregion
@@ -73,7 +73,7 @@ var InvalidBocError = class extends BaseError {
73
73
 
74
74
  //#endregion
75
75
  //#region src/utils/convertTonSendTransactionRequest/parsePayload/parsePayload.ts
76
- /** @not-instrumented */
76
+ /** @notInstrumented */
77
77
  const parsePayload = (payload) => {
78
78
  if (!payload) return beginCell().endCell();
79
79
  try {
@@ -88,7 +88,7 @@ const parsePayload = (payload) => {
88
88
 
89
89
  //#endregion
90
90
  //#region src/utils/convertTonSendTransactionRequest/parseStateInit/parseStateInit.ts
91
- /** @not-instrumented */
91
+ /** @notInstrumented */
92
92
  const parseStateInit = (stateInit) => {
93
93
  if (!stateInit) return;
94
94
  try {
@@ -108,7 +108,7 @@ const parseStateInit = (stateInit) => {
108
108
 
109
109
  //#endregion
110
110
  //#region src/utils/convertTonSendTransactionRequest/convertTonSendTransactionRequest.ts
111
- /** @not-instrumented */
111
+ /** @notInstrumented */
112
112
  const convertTonSendTransactionRequest = (request) => {
113
113
  const actions = [];
114
114
  for (const msg of request.messages) {
@@ -124,7 +124,7 @@ const convertTonSendTransactionRequest = (request) => {
124
124
 
125
125
  //#endregion
126
126
  //#region src/utils/createTonWalletStateInit/createTonWalletStateInit.ts
127
- /** @not-instrumented */
127
+ /** @notInstrumented */
128
128
  const createTonWalletStateInit = ({ publicKey, workchain = 0 }) => {
129
129
  return WalletContractV5R1.create({
130
130
  publicKey,
@@ -148,7 +148,7 @@ var InvalidSignatureLengthError = class extends BaseError {
148
148
 
149
149
  //#endregion
150
150
  //#region src/utils/executeTonTransaction/executeTonTransaction.ts
151
- /** @not-instrumented */
151
+ /** @notInstrumented */
152
152
  const executeTonTransaction = async ({ transactionData, signature, client, stateInit }) => {
153
153
  const signatureBuffer = getBuffer().from(signature, "base64");
154
154
  if (signatureBuffer.length !== 64) throw new InvalidSignatureLengthError({
@@ -169,7 +169,7 @@ const executeTonTransaction = async ({ transactionData, signature, client, state
169
169
 
170
170
  //#endregion
171
171
  //#region src/utils/generateTonConnectProofHash/generateTonConnectProofMessage/generateTonConnectProofMessage.ts
172
- /** @not-instrumented */
172
+ /** @notInstrumented */
173
173
  const generateTonConnectProofMessage = ({ address: addressStr, domain, payload, timestamp }) => {
174
174
  const BufferImpl = getBuffer();
175
175
  const address = Address.parse(addressStr);
@@ -193,7 +193,7 @@ const generateTonConnectProofMessage = ({ address: addressStr, domain, payload,
193
193
 
194
194
  //#endregion
195
195
  //#region src/utils/generateTonConnectProofHash/generateTonConnectProofHash.ts
196
- /** @not-instrumented */
196
+ /** @notInstrumented */
197
197
  const generateTonConnectProofHash = async ({ address, domain, payload, timestamp }) => {
198
198
  const BufferImpl = getBuffer();
199
199
  const message = generateTonConnectProofMessage({
@@ -213,7 +213,7 @@ const generateTonConnectProofHash = async ({ address, domain, payload, timestamp
213
213
 
214
214
  //#endregion
215
215
  //#region src/utils/getTonWalletSeqno/getTonWalletSeqno.ts
216
- /** @not-instrumented */
216
+ /** @notInstrumented */
217
217
  const getTonWalletSeqno = async ({ walletAddress, client }) => {
218
218
  const address = Address.parse(walletAddress);
219
219
  return (await client.runMethod(address, "seqno")).stack.readNumber();
@@ -221,7 +221,7 @@ const getTonWalletSeqno = async ({ walletAddress, client }) => {
221
221
 
222
222
  //#endregion
223
223
  //#region src/utils/isTonWalletDeployed/isTonWalletDeployed.ts
224
- /** @not-instrumented */
224
+ /** @notInstrumented */
225
225
  const isTonWalletDeployed = async ({ walletAddress, client }) => {
226
226
  const address = Address.parse(walletAddress);
227
227
  return (await client.getContractState(address)).state === "active";
@@ -229,7 +229,7 @@ const isTonWalletDeployed = async ({ walletAddress, client }) => {
229
229
 
230
230
  //#endregion
231
231
  //#region src/utils/prepareTonTransaction/prepareTonTransaction.ts
232
- /** @not-instrumented */
232
+ /** @notInstrumented */
233
233
  const prepareTonTransaction = ({ actionsArray, walletAddress, seqno, validUntil, timeout, networkGlobalId = CHAIN.MAINNET }) => {
234
234
  const walletAddr = Address.parse(walletAddress);
235
235
  const actionsCell = beginCell().store(storeOutList(actionsArray)).endCell();
@@ -272,7 +272,7 @@ var PublicKeyNotFoundError = class extends BaseError {
272
272
  //#region src/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.ts
273
273
  /**
274
274
  * Gets the public key for a wallet account from the user's verified credentials
275
- * @not-instrumented
275
+ * @notInstrumented
276
276
  */
277
277
  const getPublicKeyForWalletAccount = (walletAccount, client) => {
278
278
  const user = getCore(client).state.get().user;
@@ -285,7 +285,7 @@ const getPublicKeyForWalletAccount = (walletAccount, client) => {
285
285
 
286
286
  //#endregion
287
287
  //#region src/waas/utils/createWalletProviderForWaasTon/createWalletProviderForWaasTon.ts
288
- /** @not-instrumented */
288
+ /** @notInstrumented */
289
289
  const createWalletProviderForWaasTon = (sdkClient) => {
290
290
  const chain = "TON";
291
291
  const walletProviderType = WalletProviderEnum.EmbeddedWallet;
@@ -451,7 +451,7 @@ const WAAS_TON_EXTENSION_KEY = "waasTon";
451
451
  * allowing users to have wallets managed by Dynamic's infrastructure.
452
452
  *
453
453
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
454
- * @not-instrumented
454
+ * @notInstrumented
455
455
  */
456
456
  const addWaasTonExtension = (client = getDefaultClient()) => {
457
457
  if (hasExtension({ extensionKey: WAAS_TON_EXTENSION_KEY }, client)) return;
@@ -467,4 +467,4 @@ const addWaasTonExtension = (client = getDefaultClient()) => {
467
467
 
468
468
  //#endregion
469
469
  export { TransactionExecutionFailedError as n, addWaasTonExtension as t };
470
- //# sourceMappingURL=addWaasTonExtension-Cab7lRyH.esm.js.map
470
+ //# sourceMappingURL=addWaasTonExtension-BrVHTnYf.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addWaasTonExtension-BrVHTnYf.esm.js","names":["actions: OutActionSendMsg[]","getActiveNetworkId: WaasTonWalletProvider['getActiveNetworkId']","switchActiveNetwork: WaasTonWalletProvider['switchActiveNetwork']","getConnectedAddresses: WaasTonWalletProvider['getConnectedAddresses']","signMessage: WaasTonWalletProvider['signMessage']","sendTransaction: WaasTonWalletProvider['sendTransaction']","sendTon: WaasTonWalletProvider['sendTon']","sendJetton: WaasTonWalletProvider['sendJetton']","generateTonConnectProof: WaasTonWalletProvider['generateTonConnectProof']"],"sources":["../src/errors/TransactionExecutionFailedError.ts","../src/utils/convertTonSendTransactionRequest/createInternalMessage/createInternalMessage.ts","../src/utils/convertTonSendTransactionRequest/createSendMsgAction/createSendMsgAction.ts","../src/utils/convertTonSendTransactionRequest/determineBounceFlag/determineBounceFlag.ts","../src/errors/InvalidBocError.ts","../src/utils/convertTonSendTransactionRequest/parsePayload/parsePayload.ts","../src/utils/convertTonSendTransactionRequest/parseStateInit/parseStateInit.ts","../src/utils/convertTonSendTransactionRequest/convertTonSendTransactionRequest.ts","../src/utils/createTonWalletStateInit/createTonWalletStateInit.ts","../src/errors/InvalidSignatureLengthError.ts","../src/utils/executeTonTransaction/executeTonTransaction.ts","../src/utils/generateTonConnectProofHash/generateTonConnectProofMessage/generateTonConnectProofMessage.ts","../src/utils/generateTonConnectProofHash/generateTonConnectProofHash.ts","../src/utils/getTonWalletSeqno/getTonWalletSeqno.ts","../src/utils/isTonWalletDeployed/isTonWalletDeployed.ts","../src/utils/prepareTonTransaction/prepareTonTransaction.ts","../src/errors/PublicKeyNotFoundError.ts","../src/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.ts","../src/waas/utils/createWalletProviderForWaasTon/createWalletProviderForWaasTon.ts","../src/waas/addWaasTonExtension/addWaasTonExtension.ts"],"sourcesContent":["import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class TransactionExecutionFailedError extends BaseError {\n // eslint-disable-next-line custom-rules/require-single-object-param\n constructor(message?: string) {\n super({\n cause: null,\n code: 'transaction_execution_failed_error',\n details: message,\n docsUrl: null,\n name: 'TransactionExecutionFailedError',\n shortMessage: 'Failed to execute TON transaction',\n });\n }\n}\n","import type { Address, Cell } from '@ton/ton';\n\n/** @notInstrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const createInternalMessage = (\n destAddr: Address,\n amount: bigint,\n body: Cell,\n bounce: boolean,\n init?: { code: Cell; data: Cell }\n) => ({\n body,\n info: {\n bounce,\n bounced: false,\n createdAt: 0,\n createdLt: BigInt(0),\n dest: destAddr,\n forwardFee: BigInt(0),\n ihrDisabled: true,\n ihrFee: BigInt(0),\n src: null,\n type: 'internal' as const,\n value: { coins: amount },\n },\n ...(init && { init }),\n});\n","import { type OutActionSendMsg, SendMode } from '@ton/core';\n\nimport type { createInternalMessage } from '../createInternalMessage';\n\n/** @notInstrumented */\nexport const createSendMsgAction = (\n internalMessage: ReturnType<typeof createInternalMessage>\n): OutActionSendMsg => ({\n mode: SendMode.PAY_GAS_SEPARATELY | SendMode.IGNORE_ERRORS,\n outMsg: internalMessage,\n type: 'sendMsg' as const,\n});\n","/** @notInstrumented */\nexport const determineBounceFlag = (address: string): boolean =>\n !address.startsWith('UQ') && !address.startsWith('0Q');\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\ntype InvalidBocErrorParams = {\n cause: Error | null;\n type: 'payload' | 'stateInit';\n};\n\nexport class InvalidBocError extends BaseError {\n constructor({ cause, type }: InvalidBocErrorParams) {\n super({\n cause,\n code: 'invalid_boc_error',\n docsUrl: null,\n name: 'InvalidBocError',\n shortMessage: `Invalid ${type} BOC`,\n });\n }\n}\n","import { Cell, beginCell } from '@ton/ton';\n\nimport { InvalidBocError } from '../../../errors/InvalidBocError';\n\n/** @notInstrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const parsePayload = (payload: string | undefined): Cell => {\n if (!payload) {\n return beginCell().endCell();\n }\n\n try {\n return Cell.fromBase64(payload);\n } catch (e) {\n throw new InvalidBocError({\n cause: e instanceof Error ? e : null,\n type: 'payload',\n });\n }\n};\n","import { Cell } from '@ton/ton';\n\nimport { InvalidBocError } from '../../../errors/InvalidBocError';\n\n/** @notInstrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const parseStateInit = (\n stateInit: string | undefined\n): { code: Cell; data: Cell } | undefined => {\n if (!stateInit) {\n return undefined;\n }\n\n try {\n const stateInitCell = Cell.fromBase64(stateInit);\n const slice = stateInitCell.beginParse();\n // skip split_depth and special flags\n slice.skip(2);\n\n return {\n code: slice.loadRef(),\n data: slice.loadRef(),\n };\n } catch (e) {\n throw new InvalidBocError({\n cause: e instanceof Error ? e : null,\n type: 'stateInit',\n });\n }\n};\n","import { type OutActionSendMsg } from '@ton/core';\nimport { Address } from '@ton/ton';\n\nimport type { TonSendTransactionRequest } from '../../ton.types';\nimport { createInternalMessage } from './createInternalMessage';\nimport { createSendMsgAction } from './createSendMsgAction';\nimport { determineBounceFlag } from './determineBounceFlag';\nimport { parsePayload } from './parsePayload';\nimport { parseStateInit } from './parseStateInit';\n\n/** @notInstrumented */\nexport const convertTonSendTransactionRequest = (\n request: TonSendTransactionRequest\n): OutActionSendMsg[] => {\n const actions: OutActionSendMsg[] = [];\n\n for (const msg of request.messages) {\n const destAddr = Address.parse(msg.address);\n const amount = BigInt(msg.amount);\n const body = parsePayload(msg.payload);\n const init = parseStateInit(msg.stateInit);\n const bounce = determineBounceFlag(msg.address);\n\n const internalMessage = createInternalMessage(\n destAddr,\n amount,\n body,\n bounce,\n init\n );\n\n actions.push(createSendMsgAction(internalMessage));\n }\n\n return actions;\n};\n","import type { StateInit } from '@ton/core';\nimport { WalletContractV5R1 } from '@ton/ton';\n\ntype CreateTonWalletStateInitParams = {\n publicKey: Buffer;\n workchain?: number;\n};\n\n/** @notInstrumented */\nexport const createTonWalletStateInit = ({\n publicKey,\n workchain = 0,\n}: CreateTonWalletStateInitParams): StateInit => {\n const wallet = WalletContractV5R1.create({\n publicKey,\n workchain,\n });\n\n return wallet.init;\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\ntype InvalidSignatureLengthErrorParams = {\n actual: number;\n expected: number;\n};\n\nexport class InvalidSignatureLengthError extends BaseError {\n constructor({ actual, expected }: InvalidSignatureLengthErrorParams) {\n super({\n cause: null,\n code: 'invalid_signature_length_error',\n docsUrl: null,\n name: 'InvalidSignatureLengthError',\n shortMessage: `Invalid signature length: expected ${expected} bytes, got ${actual}`,\n });\n }\n}\n","import { getBuffer } from '@dynamic-labs-sdk/client/core';\nimport { type StateInit, external, storeMessage } from '@ton/core';\nimport { Address, Cell, type TonClient, beginCell } from '@ton/ton';\n\nimport { InvalidSignatureLengthError } from '../../errors/InvalidSignatureLengthError';\nimport type { TonTransactionData } from '../../ton.types';\n\ntype ExecuteTonTransactionParams = {\n client: TonClient;\n signature: string;\n stateInit?: StateInit;\n transactionData: TonTransactionData;\n};\n\n/** @notInstrumented */\nexport const executeTonTransaction = async ({\n transactionData,\n signature,\n client,\n stateInit,\n}: ExecuteTonTransactionParams): Promise<{ transactionHash: string }> => {\n const signatureBuffer = getBuffer().from(signature, 'base64');\n\n if (signatureBuffer.length !== 64) {\n throw new InvalidSignatureLengthError({\n actual: signatureBuffer.length,\n expected: 64,\n });\n }\n\n const signingMessageCell = Cell.fromBase64(transactionData.messageBody);\n\n const signedMessageBody = beginCell()\n .storeSlice(signingMessageCell.beginParse())\n .storeBuffer(signatureBuffer)\n .endCell();\n\n const address = Address.parse(transactionData.address);\n\n const externalMsg = external({\n body: signedMessageBody,\n to: address,\n ...(stateInit ? { init: stateInit } : {}),\n });\n\n const externalMessage = beginCell()\n .store(storeMessage(externalMsg, { forceRef: true }))\n .endCell();\n\n const boc = externalMessage.toBoc();\n\n await client.sendFile(boc);\n\n const transactionHash = externalMessage.hash().toString('hex');\n\n return { transactionHash };\n};\n","import { getBuffer } from '@dynamic-labs-sdk/client/core';\nimport { Address } from '@ton/ton';\n\nimport type { TonConnectDomain } from '../../../ton.types';\nimport { TON_PROOF_PREFIX } from '../../constants';\n\ntype GenerateTonConnectProofMessageParams = {\n address: string;\n domain: TonConnectDomain;\n payload: string;\n timestamp: number;\n};\n\n/** @notInstrumented */\nexport const generateTonConnectProofMessage = ({\n address: addressStr,\n domain,\n payload,\n timestamp,\n}: GenerateTonConnectProofMessageParams) => {\n const BufferImpl = getBuffer();\n const address = Address.parse(addressStr);\n\n const domainBytes = BufferImpl.from(domain.value);\n\n // Workchain (32-bit big-endian)\n const wc = BufferImpl.alloc(4);\n wc.writeUInt32BE(address.workChain, 0);\n\n // Timestamp (64-bit little-endian)\n const ts = BufferImpl.alloc(8);\n ts.writeBigUInt64LE(BigInt(timestamp), 0);\n\n // Domain length (32-bit little-endian)\n const dl = BufferImpl.alloc(4);\n dl.writeUInt32LE(domain.lengthBytes, 0);\n\n return BufferImpl.concat([\n BufferImpl.from(TON_PROOF_PREFIX) as Uint8Array,\n wc,\n address.hash,\n dl,\n domainBytes,\n ts,\n BufferImpl.from(payload),\n ]);\n};\n","import { getBuffer } from '@dynamic-labs-sdk/client/core';\nimport { sha256 } from '@ton/crypto';\n\nimport type { TonConnectDomain } from '../../ton.types';\nimport { TON_CONNECT_PREFIX } from '../constants';\nimport { generateTonConnectProofMessage } from './generateTonConnectProofMessage';\n\ntype GenerateTonConnectProofHashParams = {\n address: string;\n domain: TonConnectDomain;\n payload: string;\n timestamp: number;\n};\n\n/** @notInstrumented */\nexport const generateTonConnectProofHash = async ({\n address,\n domain,\n payload,\n timestamp,\n}: GenerateTonConnectProofHashParams): Promise<string> => {\n const BufferImpl = getBuffer();\n\n const message = generateTonConnectProofMessage({\n address,\n domain,\n payload,\n timestamp,\n });\n\n const messageHash = BufferImpl.from(\n (await sha256(message)) as Uint8Array\n );\n\n const fullMsg = BufferImpl.concat([\n BufferImpl.from([0xff, 0xff]) as Uint8Array,\n BufferImpl.from(TON_CONNECT_PREFIX) as Uint8Array,\n messageHash,\n ]);\n\n const hash = BufferImpl.from((await sha256(fullMsg)) as Uint8Array);\n\n return hash.toString('hex');\n};\n","import { Address, type TonClient } from '@ton/ton';\n\ntype GetTonWalletSeqnoParams = {\n client: TonClient;\n walletAddress: string;\n};\n\n/** @notInstrumented */\nexport const getTonWalletSeqno = async ({\n walletAddress,\n client,\n}: GetTonWalletSeqnoParams): Promise<number> => {\n const address = Address.parse(walletAddress);\n const result = await client.runMethod(address, 'seqno');\n\n return result.stack.readNumber();\n};\n","import { Address, type TonClient } from '@ton/ton';\n\ntype IsTonWalletDeployedParams = {\n client: TonClient;\n walletAddress: string;\n};\n\n/** @notInstrumented */\nexport const isTonWalletDeployed = async ({\n walletAddress,\n client,\n}: IsTonWalletDeployedParams): Promise<boolean> => {\n const address = Address.parse(walletAddress);\n const state = await client.getContractState(address);\n\n return state.state === 'active';\n};\n","import { type OutActionSendMsg, storeOutList } from '@ton/core';\nimport { Address, WalletContractV5R1, beginCell } from '@ton/ton';\nimport { CHAIN } from '@tonconnect/sdk';\n\nimport type { TonTransactionData } from '../../ton.types';\n\ntype PrepareTonTransactionParams = {\n actionsArray: OutActionSendMsg[];\n networkGlobalId?: CHAIN;\n seqno: number;\n timeout: number;\n validUntil: number;\n walletAddress: string;\n};\n\ntype PrepareTonTransactionResult = {\n hashToSign: Buffer;\n hashToSignHex: string;\n transactionData: TonTransactionData;\n};\n\n/** @notInstrumented */\nexport const prepareTonTransaction = ({\n actionsArray,\n walletAddress,\n seqno,\n validUntil,\n timeout,\n networkGlobalId = CHAIN.MAINNET,\n}: PrepareTonTransactionParams): PrepareTonTransactionResult => {\n const walletAddr = Address.parse(walletAddress);\n\n const actionsCell = beginCell().store(storeOutList(actionsArray)).endCell();\n\n const actions = beginCell()\n .storeBit(1)\n .storeRef(actionsCell)\n .storeBit(0)\n .endCell();\n\n const context = beginCell()\n .storeUint(1, 1)\n .storeInt(walletAddr.workChain, 8)\n .storeUint(0, 8)\n .storeUint(0, 15)\n .endCell()\n .beginParse()\n .loadInt(32);\n\n const walletIdValue = BigInt(networkGlobalId) ^ BigInt(context);\n\n const signingMessage = beginCell()\n .storeUint(WalletContractV5R1.OpCodes.auth_signed_external, 32)\n .storeInt(walletIdValue, 32);\n\n if (seqno === 0) {\n for (let i = 0; i < 32; i++) {\n signingMessage.storeBit(1);\n }\n } else {\n signingMessage.storeUint(validUntil, 32);\n }\n\n signingMessage.storeUint(seqno, 32).storeSlice(actions.beginParse());\n\n const dataToSign = signingMessage.endCell();\n const hashToSign = dataToSign.hash();\n const hashToSignHex = hashToSign.toString('hex');\n\n const messageBody = dataToSign.toBoc().toString('base64');\n\n const transactionData: TonTransactionData = {\n address: walletAddress,\n messageBody,\n seqno,\n timeout,\n };\n\n return {\n hashToSign,\n hashToSignHex,\n transactionData,\n };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class PublicKeyNotFoundError extends BaseError {\n // eslint-disable-next-line custom-rules/require-single-object-param\n constructor(address: string) {\n super({\n cause: null,\n code: 'public_key_not_found_error',\n docsUrl: null,\n name: 'PublicKeyNotFoundError',\n shortMessage: `No public key found for address ${address}`,\n });\n }\n}\n","import type { DynamicClient, WalletAccount } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\n\nimport { PublicKeyNotFoundError } from '../../../errors/PublicKeyNotFoundError';\n\n/**\n * Gets the public key for a wallet account from the user's verified credentials\n * @notInstrumented\n */\nexport const getPublicKeyForWalletAccount = (\n walletAccount: WalletAccount,\n client: DynamicClient\n): string => {\n const user = getCore(client).state.get().user;\n\n for (const credential of user?.verifiedCredentials ?? []) {\n const additionalAddress = credential.walletAdditionalAddresses?.find(\n (addr) => addr.address === walletAccount.address\n );\n\n if (additionalAddress?.publicKey) {\n return additionalAddress.publicKey;\n }\n }\n\n throw new PublicKeyNotFoundError(walletAccount.address);\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n consumeMfaTokenIfRequiredForAction,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n getBuffer,\n getNetworkProviderFromNetworkId,\n getSignedSessionId,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport {\n DYNAMIC_WAAS_METADATA,\n createWaasProvider,\n getAllUserWaasAddressesForChain,\n} from '@dynamic-labs-sdk/client/waas/core';\nimport { MFAAction, WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport type { TonClient } from '@ton/ton';\nimport { CHAIN } from '@tonconnect/sdk';\n\nimport { TransactionExecutionFailedError } from '../../../errors/TransactionExecutionFailedError';\nimport { DEFAULT_JETTON_GAS, DEFAULT_TIMEOUT } from '../../../utils/constants';\nimport { convertTonSendTransactionRequest } from '../../../utils/convertTonSendTransactionRequest';\nimport { createTonClient } from '../../../utils/createTonClient';\nimport { createTonWalletStateInit } from '../../../utils/createTonWalletStateInit';\nimport { executeTonTransaction } from '../../../utils/executeTonTransaction';\nimport { generateTonConnectProofHash } from '../../../utils/generateTonConnectProofHash';\nimport { getTonWalletSeqno } from '../../../utils/getTonWalletSeqno';\nimport { isTonWalletDeployed } from '../../../utils/isTonWalletDeployed';\nimport { prepareJettonTransfer } from '../../../utils/prepareJettonTransfer';\nimport { prepareTonTransaction } from '../../../utils/prepareTonTransaction';\nimport { prepareTonNativeTransfer } from '../../../utils/prepareTonNativeTransfer';\nimport { tonTransferAmount } from '../../../utils/tonTransferAmount';\nimport type { WaasTonWalletProvider } from '../../WaasTonWalletProvider.types';\nimport { getPublicKeyForWalletAccount } from '../getPublicKeyForWalletAccount/getPublicKeyForWalletAccount';\n\n/** @notInstrumented */\nexport const createWalletProviderForWaasTon = (\n sdkClient: DynamicClient\n): WaasTonWalletProvider => {\n const chain = 'TON' as const;\n const walletProviderType = WalletProviderEnum.EmbeddedWallet;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: DYNAMIC_WAAS_METADATA.displayName,\n walletProviderType,\n });\n\n const waasProvider = createWaasProvider({ chain, sdkClient });\n\n const getTonClientForActiveNetwork = async (): Promise<TonClient> => {\n const { networkId } = await getActiveNetworkId();\n const networkProvider = getNetworkProviderFromNetworkId(\n { chain: 'TON', networkId },\n sdkClient\n );\n\n return createTonClient({ rpcUrl: networkProvider.rpcUrls.http[0] });\n };\n\n const getActiveNetworkId: WaasTonWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: sdkClient,\n walletProviderKey: key,\n });\n\n const switchActiveNetwork: WaasTonWalletProvider['switchActiveNetwork'] =\n async ({ networkId }: { networkId: string }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: sdkClient,\n networkId,\n walletProviderKey: key,\n });\n\n const getConnectedAddresses: WaasTonWalletProvider['getConnectedAddresses'] =\n async () => ({\n addresses: getAllUserWaasAddressesForChain({ chain }, sdkClient),\n });\n\n const signMessage: WaasTonWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n return waasProvider.signMessage({ message, walletAccount });\n };\n\n const sendTransaction: WaasTonWalletProvider['sendTransaction'] = async ({\n request,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const client = await getTonClientForActiveNetwork();\n const walletAddress = request.from || walletAccount.address;\n\n const deployed = await isTonWalletDeployed({ client, walletAddress });\n const seqno = deployed\n ? await getTonWalletSeqno({ client, walletAddress })\n : 0;\n\n const publicKeyHex = getPublicKeyForWalletAccount(walletAccount, sdkClient);\n const stateInit = deployed\n ? undefined\n : createTonWalletStateInit({\n publicKey: getBuffer().from(publicKeyHex, 'hex'),\n workchain: 0,\n });\n\n const actionsArray = convertTonSendTransactionRequest(request);\n\n const timeoutSeconds = request.validUntil - Math.floor(Date.now() / 1000);\n\n if (timeoutSeconds <= 0) {\n throw new TransactionExecutionFailedError(\n 'Transaction validUntil is in the past'\n );\n }\n\n const { hashToSignHex, transactionData } = prepareTonTransaction({\n actionsArray,\n networkGlobalId: request.network || CHAIN.MAINNET,\n seqno,\n timeout: timeoutSeconds,\n validUntil: request.validUntil,\n walletAddress,\n });\n\n const waasClient = await waasProvider.getWaasClient();\n const { signature: signedSessionId } = await getSignedSessionId(sdkClient);\n const mfaToken = await consumeMfaTokenIfRequiredForAction(\n { mfaAction: MFAAction.WalletWaasSign },\n sdkClient\n );\n\n const signature = await waasClient.signTransaction({\n authToken: sdkClient.token ?? undefined,\n mfaToken,\n senderAddress: walletAccount.address,\n signedSessionId,\n transaction: hashToSignHex,\n });\n\n return executeTonTransaction({\n client,\n signature,\n stateInit,\n transactionData,\n });\n };\n\n const sendTon: WaasTonWalletProvider['sendTon'] = async ({\n transaction,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const request = prepareTonNativeTransfer({\n amountInNanoton: transaction.amount.toString(),\n recipient: transaction.recipientAddress,\n timeout: DEFAULT_TIMEOUT,\n walletAddress: walletAccount.address,\n });\n\n return sendTransaction({ request, walletAccount });\n };\n\n const sendJetton: WaasTonWalletProvider['sendJetton'] = async ({\n transaction,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const client = await getTonClientForActiveNetwork();\n\n const request = await prepareJettonTransfer({\n client,\n forwardTonAmount: transaction.forwardTonAmount ?? BigInt(0),\n gasAmount: transaction.gasAmount ?? DEFAULT_JETTON_GAS,\n jettonAmount: transaction.amount,\n jettonMasterAddress: transaction.jettonMasterAddress,\n recipientAddress: transaction.recipientAddress,\n timeout: DEFAULT_TIMEOUT,\n walletAddress: walletAccount.address,\n });\n\n return sendTransaction({ request, walletAccount });\n };\n\n const generateTonConnectProof: WaasTonWalletProvider['generateTonConnectProof'] =\n async ({ payload, walletAccount }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const host = globalThis.location?.host || '';\n const timestamp = Math.floor(Date.now() / 1000);\n const domain = {\n lengthBytes: new TextEncoder().encode(host).length,\n value: host,\n };\n\n const hashHex = await generateTonConnectProofHash({\n address: walletAccount.address,\n domain,\n payload,\n timestamp,\n });\n\n const { signature } = await signMessage({\n message: hashHex,\n walletAccount,\n });\n\n return {\n address: walletAccount.address,\n domain,\n payload,\n signature,\n timestamp,\n };\n };\n\n return {\n ...waasProvider,\n chain,\n generateTonConnectProof,\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(DYNAMIC_WAAS_METADATA.displayName),\n key,\n metadata: {\n displayName: DYNAMIC_WAAS_METADATA.displayName,\n icon: DYNAMIC_WAAS_METADATA.icon,\n },\n sendJetton,\n sendTon,\n sendTransaction,\n signMessage,\n switchActiveNetwork,\n transferAmount: (args) => tonTransferAmount(args, sdkClient),\n walletProviderType,\n };\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { registerTonNetworkProviderBuilder } from '../../registerTonNetworkProviderBuilder';\nimport { createWalletProviderForWaasTon } from '../utils/createWalletProviderForWaasTon';\n\nexport const WAAS_TON_EXTENSION_KEY = 'waasTon';\n\n/**\n * Adds the Dynamic WaaS (Wallet as a Service) TON extension to the Dynamic client.\n *\n * This extension enables embedded wallet functionality for the TON blockchain,\n * allowing users to have wallets managed by Dynamic's infrastructure.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addWaasTonExtension = (client = getDefaultClient()): void => {\n if (hasExtension({ extensionKey: WAAS_TON_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: WAAS_TON_EXTENSION_KEY }, client);\n registerTonNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n const walletProvider = createWalletProviderForWaasTon(client);\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SDK,\n walletProvider,\n });\n};\n"],"mappings":"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"}