@dynamic-labs-sdk/tron 1.16.1 → 1.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. package/dist/{addTronWalletAdaptersExtension-DFRM_EOX.cjs → addTronWalletAdaptersExtension-CuFnviYr.cjs} +2 -2
  2. package/dist/{addTronWalletAdaptersExtension-DFRM_EOX.cjs.map → addTronWalletAdaptersExtension-CuFnviYr.cjs.map} +1 -1
  3. package/dist/{addTronWalletAdaptersExtension-DvJ-FT8m.esm.js → addTronWalletAdaptersExtension-aiSgBowW.esm.js} +2 -2
  4. package/dist/{addTronWalletAdaptersExtension-DvJ-FT8m.esm.js.map → addTronWalletAdaptersExtension-aiSgBowW.esm.js.map} +1 -1
  5. package/dist/{addWaasTronExtension-BB4gn8uN.esm.js → addWaasTronExtension-BGoqq6je.esm.js} +2 -2
  6. package/dist/{addWaasTronExtension-BB4gn8uN.esm.js.map → addWaasTronExtension-BGoqq6je.esm.js.map} +1 -1
  7. package/dist/{addWaasTronExtension-BtcuABY5.cjs → addWaasTronExtension-CmVC62IW.cjs} +2 -2
  8. package/dist/{addWaasTronExtension-BtcuABY5.cjs.map → addWaasTronExtension-CmVC62IW.cjs.map} +1 -1
  9. package/dist/index.cjs +3 -3
  10. package/dist/index.esm.js +3 -3
  11. package/dist/{tronTransferAmount-DtvwBYGp.esm.js → tronTransferAmount-A-hXh2Mc.esm.js} +2 -2
  12. package/dist/{tronTransferAmount-DtvwBYGp.esm.js.map → tronTransferAmount-A-hXh2Mc.esm.js.map} +1 -1
  13. package/dist/{tronTransferAmount-BdzjUoHG.cjs → tronTransferAmount-B8ysC4Ni.cjs} +2 -2
  14. package/dist/{tronTransferAmount-BdzjUoHG.cjs.map → tronTransferAmount-B8ysC4Ni.cjs.map} +1 -1
  15. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  16. package/dist/waas.cjs +2 -2
  17. package/dist/waas.esm.js +2 -2
  18. package/dist/walletAdapters.cjs +2 -2
  19. package/dist/walletAdapters.esm.js +2 -2
  20. package/package.json +4 -4
@@ -1,4 +1,4 @@
1
- const require_tronTransferAmount = require('./tronTransferAmount-BdzjUoHG.cjs');
1
+ const require_tronTransferAmount = require('./tronTransferAmount-B8ysC4Ni.cjs');
2
2
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
3
3
  let tronweb = require("tronweb");
4
4
  let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
@@ -136,4 +136,4 @@ Object.defineProperty(exports, 'addTronWalletAdaptersExtension', {
136
136
  return addTronWalletAdaptersExtension;
137
137
  }
138
138
  });
139
- //# sourceMappingURL=addTronWalletAdaptersExtension-DFRM_EOX.cjs.map
139
+ //# sourceMappingURL=addTronWalletAdaptersExtension-CuFnviYr.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"addTronWalletAdaptersExtension-DFRM_EOX.cjs","names":["chain: Chain","WalletReadyState","metadata: WalletProviderMetadata","WalletProviderEnum","connect: TronWalletProvider['connect']","destroy: TronWalletProvider['destroy']","getActiveNetworkId: TronWalletProvider['getActiveNetworkId']","getConnectedAddresses: TronWalletProvider['getConnectedAddresses']","signMessage: TronWalletProvider['signMessage']","getTronWeb: TronWalletProvider['getTronWeb']","TronWeb","tronConfirmTransaction","tronExecuteSwapTransaction","tronTransferAmount","tronWalletProviders: TronWalletProvider[]","OkxWalletAdapter","TronLinkAdapter","TrustAdapter","TokenPocketAdapter","BitKeepAdapter","WalletProviderPriority"],"sources":["../src/utils/convertChainIdToDecimal/convertChainIdToDecimal.ts","../src/walletAdapters/utils/createWalletProviderForTronWalletAdapter/createWalletProviderForTronWalletAdapter.ts","../src/walletAdapters/addTronWalletAdaptersExtension/addTronWalletAdaptersExtension.ts"],"sourcesContent":["/** @notInstrumented */\nexport const convertChainIdToDecimal = (chainId: string): string =>\n chainId.startsWith('0x') ? parseInt(chainId, 16).toString() : chainId;\n","import {\n type Chain,\n type DynamicClient,\n type WalletProviderMetadata,\n assertWalletAccountSigningAvailability,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getCore,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport type { Adapter } from '@tronweb3/tronwallet-abstract-adapter';\nimport { WalletReadyState } from '@tronweb3/tronwallet-abstract-adapter';\nimport { TronWeb } from 'tronweb';\n\nimport type {\n TronAdapter,\n TronWalletProvider,\n} from '../../../TronWalletProvider.types';\nimport { convertChainIdToDecimal } from '../../../utils/convertChainIdToDecimal';\nimport { tronConfirmTransaction } from '../../../utils/tronConfirmTransaction';\nimport { tronExecuteSwapTransaction } from '../../../utils/tronExecuteSwapTransaction';\nimport { tronTransferAmount } from '../../../utils/tronTransferAmount';\n\ntype CreateWalletProviderForTronWalletAdapterParams = {\n adapter: Adapter;\n dynamicClient: DynamicClient;\n};\n\n/** @notInstrumented */\nexport const createWalletProviderForTronWalletAdapter = ({\n dynamicClient,\n adapter,\n}: CreateWalletProviderForTronWalletAdapterParams):\n | TronWalletProvider\n | undefined => {\n const chain: Chain = 'TRON';\n\n // we have to do this type cast because these adapters have the _wallet property private,\n // but we need to access it to get the TronWeb instance\n const tronAdapter = adapter as unknown as TronAdapter;\n\n // Wallet is not installed\n if (tronAdapter.readyState !== WalletReadyState.Found) {\n return undefined;\n }\n\n const metadata: WalletProviderMetadata = {\n displayName: tronAdapter.name,\n icon: tronAdapter.icon,\n };\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: metadata.displayName,\n walletProviderType,\n });\n\n const connect: TronWalletProvider['connect'] = async () => {\n await tronAdapter.connect();\n\n // Some wallets (Trust, Bitget) populate the address asynchronously after connect()\n // Wait briefly for the address to be populated by the wallet\n const startTime = Date.now();\n while (!tronAdapter.address?.length && Date.now() - startTime < 1000) {\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n return {\n addresses: tronAdapter.address ? [{ address: tronAdapter.address }] : [],\n };\n };\n\n const destroy: TronWalletProvider['destroy'] = async () => {\n try {\n await tronAdapter.disconnect();\n } catch (err) {\n getCore(dynamicClient).logger.error(\n `[${key}] destroy: remote signal failed`,\n err\n );\n }\n };\n\n const getActiveNetworkId: TronWalletProvider['getActiveNetworkId'] =\n async () => {\n const networkInfo = await tronAdapter.network();\n\n const networkId = convertChainIdToDecimal(networkInfo.chainId);\n\n return { networkId };\n };\n\n const getConnectedAddresses: TronWalletProvider['getConnectedAddresses'] =\n async () => {\n return {\n addresses: tronAdapter.address ? [tronAdapter.address] : [],\n };\n };\n\n const signMessage: TronWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signedMessage = await tronAdapter.signMessage(message);\n\n return {\n signature: signedMessage,\n };\n };\n\n const getTronWeb: TronWalletProvider['getTronWeb'] = async ({\n walletAccount,\n }) => {\n const tronWeb =\n tronAdapter._wallet?.tronWeb || tronAdapter._wallet?.tron?.tronWeb;\n\n if (tronWeb) {\n return tronWeb;\n }\n\n const activeNetworkData = await getActiveNetworkData(\n { walletAccount },\n dynamicClient\n );\n assertDefined(activeNetworkData, 'No active network data found');\n\n const url = activeNetworkData.networkData?.rpcUrls.http[0];\n assertDefined(url, 'No RPC URL found for active network');\n\n return new TronWeb({ fullHost: url });\n };\n\n return {\n chain,\n confirmTransaction: (args) => tronConfirmTransaction(args, dynamicClient),\n connect,\n destroy,\n executeSwapTransaction: (args) =>\n tronExecuteSwapTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n getTronWeb,\n groupKey: formatWalletProviderGroupKey(metadata.displayName),\n key,\n metadata,\n signMessage,\n transferAmount: (args) => tronTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\nimport {\n BitKeepAdapter,\n OkxWalletAdapter,\n TokenPocketAdapter,\n TronLinkAdapter,\n TrustAdapter,\n} from '@tronweb3/tronwallet-adapters';\n\nimport { registerTronNetworkProviderBuilder } from '../../registerTronNetworkProviderBuilder';\nimport type { TronWalletProvider } from '../../TronWalletProvider.types';\nimport { createWalletProviderForTronWalletAdapter } from '../utils/createWalletProviderForTronWalletAdapter';\n\nexport const TRON_WALLET_ADAPTERS_EXTENSION_KEY = 'tronWalletAdapters';\n\n/**\n * Adds the Tron Wallet Adapters extension to the Dynamic client.\n *\n * This extension enables integration with wallets that have related Tron Wallet Adapters ('@tronweb3/tronwallet-adapters'),\n * automatically registering compatible wallets for use with the Dynamic SDK.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addTronWalletAdaptersExtension = (\n client = getDefaultClient()\n): void => {\n if (\n hasExtension({ extensionKey: TRON_WALLET_ADAPTERS_EXTENSION_KEY }, client)\n ) {\n return;\n }\n\n registerExtension(\n { extensionKey: TRON_WALLET_ADAPTERS_EXTENSION_KEY },\n client\n );\n\n registerTronNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const tronWalletProviders: TronWalletProvider[] = [];\n\n // Create and register OKX wallet provider\n const okxWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new OkxWalletAdapter(),\n dynamicClient: client,\n });\n if (okxWalletProvider) {\n tronWalletProviders.push(okxWalletProvider);\n }\n\n // Create and register TronLink wallet provider\n const tronLinkWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new TronLinkAdapter(),\n dynamicClient: client,\n });\n if (tronLinkWalletProvider) {\n tronWalletProviders.push(tronLinkWalletProvider);\n }\n\n // Create and register Trust wallet provider\n const trustWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new TrustAdapter(),\n dynamicClient: client,\n });\n if (trustWalletProvider) {\n tronWalletProviders.push(trustWalletProvider);\n }\n\n // Create and register TokenPocket wallet provider\n const tokenPocketWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new TokenPocketAdapter(),\n dynamicClient: client,\n });\n if (tokenPocketWalletProvider) {\n tronWalletProviders.push(tokenPocketWalletProvider);\n }\n\n // Create and register Bitget wallet provider\n const bitgetWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new BitKeepAdapter(),\n dynamicClient: client,\n });\n if (bitgetWalletProvider) {\n tronWalletProviders.push(bitgetWalletProvider);\n }\n\n tronWalletProviders.forEach((walletProvider) => {\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n });\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"addTronWalletAdaptersExtension-CuFnviYr.cjs","names":["chain: Chain","WalletReadyState","metadata: WalletProviderMetadata","WalletProviderEnum","connect: TronWalletProvider['connect']","destroy: TronWalletProvider['destroy']","getActiveNetworkId: TronWalletProvider['getActiveNetworkId']","getConnectedAddresses: TronWalletProvider['getConnectedAddresses']","signMessage: TronWalletProvider['signMessage']","getTronWeb: TronWalletProvider['getTronWeb']","TronWeb","tronConfirmTransaction","tronExecuteSwapTransaction","tronTransferAmount","tronWalletProviders: TronWalletProvider[]","OkxWalletAdapter","TronLinkAdapter","TrustAdapter","TokenPocketAdapter","BitKeepAdapter","WalletProviderPriority"],"sources":["../src/utils/convertChainIdToDecimal/convertChainIdToDecimal.ts","../src/walletAdapters/utils/createWalletProviderForTronWalletAdapter/createWalletProviderForTronWalletAdapter.ts","../src/walletAdapters/addTronWalletAdaptersExtension/addTronWalletAdaptersExtension.ts"],"sourcesContent":["/** @notInstrumented */\nexport const convertChainIdToDecimal = (chainId: string): string =>\n chainId.startsWith('0x') ? parseInt(chainId, 16).toString() : chainId;\n","import {\n type Chain,\n type DynamicClient,\n type WalletProviderMetadata,\n assertWalletAccountSigningAvailability,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getCore,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport type { Adapter } from '@tronweb3/tronwallet-abstract-adapter';\nimport { WalletReadyState } from '@tronweb3/tronwallet-abstract-adapter';\nimport { TronWeb } from 'tronweb';\n\nimport type {\n TronAdapter,\n TronWalletProvider,\n} from '../../../TronWalletProvider.types';\nimport { convertChainIdToDecimal } from '../../../utils/convertChainIdToDecimal';\nimport { tronConfirmTransaction } from '../../../utils/tronConfirmTransaction';\nimport { tronExecuteSwapTransaction } from '../../../utils/tronExecuteSwapTransaction';\nimport { tronTransferAmount } from '../../../utils/tronTransferAmount';\n\ntype CreateWalletProviderForTronWalletAdapterParams = {\n adapter: Adapter;\n dynamicClient: DynamicClient;\n};\n\n/** @notInstrumented */\nexport const createWalletProviderForTronWalletAdapter = ({\n dynamicClient,\n adapter,\n}: CreateWalletProviderForTronWalletAdapterParams):\n | TronWalletProvider\n | undefined => {\n const chain: Chain = 'TRON';\n\n // we have to do this type cast because these adapters have the _wallet property private,\n // but we need to access it to get the TronWeb instance\n const tronAdapter = adapter as unknown as TronAdapter;\n\n // Wallet is not installed\n if (tronAdapter.readyState !== WalletReadyState.Found) {\n return undefined;\n }\n\n const metadata: WalletProviderMetadata = {\n displayName: tronAdapter.name,\n icon: tronAdapter.icon,\n };\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: metadata.displayName,\n walletProviderType,\n });\n\n const connect: TronWalletProvider['connect'] = async () => {\n await tronAdapter.connect();\n\n // Some wallets (Trust, Bitget) populate the address asynchronously after connect()\n // Wait briefly for the address to be populated by the wallet\n const startTime = Date.now();\n while (!tronAdapter.address?.length && Date.now() - startTime < 1000) {\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n return {\n addresses: tronAdapter.address ? [{ address: tronAdapter.address }] : [],\n };\n };\n\n const destroy: TronWalletProvider['destroy'] = async () => {\n try {\n await tronAdapter.disconnect();\n } catch (err) {\n getCore(dynamicClient).logger.error(\n `[${key}] destroy: remote signal failed`,\n err\n );\n }\n };\n\n const getActiveNetworkId: TronWalletProvider['getActiveNetworkId'] =\n async () => {\n const networkInfo = await tronAdapter.network();\n\n const networkId = convertChainIdToDecimal(networkInfo.chainId);\n\n return { networkId };\n };\n\n const getConnectedAddresses: TronWalletProvider['getConnectedAddresses'] =\n async () => {\n return {\n addresses: tronAdapter.address ? [tronAdapter.address] : [],\n };\n };\n\n const signMessage: TronWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signedMessage = await tronAdapter.signMessage(message);\n\n return {\n signature: signedMessage,\n };\n };\n\n const getTronWeb: TronWalletProvider['getTronWeb'] = async ({\n walletAccount,\n }) => {\n const tronWeb =\n tronAdapter._wallet?.tronWeb || tronAdapter._wallet?.tron?.tronWeb;\n\n if (tronWeb) {\n return tronWeb;\n }\n\n const activeNetworkData = await getActiveNetworkData(\n { walletAccount },\n dynamicClient\n );\n assertDefined(activeNetworkData, 'No active network data found');\n\n const url = activeNetworkData.networkData?.rpcUrls.http[0];\n assertDefined(url, 'No RPC URL found for active network');\n\n return new TronWeb({ fullHost: url });\n };\n\n return {\n chain,\n confirmTransaction: (args) => tronConfirmTransaction(args, dynamicClient),\n connect,\n destroy,\n executeSwapTransaction: (args) =>\n tronExecuteSwapTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n getTronWeb,\n groupKey: formatWalletProviderGroupKey(metadata.displayName),\n key,\n metadata,\n signMessage,\n transferAmount: (args) => tronTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\nimport {\n BitKeepAdapter,\n OkxWalletAdapter,\n TokenPocketAdapter,\n TronLinkAdapter,\n TrustAdapter,\n} from '@tronweb3/tronwallet-adapters';\n\nimport { registerTronNetworkProviderBuilder } from '../../registerTronNetworkProviderBuilder';\nimport type { TronWalletProvider } from '../../TronWalletProvider.types';\nimport { createWalletProviderForTronWalletAdapter } from '../utils/createWalletProviderForTronWalletAdapter';\n\nexport const TRON_WALLET_ADAPTERS_EXTENSION_KEY = 'tronWalletAdapters';\n\n/**\n * Adds the Tron Wallet Adapters extension to the Dynamic client.\n *\n * This extension enables integration with wallets that have related Tron Wallet Adapters ('@tronweb3/tronwallet-adapters'),\n * automatically registering compatible wallets for use with the Dynamic SDK.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addTronWalletAdaptersExtension = (\n client = getDefaultClient()\n): void => {\n if (\n hasExtension({ extensionKey: TRON_WALLET_ADAPTERS_EXTENSION_KEY }, client)\n ) {\n return;\n }\n\n registerExtension(\n { extensionKey: TRON_WALLET_ADAPTERS_EXTENSION_KEY },\n client\n );\n\n registerTronNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const tronWalletProviders: TronWalletProvider[] = [];\n\n // Create and register OKX wallet provider\n const okxWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new OkxWalletAdapter(),\n dynamicClient: client,\n });\n if (okxWalletProvider) {\n tronWalletProviders.push(okxWalletProvider);\n }\n\n // Create and register TronLink wallet provider\n const tronLinkWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new TronLinkAdapter(),\n dynamicClient: client,\n });\n if (tronLinkWalletProvider) {\n tronWalletProviders.push(tronLinkWalletProvider);\n }\n\n // Create and register Trust wallet provider\n const trustWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new TrustAdapter(),\n dynamicClient: client,\n });\n if (trustWalletProvider) {\n tronWalletProviders.push(trustWalletProvider);\n }\n\n // Create and register TokenPocket wallet provider\n const tokenPocketWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new TokenPocketAdapter(),\n dynamicClient: client,\n });\n if (tokenPocketWalletProvider) {\n tronWalletProviders.push(tokenPocketWalletProvider);\n }\n\n // Create and register Bitget wallet provider\n const bitgetWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new BitKeepAdapter(),\n dynamicClient: client,\n });\n if (bitgetWalletProvider) {\n tronWalletProviders.push(bitgetWalletProvider);\n }\n\n tronWalletProviders.forEach((walletProvider) => {\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n });\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { i as tronConfirmTransaction, r as tronExecuteSwapTransaction, s as registerTronNetworkProviderBuilder, t as tronTransferAmount } from "./tronTransferAmount-DtvwBYGp.esm.js";
1
+ import { i as tronConfirmTransaction, r as tronExecuteSwapTransaction, s as registerTronNetworkProviderBuilder, t as tronTransferAmount } from "./tronTransferAmount-A-hXh2Mc.esm.js";
2
2
  import { WalletProviderPriority, assertDefined, formatWalletProviderGroupKey, formatWalletProviderKey, getCore, getDefaultClient, getWalletProviderRegistry, hasExtension, registerExtension } from "@dynamic-labs-sdk/client/core";
3
3
  import { TronWeb } from "tronweb";
4
4
  import { assertWalletAccountSigningAvailability, getActiveNetworkData } from "@dynamic-labs-sdk/client";
@@ -131,4 +131,4 @@ const addTronWalletAdaptersExtension = (client = getDefaultClient()) => {
131
131
 
132
132
  //#endregion
133
133
  export { addTronWalletAdaptersExtension as t };
134
- //# sourceMappingURL=addTronWalletAdaptersExtension-DvJ-FT8m.esm.js.map
134
+ //# sourceMappingURL=addTronWalletAdaptersExtension-aiSgBowW.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"addTronWalletAdaptersExtension-DvJ-FT8m.esm.js","names":["chain: Chain","metadata: WalletProviderMetadata","connect: TronWalletProvider['connect']","destroy: TronWalletProvider['destroy']","getActiveNetworkId: TronWalletProvider['getActiveNetworkId']","getConnectedAddresses: TronWalletProvider['getConnectedAddresses']","signMessage: TronWalletProvider['signMessage']","getTronWeb: TronWalletProvider['getTronWeb']","tronWalletProviders: TronWalletProvider[]"],"sources":["../src/utils/convertChainIdToDecimal/convertChainIdToDecimal.ts","../src/walletAdapters/utils/createWalletProviderForTronWalletAdapter/createWalletProviderForTronWalletAdapter.ts","../src/walletAdapters/addTronWalletAdaptersExtension/addTronWalletAdaptersExtension.ts"],"sourcesContent":["/** @notInstrumented */\nexport const convertChainIdToDecimal = (chainId: string): string =>\n chainId.startsWith('0x') ? parseInt(chainId, 16).toString() : chainId;\n","import {\n type Chain,\n type DynamicClient,\n type WalletProviderMetadata,\n assertWalletAccountSigningAvailability,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getCore,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport type { Adapter } from '@tronweb3/tronwallet-abstract-adapter';\nimport { WalletReadyState } from '@tronweb3/tronwallet-abstract-adapter';\nimport { TronWeb } from 'tronweb';\n\nimport type {\n TronAdapter,\n TronWalletProvider,\n} from '../../../TronWalletProvider.types';\nimport { convertChainIdToDecimal } from '../../../utils/convertChainIdToDecimal';\nimport { tronConfirmTransaction } from '../../../utils/tronConfirmTransaction';\nimport { tronExecuteSwapTransaction } from '../../../utils/tronExecuteSwapTransaction';\nimport { tronTransferAmount } from '../../../utils/tronTransferAmount';\n\ntype CreateWalletProviderForTronWalletAdapterParams = {\n adapter: Adapter;\n dynamicClient: DynamicClient;\n};\n\n/** @notInstrumented */\nexport const createWalletProviderForTronWalletAdapter = ({\n dynamicClient,\n adapter,\n}: CreateWalletProviderForTronWalletAdapterParams):\n | TronWalletProvider\n | undefined => {\n const chain: Chain = 'TRON';\n\n // we have to do this type cast because these adapters have the _wallet property private,\n // but we need to access it to get the TronWeb instance\n const tronAdapter = adapter as unknown as TronAdapter;\n\n // Wallet is not installed\n if (tronAdapter.readyState !== WalletReadyState.Found) {\n return undefined;\n }\n\n const metadata: WalletProviderMetadata = {\n displayName: tronAdapter.name,\n icon: tronAdapter.icon,\n };\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: metadata.displayName,\n walletProviderType,\n });\n\n const connect: TronWalletProvider['connect'] = async () => {\n await tronAdapter.connect();\n\n // Some wallets (Trust, Bitget) populate the address asynchronously after connect()\n // Wait briefly for the address to be populated by the wallet\n const startTime = Date.now();\n while (!tronAdapter.address?.length && Date.now() - startTime < 1000) {\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n return {\n addresses: tronAdapter.address ? [{ address: tronAdapter.address }] : [],\n };\n };\n\n const destroy: TronWalletProvider['destroy'] = async () => {\n try {\n await tronAdapter.disconnect();\n } catch (err) {\n getCore(dynamicClient).logger.error(\n `[${key}] destroy: remote signal failed`,\n err\n );\n }\n };\n\n const getActiveNetworkId: TronWalletProvider['getActiveNetworkId'] =\n async () => {\n const networkInfo = await tronAdapter.network();\n\n const networkId = convertChainIdToDecimal(networkInfo.chainId);\n\n return { networkId };\n };\n\n const getConnectedAddresses: TronWalletProvider['getConnectedAddresses'] =\n async () => {\n return {\n addresses: tronAdapter.address ? [tronAdapter.address] : [],\n };\n };\n\n const signMessage: TronWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signedMessage = await tronAdapter.signMessage(message);\n\n return {\n signature: signedMessage,\n };\n };\n\n const getTronWeb: TronWalletProvider['getTronWeb'] = async ({\n walletAccount,\n }) => {\n const tronWeb =\n tronAdapter._wallet?.tronWeb || tronAdapter._wallet?.tron?.tronWeb;\n\n if (tronWeb) {\n return tronWeb;\n }\n\n const activeNetworkData = await getActiveNetworkData(\n { walletAccount },\n dynamicClient\n );\n assertDefined(activeNetworkData, 'No active network data found');\n\n const url = activeNetworkData.networkData?.rpcUrls.http[0];\n assertDefined(url, 'No RPC URL found for active network');\n\n return new TronWeb({ fullHost: url });\n };\n\n return {\n chain,\n confirmTransaction: (args) => tronConfirmTransaction(args, dynamicClient),\n connect,\n destroy,\n executeSwapTransaction: (args) =>\n tronExecuteSwapTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n getTronWeb,\n groupKey: formatWalletProviderGroupKey(metadata.displayName),\n key,\n metadata,\n signMessage,\n transferAmount: (args) => tronTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\nimport {\n BitKeepAdapter,\n OkxWalletAdapter,\n TokenPocketAdapter,\n TronLinkAdapter,\n TrustAdapter,\n} from '@tronweb3/tronwallet-adapters';\n\nimport { registerTronNetworkProviderBuilder } from '../../registerTronNetworkProviderBuilder';\nimport type { TronWalletProvider } from '../../TronWalletProvider.types';\nimport { createWalletProviderForTronWalletAdapter } from '../utils/createWalletProviderForTronWalletAdapter';\n\nexport const TRON_WALLET_ADAPTERS_EXTENSION_KEY = 'tronWalletAdapters';\n\n/**\n * Adds the Tron Wallet Adapters extension to the Dynamic client.\n *\n * This extension enables integration with wallets that have related Tron Wallet Adapters ('@tronweb3/tronwallet-adapters'),\n * automatically registering compatible wallets for use with the Dynamic SDK.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addTronWalletAdaptersExtension = (\n client = getDefaultClient()\n): void => {\n if (\n hasExtension({ extensionKey: TRON_WALLET_ADAPTERS_EXTENSION_KEY }, client)\n ) {\n return;\n }\n\n registerExtension(\n { extensionKey: TRON_WALLET_ADAPTERS_EXTENSION_KEY },\n client\n );\n\n registerTronNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const tronWalletProviders: TronWalletProvider[] = [];\n\n // Create and register OKX wallet provider\n const okxWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new OkxWalletAdapter(),\n dynamicClient: client,\n });\n if (okxWalletProvider) {\n tronWalletProviders.push(okxWalletProvider);\n }\n\n // Create and register TronLink wallet provider\n const tronLinkWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new TronLinkAdapter(),\n dynamicClient: client,\n });\n if (tronLinkWalletProvider) {\n tronWalletProviders.push(tronLinkWalletProvider);\n }\n\n // Create and register Trust wallet provider\n const trustWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new TrustAdapter(),\n dynamicClient: client,\n });\n if (trustWalletProvider) {\n tronWalletProviders.push(trustWalletProvider);\n }\n\n // Create and register TokenPocket wallet provider\n const tokenPocketWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new TokenPocketAdapter(),\n dynamicClient: client,\n });\n if (tokenPocketWalletProvider) {\n tronWalletProviders.push(tokenPocketWalletProvider);\n }\n\n // Create and register Bitget wallet provider\n const bitgetWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new BitKeepAdapter(),\n dynamicClient: client,\n });\n if (bitgetWalletProvider) {\n tronWalletProviders.push(bitgetWalletProvider);\n }\n\n tronWalletProviders.forEach((walletProvider) => {\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n });\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"addTronWalletAdaptersExtension-aiSgBowW.esm.js","names":["chain: Chain","metadata: WalletProviderMetadata","connect: TronWalletProvider['connect']","destroy: TronWalletProvider['destroy']","getActiveNetworkId: TronWalletProvider['getActiveNetworkId']","getConnectedAddresses: TronWalletProvider['getConnectedAddresses']","signMessage: TronWalletProvider['signMessage']","getTronWeb: TronWalletProvider['getTronWeb']","tronWalletProviders: TronWalletProvider[]"],"sources":["../src/utils/convertChainIdToDecimal/convertChainIdToDecimal.ts","../src/walletAdapters/utils/createWalletProviderForTronWalletAdapter/createWalletProviderForTronWalletAdapter.ts","../src/walletAdapters/addTronWalletAdaptersExtension/addTronWalletAdaptersExtension.ts"],"sourcesContent":["/** @notInstrumented */\nexport const convertChainIdToDecimal = (chainId: string): string =>\n chainId.startsWith('0x') ? parseInt(chainId, 16).toString() : chainId;\n","import {\n type Chain,\n type DynamicClient,\n type WalletProviderMetadata,\n assertWalletAccountSigningAvailability,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getCore,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport type { Adapter } from '@tronweb3/tronwallet-abstract-adapter';\nimport { WalletReadyState } from '@tronweb3/tronwallet-abstract-adapter';\nimport { TronWeb } from 'tronweb';\n\nimport type {\n TronAdapter,\n TronWalletProvider,\n} from '../../../TronWalletProvider.types';\nimport { convertChainIdToDecimal } from '../../../utils/convertChainIdToDecimal';\nimport { tronConfirmTransaction } from '../../../utils/tronConfirmTransaction';\nimport { tronExecuteSwapTransaction } from '../../../utils/tronExecuteSwapTransaction';\nimport { tronTransferAmount } from '../../../utils/tronTransferAmount';\n\ntype CreateWalletProviderForTronWalletAdapterParams = {\n adapter: Adapter;\n dynamicClient: DynamicClient;\n};\n\n/** @notInstrumented */\nexport const createWalletProviderForTronWalletAdapter = ({\n dynamicClient,\n adapter,\n}: CreateWalletProviderForTronWalletAdapterParams):\n | TronWalletProvider\n | undefined => {\n const chain: Chain = 'TRON';\n\n // we have to do this type cast because these adapters have the _wallet property private,\n // but we need to access it to get the TronWeb instance\n const tronAdapter = adapter as unknown as TronAdapter;\n\n // Wallet is not installed\n if (tronAdapter.readyState !== WalletReadyState.Found) {\n return undefined;\n }\n\n const metadata: WalletProviderMetadata = {\n displayName: tronAdapter.name,\n icon: tronAdapter.icon,\n };\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: metadata.displayName,\n walletProviderType,\n });\n\n const connect: TronWalletProvider['connect'] = async () => {\n await tronAdapter.connect();\n\n // Some wallets (Trust, Bitget) populate the address asynchronously after connect()\n // Wait briefly for the address to be populated by the wallet\n const startTime = Date.now();\n while (!tronAdapter.address?.length && Date.now() - startTime < 1000) {\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n return {\n addresses: tronAdapter.address ? [{ address: tronAdapter.address }] : [],\n };\n };\n\n const destroy: TronWalletProvider['destroy'] = async () => {\n try {\n await tronAdapter.disconnect();\n } catch (err) {\n getCore(dynamicClient).logger.error(\n `[${key}] destroy: remote signal failed`,\n err\n );\n }\n };\n\n const getActiveNetworkId: TronWalletProvider['getActiveNetworkId'] =\n async () => {\n const networkInfo = await tronAdapter.network();\n\n const networkId = convertChainIdToDecimal(networkInfo.chainId);\n\n return { networkId };\n };\n\n const getConnectedAddresses: TronWalletProvider['getConnectedAddresses'] =\n async () => {\n return {\n addresses: tronAdapter.address ? [tronAdapter.address] : [],\n };\n };\n\n const signMessage: TronWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signedMessage = await tronAdapter.signMessage(message);\n\n return {\n signature: signedMessage,\n };\n };\n\n const getTronWeb: TronWalletProvider['getTronWeb'] = async ({\n walletAccount,\n }) => {\n const tronWeb =\n tronAdapter._wallet?.tronWeb || tronAdapter._wallet?.tron?.tronWeb;\n\n if (tronWeb) {\n return tronWeb;\n }\n\n const activeNetworkData = await getActiveNetworkData(\n { walletAccount },\n dynamicClient\n );\n assertDefined(activeNetworkData, 'No active network data found');\n\n const url = activeNetworkData.networkData?.rpcUrls.http[0];\n assertDefined(url, 'No RPC URL found for active network');\n\n return new TronWeb({ fullHost: url });\n };\n\n return {\n chain,\n confirmTransaction: (args) => tronConfirmTransaction(args, dynamicClient),\n connect,\n destroy,\n executeSwapTransaction: (args) =>\n tronExecuteSwapTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n getTronWeb,\n groupKey: formatWalletProviderGroupKey(metadata.displayName),\n key,\n metadata,\n signMessage,\n transferAmount: (args) => tronTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\nimport {\n BitKeepAdapter,\n OkxWalletAdapter,\n TokenPocketAdapter,\n TronLinkAdapter,\n TrustAdapter,\n} from '@tronweb3/tronwallet-adapters';\n\nimport { registerTronNetworkProviderBuilder } from '../../registerTronNetworkProviderBuilder';\nimport type { TronWalletProvider } from '../../TronWalletProvider.types';\nimport { createWalletProviderForTronWalletAdapter } from '../utils/createWalletProviderForTronWalletAdapter';\n\nexport const TRON_WALLET_ADAPTERS_EXTENSION_KEY = 'tronWalletAdapters';\n\n/**\n * Adds the Tron Wallet Adapters extension to the Dynamic client.\n *\n * This extension enables integration with wallets that have related Tron Wallet Adapters ('@tronweb3/tronwallet-adapters'),\n * automatically registering compatible wallets for use with the Dynamic SDK.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addTronWalletAdaptersExtension = (\n client = getDefaultClient()\n): void => {\n if (\n hasExtension({ extensionKey: TRON_WALLET_ADAPTERS_EXTENSION_KEY }, client)\n ) {\n return;\n }\n\n registerExtension(\n { extensionKey: TRON_WALLET_ADAPTERS_EXTENSION_KEY },\n client\n );\n\n registerTronNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const tronWalletProviders: TronWalletProvider[] = [];\n\n // Create and register OKX wallet provider\n const okxWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new OkxWalletAdapter(),\n dynamicClient: client,\n });\n if (okxWalletProvider) {\n tronWalletProviders.push(okxWalletProvider);\n }\n\n // Create and register TronLink wallet provider\n const tronLinkWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new TronLinkAdapter(),\n dynamicClient: client,\n });\n if (tronLinkWalletProvider) {\n tronWalletProviders.push(tronLinkWalletProvider);\n }\n\n // Create and register Trust wallet provider\n const trustWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new TrustAdapter(),\n dynamicClient: client,\n });\n if (trustWalletProvider) {\n tronWalletProviders.push(trustWalletProvider);\n }\n\n // Create and register TokenPocket wallet provider\n const tokenPocketWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new TokenPocketAdapter(),\n dynamicClient: client,\n });\n if (tokenPocketWalletProvider) {\n tronWalletProviders.push(tokenPocketWalletProvider);\n }\n\n // Create and register Bitget wallet provider\n const bitgetWalletProvider = createWalletProviderForTronWalletAdapter({\n adapter: new BitKeepAdapter(),\n dynamicClient: client,\n });\n if (bitgetWalletProvider) {\n tronWalletProviders.push(bitgetWalletProvider);\n }\n\n tronWalletProviders.forEach((walletProvider) => {\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n });\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { i as tronConfirmTransaction, r as tronExecuteSwapTransaction, s as registerTronNetworkProviderBuilder, t as tronTransferAmount } from "./tronTransferAmount-DtvwBYGp.esm.js";
1
+ import { i as tronConfirmTransaction, r as tronExecuteSwapTransaction, s as registerTronNetworkProviderBuilder, t as tronTransferAmount } from "./tronTransferAmount-A-hXh2Mc.esm.js";
2
2
  import { WalletProviderPriority, assertDefined, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getDefaultClient, getWalletProviderRegistry, hasExtension, registerExtension, switchActiveNetworkInLastKnownRegistry } from "@dynamic-labs-sdk/client/core";
3
3
  import { TronWeb } from "tronweb";
4
4
  import { getActiveNetworkData } from "@dynamic-labs-sdk/client";
@@ -108,4 +108,4 @@ const addWaasTronExtension = (client = getDefaultClient()) => {
108
108
 
109
109
  //#endregion
110
110
  export { addWaasTronExtension as t };
111
- //# sourceMappingURL=addWaasTronExtension-BB4gn8uN.esm.js.map
111
+ //# sourceMappingURL=addWaasTronExtension-BGoqq6je.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"addWaasTronExtension-BB4gn8uN.esm.js","names":["TRON_CHAIN: Chain","getActiveNetworkId: WaasTronWalletProvider['getActiveNetworkId']","switchActiveNetwork: WaasTronWalletProvider['switchActiveNetwork']","getConnectedAddresses: WaasTronWalletProvider['getConnectedAddresses']","signMessage: WaasTronWalletProvider['signMessage']","getTronWeb: WaasTronWalletProvider['getTronWeb']","destroy: WaasTronWalletProvider['destroy']"],"sources":["../src/waas/utils/createWalletProviderForWaasTron/createWalletProviderForWaasTron.ts","../src/waas/addWaasTronExtension/addWaasTronExtension.ts"],"sourcesContent":["import {\n type Chain,\n type DynamicClient,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\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 { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { TronWeb } from 'tronweb';\n\nimport type { TronWalletAccount } from '../../../TronWalletAccount.types';\nimport { tronConfirmTransaction } from '../../../utils/tronConfirmTransaction';\nimport { tronExecuteSwapTransaction } from '../../../utils/tronExecuteSwapTransaction';\nimport { tronTransferAmount } from '../../../utils/tronTransferAmount';\nimport type { WaasTronWalletProvider } from '../../WaasTronWalletProvider.types';\n\nconst TRON_CHAIN: Chain = 'TRON';\n\ntype UnsignedTronTransaction = {\n raw_data_hex: string;\n signature?: string[];\n txID?: string;\n};\n\ntype CreateWalletProviderForWaasTronParams = {\n dynamicClient: DynamicClient;\n};\n\n/** @notInstrumented */\nexport const createWalletProviderForWaasTron = ({\n dynamicClient,\n}: CreateWalletProviderForWaasTronParams): WaasTronWalletProvider => {\n const walletProviderType = WalletProviderEnum.EmbeddedWallet;\n\n const key = formatWalletProviderKey({\n chain: TRON_CHAIN,\n displayName: DYNAMIC_WAAS_METADATA.displayName,\n walletProviderType,\n });\n\n const waasProvider = createWaasProvider({\n chain: TRON_CHAIN,\n sdkClient: dynamicClient,\n });\n\n const getActiveNetworkId: WaasTronWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n const switchActiveNetwork: WaasTronWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: dynamicClient,\n networkId,\n walletProviderKey: key,\n });\n\n const getConnectedAddresses: WaasTronWalletProvider['getConnectedAddresses'] =\n async () => {\n const waasTronAddresses = getAllUserWaasAddressesForChain(\n { chain: TRON_CHAIN },\n dynamicClient\n );\n\n return {\n addresses: waasTronAddresses,\n };\n };\n\n const signMessage: WaasTronWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n return waasProvider.signMessage({\n message,\n walletAccount,\n });\n };\n\n const buildTronWebForWalletAccount = async (\n walletAccount: TronWalletAccount\n ): Promise<TronWeb> => {\n const activeNetworkData = await getActiveNetworkData(\n { walletAccount },\n dynamicClient\n );\n assertDefined(activeNetworkData, 'No active network data found');\n\n const url = activeNetworkData.networkData?.rpcUrls.http[0];\n assertDefined(url, 'No RPC URL found for active network');\n\n const tronWeb = new TronWeb({ fullHost: url });\n\n tronWeb.setAddress(walletAccount.address);\n\n tronWeb.trx.sign = (async (transaction: UnsignedTronTransaction) => {\n assertDefined(\n transaction?.raw_data_hex,\n 'Tron transaction is missing raw_data_hex'\n );\n\n const { signature } = await waasProvider.signSerializedTransaction({\n serializedTransaction: transaction.raw_data_hex,\n walletAccount,\n });\n\n return {\n ...transaction,\n signature: [signature],\n };\n }) as unknown as TronWeb['trx']['sign'];\n\n return tronWeb;\n };\n\n const getTronWeb: WaasTronWalletProvider['getTronWeb'] = async ({\n walletAccount,\n }) => buildTronWebForWalletAccount(walletAccount);\n\n const destroy: WaasTronWalletProvider['destroy'] = async (args) =>\n waasProvider.destroy(args);\n\n return {\n ...waasProvider,\n chain: TRON_CHAIN,\n confirmTransaction: (args) => tronConfirmTransaction(args, dynamicClient),\n destroy,\n executeSwapTransaction: (args) =>\n tronExecuteSwapTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n getTronWeb,\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 signMessage,\n switchActiveNetwork,\n transferAmount: (args) => tronTransferAmount(args, dynamicClient),\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 { registerTronNetworkProviderBuilder } from '../../registerTronNetworkProviderBuilder';\nimport { createWalletProviderForWaasTron } from '../utils/createWalletProviderForWaasTron';\n\nexport const WAAS_TRON_EXTENSION_KEY = 'waasTron';\n\n/**\n * Adds the Dynamic WaaS (Wallet as a Service) Tron extension to the Dynamic client.\n *\n * This extension enables embedded wallet functionality for the Tron 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 addWaasTronExtension = (client = getDefaultClient()): void => {\n if (hasExtension({ extensionKey: WAAS_TRON_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: WAAS_TRON_EXTENSION_KEY }, client);\n registerTronNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const walletProvider = createWalletProviderForWaasTron({\n dynamicClient: client,\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SDK,\n walletProvider,\n });\n};\n"],"mappings":";;;;;;;;AA0BA,MAAMA,aAAoB;;AAa1B,MAAa,mCAAmC,EAC9C,oBACmE;CACnE,MAAM,qBAAqB,mBAAmB;CAE9C,MAAM,MAAM,wBAAwB;EAClC,OAAO;EACP,aAAa,sBAAsB;EACnC;EACD,CAAC;CAEF,MAAM,eAAe,mBAAmB;EACtC,OAAO;EACP,WAAW;EACZ,CAAC;CAEF,MAAMC,qBACJ,YACE,wCAAwC;EACtC,QAAQ;EACR,mBAAmB;EACpB,CAAC;CAEN,MAAMC,sBACJ,OAAO,EAAE,gBACP,uCAAuC;EACrC,QAAQ;EACR;EACA,mBAAmB;EACpB,CAAC;CAEN,MAAMC,wBACJ,YAAY;AAMV,SAAO,EACL,WANwB,gCACxB,EAAE,OAAO,YAAY,EACrB,cACD,EAIA;;CAGL,MAAMC,cAAqD,OAAO,EAChE,SACA,oBACI;AACJ,gBAAc,eAAe,6BAA6B;AAE1D,SAAO,aAAa,YAAY;GAC9B;GACA;GACD,CAAC;;CAGJ,MAAM,+BAA+B,OACnC,kBACqB;EACrB,MAAM,oBAAoB,MAAM,qBAC9B,EAAE,eAAe,EACjB,cACD;AACD,gBAAc,mBAAmB,+BAA+B;EAEhE,MAAM,MAAM,kBAAkB,aAAa,QAAQ,KAAK;AACxD,gBAAc,KAAK,sCAAsC;EAEzD,MAAM,UAAU,IAAI,QAAQ,EAAE,UAAU,KAAK,CAAC;AAE9C,UAAQ,WAAW,cAAc,QAAQ;AAEzC,UAAQ,IAAI,QAAQ,OAAO,gBAAyC;AAClE,iBACE,aAAa,cACb,2CACD;GAED,MAAM,EAAE,cAAc,MAAM,aAAa,0BAA0B;IACjE,uBAAuB,YAAY;IACnC;IACD,CAAC;AAEF,UAAO;IACL,GAAG;IACH,WAAW,CAAC,UAAU;IACvB;;AAGH,SAAO;;CAGT,MAAMC,aAAmD,OAAO,EAC9D,oBACI,6BAA6B,cAAc;CAEjD,MAAMC,UAA6C,OAAO,SACxD,aAAa,QAAQ,KAAK;AAE5B,QAAO;EACL,GAAG;EACH,OAAO;EACP,qBAAqB,SAAS,uBAAuB,MAAM,cAAc;EACzE;EACA,yBAAyB,SACvB,2BAA2B,MAAM,cAAc;EACjD;EACA;EACA;EACA,UAAU,6BAA6B,sBAAsB,YAAY;EACzE;EACA,UAAU;GACR,aAAa,sBAAsB;GACnC,MAAM,sBAAsB;GAC7B;EACD;EACA;EACA,iBAAiB,SAAS,mBAAmB,MAAM,cAAc;EACjE;EACD;;;;;AClJH,MAAa,0BAA0B;;;;;;;;;;AAWvC,MAAa,wBAAwB,SAAS,kBAAkB,KAAW;AACzE,KAAI,aAAa,EAAE,cAAc,yBAAyB,EAAE,OAAO,CACjE;AAGF,mBAAkB,EAAE,cAAc,yBAAyB,EAAE,OAAO;AACpE,oCAAmC,OAAO;CAE1C,MAAM,yBAAyB,0BAA0B,OAAO;CAEhE,MAAM,iBAAiB,gCAAgC,EACrD,eAAe,QAChB,CAAC;AAEF,wBAAuB,SAAS;EAC9B,UAAU,uBAAuB;EACjC;EACD,CAAC"}
1
+ {"version":3,"file":"addWaasTronExtension-BGoqq6je.esm.js","names":["TRON_CHAIN: Chain","getActiveNetworkId: WaasTronWalletProvider['getActiveNetworkId']","switchActiveNetwork: WaasTronWalletProvider['switchActiveNetwork']","getConnectedAddresses: WaasTronWalletProvider['getConnectedAddresses']","signMessage: WaasTronWalletProvider['signMessage']","getTronWeb: WaasTronWalletProvider['getTronWeb']","destroy: WaasTronWalletProvider['destroy']"],"sources":["../src/waas/utils/createWalletProviderForWaasTron/createWalletProviderForWaasTron.ts","../src/waas/addWaasTronExtension/addWaasTronExtension.ts"],"sourcesContent":["import {\n type Chain,\n type DynamicClient,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\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 { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { TronWeb } from 'tronweb';\n\nimport type { TronWalletAccount } from '../../../TronWalletAccount.types';\nimport { tronConfirmTransaction } from '../../../utils/tronConfirmTransaction';\nimport { tronExecuteSwapTransaction } from '../../../utils/tronExecuteSwapTransaction';\nimport { tronTransferAmount } from '../../../utils/tronTransferAmount';\nimport type { WaasTronWalletProvider } from '../../WaasTronWalletProvider.types';\n\nconst TRON_CHAIN: Chain = 'TRON';\n\ntype UnsignedTronTransaction = {\n raw_data_hex: string;\n signature?: string[];\n txID?: string;\n};\n\ntype CreateWalletProviderForWaasTronParams = {\n dynamicClient: DynamicClient;\n};\n\n/** @notInstrumented */\nexport const createWalletProviderForWaasTron = ({\n dynamicClient,\n}: CreateWalletProviderForWaasTronParams): WaasTronWalletProvider => {\n const walletProviderType = WalletProviderEnum.EmbeddedWallet;\n\n const key = formatWalletProviderKey({\n chain: TRON_CHAIN,\n displayName: DYNAMIC_WAAS_METADATA.displayName,\n walletProviderType,\n });\n\n const waasProvider = createWaasProvider({\n chain: TRON_CHAIN,\n sdkClient: dynamicClient,\n });\n\n const getActiveNetworkId: WaasTronWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n const switchActiveNetwork: WaasTronWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: dynamicClient,\n networkId,\n walletProviderKey: key,\n });\n\n const getConnectedAddresses: WaasTronWalletProvider['getConnectedAddresses'] =\n async () => {\n const waasTronAddresses = getAllUserWaasAddressesForChain(\n { chain: TRON_CHAIN },\n dynamicClient\n );\n\n return {\n addresses: waasTronAddresses,\n };\n };\n\n const signMessage: WaasTronWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n return waasProvider.signMessage({\n message,\n walletAccount,\n });\n };\n\n const buildTronWebForWalletAccount = async (\n walletAccount: TronWalletAccount\n ): Promise<TronWeb> => {\n const activeNetworkData = await getActiveNetworkData(\n { walletAccount },\n dynamicClient\n );\n assertDefined(activeNetworkData, 'No active network data found');\n\n const url = activeNetworkData.networkData?.rpcUrls.http[0];\n assertDefined(url, 'No RPC URL found for active network');\n\n const tronWeb = new TronWeb({ fullHost: url });\n\n tronWeb.setAddress(walletAccount.address);\n\n tronWeb.trx.sign = (async (transaction: UnsignedTronTransaction) => {\n assertDefined(\n transaction?.raw_data_hex,\n 'Tron transaction is missing raw_data_hex'\n );\n\n const { signature } = await waasProvider.signSerializedTransaction({\n serializedTransaction: transaction.raw_data_hex,\n walletAccount,\n });\n\n return {\n ...transaction,\n signature: [signature],\n };\n }) as unknown as TronWeb['trx']['sign'];\n\n return tronWeb;\n };\n\n const getTronWeb: WaasTronWalletProvider['getTronWeb'] = async ({\n walletAccount,\n }) => buildTronWebForWalletAccount(walletAccount);\n\n const destroy: WaasTronWalletProvider['destroy'] = async (args) =>\n waasProvider.destroy(args);\n\n return {\n ...waasProvider,\n chain: TRON_CHAIN,\n confirmTransaction: (args) => tronConfirmTransaction(args, dynamicClient),\n destroy,\n executeSwapTransaction: (args) =>\n tronExecuteSwapTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n getTronWeb,\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 signMessage,\n switchActiveNetwork,\n transferAmount: (args) => tronTransferAmount(args, dynamicClient),\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 { registerTronNetworkProviderBuilder } from '../../registerTronNetworkProviderBuilder';\nimport { createWalletProviderForWaasTron } from '../utils/createWalletProviderForWaasTron';\n\nexport const WAAS_TRON_EXTENSION_KEY = 'waasTron';\n\n/**\n * Adds the Dynamic WaaS (Wallet as a Service) Tron extension to the Dynamic client.\n *\n * This extension enables embedded wallet functionality for the Tron 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 addWaasTronExtension = (client = getDefaultClient()): void => {\n if (hasExtension({ extensionKey: WAAS_TRON_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: WAAS_TRON_EXTENSION_KEY }, client);\n registerTronNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const walletProvider = createWalletProviderForWaasTron({\n dynamicClient: client,\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SDK,\n walletProvider,\n });\n};\n"],"mappings":";;;;;;;;AA0BA,MAAMA,aAAoB;;AAa1B,MAAa,mCAAmC,EAC9C,oBACmE;CACnE,MAAM,qBAAqB,mBAAmB;CAE9C,MAAM,MAAM,wBAAwB;EAClC,OAAO;EACP,aAAa,sBAAsB;EACnC;EACD,CAAC;CAEF,MAAM,eAAe,mBAAmB;EACtC,OAAO;EACP,WAAW;EACZ,CAAC;CAEF,MAAMC,qBACJ,YACE,wCAAwC;EACtC,QAAQ;EACR,mBAAmB;EACpB,CAAC;CAEN,MAAMC,sBACJ,OAAO,EAAE,gBACP,uCAAuC;EACrC,QAAQ;EACR;EACA,mBAAmB;EACpB,CAAC;CAEN,MAAMC,wBACJ,YAAY;AAMV,SAAO,EACL,WANwB,gCACxB,EAAE,OAAO,YAAY,EACrB,cACD,EAIA;;CAGL,MAAMC,cAAqD,OAAO,EAChE,SACA,oBACI;AACJ,gBAAc,eAAe,6BAA6B;AAE1D,SAAO,aAAa,YAAY;GAC9B;GACA;GACD,CAAC;;CAGJ,MAAM,+BAA+B,OACnC,kBACqB;EACrB,MAAM,oBAAoB,MAAM,qBAC9B,EAAE,eAAe,EACjB,cACD;AACD,gBAAc,mBAAmB,+BAA+B;EAEhE,MAAM,MAAM,kBAAkB,aAAa,QAAQ,KAAK;AACxD,gBAAc,KAAK,sCAAsC;EAEzD,MAAM,UAAU,IAAI,QAAQ,EAAE,UAAU,KAAK,CAAC;AAE9C,UAAQ,WAAW,cAAc,QAAQ;AAEzC,UAAQ,IAAI,QAAQ,OAAO,gBAAyC;AAClE,iBACE,aAAa,cACb,2CACD;GAED,MAAM,EAAE,cAAc,MAAM,aAAa,0BAA0B;IACjE,uBAAuB,YAAY;IACnC;IACD,CAAC;AAEF,UAAO;IACL,GAAG;IACH,WAAW,CAAC,UAAU;IACvB;;AAGH,SAAO;;CAGT,MAAMC,aAAmD,OAAO,EAC9D,oBACI,6BAA6B,cAAc;CAEjD,MAAMC,UAA6C,OAAO,SACxD,aAAa,QAAQ,KAAK;AAE5B,QAAO;EACL,GAAG;EACH,OAAO;EACP,qBAAqB,SAAS,uBAAuB,MAAM,cAAc;EACzE;EACA,yBAAyB,SACvB,2BAA2B,MAAM,cAAc;EACjD;EACA;EACA;EACA,UAAU,6BAA6B,sBAAsB,YAAY;EACzE;EACA,UAAU;GACR,aAAa,sBAAsB;GACnC,MAAM,sBAAsB;GAC7B;EACD;EACA;EACA,iBAAiB,SAAS,mBAAmB,MAAM,cAAc;EACjE;EACD;;;;;AClJH,MAAa,0BAA0B;;;;;;;;;;AAWvC,MAAa,wBAAwB,SAAS,kBAAkB,KAAW;AACzE,KAAI,aAAa,EAAE,cAAc,yBAAyB,EAAE,OAAO,CACjE;AAGF,mBAAkB,EAAE,cAAc,yBAAyB,EAAE,OAAO;AACpE,oCAAmC,OAAO;CAE1C,MAAM,yBAAyB,0BAA0B,OAAO;CAEhE,MAAM,iBAAiB,gCAAgC,EACrD,eAAe,QAChB,CAAC;AAEF,wBAAuB,SAAS;EAC9B,UAAU,uBAAuB;EACjC;EACD,CAAC"}
@@ -1,4 +1,4 @@
1
- const require_tronTransferAmount = require('./tronTransferAmount-BdzjUoHG.cjs');
1
+ const require_tronTransferAmount = require('./tronTransferAmount-B8ysC4Ni.cjs');
2
2
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
3
3
  let tronweb = require("tronweb");
4
4
  let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
@@ -113,4 +113,4 @@ Object.defineProperty(exports, 'addWaasTronExtension', {
113
113
  return addWaasTronExtension;
114
114
  }
115
115
  });
116
- //# sourceMappingURL=addWaasTronExtension-BtcuABY5.cjs.map
116
+ //# sourceMappingURL=addWaasTronExtension-CmVC62IW.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"addWaasTronExtension-BtcuABY5.cjs","names":["TRON_CHAIN: Chain","WalletProviderEnum","DYNAMIC_WAAS_METADATA","getActiveNetworkId: WaasTronWalletProvider['getActiveNetworkId']","switchActiveNetwork: WaasTronWalletProvider['switchActiveNetwork']","getConnectedAddresses: WaasTronWalletProvider['getConnectedAddresses']","signMessage: WaasTronWalletProvider['signMessage']","TronWeb","getTronWeb: WaasTronWalletProvider['getTronWeb']","destroy: WaasTronWalletProvider['destroy']","tronConfirmTransaction","tronExecuteSwapTransaction","tronTransferAmount","WalletProviderPriority"],"sources":["../src/waas/utils/createWalletProviderForWaasTron/createWalletProviderForWaasTron.ts","../src/waas/addWaasTronExtension/addWaasTronExtension.ts"],"sourcesContent":["import {\n type Chain,\n type DynamicClient,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\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 { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { TronWeb } from 'tronweb';\n\nimport type { TronWalletAccount } from '../../../TronWalletAccount.types';\nimport { tronConfirmTransaction } from '../../../utils/tronConfirmTransaction';\nimport { tronExecuteSwapTransaction } from '../../../utils/tronExecuteSwapTransaction';\nimport { tronTransferAmount } from '../../../utils/tronTransferAmount';\nimport type { WaasTronWalletProvider } from '../../WaasTronWalletProvider.types';\n\nconst TRON_CHAIN: Chain = 'TRON';\n\ntype UnsignedTronTransaction = {\n raw_data_hex: string;\n signature?: string[];\n txID?: string;\n};\n\ntype CreateWalletProviderForWaasTronParams = {\n dynamicClient: DynamicClient;\n};\n\n/** @notInstrumented */\nexport const createWalletProviderForWaasTron = ({\n dynamicClient,\n}: CreateWalletProviderForWaasTronParams): WaasTronWalletProvider => {\n const walletProviderType = WalletProviderEnum.EmbeddedWallet;\n\n const key = formatWalletProviderKey({\n chain: TRON_CHAIN,\n displayName: DYNAMIC_WAAS_METADATA.displayName,\n walletProviderType,\n });\n\n const waasProvider = createWaasProvider({\n chain: TRON_CHAIN,\n sdkClient: dynamicClient,\n });\n\n const getActiveNetworkId: WaasTronWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n const switchActiveNetwork: WaasTronWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: dynamicClient,\n networkId,\n walletProviderKey: key,\n });\n\n const getConnectedAddresses: WaasTronWalletProvider['getConnectedAddresses'] =\n async () => {\n const waasTronAddresses = getAllUserWaasAddressesForChain(\n { chain: TRON_CHAIN },\n dynamicClient\n );\n\n return {\n addresses: waasTronAddresses,\n };\n };\n\n const signMessage: WaasTronWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n return waasProvider.signMessage({\n message,\n walletAccount,\n });\n };\n\n const buildTronWebForWalletAccount = async (\n walletAccount: TronWalletAccount\n ): Promise<TronWeb> => {\n const activeNetworkData = await getActiveNetworkData(\n { walletAccount },\n dynamicClient\n );\n assertDefined(activeNetworkData, 'No active network data found');\n\n const url = activeNetworkData.networkData?.rpcUrls.http[0];\n assertDefined(url, 'No RPC URL found for active network');\n\n const tronWeb = new TronWeb({ fullHost: url });\n\n tronWeb.setAddress(walletAccount.address);\n\n tronWeb.trx.sign = (async (transaction: UnsignedTronTransaction) => {\n assertDefined(\n transaction?.raw_data_hex,\n 'Tron transaction is missing raw_data_hex'\n );\n\n const { signature } = await waasProvider.signSerializedTransaction({\n serializedTransaction: transaction.raw_data_hex,\n walletAccount,\n });\n\n return {\n ...transaction,\n signature: [signature],\n };\n }) as unknown as TronWeb['trx']['sign'];\n\n return tronWeb;\n };\n\n const getTronWeb: WaasTronWalletProvider['getTronWeb'] = async ({\n walletAccount,\n }) => buildTronWebForWalletAccount(walletAccount);\n\n const destroy: WaasTronWalletProvider['destroy'] = async (args) =>\n waasProvider.destroy(args);\n\n return {\n ...waasProvider,\n chain: TRON_CHAIN,\n confirmTransaction: (args) => tronConfirmTransaction(args, dynamicClient),\n destroy,\n executeSwapTransaction: (args) =>\n tronExecuteSwapTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n getTronWeb,\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 signMessage,\n switchActiveNetwork,\n transferAmount: (args) => tronTransferAmount(args, dynamicClient),\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 { registerTronNetworkProviderBuilder } from '../../registerTronNetworkProviderBuilder';\nimport { createWalletProviderForWaasTron } from '../utils/createWalletProviderForWaasTron';\n\nexport const WAAS_TRON_EXTENSION_KEY = 'waasTron';\n\n/**\n * Adds the Dynamic WaaS (Wallet as a Service) Tron extension to the Dynamic client.\n *\n * This extension enables embedded wallet functionality for the Tron 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 addWaasTronExtension = (client = getDefaultClient()): void => {\n if (hasExtension({ extensionKey: WAAS_TRON_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: WAAS_TRON_EXTENSION_KEY }, client);\n registerTronNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const walletProvider = createWalletProviderForWaasTron({\n dynamicClient: client,\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SDK,\n walletProvider,\n });\n};\n"],"mappings":";;;;;;;;AA0BA,MAAMA,aAAoB;;AAa1B,MAAa,mCAAmC,EAC9C,oBACmE;CACnE,MAAM,qBAAqBC,8CAAmB;CAE9C,MAAM,iEAA8B;EAClC,OAAO;EACP,aAAaC,yDAAsB;EACnC;EACD,CAAC;CAEF,MAAM,0EAAkC;EACtC,OAAO;EACP,WAAW;EACZ,CAAC;CAEF,MAAMC,qBACJ,uFAC0C;EACtC,QAAQ;EACR,mBAAmB;EACpB,CAAC;CAEN,MAAMC,sBACJ,OAAO,EAAE,0FACgC;EACrC,QAAQ;EACR;EACA,mBAAmB;EACpB,CAAC;CAEN,MAAMC,wBACJ,YAAY;AAMV,SAAO,EACL,mFALA,EAAE,OAAO,YAAY,EACrB,cACD,EAIA;;CAGL,MAAMC,cAAqD,OAAO,EAChE,SACA,oBACI;AACJ,mDAAc,eAAe,6BAA6B;AAE1D,SAAO,aAAa,YAAY;GAC9B;GACA;GACD,CAAC;;CAGJ,MAAM,+BAA+B,OACnC,kBACqB;EACrB,MAAM,oBAAoB,yDACxB,EAAE,eAAe,EACjB,cACD;AACD,mDAAc,mBAAmB,+BAA+B;EAEhE,MAAM,MAAM,kBAAkB,aAAa,QAAQ,KAAK;AACxD,mDAAc,KAAK,sCAAsC;EAEzD,MAAM,UAAU,IAAIC,gBAAQ,EAAE,UAAU,KAAK,CAAC;AAE9C,UAAQ,WAAW,cAAc,QAAQ;AAEzC,UAAQ,IAAI,QAAQ,OAAO,gBAAyC;AAClE,oDACE,aAAa,cACb,2CACD;GAED,MAAM,EAAE,cAAc,MAAM,aAAa,0BAA0B;IACjE,uBAAuB,YAAY;IACnC;IACD,CAAC;AAEF,UAAO;IACL,GAAG;IACH,WAAW,CAAC,UAAU;IACvB;;AAGH,SAAO;;CAGT,MAAMC,aAAmD,OAAO,EAC9D,oBACI,6BAA6B,cAAc;CAEjD,MAAMC,UAA6C,OAAO,SACxD,aAAa,QAAQ,KAAK;AAE5B,QAAO;EACL,GAAG;EACH,OAAO;EACP,qBAAqB,SAASC,kDAAuB,MAAM,cAAc;EACzE;EACA,yBAAyB,SACvBC,sDAA2B,MAAM,cAAc;EACjD;EACA;EACA;EACA,0EAAuCT,yDAAsB,YAAY;EACzE;EACA,UAAU;GACR,aAAaA,yDAAsB;GACnC,MAAMA,yDAAsB;GAC7B;EACD;EACA;EACA,iBAAiB,SAASU,8CAAmB,MAAM,cAAc;EACjE;EACD;;;;;AClJH,MAAa,0BAA0B;;;;;;;;;;AAWvC,MAAa,wBAAwB,8DAA2B,KAAW;AACzE,qDAAiB,EAAE,cAAc,yBAAyB,EAAE,OAAO,CACjE;AAGF,sDAAkB,EAAE,cAAc,yBAAyB,EAAE,OAAO;AACpE,+DAAmC,OAAO;CAE1C,MAAM,sFAAmD,OAAO;CAEhE,MAAM,iBAAiB,gCAAgC,EACrD,eAAe,QAChB,CAAC;AAEF,wBAAuB,SAAS;EAC9B,UAAUC,qDAAuB;EACjC;EACD,CAAC"}
1
+ {"version":3,"file":"addWaasTronExtension-CmVC62IW.cjs","names":["TRON_CHAIN: Chain","WalletProviderEnum","DYNAMIC_WAAS_METADATA","getActiveNetworkId: WaasTronWalletProvider['getActiveNetworkId']","switchActiveNetwork: WaasTronWalletProvider['switchActiveNetwork']","getConnectedAddresses: WaasTronWalletProvider['getConnectedAddresses']","signMessage: WaasTronWalletProvider['signMessage']","TronWeb","getTronWeb: WaasTronWalletProvider['getTronWeb']","destroy: WaasTronWalletProvider['destroy']","tronConfirmTransaction","tronExecuteSwapTransaction","tronTransferAmount","WalletProviderPriority"],"sources":["../src/waas/utils/createWalletProviderForWaasTron/createWalletProviderForWaasTron.ts","../src/waas/addWaasTronExtension/addWaasTronExtension.ts"],"sourcesContent":["import {\n type Chain,\n type DynamicClient,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\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 { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { TronWeb } from 'tronweb';\n\nimport type { TronWalletAccount } from '../../../TronWalletAccount.types';\nimport { tronConfirmTransaction } from '../../../utils/tronConfirmTransaction';\nimport { tronExecuteSwapTransaction } from '../../../utils/tronExecuteSwapTransaction';\nimport { tronTransferAmount } from '../../../utils/tronTransferAmount';\nimport type { WaasTronWalletProvider } from '../../WaasTronWalletProvider.types';\n\nconst TRON_CHAIN: Chain = 'TRON';\n\ntype UnsignedTronTransaction = {\n raw_data_hex: string;\n signature?: string[];\n txID?: string;\n};\n\ntype CreateWalletProviderForWaasTronParams = {\n dynamicClient: DynamicClient;\n};\n\n/** @notInstrumented */\nexport const createWalletProviderForWaasTron = ({\n dynamicClient,\n}: CreateWalletProviderForWaasTronParams): WaasTronWalletProvider => {\n const walletProviderType = WalletProviderEnum.EmbeddedWallet;\n\n const key = formatWalletProviderKey({\n chain: TRON_CHAIN,\n displayName: DYNAMIC_WAAS_METADATA.displayName,\n walletProviderType,\n });\n\n const waasProvider = createWaasProvider({\n chain: TRON_CHAIN,\n sdkClient: dynamicClient,\n });\n\n const getActiveNetworkId: WaasTronWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n const switchActiveNetwork: WaasTronWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: dynamicClient,\n networkId,\n walletProviderKey: key,\n });\n\n const getConnectedAddresses: WaasTronWalletProvider['getConnectedAddresses'] =\n async () => {\n const waasTronAddresses = getAllUserWaasAddressesForChain(\n { chain: TRON_CHAIN },\n dynamicClient\n );\n\n return {\n addresses: waasTronAddresses,\n };\n };\n\n const signMessage: WaasTronWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n return waasProvider.signMessage({\n message,\n walletAccount,\n });\n };\n\n const buildTronWebForWalletAccount = async (\n walletAccount: TronWalletAccount\n ): Promise<TronWeb> => {\n const activeNetworkData = await getActiveNetworkData(\n { walletAccount },\n dynamicClient\n );\n assertDefined(activeNetworkData, 'No active network data found');\n\n const url = activeNetworkData.networkData?.rpcUrls.http[0];\n assertDefined(url, 'No RPC URL found for active network');\n\n const tronWeb = new TronWeb({ fullHost: url });\n\n tronWeb.setAddress(walletAccount.address);\n\n tronWeb.trx.sign = (async (transaction: UnsignedTronTransaction) => {\n assertDefined(\n transaction?.raw_data_hex,\n 'Tron transaction is missing raw_data_hex'\n );\n\n const { signature } = await waasProvider.signSerializedTransaction({\n serializedTransaction: transaction.raw_data_hex,\n walletAccount,\n });\n\n return {\n ...transaction,\n signature: [signature],\n };\n }) as unknown as TronWeb['trx']['sign'];\n\n return tronWeb;\n };\n\n const getTronWeb: WaasTronWalletProvider['getTronWeb'] = async ({\n walletAccount,\n }) => buildTronWebForWalletAccount(walletAccount);\n\n const destroy: WaasTronWalletProvider['destroy'] = async (args) =>\n waasProvider.destroy(args);\n\n return {\n ...waasProvider,\n chain: TRON_CHAIN,\n confirmTransaction: (args) => tronConfirmTransaction(args, dynamicClient),\n destroy,\n executeSwapTransaction: (args) =>\n tronExecuteSwapTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n getTronWeb,\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 signMessage,\n switchActiveNetwork,\n transferAmount: (args) => tronTransferAmount(args, dynamicClient),\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 { registerTronNetworkProviderBuilder } from '../../registerTronNetworkProviderBuilder';\nimport { createWalletProviderForWaasTron } from '../utils/createWalletProviderForWaasTron';\n\nexport const WAAS_TRON_EXTENSION_KEY = 'waasTron';\n\n/**\n * Adds the Dynamic WaaS (Wallet as a Service) Tron extension to the Dynamic client.\n *\n * This extension enables embedded wallet functionality for the Tron 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 addWaasTronExtension = (client = getDefaultClient()): void => {\n if (hasExtension({ extensionKey: WAAS_TRON_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: WAAS_TRON_EXTENSION_KEY }, client);\n registerTronNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const walletProvider = createWalletProviderForWaasTron({\n dynamicClient: client,\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SDK,\n walletProvider,\n });\n};\n"],"mappings":";;;;;;;;AA0BA,MAAMA,aAAoB;;AAa1B,MAAa,mCAAmC,EAC9C,oBACmE;CACnE,MAAM,qBAAqBC,8CAAmB;CAE9C,MAAM,iEAA8B;EAClC,OAAO;EACP,aAAaC,yDAAsB;EACnC;EACD,CAAC;CAEF,MAAM,0EAAkC;EACtC,OAAO;EACP,WAAW;EACZ,CAAC;CAEF,MAAMC,qBACJ,uFAC0C;EACtC,QAAQ;EACR,mBAAmB;EACpB,CAAC;CAEN,MAAMC,sBACJ,OAAO,EAAE,0FACgC;EACrC,QAAQ;EACR;EACA,mBAAmB;EACpB,CAAC;CAEN,MAAMC,wBACJ,YAAY;AAMV,SAAO,EACL,mFALA,EAAE,OAAO,YAAY,EACrB,cACD,EAIA;;CAGL,MAAMC,cAAqD,OAAO,EAChE,SACA,oBACI;AACJ,mDAAc,eAAe,6BAA6B;AAE1D,SAAO,aAAa,YAAY;GAC9B;GACA;GACD,CAAC;;CAGJ,MAAM,+BAA+B,OACnC,kBACqB;EACrB,MAAM,oBAAoB,yDACxB,EAAE,eAAe,EACjB,cACD;AACD,mDAAc,mBAAmB,+BAA+B;EAEhE,MAAM,MAAM,kBAAkB,aAAa,QAAQ,KAAK;AACxD,mDAAc,KAAK,sCAAsC;EAEzD,MAAM,UAAU,IAAIC,gBAAQ,EAAE,UAAU,KAAK,CAAC;AAE9C,UAAQ,WAAW,cAAc,QAAQ;AAEzC,UAAQ,IAAI,QAAQ,OAAO,gBAAyC;AAClE,oDACE,aAAa,cACb,2CACD;GAED,MAAM,EAAE,cAAc,MAAM,aAAa,0BAA0B;IACjE,uBAAuB,YAAY;IACnC;IACD,CAAC;AAEF,UAAO;IACL,GAAG;IACH,WAAW,CAAC,UAAU;IACvB;;AAGH,SAAO;;CAGT,MAAMC,aAAmD,OAAO,EAC9D,oBACI,6BAA6B,cAAc;CAEjD,MAAMC,UAA6C,OAAO,SACxD,aAAa,QAAQ,KAAK;AAE5B,QAAO;EACL,GAAG;EACH,OAAO;EACP,qBAAqB,SAASC,kDAAuB,MAAM,cAAc;EACzE;EACA,yBAAyB,SACvBC,sDAA2B,MAAM,cAAc;EACjD;EACA;EACA;EACA,0EAAuCT,yDAAsB,YAAY;EACzE;EACA,UAAU;GACR,aAAaA,yDAAsB;GACnC,MAAMA,yDAAsB;GAC7B;EACD;EACA;EACA,iBAAiB,SAASU,8CAAmB,MAAM,cAAc;EACjE;EACD;;;;;AClJH,MAAa,0BAA0B;;;;;;;;;;AAWvC,MAAa,wBAAwB,8DAA2B,KAAW;AACzE,qDAAiB,EAAE,cAAc,yBAAyB,EAAE,OAAO,CACjE;AAGF,sDAAkB,EAAE,cAAc,yBAAyB,EAAE,OAAO;AACpE,+DAAmC,OAAO;CAE1C,MAAM,sFAAmD,OAAO;CAEhE,MAAM,iBAAiB,gCAAgC,EACrD,eAAe,QAChB,CAAC;AAEF,wBAAuB,SAAS;EAC9B,UAAUC,qDAAuB;EACjC;EACD,CAAC"}
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
- const require_tronTransferAmount = require('./tronTransferAmount-BdzjUoHG.cjs');
2
- const require_addWaasTronExtension = require('./addWaasTronExtension-BtcuABY5.cjs');
3
- const require_addTronWalletAdaptersExtension = require('./addTronWalletAdaptersExtension-DFRM_EOX.cjs');
1
+ const require_tronTransferAmount = require('./tronTransferAmount-B8ysC4Ni.cjs');
2
+ const require_addWaasTronExtension = require('./addWaasTronExtension-CmVC62IW.cjs');
3
+ const require_addTronWalletAdaptersExtension = require('./addTronWalletAdaptersExtension-CuFnviYr.cjs');
4
4
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
5
5
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
6
6
  let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
package/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
- import { a as isTronWalletProvider, c as name, l as version, n as NotTronProviderError, o as isTronWalletAccount } from "./tronTransferAmount-DtvwBYGp.esm.js";
2
- import { t as addWaasTronExtension } from "./addWaasTronExtension-BB4gn8uN.esm.js";
3
- import { t as addTronWalletAdaptersExtension } from "./addTronWalletAdaptersExtension-DvJ-FT8m.esm.js";
1
+ import { a as isTronWalletProvider, c as name, l as version, n as NotTronProviderError, o as isTronWalletAccount } from "./tronTransferAmount-A-hXh2Mc.esm.js";
2
+ import { t as addWaasTronExtension } from "./addWaasTronExtension-BGoqq6je.esm.js";
3
+ import { t as addTronWalletAdaptersExtension } from "./addTronWalletAdaptersExtension-aiSgBowW.esm.js";
4
4
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
5
5
  import { getDefaultClient, getWalletProviderFromWalletAccount, parseAmountToSmallestUnit } from "@dynamic-labs-sdk/client/core";
6
6
  import { FeeEstimationFailedError, InvalidParamError, assertWalletAccountSigningAvailability, getDefaultClient as getDefaultClient$1 } from "@dynamic-labs-sdk/client";
@@ -6,7 +6,7 @@ import { bytesToHex, hexToBytes } from "@noble/hashes/utils";
6
6
 
7
7
  //#region package.json
8
8
  var name = "@dynamic-labs-sdk/tron";
9
- var version = "1.16.1";
9
+ var version = "1.17.1";
10
10
 
11
11
  //#endregion
12
12
  //#region src/utils/constants.ts
@@ -254,4 +254,4 @@ const tronTransferAmount = async ({ amount, recipient, token, walletAccount }, c
254
254
 
255
255
  //#endregion
256
256
  export { isTronWalletProvider as a, name as c, tronConfirmTransaction as i, version as l, NotTronProviderError as n, isTronWalletAccount as o, tronExecuteSwapTransaction as r, registerTronNetworkProviderBuilder as s, tronTransferAmount as t };
257
- //# sourceMappingURL=tronTransferAmount-DtvwBYGp.esm.js.map
257
+ //# sourceMappingURL=tronTransferAmount-A-hXh2Mc.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tronTransferAmount-DtvwBYGp.esm.js","names":["normalizedValue: Record<string, string | number>","cleanContract: Record<string, unknown>","result: Record<string, unknown>","tronWebUtils"],"sources":["../package.json","../src/utils/constants.ts","../src/utils/fetchTronBalance/fetchTronBalance.ts","../src/utils/createTronNetworkProvider/createTronNetworkProvider.ts","../src/registerTronNetworkProviderBuilder/registerTronNetworkProviderBuilder.ts","../src/isTronWalletAccount/isTronWalletAccount.ts","../src/isTronWalletProvider/isTronWalletProvider.ts","../src/utils/tronConfirmTransaction/tronConfirmTransaction.ts","../src/utils/normalizeDeserializedRawData/normalizeDeserializedRawData.ts","../src/utils/buildUnsignedTronSwapTransaction/buildUnsignedTronSwapTransaction.ts","../src/utils/tronExecuteSwapTransaction/tronExecuteSwapTransaction.ts","../src/errors/NotTronProviderError/NotTronProviderError.ts","../src/utils/tronTransferAmount/tronTransferAmount.ts"],"sourcesContent":["","// 1 TRX = 10^6 SUN (similar to wei for Ethereum)\nexport const SUN_PER_TRX = 1e6;\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { TronWeb } from 'tronweb';\n\nimport { SUN_PER_TRX } from '../constants';\n\ntype FetchTronBalanceParams = {\n address: string;\n networkData: NetworkData;\n};\n\n/** @notInstrumented */\nexport const fetchTronBalance = async ({\n address,\n networkData,\n}: FetchTronBalanceParams): Promise<string | null> => {\n const tronWeb = new TronWeb({\n fullHost: networkData.rpcUrls.http[0],\n });\n\n const balanceInSun = await tronWeb.trx.getBalance(address);\n\n return (Number(balanceInSun) / SUN_PER_TRX).toString();\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TronNetworkProvider } from '../../TronNetworkProvider.types';\nimport { fetchTronBalance } from '../fetchTronBalance';\n\n/** @notInstrumented */\nexport const createTronNetworkProvider = (\n networkData: NetworkData\n): TronNetworkProvider => ({\n ...createBaseNetworkProvider('TRON', networkData),\n getBalance: async ({ address }) => ({\n balance: await fetchTronBalance({\n address,\n networkData,\n }),\n }),\n});\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createTronNetworkProvider } from '../utils/createTronNetworkProvider';\n\n/** @notInstrumented */\nexport const registerTronNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n // If the Tron network provider builder is already registered, return.\n if (networkProviderBuilderRegistry.get().get('TRON')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createTronNetworkProvider,\n chain: 'TRON',\n });\n};\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { TronWalletAccount } from '../TronWalletAccount.types';\n\n/** @notInstrumented */\nexport const isTronWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is TronWalletAccount => walletAccount.chain === 'TRON';\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TronWalletProvider } from '../TronWalletProvider.types';\n\n/** @notInstrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const isTronWalletProvider = (\n provider: WalletProvider | TronWalletProvider\n): provider is TronWalletProvider => {\n return provider.chain === 'TRON';\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport type { ConfirmTransactionParams } from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\nconst POLLING_INTERVAL_MS = 3_000;\nconst MAX_POLLING_ATTEMPTS = 300;\n\n/**\n * Polls TronWeb until the transaction is included in a block (blockNumber is set).\n *\n * @param params.transactionHash - The transaction ID to confirm.\n * @param params.walletAccount - The wallet account used to retrieve TronWeb.\n * @param client - The Dynamic client instance.\n * @throws InvalidParamError if the wallet account or provider is not Tron.\n * @throws InvalidParamError if the transaction is not confirmed within the max attempts.\n * @notInstrumented\n */\nexport const tronConfirmTransaction = async (\n { transactionHash, walletAccount }: ConfirmTransactionParams,\n client: DynamicClient\n): Promise<void> => {\n if (!isTronWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletProvider(provider)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n for (let attempt = 0; attempt < MAX_POLLING_ATTEMPTS; attempt++) {\n const txInfo = await tronWeb.trx.getTransactionInfo(transactionHash);\n\n if (txInfo.blockNumber) {\n return;\n }\n\n if (attempt < MAX_POLLING_ATTEMPTS - 1) {\n await new Promise<void>((resolve) =>\n setTimeout(resolve, POLLING_INTERVAL_MS)\n );\n }\n }\n\n throw new InvalidParamError(\n `Transaction ${transactionHash} was not confirmed after ${MAX_POLLING_ATTEMPTS} attempts`\n );\n};\n","/**\n * Fields in a TriggerSmartContract's `parameter.value` that default to 0 in\n * protobuf and are omitted by TronWeb's `createTransaction` when zero-valued.\n * Keeping them in the JSON causes wallet extensions to flag the transaction as\n * tampered, because the wallet's own protobuf→JSON decoder omits them.\n */\nconst OMITTABLE_ZERO_VALUE_FIELDS = new Set([\n 'call_token_value',\n 'call_value',\n 'token_id',\n]);\n\n/**\n * A contract entry inside `raw_data` as returned by TronWeb's\n * `deserializeTransaction`. Addresses and byte fields are UPPERCASE hex.\n */\ntype DeserializedContract = {\n Permission_id: number;\n parameter: {\n type_url: string;\n value: Record<string, string | number>;\n };\n type: string;\n};\n\n/**\n * The `raw_data` object returned by TronWeb's `deserializeTransaction`.\n * Contains extra default-value fields (data, fee_limit, scripts, auths) and\n * UPPERCASE hex for all byte fields — neither of which match the canonical\n * format that TronWeb's `createTransaction` produces.\n */\ntype DeserializedRawData = {\n auths: unknown[];\n contract: DeserializedContract[];\n data: string;\n expiration: number;\n fee_limit: number;\n ref_block_bytes: string;\n ref_block_hash: string;\n scripts: string;\n timestamp: number;\n};\n\n/**\n * Normalizes the `raw_data` object produced by TronWeb's\n * `deserializeTransaction` to match the canonical format of TronWeb's\n * `createTransaction` output.\n *\n * `deserializeTransaction` outputs UPPERCASE hex for all byte fields, includes\n * default-value fields (`data: ''`, `fee_limit: 0`, `scripts: ''`, `auths: []`,\n * `Permission_id: 0`), and adds extra keys not present in the original\n * transaction. Wallet extensions (TronLink, OKX, Bitget) validate the\n * `raw_data` JSON against `raw_data_hex` and reject transactions whose\n * structure deviates from the canonical format.\n *\n * @param rawData - The deserialized `raw_data` from `deserializeTransaction`.\n * @returns A cleaned `raw_data` structurally matching `createTransaction` output.\n * @notInstrumented\n */\nexport const normalizeDeserializedRawData = (\n rawData: DeserializedRawData,\n): Record<string, unknown> => {\n const contract = rawData.contract[0];\n const value = contract.parameter.value;\n\n const normalizedValue: Record<string, string | number> = {};\n\n for (const [key, val] of Object.entries(value)) {\n if (typeof val === 'string') {\n if (val.length > 0) {\n normalizedValue[key] = val.toLowerCase();\n }\n\n continue;\n }\n\n // Strip zero-valued protobuf-default fields that createTransaction omits.\n if (val === 0 && OMITTABLE_ZERO_VALUE_FIELDS.has(key)) {\n continue;\n }\n\n normalizedValue[key] = val;\n }\n\n const cleanContract: Record<string, unknown> = {\n parameter: {\n type_url: contract.parameter.type_url,\n value: normalizedValue,\n },\n type: contract.type,\n };\n\n // Permission_id 0 is the default; createTransaction omits it.\n if (contract.Permission_id) {\n cleanContract.Permission_id = contract.Permission_id;\n }\n\n const result: Record<string, unknown> = {\n contract: [cleanContract],\n expiration: rawData.expiration,\n ref_block_bytes: rawData.ref_block_bytes.toLowerCase(),\n ref_block_hash: rawData.ref_block_hash.toLowerCase(),\n timestamp: rawData.timestamp,\n };\n\n if (rawData.fee_limit) {\n result.fee_limit = rawData.fee_limit;\n }\n\n if (rawData.data && rawData.data.length > 0) {\n result.data = rawData.data.toLowerCase();\n }\n\n return result;\n};\n","import { sha256 } from '@noble/hashes/sha256';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils';\nimport { utils as tronWebUtils } from 'tronweb';\n\nimport { normalizeDeserializedRawData } from '../normalizeDeserializedRawData';\n\n/** Unsigned Tron transaction in the shape TronWeb signers / wallets expect. */\nexport type UnsignedTronSwapTransaction = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n raw_data: any;\n raw_data_hex: string;\n txID: string;\n visible: boolean;\n};\n\n/**\n * Reconstructs a signable, broadcastable Tron transaction from the hex-encoded\n * `raw_data` protobuf in the swap payload — LiFi delivers only `rawDataHex`, so\n * we derive `txID` (SHA-256 of the raw_data bytes) and decode `raw_data` via\n * TronWeb (which signers/wallets read to display, sign, and broadcast).\n *\n * The decoded `raw_data` is normalized to match the canonical format that\n * TronWeb's `createTransaction` produces, because wallet extensions validate\n * the JSON structure against `raw_data_hex` and reject non-canonical formats.\n *\n * @param params.rawDataHex - Hex-encoded serialized Tron `raw_data` protobuf (`0x` optional).\n * @returns Unsigned tx: `{ raw_data, raw_data_hex, txID, visible }`.\n * @notInstrumented\n */\nexport const buildUnsignedTronSwapTransaction = ({\n rawDataHex,\n}: {\n rawDataHex: string;\n}): UnsignedTronSwapTransaction => {\n const normalizedRawDataHex = rawDataHex.replace(/^0x/, '');\n const txID = bytesToHex(sha256(hexToBytes(normalizedRawDataHex)));\n\n // Swaps / TRC-20 are TriggerSmartContract; native TRX is TransferContract.\n // deserializeTransaction throws on type mismatch, so fall through to the\n // native type if the smart-contract decode rejects this hex.\n let decoded;\n try {\n decoded = tronWebUtils.deserializeTx.deserializeTransaction(\n 'TriggerSmartContract',\n normalizedRawDataHex\n );\n } catch {\n decoded = tronWebUtils.deserializeTx.deserializeTransaction(\n 'TransferContract',\n normalizedRawDataHex\n );\n }\n // The decoder returns the raw_data object (some versions wrap it in a tuple\n // with the raw contract value as the second element).\n const rawData = Array.isArray(decoded) ? decoded[0] : decoded;\n\n return {\n raw_data: normalizeDeserializedRawData(rawData),\n raw_data_hex: normalizedRawDataHex,\n txID,\n visible: false,\n };\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\nimport { buildUnsignedTronSwapTransaction } from '../buildUnsignedTronSwapTransaction';\n\n/**\n * Local widening of `SwapSigningPayload` to add `tronTransaction` (LiFi's\n * `raw_data` hex), which the generated `@dynamic-labs/sdk-api-core` type doesn't\n * carry yet — drop this once that published package is regenerated.\n * `serializedTransaction` is the legacy (full-tx JSON) shape.\n */\ntype TronSwapSigningPayload = {\n serializedTransaction?: string;\n tronTransaction?: {\n rawDataHex: string;\n to: string;\n value: string;\n };\n};\n\n/**\n * Executes a Tron swap transaction by reconstructing the transaction from the\n * signing payload, signing it with TronWeb, and broadcasting it.\n *\n * 1. Validates that the wallet account is a Tron wallet account\n * 2. Builds the unsigned transaction from the payload — preferring the\n * `tronTransaction.rawDataHex` shape, falling back to the legacy\n * `serializedTransaction` JSON\n * 3. Signs and broadcasts via TronWeb\n *\n * @param params.signingPayload - The chain-aware signing payload containing `tronTransaction` (or legacy `serializedTransaction`).\n * @param params.walletAccount - The wallet account used to sign and send the transaction.\n * @param params.onStepChange - Optional callback invoked with `'transaction'` when the signing step begins.\n * @param client - The Dynamic client instance.\n * @returns The transaction hash from the broadcast result.\n * @notInstrumented\n */\nexport const tronExecuteSwapTransaction = async (\n { onStepChange, signingPayload, walletAccount }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletAccount(walletAccount) || !isTronWalletProvider(provider)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const { serializedTransaction, tronTransaction } =\n signingPayload as TronSwapSigningPayload;\n\n if (!tronTransaction && !serializedTransaction) {\n throw new InvalidParamError(\n 'Signing payload is missing Tron transaction data'\n );\n }\n\n onStepChange?.('transaction');\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n const unsignedTransaction = tronTransaction\n ? buildUnsignedTronSwapTransaction({\n rawDataHex: tronTransaction.rawDataHex,\n })\n : JSON.parse(serializedTransaction as string);\n\n const signedTransaction = await tronWeb.trx.sign(unsignedTransaction);\n const broadcastResult = await tronWeb.trx.sendRawTransaction(\n signedTransaction\n );\n\n return { transactionHash: broadcastResult.txid };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotTronProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_tron_provider_error',\n docsUrl: null,\n name: 'NotTronProviderError',\n shortMessage: 'Provider is not a Tron wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport {\n type TransferAmountParams,\n getWalletProviderFromWalletAccount,\n parseAmountToSmallestUnit,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { NotTronProviderError } from '../../errors/NotTronProviderError';\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\nconst TRX_DECIMALS = 6;\n\n/**\n * Transfers native TRX or TRC20 tokens from one wallet to another.\n *\n * Converts the human-readable amount string to the smallest unit (SUN for TRX,\n * or the appropriate unit for TRC20 tokens) using string-based arithmetic\n * to avoid floating-point precision issues.\n * @notInstrumented\n */\nexport const tronTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isTronWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Tron wallet account'\n );\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletProvider(provider)) {\n throw new NotTronProviderError({ providerKey: provider.key });\n }\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n if (token?.address) {\n const decimals = token.decimals ?? TRX_DECIMALS;\n const smallestUnitAmount = parseAmountToSmallestUnit({\n amount,\n decimals,\n });\n\n const contract = await tronWeb.contract().at(token.address);\n const result = await contract.transfer(recipient, smallestUnitAmount).send();\n\n return { transactionHash: result };\n }\n\n const sunAmount = parseAmountToSmallestUnit({\n amount,\n decimals: TRX_DECIMALS,\n });\n\n const result = await tronWeb.trx.sendTransaction(\n recipient,\n Number(sunAmount),\n { address: walletAccount.address }\n );\n\n return { transactionHash: result.txid };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"tronTransferAmount-A-hXh2Mc.esm.js","names":["normalizedValue: Record<string, string | number>","cleanContract: Record<string, unknown>","result: Record<string, unknown>","tronWebUtils"],"sources":["../package.json","../src/utils/constants.ts","../src/utils/fetchTronBalance/fetchTronBalance.ts","../src/utils/createTronNetworkProvider/createTronNetworkProvider.ts","../src/registerTronNetworkProviderBuilder/registerTronNetworkProviderBuilder.ts","../src/isTronWalletAccount/isTronWalletAccount.ts","../src/isTronWalletProvider/isTronWalletProvider.ts","../src/utils/tronConfirmTransaction/tronConfirmTransaction.ts","../src/utils/normalizeDeserializedRawData/normalizeDeserializedRawData.ts","../src/utils/buildUnsignedTronSwapTransaction/buildUnsignedTronSwapTransaction.ts","../src/utils/tronExecuteSwapTransaction/tronExecuteSwapTransaction.ts","../src/errors/NotTronProviderError/NotTronProviderError.ts","../src/utils/tronTransferAmount/tronTransferAmount.ts"],"sourcesContent":["","// 1 TRX = 10^6 SUN (similar to wei for Ethereum)\nexport const SUN_PER_TRX = 1e6;\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { TronWeb } from 'tronweb';\n\nimport { SUN_PER_TRX } from '../constants';\n\ntype FetchTronBalanceParams = {\n address: string;\n networkData: NetworkData;\n};\n\n/** @notInstrumented */\nexport const fetchTronBalance = async ({\n address,\n networkData,\n}: FetchTronBalanceParams): Promise<string | null> => {\n const tronWeb = new TronWeb({\n fullHost: networkData.rpcUrls.http[0],\n });\n\n const balanceInSun = await tronWeb.trx.getBalance(address);\n\n return (Number(balanceInSun) / SUN_PER_TRX).toString();\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TronNetworkProvider } from '../../TronNetworkProvider.types';\nimport { fetchTronBalance } from '../fetchTronBalance';\n\n/** @notInstrumented */\nexport const createTronNetworkProvider = (\n networkData: NetworkData\n): TronNetworkProvider => ({\n ...createBaseNetworkProvider('TRON', networkData),\n getBalance: async ({ address }) => ({\n balance: await fetchTronBalance({\n address,\n networkData,\n }),\n }),\n});\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createTronNetworkProvider } from '../utils/createTronNetworkProvider';\n\n/** @notInstrumented */\nexport const registerTronNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n // If the Tron network provider builder is already registered, return.\n if (networkProviderBuilderRegistry.get().get('TRON')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createTronNetworkProvider,\n chain: 'TRON',\n });\n};\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { TronWalletAccount } from '../TronWalletAccount.types';\n\n/** @notInstrumented */\nexport const isTronWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is TronWalletAccount => walletAccount.chain === 'TRON';\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TronWalletProvider } from '../TronWalletProvider.types';\n\n/** @notInstrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const isTronWalletProvider = (\n provider: WalletProvider | TronWalletProvider\n): provider is TronWalletProvider => {\n return provider.chain === 'TRON';\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport type { ConfirmTransactionParams } from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\nconst POLLING_INTERVAL_MS = 3_000;\nconst MAX_POLLING_ATTEMPTS = 300;\n\n/**\n * Polls TronWeb until the transaction is included in a block (blockNumber is set).\n *\n * @param params.transactionHash - The transaction ID to confirm.\n * @param params.walletAccount - The wallet account used to retrieve TronWeb.\n * @param client - The Dynamic client instance.\n * @throws InvalidParamError if the wallet account or provider is not Tron.\n * @throws InvalidParamError if the transaction is not confirmed within the max attempts.\n * @notInstrumented\n */\nexport const tronConfirmTransaction = async (\n { transactionHash, walletAccount }: ConfirmTransactionParams,\n client: DynamicClient\n): Promise<void> => {\n if (!isTronWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletProvider(provider)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n for (let attempt = 0; attempt < MAX_POLLING_ATTEMPTS; attempt++) {\n const txInfo = await tronWeb.trx.getTransactionInfo(transactionHash);\n\n if (txInfo.blockNumber) {\n return;\n }\n\n if (attempt < MAX_POLLING_ATTEMPTS - 1) {\n await new Promise<void>((resolve) =>\n setTimeout(resolve, POLLING_INTERVAL_MS)\n );\n }\n }\n\n throw new InvalidParamError(\n `Transaction ${transactionHash} was not confirmed after ${MAX_POLLING_ATTEMPTS} attempts`\n );\n};\n","/**\n * Fields in a TriggerSmartContract's `parameter.value` that default to 0 in\n * protobuf and are omitted by TronWeb's `createTransaction` when zero-valued.\n * Keeping them in the JSON causes wallet extensions to flag the transaction as\n * tampered, because the wallet's own protobuf→JSON decoder omits them.\n */\nconst OMITTABLE_ZERO_VALUE_FIELDS = new Set([\n 'call_token_value',\n 'call_value',\n 'token_id',\n]);\n\n/**\n * A contract entry inside `raw_data` as returned by TronWeb's\n * `deserializeTransaction`. Addresses and byte fields are UPPERCASE hex.\n */\ntype DeserializedContract = {\n Permission_id: number;\n parameter: {\n type_url: string;\n value: Record<string, string | number>;\n };\n type: string;\n};\n\n/**\n * The `raw_data` object returned by TronWeb's `deserializeTransaction`.\n * Contains extra default-value fields (data, fee_limit, scripts, auths) and\n * UPPERCASE hex for all byte fields — neither of which match the canonical\n * format that TronWeb's `createTransaction` produces.\n */\ntype DeserializedRawData = {\n auths: unknown[];\n contract: DeserializedContract[];\n data: string;\n expiration: number;\n fee_limit: number;\n ref_block_bytes: string;\n ref_block_hash: string;\n scripts: string;\n timestamp: number;\n};\n\n/**\n * Normalizes the `raw_data` object produced by TronWeb's\n * `deserializeTransaction` to match the canonical format of TronWeb's\n * `createTransaction` output.\n *\n * `deserializeTransaction` outputs UPPERCASE hex for all byte fields, includes\n * default-value fields (`data: ''`, `fee_limit: 0`, `scripts: ''`, `auths: []`,\n * `Permission_id: 0`), and adds extra keys not present in the original\n * transaction. Wallet extensions (TronLink, OKX, Bitget) validate the\n * `raw_data` JSON against `raw_data_hex` and reject transactions whose\n * structure deviates from the canonical format.\n *\n * @param rawData - The deserialized `raw_data` from `deserializeTransaction`.\n * @returns A cleaned `raw_data` structurally matching `createTransaction` output.\n * @notInstrumented\n */\nexport const normalizeDeserializedRawData = (\n rawData: DeserializedRawData,\n): Record<string, unknown> => {\n const contract = rawData.contract[0];\n const value = contract.parameter.value;\n\n const normalizedValue: Record<string, string | number> = {};\n\n for (const [key, val] of Object.entries(value)) {\n if (typeof val === 'string') {\n if (val.length > 0) {\n normalizedValue[key] = val.toLowerCase();\n }\n\n continue;\n }\n\n // Strip zero-valued protobuf-default fields that createTransaction omits.\n if (val === 0 && OMITTABLE_ZERO_VALUE_FIELDS.has(key)) {\n continue;\n }\n\n normalizedValue[key] = val;\n }\n\n const cleanContract: Record<string, unknown> = {\n parameter: {\n type_url: contract.parameter.type_url,\n value: normalizedValue,\n },\n type: contract.type,\n };\n\n // Permission_id 0 is the default; createTransaction omits it.\n if (contract.Permission_id) {\n cleanContract.Permission_id = contract.Permission_id;\n }\n\n const result: Record<string, unknown> = {\n contract: [cleanContract],\n expiration: rawData.expiration,\n ref_block_bytes: rawData.ref_block_bytes.toLowerCase(),\n ref_block_hash: rawData.ref_block_hash.toLowerCase(),\n timestamp: rawData.timestamp,\n };\n\n if (rawData.fee_limit) {\n result.fee_limit = rawData.fee_limit;\n }\n\n if (rawData.data && rawData.data.length > 0) {\n result.data = rawData.data.toLowerCase();\n }\n\n return result;\n};\n","import { sha256 } from '@noble/hashes/sha256';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils';\nimport { utils as tronWebUtils } from 'tronweb';\n\nimport { normalizeDeserializedRawData } from '../normalizeDeserializedRawData';\n\n/** Unsigned Tron transaction in the shape TronWeb signers / wallets expect. */\nexport type UnsignedTronSwapTransaction = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n raw_data: any;\n raw_data_hex: string;\n txID: string;\n visible: boolean;\n};\n\n/**\n * Reconstructs a signable, broadcastable Tron transaction from the hex-encoded\n * `raw_data` protobuf in the swap payload — LiFi delivers only `rawDataHex`, so\n * we derive `txID` (SHA-256 of the raw_data bytes) and decode `raw_data` via\n * TronWeb (which signers/wallets read to display, sign, and broadcast).\n *\n * The decoded `raw_data` is normalized to match the canonical format that\n * TronWeb's `createTransaction` produces, because wallet extensions validate\n * the JSON structure against `raw_data_hex` and reject non-canonical formats.\n *\n * @param params.rawDataHex - Hex-encoded serialized Tron `raw_data` protobuf (`0x` optional).\n * @returns Unsigned tx: `{ raw_data, raw_data_hex, txID, visible }`.\n * @notInstrumented\n */\nexport const buildUnsignedTronSwapTransaction = ({\n rawDataHex,\n}: {\n rawDataHex: string;\n}): UnsignedTronSwapTransaction => {\n const normalizedRawDataHex = rawDataHex.replace(/^0x/, '');\n const txID = bytesToHex(sha256(hexToBytes(normalizedRawDataHex)));\n\n // Swaps / TRC-20 are TriggerSmartContract; native TRX is TransferContract.\n // deserializeTransaction throws on type mismatch, so fall through to the\n // native type if the smart-contract decode rejects this hex.\n let decoded;\n try {\n decoded = tronWebUtils.deserializeTx.deserializeTransaction(\n 'TriggerSmartContract',\n normalizedRawDataHex\n );\n } catch {\n decoded = tronWebUtils.deserializeTx.deserializeTransaction(\n 'TransferContract',\n normalizedRawDataHex\n );\n }\n // The decoder returns the raw_data object (some versions wrap it in a tuple\n // with the raw contract value as the second element).\n const rawData = Array.isArray(decoded) ? decoded[0] : decoded;\n\n return {\n raw_data: normalizeDeserializedRawData(rawData),\n raw_data_hex: normalizedRawDataHex,\n txID,\n visible: false,\n };\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\nimport { buildUnsignedTronSwapTransaction } from '../buildUnsignedTronSwapTransaction';\n\n/**\n * Local widening of `SwapSigningPayload` to add `tronTransaction` (LiFi's\n * `raw_data` hex), which the generated `@dynamic-labs/sdk-api-core` type doesn't\n * carry yet — drop this once that published package is regenerated.\n * `serializedTransaction` is the legacy (full-tx JSON) shape.\n */\ntype TronSwapSigningPayload = {\n serializedTransaction?: string;\n tronTransaction?: {\n rawDataHex: string;\n to: string;\n value: string;\n };\n};\n\n/**\n * Executes a Tron swap transaction by reconstructing the transaction from the\n * signing payload, signing it with TronWeb, and broadcasting it.\n *\n * 1. Validates that the wallet account is a Tron wallet account\n * 2. Builds the unsigned transaction from the payload — preferring the\n * `tronTransaction.rawDataHex` shape, falling back to the legacy\n * `serializedTransaction` JSON\n * 3. Signs and broadcasts via TronWeb\n *\n * @param params.signingPayload - The chain-aware signing payload containing `tronTransaction` (or legacy `serializedTransaction`).\n * @param params.walletAccount - The wallet account used to sign and send the transaction.\n * @param params.onStepChange - Optional callback invoked with `'transaction'` when the signing step begins.\n * @param client - The Dynamic client instance.\n * @returns The transaction hash from the broadcast result.\n * @notInstrumented\n */\nexport const tronExecuteSwapTransaction = async (\n { onStepChange, signingPayload, walletAccount }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletAccount(walletAccount) || !isTronWalletProvider(provider)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const { serializedTransaction, tronTransaction } =\n signingPayload as TronSwapSigningPayload;\n\n if (!tronTransaction && !serializedTransaction) {\n throw new InvalidParamError(\n 'Signing payload is missing Tron transaction data'\n );\n }\n\n onStepChange?.('transaction');\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n const unsignedTransaction = tronTransaction\n ? buildUnsignedTronSwapTransaction({\n rawDataHex: tronTransaction.rawDataHex,\n })\n : JSON.parse(serializedTransaction as string);\n\n const signedTransaction = await tronWeb.trx.sign(unsignedTransaction);\n const broadcastResult = await tronWeb.trx.sendRawTransaction(\n signedTransaction\n );\n\n return { transactionHash: broadcastResult.txid };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotTronProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_tron_provider_error',\n docsUrl: null,\n name: 'NotTronProviderError',\n shortMessage: 'Provider is not a Tron wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport {\n type TransferAmountParams,\n getWalletProviderFromWalletAccount,\n parseAmountToSmallestUnit,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { NotTronProviderError } from '../../errors/NotTronProviderError';\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\nconst TRX_DECIMALS = 6;\n\n/**\n * Transfers native TRX or TRC20 tokens from one wallet to another.\n *\n * Converts the human-readable amount string to the smallest unit (SUN for TRX,\n * or the appropriate unit for TRC20 tokens) using string-based arithmetic\n * to avoid floating-point precision issues.\n * @notInstrumented\n */\nexport const tronTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isTronWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Tron wallet account'\n );\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletProvider(provider)) {\n throw new NotTronProviderError({ providerKey: provider.key });\n }\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n if (token?.address) {\n const decimals = token.decimals ?? TRX_DECIMALS;\n const smallestUnitAmount = parseAmountToSmallestUnit({\n amount,\n decimals,\n });\n\n const contract = await tronWeb.contract().at(token.address);\n const result = await contract.transfer(recipient, smallestUnitAmount).send();\n\n return { transactionHash: result };\n }\n\n const sunAmount = parseAmountToSmallestUnit({\n amount,\n decimals: TRX_DECIMALS,\n });\n\n const result = await tronWeb.trx.sendTransaction(\n recipient,\n Number(sunAmount),\n { address: walletAccount.address }\n );\n\n return { transactionHash: result.txid };\n};\n"],"mappings":"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"}
@@ -6,7 +6,7 @@ let _noble_hashes_utils = require("@noble/hashes/utils");
6
6
 
7
7
  //#region package.json
8
8
  var name = "@dynamic-labs-sdk/tron";
9
- var version = "1.16.1";
9
+ var version = "1.17.1";
10
10
 
11
11
  //#endregion
12
12
  //#region src/utils/constants.ts
@@ -307,4 +307,4 @@ Object.defineProperty(exports, 'version', {
307
307
  return version;
308
308
  }
309
309
  });
310
- //# sourceMappingURL=tronTransferAmount-BdzjUoHG.cjs.map
310
+ //# sourceMappingURL=tronTransferAmount-B8ysC4Ni.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tronTransferAmount-BdzjUoHG.cjs","names":["TronWeb","InvalidParamError","normalizedValue: Record<string, string | number>","cleanContract: Record<string, unknown>","result: Record<string, unknown>","tronWebUtils","InvalidParamError","BaseError","InvalidParamError"],"sources":["../package.json","../src/utils/constants.ts","../src/utils/fetchTronBalance/fetchTronBalance.ts","../src/utils/createTronNetworkProvider/createTronNetworkProvider.ts","../src/registerTronNetworkProviderBuilder/registerTronNetworkProviderBuilder.ts","../src/isTronWalletAccount/isTronWalletAccount.ts","../src/isTronWalletProvider/isTronWalletProvider.ts","../src/utils/tronConfirmTransaction/tronConfirmTransaction.ts","../src/utils/normalizeDeserializedRawData/normalizeDeserializedRawData.ts","../src/utils/buildUnsignedTronSwapTransaction/buildUnsignedTronSwapTransaction.ts","../src/utils/tronExecuteSwapTransaction/tronExecuteSwapTransaction.ts","../src/errors/NotTronProviderError/NotTronProviderError.ts","../src/utils/tronTransferAmount/tronTransferAmount.ts"],"sourcesContent":["","// 1 TRX = 10^6 SUN (similar to wei for Ethereum)\nexport const SUN_PER_TRX = 1e6;\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { TronWeb } from 'tronweb';\n\nimport { SUN_PER_TRX } from '../constants';\n\ntype FetchTronBalanceParams = {\n address: string;\n networkData: NetworkData;\n};\n\n/** @notInstrumented */\nexport const fetchTronBalance = async ({\n address,\n networkData,\n}: FetchTronBalanceParams): Promise<string | null> => {\n const tronWeb = new TronWeb({\n fullHost: networkData.rpcUrls.http[0],\n });\n\n const balanceInSun = await tronWeb.trx.getBalance(address);\n\n return (Number(balanceInSun) / SUN_PER_TRX).toString();\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TronNetworkProvider } from '../../TronNetworkProvider.types';\nimport { fetchTronBalance } from '../fetchTronBalance';\n\n/** @notInstrumented */\nexport const createTronNetworkProvider = (\n networkData: NetworkData\n): TronNetworkProvider => ({\n ...createBaseNetworkProvider('TRON', networkData),\n getBalance: async ({ address }) => ({\n balance: await fetchTronBalance({\n address,\n networkData,\n }),\n }),\n});\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createTronNetworkProvider } from '../utils/createTronNetworkProvider';\n\n/** @notInstrumented */\nexport const registerTronNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n // If the Tron network provider builder is already registered, return.\n if (networkProviderBuilderRegistry.get().get('TRON')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createTronNetworkProvider,\n chain: 'TRON',\n });\n};\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { TronWalletAccount } from '../TronWalletAccount.types';\n\n/** @notInstrumented */\nexport const isTronWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is TronWalletAccount => walletAccount.chain === 'TRON';\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TronWalletProvider } from '../TronWalletProvider.types';\n\n/** @notInstrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const isTronWalletProvider = (\n provider: WalletProvider | TronWalletProvider\n): provider is TronWalletProvider => {\n return provider.chain === 'TRON';\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport type { ConfirmTransactionParams } from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\nconst POLLING_INTERVAL_MS = 3_000;\nconst MAX_POLLING_ATTEMPTS = 300;\n\n/**\n * Polls TronWeb until the transaction is included in a block (blockNumber is set).\n *\n * @param params.transactionHash - The transaction ID to confirm.\n * @param params.walletAccount - The wallet account used to retrieve TronWeb.\n * @param client - The Dynamic client instance.\n * @throws InvalidParamError if the wallet account or provider is not Tron.\n * @throws InvalidParamError if the transaction is not confirmed within the max attempts.\n * @notInstrumented\n */\nexport const tronConfirmTransaction = async (\n { transactionHash, walletAccount }: ConfirmTransactionParams,\n client: DynamicClient\n): Promise<void> => {\n if (!isTronWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletProvider(provider)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n for (let attempt = 0; attempt < MAX_POLLING_ATTEMPTS; attempt++) {\n const txInfo = await tronWeb.trx.getTransactionInfo(transactionHash);\n\n if (txInfo.blockNumber) {\n return;\n }\n\n if (attempt < MAX_POLLING_ATTEMPTS - 1) {\n await new Promise<void>((resolve) =>\n setTimeout(resolve, POLLING_INTERVAL_MS)\n );\n }\n }\n\n throw new InvalidParamError(\n `Transaction ${transactionHash} was not confirmed after ${MAX_POLLING_ATTEMPTS} attempts`\n );\n};\n","/**\n * Fields in a TriggerSmartContract's `parameter.value` that default to 0 in\n * protobuf and are omitted by TronWeb's `createTransaction` when zero-valued.\n * Keeping them in the JSON causes wallet extensions to flag the transaction as\n * tampered, because the wallet's own protobuf→JSON decoder omits them.\n */\nconst OMITTABLE_ZERO_VALUE_FIELDS = new Set([\n 'call_token_value',\n 'call_value',\n 'token_id',\n]);\n\n/**\n * A contract entry inside `raw_data` as returned by TronWeb's\n * `deserializeTransaction`. Addresses and byte fields are UPPERCASE hex.\n */\ntype DeserializedContract = {\n Permission_id: number;\n parameter: {\n type_url: string;\n value: Record<string, string | number>;\n };\n type: string;\n};\n\n/**\n * The `raw_data` object returned by TronWeb's `deserializeTransaction`.\n * Contains extra default-value fields (data, fee_limit, scripts, auths) and\n * UPPERCASE hex for all byte fields — neither of which match the canonical\n * format that TronWeb's `createTransaction` produces.\n */\ntype DeserializedRawData = {\n auths: unknown[];\n contract: DeserializedContract[];\n data: string;\n expiration: number;\n fee_limit: number;\n ref_block_bytes: string;\n ref_block_hash: string;\n scripts: string;\n timestamp: number;\n};\n\n/**\n * Normalizes the `raw_data` object produced by TronWeb's\n * `deserializeTransaction` to match the canonical format of TronWeb's\n * `createTransaction` output.\n *\n * `deserializeTransaction` outputs UPPERCASE hex for all byte fields, includes\n * default-value fields (`data: ''`, `fee_limit: 0`, `scripts: ''`, `auths: []`,\n * `Permission_id: 0`), and adds extra keys not present in the original\n * transaction. Wallet extensions (TronLink, OKX, Bitget) validate the\n * `raw_data` JSON against `raw_data_hex` and reject transactions whose\n * structure deviates from the canonical format.\n *\n * @param rawData - The deserialized `raw_data` from `deserializeTransaction`.\n * @returns A cleaned `raw_data` structurally matching `createTransaction` output.\n * @notInstrumented\n */\nexport const normalizeDeserializedRawData = (\n rawData: DeserializedRawData,\n): Record<string, unknown> => {\n const contract = rawData.contract[0];\n const value = contract.parameter.value;\n\n const normalizedValue: Record<string, string | number> = {};\n\n for (const [key, val] of Object.entries(value)) {\n if (typeof val === 'string') {\n if (val.length > 0) {\n normalizedValue[key] = val.toLowerCase();\n }\n\n continue;\n }\n\n // Strip zero-valued protobuf-default fields that createTransaction omits.\n if (val === 0 && OMITTABLE_ZERO_VALUE_FIELDS.has(key)) {\n continue;\n }\n\n normalizedValue[key] = val;\n }\n\n const cleanContract: Record<string, unknown> = {\n parameter: {\n type_url: contract.parameter.type_url,\n value: normalizedValue,\n },\n type: contract.type,\n };\n\n // Permission_id 0 is the default; createTransaction omits it.\n if (contract.Permission_id) {\n cleanContract.Permission_id = contract.Permission_id;\n }\n\n const result: Record<string, unknown> = {\n contract: [cleanContract],\n expiration: rawData.expiration,\n ref_block_bytes: rawData.ref_block_bytes.toLowerCase(),\n ref_block_hash: rawData.ref_block_hash.toLowerCase(),\n timestamp: rawData.timestamp,\n };\n\n if (rawData.fee_limit) {\n result.fee_limit = rawData.fee_limit;\n }\n\n if (rawData.data && rawData.data.length > 0) {\n result.data = rawData.data.toLowerCase();\n }\n\n return result;\n};\n","import { sha256 } from '@noble/hashes/sha256';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils';\nimport { utils as tronWebUtils } from 'tronweb';\n\nimport { normalizeDeserializedRawData } from '../normalizeDeserializedRawData';\n\n/** Unsigned Tron transaction in the shape TronWeb signers / wallets expect. */\nexport type UnsignedTronSwapTransaction = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n raw_data: any;\n raw_data_hex: string;\n txID: string;\n visible: boolean;\n};\n\n/**\n * Reconstructs a signable, broadcastable Tron transaction from the hex-encoded\n * `raw_data` protobuf in the swap payload — LiFi delivers only `rawDataHex`, so\n * we derive `txID` (SHA-256 of the raw_data bytes) and decode `raw_data` via\n * TronWeb (which signers/wallets read to display, sign, and broadcast).\n *\n * The decoded `raw_data` is normalized to match the canonical format that\n * TronWeb's `createTransaction` produces, because wallet extensions validate\n * the JSON structure against `raw_data_hex` and reject non-canonical formats.\n *\n * @param params.rawDataHex - Hex-encoded serialized Tron `raw_data` protobuf (`0x` optional).\n * @returns Unsigned tx: `{ raw_data, raw_data_hex, txID, visible }`.\n * @notInstrumented\n */\nexport const buildUnsignedTronSwapTransaction = ({\n rawDataHex,\n}: {\n rawDataHex: string;\n}): UnsignedTronSwapTransaction => {\n const normalizedRawDataHex = rawDataHex.replace(/^0x/, '');\n const txID = bytesToHex(sha256(hexToBytes(normalizedRawDataHex)));\n\n // Swaps / TRC-20 are TriggerSmartContract; native TRX is TransferContract.\n // deserializeTransaction throws on type mismatch, so fall through to the\n // native type if the smart-contract decode rejects this hex.\n let decoded;\n try {\n decoded = tronWebUtils.deserializeTx.deserializeTransaction(\n 'TriggerSmartContract',\n normalizedRawDataHex\n );\n } catch {\n decoded = tronWebUtils.deserializeTx.deserializeTransaction(\n 'TransferContract',\n normalizedRawDataHex\n );\n }\n // The decoder returns the raw_data object (some versions wrap it in a tuple\n // with the raw contract value as the second element).\n const rawData = Array.isArray(decoded) ? decoded[0] : decoded;\n\n return {\n raw_data: normalizeDeserializedRawData(rawData),\n raw_data_hex: normalizedRawDataHex,\n txID,\n visible: false,\n };\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\nimport { buildUnsignedTronSwapTransaction } from '../buildUnsignedTronSwapTransaction';\n\n/**\n * Local widening of `SwapSigningPayload` to add `tronTransaction` (LiFi's\n * `raw_data` hex), which the generated `@dynamic-labs/sdk-api-core` type doesn't\n * carry yet — drop this once that published package is regenerated.\n * `serializedTransaction` is the legacy (full-tx JSON) shape.\n */\ntype TronSwapSigningPayload = {\n serializedTransaction?: string;\n tronTransaction?: {\n rawDataHex: string;\n to: string;\n value: string;\n };\n};\n\n/**\n * Executes a Tron swap transaction by reconstructing the transaction from the\n * signing payload, signing it with TronWeb, and broadcasting it.\n *\n * 1. Validates that the wallet account is a Tron wallet account\n * 2. Builds the unsigned transaction from the payload — preferring the\n * `tronTransaction.rawDataHex` shape, falling back to the legacy\n * `serializedTransaction` JSON\n * 3. Signs and broadcasts via TronWeb\n *\n * @param params.signingPayload - The chain-aware signing payload containing `tronTransaction` (or legacy `serializedTransaction`).\n * @param params.walletAccount - The wallet account used to sign and send the transaction.\n * @param params.onStepChange - Optional callback invoked with `'transaction'` when the signing step begins.\n * @param client - The Dynamic client instance.\n * @returns The transaction hash from the broadcast result.\n * @notInstrumented\n */\nexport const tronExecuteSwapTransaction = async (\n { onStepChange, signingPayload, walletAccount }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletAccount(walletAccount) || !isTronWalletProvider(provider)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const { serializedTransaction, tronTransaction } =\n signingPayload as TronSwapSigningPayload;\n\n if (!tronTransaction && !serializedTransaction) {\n throw new InvalidParamError(\n 'Signing payload is missing Tron transaction data'\n );\n }\n\n onStepChange?.('transaction');\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n const unsignedTransaction = tronTransaction\n ? buildUnsignedTronSwapTransaction({\n rawDataHex: tronTransaction.rawDataHex,\n })\n : JSON.parse(serializedTransaction as string);\n\n const signedTransaction = await tronWeb.trx.sign(unsignedTransaction);\n const broadcastResult = await tronWeb.trx.sendRawTransaction(\n signedTransaction\n );\n\n return { transactionHash: broadcastResult.txid };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotTronProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_tron_provider_error',\n docsUrl: null,\n name: 'NotTronProviderError',\n shortMessage: 'Provider is not a Tron wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport {\n type TransferAmountParams,\n getWalletProviderFromWalletAccount,\n parseAmountToSmallestUnit,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { NotTronProviderError } from '../../errors/NotTronProviderError';\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\nconst TRX_DECIMALS = 6;\n\n/**\n * Transfers native TRX or TRC20 tokens from one wallet to another.\n *\n * Converts the human-readable amount string to the smallest unit (SUN for TRX,\n * or the appropriate unit for TRC20 tokens) using string-based arithmetic\n * to avoid floating-point precision issues.\n * @notInstrumented\n */\nexport const tronTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isTronWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Tron wallet account'\n );\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletProvider(provider)) {\n throw new NotTronProviderError({ providerKey: provider.key });\n }\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n if (token?.address) {\n const decimals = token.decimals ?? TRX_DECIMALS;\n const smallestUnitAmount = parseAmountToSmallestUnit({\n amount,\n decimals,\n });\n\n const contract = await tronWeb.contract().at(token.address);\n const result = await contract.transfer(recipient, smallestUnitAmount).send();\n\n return { transactionHash: result };\n }\n\n const sunAmount = parseAmountToSmallestUnit({\n amount,\n decimals: TRX_DECIMALS,\n });\n\n const result = await tronWeb.trx.sendTransaction(\n recipient,\n Number(sunAmount),\n { address: walletAccount.address }\n );\n\n return { transactionHash: result.txid };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"tronTransferAmount-B8ysC4Ni.cjs","names":["TronWeb","InvalidParamError","normalizedValue: Record<string, string | number>","cleanContract: Record<string, unknown>","result: Record<string, unknown>","tronWebUtils","InvalidParamError","BaseError","InvalidParamError"],"sources":["../package.json","../src/utils/constants.ts","../src/utils/fetchTronBalance/fetchTronBalance.ts","../src/utils/createTronNetworkProvider/createTronNetworkProvider.ts","../src/registerTronNetworkProviderBuilder/registerTronNetworkProviderBuilder.ts","../src/isTronWalletAccount/isTronWalletAccount.ts","../src/isTronWalletProvider/isTronWalletProvider.ts","../src/utils/tronConfirmTransaction/tronConfirmTransaction.ts","../src/utils/normalizeDeserializedRawData/normalizeDeserializedRawData.ts","../src/utils/buildUnsignedTronSwapTransaction/buildUnsignedTronSwapTransaction.ts","../src/utils/tronExecuteSwapTransaction/tronExecuteSwapTransaction.ts","../src/errors/NotTronProviderError/NotTronProviderError.ts","../src/utils/tronTransferAmount/tronTransferAmount.ts"],"sourcesContent":["","// 1 TRX = 10^6 SUN (similar to wei for Ethereum)\nexport const SUN_PER_TRX = 1e6;\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { TronWeb } from 'tronweb';\n\nimport { SUN_PER_TRX } from '../constants';\n\ntype FetchTronBalanceParams = {\n address: string;\n networkData: NetworkData;\n};\n\n/** @notInstrumented */\nexport const fetchTronBalance = async ({\n address,\n networkData,\n}: FetchTronBalanceParams): Promise<string | null> => {\n const tronWeb = new TronWeb({\n fullHost: networkData.rpcUrls.http[0],\n });\n\n const balanceInSun = await tronWeb.trx.getBalance(address);\n\n return (Number(balanceInSun) / SUN_PER_TRX).toString();\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TronNetworkProvider } from '../../TronNetworkProvider.types';\nimport { fetchTronBalance } from '../fetchTronBalance';\n\n/** @notInstrumented */\nexport const createTronNetworkProvider = (\n networkData: NetworkData\n): TronNetworkProvider => ({\n ...createBaseNetworkProvider('TRON', networkData),\n getBalance: async ({ address }) => ({\n balance: await fetchTronBalance({\n address,\n networkData,\n }),\n }),\n});\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createTronNetworkProvider } from '../utils/createTronNetworkProvider';\n\n/** @notInstrumented */\nexport const registerTronNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n // If the Tron network provider builder is already registered, return.\n if (networkProviderBuilderRegistry.get().get('TRON')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createTronNetworkProvider,\n chain: 'TRON',\n });\n};\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { TronWalletAccount } from '../TronWalletAccount.types';\n\n/** @notInstrumented */\nexport const isTronWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is TronWalletAccount => walletAccount.chain === 'TRON';\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { TronWalletProvider } from '../TronWalletProvider.types';\n\n/** @notInstrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const isTronWalletProvider = (\n provider: WalletProvider | TronWalletProvider\n): provider is TronWalletProvider => {\n return provider.chain === 'TRON';\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport type { ConfirmTransactionParams } from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\nconst POLLING_INTERVAL_MS = 3_000;\nconst MAX_POLLING_ATTEMPTS = 300;\n\n/**\n * Polls TronWeb until the transaction is included in a block (blockNumber is set).\n *\n * @param params.transactionHash - The transaction ID to confirm.\n * @param params.walletAccount - The wallet account used to retrieve TronWeb.\n * @param client - The Dynamic client instance.\n * @throws InvalidParamError if the wallet account or provider is not Tron.\n * @throws InvalidParamError if the transaction is not confirmed within the max attempts.\n * @notInstrumented\n */\nexport const tronConfirmTransaction = async (\n { transactionHash, walletAccount }: ConfirmTransactionParams,\n client: DynamicClient\n): Promise<void> => {\n if (!isTronWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletProvider(provider)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n for (let attempt = 0; attempt < MAX_POLLING_ATTEMPTS; attempt++) {\n const txInfo = await tronWeb.trx.getTransactionInfo(transactionHash);\n\n if (txInfo.blockNumber) {\n return;\n }\n\n if (attempt < MAX_POLLING_ATTEMPTS - 1) {\n await new Promise<void>((resolve) =>\n setTimeout(resolve, POLLING_INTERVAL_MS)\n );\n }\n }\n\n throw new InvalidParamError(\n `Transaction ${transactionHash} was not confirmed after ${MAX_POLLING_ATTEMPTS} attempts`\n );\n};\n","/**\n * Fields in a TriggerSmartContract's `parameter.value` that default to 0 in\n * protobuf and are omitted by TronWeb's `createTransaction` when zero-valued.\n * Keeping them in the JSON causes wallet extensions to flag the transaction as\n * tampered, because the wallet's own protobuf→JSON decoder omits them.\n */\nconst OMITTABLE_ZERO_VALUE_FIELDS = new Set([\n 'call_token_value',\n 'call_value',\n 'token_id',\n]);\n\n/**\n * A contract entry inside `raw_data` as returned by TronWeb's\n * `deserializeTransaction`. Addresses and byte fields are UPPERCASE hex.\n */\ntype DeserializedContract = {\n Permission_id: number;\n parameter: {\n type_url: string;\n value: Record<string, string | number>;\n };\n type: string;\n};\n\n/**\n * The `raw_data` object returned by TronWeb's `deserializeTransaction`.\n * Contains extra default-value fields (data, fee_limit, scripts, auths) and\n * UPPERCASE hex for all byte fields — neither of which match the canonical\n * format that TronWeb's `createTransaction` produces.\n */\ntype DeserializedRawData = {\n auths: unknown[];\n contract: DeserializedContract[];\n data: string;\n expiration: number;\n fee_limit: number;\n ref_block_bytes: string;\n ref_block_hash: string;\n scripts: string;\n timestamp: number;\n};\n\n/**\n * Normalizes the `raw_data` object produced by TronWeb's\n * `deserializeTransaction` to match the canonical format of TronWeb's\n * `createTransaction` output.\n *\n * `deserializeTransaction` outputs UPPERCASE hex for all byte fields, includes\n * default-value fields (`data: ''`, `fee_limit: 0`, `scripts: ''`, `auths: []`,\n * `Permission_id: 0`), and adds extra keys not present in the original\n * transaction. Wallet extensions (TronLink, OKX, Bitget) validate the\n * `raw_data` JSON against `raw_data_hex` and reject transactions whose\n * structure deviates from the canonical format.\n *\n * @param rawData - The deserialized `raw_data` from `deserializeTransaction`.\n * @returns A cleaned `raw_data` structurally matching `createTransaction` output.\n * @notInstrumented\n */\nexport const normalizeDeserializedRawData = (\n rawData: DeserializedRawData,\n): Record<string, unknown> => {\n const contract = rawData.contract[0];\n const value = contract.parameter.value;\n\n const normalizedValue: Record<string, string | number> = {};\n\n for (const [key, val] of Object.entries(value)) {\n if (typeof val === 'string') {\n if (val.length > 0) {\n normalizedValue[key] = val.toLowerCase();\n }\n\n continue;\n }\n\n // Strip zero-valued protobuf-default fields that createTransaction omits.\n if (val === 0 && OMITTABLE_ZERO_VALUE_FIELDS.has(key)) {\n continue;\n }\n\n normalizedValue[key] = val;\n }\n\n const cleanContract: Record<string, unknown> = {\n parameter: {\n type_url: contract.parameter.type_url,\n value: normalizedValue,\n },\n type: contract.type,\n };\n\n // Permission_id 0 is the default; createTransaction omits it.\n if (contract.Permission_id) {\n cleanContract.Permission_id = contract.Permission_id;\n }\n\n const result: Record<string, unknown> = {\n contract: [cleanContract],\n expiration: rawData.expiration,\n ref_block_bytes: rawData.ref_block_bytes.toLowerCase(),\n ref_block_hash: rawData.ref_block_hash.toLowerCase(),\n timestamp: rawData.timestamp,\n };\n\n if (rawData.fee_limit) {\n result.fee_limit = rawData.fee_limit;\n }\n\n if (rawData.data && rawData.data.length > 0) {\n result.data = rawData.data.toLowerCase();\n }\n\n return result;\n};\n","import { sha256 } from '@noble/hashes/sha256';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils';\nimport { utils as tronWebUtils } from 'tronweb';\n\nimport { normalizeDeserializedRawData } from '../normalizeDeserializedRawData';\n\n/** Unsigned Tron transaction in the shape TronWeb signers / wallets expect. */\nexport type UnsignedTronSwapTransaction = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n raw_data: any;\n raw_data_hex: string;\n txID: string;\n visible: boolean;\n};\n\n/**\n * Reconstructs a signable, broadcastable Tron transaction from the hex-encoded\n * `raw_data` protobuf in the swap payload — LiFi delivers only `rawDataHex`, so\n * we derive `txID` (SHA-256 of the raw_data bytes) and decode `raw_data` via\n * TronWeb (which signers/wallets read to display, sign, and broadcast).\n *\n * The decoded `raw_data` is normalized to match the canonical format that\n * TronWeb's `createTransaction` produces, because wallet extensions validate\n * the JSON structure against `raw_data_hex` and reject non-canonical formats.\n *\n * @param params.rawDataHex - Hex-encoded serialized Tron `raw_data` protobuf (`0x` optional).\n * @returns Unsigned tx: `{ raw_data, raw_data_hex, txID, visible }`.\n * @notInstrumented\n */\nexport const buildUnsignedTronSwapTransaction = ({\n rawDataHex,\n}: {\n rawDataHex: string;\n}): UnsignedTronSwapTransaction => {\n const normalizedRawDataHex = rawDataHex.replace(/^0x/, '');\n const txID = bytesToHex(sha256(hexToBytes(normalizedRawDataHex)));\n\n // Swaps / TRC-20 are TriggerSmartContract; native TRX is TransferContract.\n // deserializeTransaction throws on type mismatch, so fall through to the\n // native type if the smart-contract decode rejects this hex.\n let decoded;\n try {\n decoded = tronWebUtils.deserializeTx.deserializeTransaction(\n 'TriggerSmartContract',\n normalizedRawDataHex\n );\n } catch {\n decoded = tronWebUtils.deserializeTx.deserializeTransaction(\n 'TransferContract',\n normalizedRawDataHex\n );\n }\n // The decoder returns the raw_data object (some versions wrap it in a tuple\n // with the raw contract value as the second element).\n const rawData = Array.isArray(decoded) ? decoded[0] : decoded;\n\n return {\n raw_data: normalizeDeserializedRawData(rawData),\n raw_data_hex: normalizedRawDataHex,\n txID,\n visible: false,\n };\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\nimport { buildUnsignedTronSwapTransaction } from '../buildUnsignedTronSwapTransaction';\n\n/**\n * Local widening of `SwapSigningPayload` to add `tronTransaction` (LiFi's\n * `raw_data` hex), which the generated `@dynamic-labs/sdk-api-core` type doesn't\n * carry yet — drop this once that published package is regenerated.\n * `serializedTransaction` is the legacy (full-tx JSON) shape.\n */\ntype TronSwapSigningPayload = {\n serializedTransaction?: string;\n tronTransaction?: {\n rawDataHex: string;\n to: string;\n value: string;\n };\n};\n\n/**\n * Executes a Tron swap transaction by reconstructing the transaction from the\n * signing payload, signing it with TronWeb, and broadcasting it.\n *\n * 1. Validates that the wallet account is a Tron wallet account\n * 2. Builds the unsigned transaction from the payload — preferring the\n * `tronTransaction.rawDataHex` shape, falling back to the legacy\n * `serializedTransaction` JSON\n * 3. Signs and broadcasts via TronWeb\n *\n * @param params.signingPayload - The chain-aware signing payload containing `tronTransaction` (or legacy `serializedTransaction`).\n * @param params.walletAccount - The wallet account used to sign and send the transaction.\n * @param params.onStepChange - Optional callback invoked with `'transaction'` when the signing step begins.\n * @param client - The Dynamic client instance.\n * @returns The transaction hash from the broadcast result.\n * @notInstrumented\n */\nexport const tronExecuteSwapTransaction = async (\n { onStepChange, signingPayload, walletAccount }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletAccount(walletAccount) || !isTronWalletProvider(provider)) {\n throw new InvalidParamError('Wallet account is not a Tron wallet account');\n }\n\n const { serializedTransaction, tronTransaction } =\n signingPayload as TronSwapSigningPayload;\n\n if (!tronTransaction && !serializedTransaction) {\n throw new InvalidParamError(\n 'Signing payload is missing Tron transaction data'\n );\n }\n\n onStepChange?.('transaction');\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n const unsignedTransaction = tronTransaction\n ? buildUnsignedTronSwapTransaction({\n rawDataHex: tronTransaction.rawDataHex,\n })\n : JSON.parse(serializedTransaction as string);\n\n const signedTransaction = await tronWeb.trx.sign(unsignedTransaction);\n const broadcastResult = await tronWeb.trx.sendRawTransaction(\n signedTransaction\n );\n\n return { transactionHash: broadcastResult.txid };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotTronProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_tron_provider_error',\n docsUrl: null,\n name: 'NotTronProviderError',\n shortMessage: 'Provider is not a Tron wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport {\n type TransferAmountParams,\n getWalletProviderFromWalletAccount,\n parseAmountToSmallestUnit,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { NotTronProviderError } from '../../errors/NotTronProviderError';\nimport { isTronWalletAccount } from '../../isTronWalletAccount';\nimport { isTronWalletProvider } from '../../isTronWalletProvider';\n\nconst TRX_DECIMALS = 6;\n\n/**\n * Transfers native TRX or TRC20 tokens from one wallet to another.\n *\n * Converts the human-readable amount string to the smallest unit (SUN for TRX,\n * or the appropriate unit for TRC20 tokens) using string-based arithmetic\n * to avoid floating-point precision issues.\n * @notInstrumented\n */\nexport const tronTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isTronWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Tron wallet account'\n );\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isTronWalletProvider(provider)) {\n throw new NotTronProviderError({ providerKey: provider.key });\n }\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n if (token?.address) {\n const decimals = token.decimals ?? TRX_DECIMALS;\n const smallestUnitAmount = parseAmountToSmallestUnit({\n amount,\n decimals,\n });\n\n const contract = await tronWeb.contract().at(token.address);\n const result = await contract.transfer(recipient, smallestUnitAmount).send();\n\n return { transactionHash: result };\n }\n\n const sunAmount = parseAmountToSmallestUnit({\n amount,\n decimals: TRX_DECIMALS,\n });\n\n const result = await tronWeb.trx.sendTransaction(\n recipient,\n Number(sunAmount),\n { address: walletAccount.address }\n );\n\n return { transactionHash: result.txid };\n};\n"],"mappings":"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"}