@dynamic-labs-sdk/tron 1.8.2 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/{addTronWalletAdaptersExtension-DKZxu4XV.esm.js → addTronWalletAdaptersExtension-CDFDTatp.esm.js} +2 -2
  2. package/dist/{addTronWalletAdaptersExtension-DKZxu4XV.esm.js.map → addTronWalletAdaptersExtension-CDFDTatp.esm.js.map} +1 -1
  3. package/dist/{addTronWalletAdaptersExtension-DgkZv39L.cjs → addTronWalletAdaptersExtension-cFPShC28.cjs} +2 -2
  4. package/dist/{addTronWalletAdaptersExtension-DgkZv39L.cjs.map → addTronWalletAdaptersExtension-cFPShC28.cjs.map} +1 -1
  5. package/dist/{addWaasTronExtension-DRToONXp.cjs → addWaasTronExtension-CJovJQcg.cjs} +2 -2
  6. package/dist/{addWaasTronExtension-DRToONXp.cjs.map → addWaasTronExtension-CJovJQcg.cjs.map} +1 -1
  7. package/dist/{addWaasTronExtension-BM9Ry7wP.esm.js → addWaasTronExtension-N3CEdziN.esm.js} +2 -2
  8. package/dist/{addWaasTronExtension-BM9Ry7wP.esm.js.map → addWaasTronExtension-N3CEdziN.esm.js.map} +1 -1
  9. package/dist/exports/index.d.ts +2 -0
  10. package/dist/exports/index.d.ts.map +1 -1
  11. package/dist/index.cjs +105 -3
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.esm.js +107 -6
  14. package/dist/index.esm.js.map +1 -1
  15. package/dist/transactionSimulation.types.d.ts +8 -0
  16. package/dist/transactionSimulation.types.d.ts.map +1 -0
  17. package/dist/{tronTransferAmount-BGCkdvME.cjs → tronTransferAmount-B3pRUJMP.cjs} +43 -10
  18. package/dist/tronTransferAmount-B3pRUJMP.cjs.map +1 -0
  19. package/dist/{tronTransferAmount-CIZdyiQw.esm.js → tronTransferAmount-BQdhlaSo.esm.js} +44 -11
  20. package/dist/tronTransferAmount-BQdhlaSo.esm.js.map +1 -0
  21. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  22. package/dist/utils/buildUnsignedTronSwapTransaction/buildUnsignedTronSwapTransaction.d.ts +21 -0
  23. package/dist/utils/buildUnsignedTronSwapTransaction/buildUnsignedTronSwapTransaction.d.ts.map +1 -0
  24. package/dist/utils/buildUnsignedTronSwapTransaction/index.d.ts +3 -0
  25. package/dist/utils/buildUnsignedTronSwapTransaction/index.d.ts.map +1 -0
  26. package/dist/utils/calculateTronTransactionFee/calculateTronTransactionFee.d.ts +27 -0
  27. package/dist/utils/calculateTronTransactionFee/calculateTronTransactionFee.d.ts.map +1 -0
  28. package/dist/utils/calculateTronTransactionFee/index.d.ts +2 -0
  29. package/dist/utils/calculateTronTransactionFee/index.d.ts.map +1 -0
  30. package/dist/utils/parseLatestSunPrice/index.d.ts +2 -0
  31. package/dist/utils/parseLatestSunPrice/index.d.ts.map +1 -0
  32. package/dist/utils/parseLatestSunPrice/parseLatestSunPrice.d.ts +11 -0
  33. package/dist/utils/parseLatestSunPrice/parseLatestSunPrice.d.ts.map +1 -0
  34. package/dist/utils/sunToTrxString/index.d.ts +2 -0
  35. package/dist/utils/sunToTrxString/index.d.ts.map +1 -0
  36. package/dist/utils/sunToTrxString/sunToTrxString.d.ts +10 -0
  37. package/dist/utils/sunToTrxString/sunToTrxString.d.ts.map +1 -0
  38. package/dist/utils/tronExecuteSwapTransaction/tronExecuteSwapTransaction.d.ts +7 -5
  39. package/dist/utils/tronExecuteSwapTransaction/tronExecuteSwapTransaction.d.ts.map +1 -1
  40. package/dist/waas.cjs +2 -2
  41. package/dist/waas.esm.js +2 -2
  42. package/dist/walletAdapters.cjs +2 -2
  43. package/dist/walletAdapters.esm.js +2 -2
  44. package/package.json +5 -4
  45. package/dist/tronTransferAmount-BGCkdvME.cjs.map +0 -1
  46. package/dist/tronTransferAmount-CIZdyiQw.esm.js.map +0 -1
@@ -0,0 +1,21 @@
1
+ /** Unsigned Tron transaction in the shape TronWeb signers / wallets expect. */
2
+ export type UnsignedTronSwapTransaction = {
3
+ raw_data: any;
4
+ raw_data_hex: string;
5
+ txID: string;
6
+ visible: boolean;
7
+ };
8
+ /**
9
+ * Reconstructs a signable, broadcastable Tron transaction from the hex-encoded
10
+ * `raw_data` protobuf in the swap payload — LiFi delivers only `rawDataHex`, so
11
+ * we derive `txID` (SHA-256 of the raw_data bytes) and decode `raw_data` via
12
+ * TronWeb (which signers/wallets read to display, sign, and broadcast).
13
+ *
14
+ * @param params.rawDataHex - Hex-encoded serialized Tron `raw_data` protobuf (`0x` optional).
15
+ * @returns Unsigned tx: `{ raw_data, raw_data_hex, txID, visible }`.
16
+ * @not-instrumented
17
+ */
18
+ export declare const buildUnsignedTronSwapTransaction: ({ rawDataHex, }: {
19
+ rawDataHex: string;
20
+ }) => UnsignedTronSwapTransaction;
21
+ //# sourceMappingURL=buildUnsignedTronSwapTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildUnsignedTronSwapTransaction.d.ts","sourceRoot":"","sources":["../../../src/utils/buildUnsignedTronSwapTransaction/buildUnsignedTronSwapTransaction.ts"],"names":[],"mappings":"AAIA,+EAA+E;AAC/E,MAAM,MAAM,2BAA2B,GAAG;IAExC,QAAQ,EAAE,GAAG,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,gCAAgC,oBAE1C;IACD,UAAU,EAAE,MAAM,CAAC;CACpB,KAAG,2BA6BH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { buildUnsignedTronSwapTransaction } from './buildUnsignedTronSwapTransaction';
2
+ export type { UnsignedTronSwapTransaction } from './buildUnsignedTronSwapTransaction';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/buildUnsignedTronSwapTransaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AACtF,YAAY,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { DynamicClient } from '@dynamic-labs-sdk/client';
2
+ import { type TransferAmountParams } from '@dynamic-labs-sdk/client/core';
3
+ import type { TronTransactionFeeData } from '../../transactionSimulation.types';
4
+ type CalculateTronTransactionFeeParams = TransferAmountParams & {
5
+ /** Optional USD price of TRX, used to populate `usdAmount`. */
6
+ nativeTokenPriceUsd?: number;
7
+ };
8
+ /**
9
+ * Estimates the network fee (in SUN) for a Tron transfer, mirroring the
10
+ * EVM/Solana fee estimators — TRC-20 from energy burn, native TRX from
11
+ * bandwidth.
12
+ *
13
+ * @param params.amount - Human-readable transfer amount.
14
+ * @param params.recipient - Destination address.
15
+ * @param params.token - TRC-20 token (`{ address, decimals }`); omit for native TRX.
16
+ * @param params.walletAccount - Tron wallet account paying the fee.
17
+ * @param params.nativeTokenPriceUsd - Optional TRX price for `usdAmount`.
18
+ * @param client - The Dynamic client instance.
19
+ * @returns Fee in SUN (atomic), human-readable TRX, and optional USD.
20
+ * @throws InvalidParamError if the wallet account is not Tron.
21
+ * @throws NotTronProviderError if the resolved provider is not Tron.
22
+ * @throws FeeEstimationFailedError if on-chain estimation fails.
23
+ * @not-instrumented
24
+ */
25
+ export declare const calculateTronTransactionFee: ({ amount, nativeTokenPriceUsd, recipient, token, walletAccount, }: CalculateTronTransactionFeeParams, client?: DynamicClient) => Promise<TronTransactionFeeData>;
26
+ export {};
27
+ //# sourceMappingURL=calculateTronTransactionFee.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculateTronTransactionFee.d.ts","sourceRoot":"","sources":["../../../src/utils/calculateTronTransactionFee/calculateTronTransactionFee.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAM9D,OAAO,EACL,KAAK,oBAAoB,EAG1B,MAAM,+BAA+B,CAAC;AAKvC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAQhF,KAAK,iCAAiC,GAAG,oBAAoB,GAAG;IAC9D,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,2BAA2B,sEAOnC,iCAAiC,WAC5B,aAAa,KACpB,OAAO,CAAC,sBAAsB,CAyFhC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { calculateTronTransactionFee } from './calculateTronTransactionFee';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/calculateTronTransactionFee/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { parseLatestSunPrice } from './parseLatestSunPrice';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/parseLatestSunPrice/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * TronWeb returns resource prices (energy / bandwidth) as a
3
+ * `timestamp:price,...` history string in SUN. The current price is the final
4
+ * entry.
5
+ *
6
+ * @param priceHistory - The raw price-history string from TronWeb.
7
+ * @returns The latest per-unit price in SUN.
8
+ * @not-instrumented
9
+ */
10
+ export declare const parseLatestSunPrice: (priceHistory: string) => bigint;
11
+ //# sourceMappingURL=parseLatestSunPrice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseLatestSunPrice.d.ts","sourceRoot":"","sources":["../../../src/utils/parseLatestSunPrice/parseLatestSunPrice.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,mBAAmB,iBAAkB,MAAM,KAAG,MAI1D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { sunToTrxString } from './sunToTrxString';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/sunToTrxString/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Converts an amount in SUN (TRX's atomic unit) to a human-readable TRX string,
3
+ * trimming trailing zeros (e.g. `12_600_000n` → `"12.6"`).
4
+ *
5
+ * @param sun - The amount in SUN.
6
+ * @returns The human-readable TRX amount.
7
+ * @not-instrumented
8
+ */
9
+ export declare const sunToTrxString: (sun: bigint) => string;
10
+ //# sourceMappingURL=sunToTrxString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sunToTrxString.d.ts","sourceRoot":"","sources":["../../../src/utils/sunToTrxString/sunToTrxString.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,eAAO,MAAM,cAAc,QAAS,MAAM,KAAG,MAO5C,CAAC"}
@@ -1,14 +1,16 @@
1
1
  import { type DynamicClient } from '@dynamic-labs-sdk/client';
2
2
  import type { ExecuteSwapTransactionParams, ExecuteSwapTransactionResult } from '@dynamic-labs-sdk/client/core';
3
3
  /**
4
- * Executes a Tron checkout transaction by deserializing the transaction from
5
- * the signing payload, signing it with TronWeb, and broadcasting it.
4
+ * Executes a Tron swap transaction by reconstructing the transaction from the
5
+ * signing payload, signing it with TronWeb, and broadcasting it.
6
6
  *
7
7
  * 1. Validates that the wallet account is a Tron wallet account
8
- * 2. Extracts the serialized transaction from the signing payload
9
- * 3. Parses, signs, and broadcasts via TronWeb
8
+ * 2. Builds the unsigned transaction from the payload — preferring the
9
+ * `tronTransaction.rawDataHex` shape, falling back to the legacy
10
+ * `serializedTransaction` JSON
11
+ * 3. Signs and broadcasts via TronWeb
10
12
  *
11
- * @param params.signingPayload - The chain-aware signing payload containing `serializedTransaction`.
13
+ * @param params.signingPayload - The chain-aware signing payload containing `tronTransaction` (or legacy `serializedTransaction`).
12
14
  * @param params.walletAccount - The wallet account used to sign and send the transaction.
13
15
  * @param params.onStepChange - Optional callback invoked with `'transaction'` when the signing step begins.
14
16
  * @param client - The Dynamic client instance.
@@ -1 +1 @@
1
- {"version":3,"file":"tronExecuteSwapTransaction.d.ts","sourceRoot":"","sources":["../../../src/utils/tronExecuteSwapTransaction/tronExecuteSwapTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,+BAA+B,CAAC;AAMvC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,0BAA0B,oDACY,4BAA4B,UACrE,aAAa,KACpB,OAAO,CAAC,4BAA4B,CA8BtC,CAAC"}
1
+ {"version":3,"file":"tronExecuteSwapTransaction.d.ts","sourceRoot":"","sources":["../../../src/utils/tronExecuteSwapTransaction/tronExecuteSwapTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,+BAA+B,CAAC;AAsBvC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,0BAA0B,oDACY,4BAA4B,UACrE,aAAa,KACpB,OAAO,CAAC,4BAA4B,CAmCtC,CAAC"}
package/dist/waas.cjs CHANGED
@@ -1,5 +1,5 @@
1
- const require_tronTransferAmount = require('./tronTransferAmount-BGCkdvME.cjs');
2
- const require_addWaasTronExtension = require('./addWaasTronExtension-DRToONXp.cjs');
1
+ const require_tronTransferAmount = require('./tronTransferAmount-B3pRUJMP.cjs');
2
+ const require_addWaasTronExtension = require('./addWaasTronExtension-CJovJQcg.cjs');
3
3
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
4
4
 
5
5
  //#region src/exports/waas.ts
package/dist/waas.esm.js CHANGED
@@ -1,5 +1,5 @@
1
- import { c as name, l as version } from "./tronTransferAmount-CIZdyiQw.esm.js";
2
- import { t as addWaasTronExtension } from "./addWaasTronExtension-BM9Ry7wP.esm.js";
1
+ import { c as name, l as version } from "./tronTransferAmount-BQdhlaSo.esm.js";
2
+ import { t as addWaasTronExtension } from "./addWaasTronExtension-N3CEdziN.esm.js";
3
3
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
4
4
 
5
5
  //#region src/exports/waas.ts
@@ -1,5 +1,5 @@
1
- const require_tronTransferAmount = require('./tronTransferAmount-BGCkdvME.cjs');
2
- const require_addTronWalletAdaptersExtension = require('./addTronWalletAdaptersExtension-DgkZv39L.cjs');
1
+ const require_tronTransferAmount = require('./tronTransferAmount-B3pRUJMP.cjs');
2
+ const require_addTronWalletAdaptersExtension = require('./addTronWalletAdaptersExtension-cFPShC28.cjs');
3
3
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
4
4
 
5
5
  //#region src/exports/walletAdapters.ts
@@ -1,5 +1,5 @@
1
- import { c as name, l as version } from "./tronTransferAmount-CIZdyiQw.esm.js";
2
- import { t as addTronWalletAdaptersExtension } from "./addTronWalletAdaptersExtension-DKZxu4XV.esm.js";
1
+ import { c as name, l as version } from "./tronTransferAmount-BQdhlaSo.esm.js";
2
+ import { t as addTronWalletAdaptersExtension } from "./addTronWalletAdaptersExtension-CDFDTatp.esm.js";
3
3
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
4
4
 
5
5
  //#region src/exports/walletAdapters.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs-sdk/tron",
3
- "version": "1.8.2",
3
+ "version": "1.11.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.esm.js",
@@ -27,12 +27,13 @@
27
27
  }
28
28
  },
29
29
  "dependencies": {
30
- "@dynamic-labs/sdk-api-core": "0.0.1015",
30
+ "@dynamic-labs/sdk-api-core": "0.0.1046",
31
+ "@noble/hashes": "1.8.0",
31
32
  "@tronweb3/tronwallet-abstract-adapter": "1.1.10",
32
33
  "@tronweb3/tronwallet-adapters": "1.2.17",
33
34
  "tronweb": "6.1.1",
34
- "@dynamic-labs-sdk/assert-package-version": "1.8.2",
35
- "@dynamic-labs-sdk/client": "1.8.2"
35
+ "@dynamic-labs-sdk/assert-package-version": "1.11.0",
36
+ "@dynamic-labs-sdk/client": "1.11.0"
36
37
  },
37
38
  "devDependencies": {
38
39
  "eventemitter3": "5.0.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"tronTransferAmount-BGCkdvME.cjs","names":["TronWeb","InvalidParamError","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/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/** @not-instrumented */\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/** @not-instrumented */\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/** @not-instrumented */\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/** @not-instrumented */\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/** @not-instrumented */\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 * @not-instrumented\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","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';\n\n/**\n * Executes a Tron checkout transaction by deserializing the transaction from\n * the signing payload, signing it with TronWeb, and broadcasting it.\n *\n * 1. Validates that the wallet account is a Tron wallet account\n * 2. Extracts the serialized transaction from the signing payload\n * 3. Parses, signs, and broadcasts via TronWeb\n *\n * @param params.signingPayload - The chain-aware signing payload containing `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 * @not-instrumented\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 serializedTransactionData = signingPayload.serializedTransaction;\n\n if (!serializedTransactionData) {\n throw new InvalidParamError(\n 'Signing payload is missing serialized transaction data'\n );\n }\n\n onStepChange?.('transaction');\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n const unsignedTransaction = JSON.parse(serializedTransactionData);\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 * @not-instrumented\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 +0,0 @@
1
- {"version":3,"file":"tronTransferAmount-CIZdyiQw.esm.js","names":[],"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/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/** @not-instrumented */\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/** @not-instrumented */\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/** @not-instrumented */\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/** @not-instrumented */\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/** @not-instrumented */\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 * @not-instrumented\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","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';\n\n/**\n * Executes a Tron checkout transaction by deserializing the transaction from\n * the signing payload, signing it with TronWeb, and broadcasting it.\n *\n * 1. Validates that the wallet account is a Tron wallet account\n * 2. Extracts the serialized transaction from the signing payload\n * 3. Parses, signs, and broadcasts via TronWeb\n *\n * @param params.signingPayload - The chain-aware signing payload containing `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 * @not-instrumented\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 serializedTransactionData = signingPayload.serializedTransaction;\n\n if (!serializedTransactionData) {\n throw new InvalidParamError(\n 'Signing payload is missing serialized transaction data'\n );\n }\n\n onStepChange?.('transaction');\n\n const tronWeb = await provider.getTronWeb({ walletAccount });\n\n const unsignedTransaction = JSON.parse(serializedTransactionData);\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 * @not-instrumented\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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"}