@dynamic-labs-sdk/sui 1.29.0 → 1.30.2

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 (32) hide show
  1. package/dist/SuiWalletProvider.types.d.ts +1 -9
  2. package/dist/SuiWalletProvider.types.d.ts.map +1 -1
  3. package/dist/{addSuiWalletStandardExtension-4da_E4Pk.esm.js → addSuiWalletStandardExtension-C6NNoKpX.esm.js} +30 -43
  4. package/dist/addSuiWalletStandardExtension-C6NNoKpX.esm.js.map +1 -0
  5. package/dist/{addSuiWalletStandardExtension-Z8DM_vIL.cjs → addSuiWalletStandardExtension-DVmTGVzO.cjs} +30 -43
  6. package/dist/addSuiWalletStandardExtension-DVmTGVzO.cjs.map +1 -0
  7. package/dist/{addWaasSuiExtension-DtkMzhAT.cjs → addWaasSuiExtension-CJkrE3u_.cjs} +2 -2
  8. package/dist/{addWaasSuiExtension-DtkMzhAT.cjs.map → addWaasSuiExtension-CJkrE3u_.cjs.map} +1 -1
  9. package/dist/{addWaasSuiExtension-BQNXrF0f.esm.js → addWaasSuiExtension-D_wgkS_A.esm.js} +2 -2
  10. package/dist/{addWaasSuiExtension-BQNXrF0f.esm.js.map → addWaasSuiExtension-D_wgkS_A.esm.js.map} +1 -1
  11. package/dist/getSuiClient/getSuiClient.d.ts +2 -1
  12. package/dist/getSuiClient/getSuiClient.d.ts.map +1 -1
  13. package/dist/index.cjs +3 -3
  14. package/dist/index.esm.js +3 -3
  15. package/dist/{suiTransferAmount-6SgyhsN8.cjs → suiTransferAmount-BDYOogY-.cjs} +2 -2
  16. package/dist/suiTransferAmount-BDYOogY-.cjs.map +1 -0
  17. package/dist/{suiTransferAmount-BZ0dnhzm.esm.js → suiTransferAmount-DXvGs2l_.esm.js} +2 -2
  18. package/dist/suiTransferAmount-DXvGs2l_.esm.js.map +1 -0
  19. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  20. package/dist/utils/suiTransferAmount/suiTransferAmount.d.ts +5 -3
  21. package/dist/utils/suiTransferAmount/suiTransferAmount.d.ts.map +1 -1
  22. package/dist/waas.cjs +2 -2
  23. package/dist/waas.esm.js +2 -2
  24. package/dist/walletStandard/addSuiWalletStandardExtension/addSuiWalletStandardExtension.d.ts.map +1 -1
  25. package/dist/walletStandard/utils/createWalletProviderFromSuiStandardWallet/createWalletProviderFromSuiStandardWallet.d.ts.map +1 -1
  26. package/dist/walletStandard.cjs +2 -2
  27. package/dist/walletStandard.esm.js +2 -2
  28. package/package.json +3 -3
  29. package/dist/addSuiWalletStandardExtension-4da_E4Pk.esm.js.map +0 -1
  30. package/dist/addSuiWalletStandardExtension-Z8DM_vIL.cjs.map +0 -1
  31. package/dist/suiTransferAmount-6SgyhsN8.cjs.map +0 -1
  32. package/dist/suiTransferAmount-BZ0dnhzm.esm.js.map +0 -1
@@ -1,5 +1,8 @@
1
1
  import type { DynamicClient } from '@dynamic-labs-sdk/client';
2
2
  import { type TransferAmountParams } from '@dynamic-labs-sdk/client/core';
3
+ type SuiTransferAmountResult = {
4
+ transactionHash: string;
5
+ };
3
6
  /**
4
7
  * Transfers native SUI or a SUI token from one wallet to another.
5
8
  *
@@ -7,7 +10,6 @@ import { type TransferAmountParams } from '@dynamic-labs-sdk/client/core';
7
10
  * For tokens, fetches the user's coins of that type and splits from them.
8
11
  * @notInstrumented
9
12
  */
10
- export declare const suiTransferAmount: ({ amount, recipient, token, walletAccount }: TransferAmountParams, client: DynamicClient) => Promise<{
11
- transactionHash: string;
12
- }>;
13
+ export declare const suiTransferAmount: ({ amount, recipient, token, walletAccount }: TransferAmountParams, client: DynamicClient) => Promise<SuiTransferAmountResult>;
14
+ export {};
13
15
  //# sourceMappingURL=suiTransferAmount.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"suiTransferAmount.d.ts","sourceRoot":"","sources":["../../../src/utils/suiTransferAmount/suiTransferAmount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,+BAA+B,CAAC;AASvC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,gDACiB,oBAAoB,UACzD,aAAa,KACpB,OAAO,CAAC;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,CA4CrC,CAAC"}
1
+ {"version":3,"file":"suiTransferAmount.d.ts","sourceRoot":"","sources":["../../../src/utils/suiTransferAmount/suiTransferAmount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,+BAA+B,CAAC;AASvC,KAAK,uBAAuB,GAAG;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,gDACiB,oBAAoB,UACzD,aAAa,KACpB,OAAO,CAAC,uBAAuB,CA4CjC,CAAC"}
package/dist/waas.cjs CHANGED
@@ -1,5 +1,5 @@
1
- const require_suiTransferAmount = require('./suiTransferAmount-6SgyhsN8.cjs');
2
- const require_addWaasSuiExtension = require('./addWaasSuiExtension-DtkMzhAT.cjs');
1
+ const require_suiTransferAmount = require('./suiTransferAmount-BDYOogY-.cjs');
2
+ const require_addWaasSuiExtension = require('./addWaasSuiExtension-CJkrE3u_.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 { d as version, u as name } from "./suiTransferAmount-BZ0dnhzm.esm.js";
2
- import { t as addWaasSuiExtension } from "./addWaasSuiExtension-BQNXrF0f.esm.js";
1
+ import { d as version, u as name } from "./suiTransferAmount-DXvGs2l_.esm.js";
2
+ import { t as addWaasSuiExtension } from "./addWaasSuiExtension-D_wgkS_A.esm.js";
3
3
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
4
4
 
5
5
  //#region src/exports/waas.ts
@@ -1 +1 @@
1
- {"version":3,"file":"addSuiWalletStandardExtension.d.ts","sourceRoot":"","sources":["../../../src/walletStandard/addSuiWalletStandardExtension/addSuiWalletStandardExtension.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,iCAAiC,sBAAsB,CAAC;AAWrE;;;;;;;;;GASG;AACH,eAAO,MAAM,6BAA6B,iEAEvC,YAsEF,CAAC"}
1
+ {"version":3,"file":"addSuiWalletStandardExtension.d.ts","sourceRoot":"","sources":["../../../src/walletStandard/addSuiWalletStandardExtension/addSuiWalletStandardExtension.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,iCAAiC,sBAAsB,CAAC;AAQrE;;;;;;;;;GASG;AACH,eAAO,MAAM,6BAA6B,iEAEvC,YA8DF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"createWalletProviderFromSuiStandardWallet.d.ts","sourceRoot":"","sources":["../../../../src/walletStandard/utils/createWalletProviderFromSuiStandardWallet/createWalletProviderFromSuiStandardWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,0BAA0B,CAAC;AAWlC,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAK1E,KAAK,+CAA+C,GAAG;IACrD,aAAa,EAAE,aAAa,CAAC;IAC7B,oBAAoB,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;CAC7D,CAAC;AAEF,uBAAuB;AACvB,eAAO,MAAM,yCAAyC,6CAGnD,+CAA+C,KAAG,iBAqVpD,CAAC"}
1
+ {"version":3,"file":"createWalletProviderFromSuiStandardWallet.d.ts","sourceRoot":"","sources":["../../../../src/walletStandard/utils/createWalletProviderFromSuiStandardWallet/createWalletProviderFromSuiStandardWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,0BAA0B,CAAC;AAWlC,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAK1E,KAAK,+CAA+C,GAAG;IACrD,aAAa,EAAE,aAAa,CAAC;IAC7B,oBAAoB,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;CAC7D,CAAC;AAEF,uBAAuB;AACvB,eAAO,MAAM,yCAAyC,6CAGnD,+CAA+C,KAAG,iBAyTpD,CAAC"}
@@ -1,5 +1,5 @@
1
- const require_suiTransferAmount = require('./suiTransferAmount-6SgyhsN8.cjs');
2
- const require_addSuiWalletStandardExtension = require('./addSuiWalletStandardExtension-Z8DM_vIL.cjs');
1
+ const require_suiTransferAmount = require('./suiTransferAmount-BDYOogY-.cjs');
2
+ const require_addSuiWalletStandardExtension = require('./addSuiWalletStandardExtension-DVmTGVzO.cjs');
3
3
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
4
4
 
5
5
  //#region src/exports/walletStandard.ts
@@ -1,5 +1,5 @@
1
- import { d as version, u as name } from "./suiTransferAmount-BZ0dnhzm.esm.js";
2
- import { t as addSuiWalletStandardExtension } from "./addSuiWalletStandardExtension-4da_E4Pk.esm.js";
1
+ import { d as version, u as name } from "./suiTransferAmount-DXvGs2l_.esm.js";
2
+ import { t as addSuiWalletStandardExtension } from "./addSuiWalletStandardExtension-C6NNoKpX.esm.js";
3
3
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
4
4
 
5
5
  //#region src/exports/walletStandard.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs-sdk/sui",
3
- "version": "1.29.0",
3
+ "version": "1.30.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.esm.js",
@@ -30,8 +30,8 @@
30
30
  "@dynamic-labs/sdk-api-core": "0.12.0",
31
31
  "@mysten/sui": "1.45.1",
32
32
  "@mysten/wallet-standard": "0.19.8",
33
- "@dynamic-labs-sdk/assert-package-version": "1.29.0",
34
- "@dynamic-labs-sdk/client": "1.29.0"
33
+ "@dynamic-labs-sdk/assert-package-version": "1.30.2",
34
+ "@dynamic-labs-sdk/client": "1.30.2"
35
35
  },
36
36
  "devDependencies": {
37
37
  "eventemitter3": "5.0.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"addSuiWalletStandardExtension-4da_E4Pk.esm.js","names":["connect: SuiWalletProvider['connect']","getActiveNetworkId: SuiWalletProvider['getActiveNetworkId']","getSuiClient: SuiWalletProvider['getSuiClient']","getConnectedAddresses: SuiWalletProvider['getConnectedAddresses']","signAndExecuteTransaction: SuiWalletProvider['signAndExecuteTransaction']","signAndExecuteTransactionBlock: SuiWalletProvider['signAndExecuteTransactionBlock']","signMessage: SuiWalletProvider['signMessage']","signTransaction: SuiWalletProvider['signTransaction']","signTransactionBlock: SuiWalletProvider['signTransactionBlock']","switchActiveNetwork: SuiWalletProvider['switchActiveNetwork']","destroy: SuiWalletProvider['destroy']","rotateUnderlyingWallet: SuiWalletProvider['rotateUnderlyingWallet']"],"sources":["../src/walletStandard/utils/createWalletProviderFromSuiStandardWallet/createWalletProviderFromSuiStandardWallet.ts","../src/walletStandard/addSuiWalletStandardExtension/addSuiWalletStandardExtension.ts"],"sourcesContent":["import {\n type DynamicClient,\n assertWalletAccountSigningAvailability,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { SuiClient } from '@mysten/sui/client';\nimport type {\n StandardEventsChangeProperties,\n SuiWalletFeatures,\n WalletWithFeatures,\n} from '@mysten/wallet-standard';\n\nimport type { SuiWalletProvider } from '../../../SuiWalletProvider.types';\nimport { suiConfirmTransaction } from '../../../utils/suiConfirmTransaction';\nimport { suiExecuteSwapTransaction } from '../../../utils/suiExecuteSwapTransaction';\nimport { suiTransferAmount } from '../../../utils/suiTransferAmount';\n\ntype CreateWalletProviderFromSuiStandardWalletParams = {\n dynamicClient: DynamicClient;\n walletStandardWallet: WalletWithFeatures<SuiWalletFeatures>;\n};\n\n/** @notInstrumented */\nexport const createWalletProviderFromSuiStandardWallet = ({\n dynamicClient,\n walletStandardWallet,\n}: CreateWalletProviderFromSuiStandardWalletParams): SuiWalletProvider => {\n // Mutable so rotateUnderlyingWallet can re-point the provider at a new wallet\n // object without recreating it. getFeatures() ensures every method reads from\n // the live wallet after a rotation.\n let currentWallet = walletStandardWallet;\n\n const getFeatures = () => currentWallet.features;\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain: 'SUI',\n displayName: walletStandardWallet.name,\n walletProviderType,\n });\n\n const runConnectFeature = async ({\n silent = false,\n }: {\n silent?: boolean;\n } = {}) => {\n const connectMethod = getFeatures()['standard:connect']?.connect;\n\n assertDefined(connectMethod, 'connect method not found in wallet features');\n\n const result = await connectMethod({ silent });\n\n return {\n addresses: result.accounts?.map((account) => ({\n address: account.address,\n publicKey: account.publicKey?.toString(),\n })),\n };\n };\n\n const connect: SuiWalletProvider['connect'] = async () => {\n const autoConnectedAccounts = currentWallet.accounts;\n\n if (autoConnectedAccounts?.length && autoConnectedAccounts[0].address) {\n return {\n addresses: [\n {\n address: autoConnectedAccounts[0].address,\n publicKey: autoConnectedAccounts[0].publicKey?.toString(),\n },\n ],\n };\n }\n\n return runConnectFeature();\n };\n\n const getActiveNetworkId: SuiWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n const getCurrentAccount = async () => {\n if (!isConnected()) {\n await runConnectFeature({ silent: true });\n }\n\n const account = currentWallet.accounts?.[0];\n\n assertDefined(account, 'No connected accounts found');\n\n return account;\n };\n\n const getSuiClient: SuiWalletProvider['getSuiClient'] = async ({\n walletAccount,\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 const client = new SuiClient({ url });\n return client;\n };\n\n const isConnected = (): boolean => {\n return currentWallet.accounts?.length > 0;\n };\n\n const getConnectedAddresses: SuiWalletProvider['getConnectedAddresses'] =\n async () => {\n if (!isConnected()) {\n await runConnectFeature({ silent: true });\n }\n\n return {\n addresses: currentWallet.accounts.map((account) => account.address),\n };\n };\n\n const signAndExecuteTransaction: SuiWalletProvider['signAndExecuteTransaction'] =\n async ({ transaction, walletAccount }) => {\n await assertWalletAccountSigningAvailability(\n {\n walletAccount,\n },\n dynamicClient\n );\n\n const signAndExecuteTransactionMethod =\n getFeatures()['sui:signAndExecuteTransaction']\n ?.signAndExecuteTransaction;\n\n assertDefined(\n signAndExecuteTransactionMethod,\n 'signAndExecuteTransaction method not found in wallet features'\n );\n\n const account = await getCurrentAccount();\n\n return signAndExecuteTransactionMethod({\n account,\n chain: account.chains[0],\n transaction,\n });\n };\n\n /* This method is deprecated, but still required by some wallets for backwards compatibility. */\n const signAndExecuteTransactionBlock: SuiWalletProvider['signAndExecuteTransactionBlock'] =\n async ({ options, requestType, transactionBlock, walletAccount }) => {\n await assertWalletAccountSigningAvailability(\n {\n walletAccount,\n },\n dynamicClient\n );\n\n const signAndExecuteTransactionBlockMethod =\n getFeatures()['sui:signAndExecuteTransactionBlock']\n ?.signAndExecuteTransactionBlock;\n\n assertDefined(\n signAndExecuteTransactionBlockMethod,\n 'signAndExecuteTransactionBlock method not found in wallet features'\n );\n\n const account = await getCurrentAccount();\n\n return signAndExecuteTransactionBlockMethod({\n account,\n chain: account.chains[0],\n options,\n requestType,\n transactionBlock,\n });\n };\n\n const signMessage: SuiWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n const signMessageMethod =\n getFeatures()['sui:signPersonalMessage']?.signPersonalMessage;\n\n assertDefined(\n signMessageMethod,\n 'signPersonalMessage method not found in wallet features'\n );\n\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n {\n walletAccount,\n },\n dynamicClient\n );\n\n const encodedMessage = new TextEncoder().encode(message);\n\n const account = await getCurrentAccount();\n\n const { signature } = await signMessageMethod({\n account,\n message: encodedMessage,\n });\n\n return { signature };\n };\n\n const signTransaction: SuiWalletProvider['signTransaction'] = async ({\n transaction,\n walletAccount,\n }) => {\n const signTransactionMethod =\n getFeatures()['sui:signTransaction']?.signTransaction;\n\n assertDefined(\n signTransactionMethod,\n 'signTransaction method not found in wallet features'\n );\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const account = await getCurrentAccount();\n\n return signTransactionMethod({\n account,\n chain: account.chains[0],\n transaction,\n });\n };\n\n /* This method is deprecated, but still required by some wallets for backwards compatibility. */\n const signTransactionBlock: SuiWalletProvider['signTransactionBlock'] =\n async ({ transactionBlock, walletAccount }) => {\n const signTransactionBlockMethod =\n getFeatures()['sui:signTransactionBlock']?.signTransactionBlock;\n\n assertDefined(\n signTransactionBlockMethod,\n 'signTransactionBlock method not found in wallet features'\n );\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const account = await getCurrentAccount();\n\n return signTransactionBlockMethod({\n account,\n chain: account.chains[0],\n transactionBlock,\n });\n };\n\n const switchActiveNetwork: SuiWalletProvider['switchActiveNetwork'] = async ({\n networkId,\n }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: dynamicClient,\n networkId,\n walletProviderKey: key,\n });\n\n // Subscribes to the current wallet's change events. Declared as a named\n // function so rotateUnderlyingWallet can re-run it against a new wallet object\n // via rewireEventListeners.\n const setupEventListeners = ({\n handleAccountsChanged,\n }: {\n handleAccountsChanged: (params: { addresses: string[] }) => void;\n }): VoidFunction => {\n const eventsFeature = getFeatures()['standard:events'];\n\n return eventsFeature.on(\n 'change',\n ({ accounts }: StandardEventsChangeProperties) => {\n handleAccountsChanged({\n addresses: accounts?.map((account) => account.address) ?? [],\n });\n }\n );\n };\n\n const { getEventEmitter, cleanupEventEmitter, rewireEventListeners } =\n createWalletProviderEventEmitter<VoidFunction>({\n removeEventListeners: ({ setupReturnValue }) => {\n assertDefined(setupReturnValue, 'Setup return value not defined');\n\n setupReturnValue();\n },\n\n setupEventListeners,\n\n supportedEvents: ['accountsChanged'],\n });\n\n const destroy: SuiWalletProvider['destroy'] = async () => {\n cleanupEventEmitter();\n try {\n await getFeatures()['standard:disconnect']?.disconnect();\n } catch {\n // Best-effort: wallet may already be disconnected\n }\n };\n\n // Re-points the provider at a new wallet object announced under the same key\n // (e.g. an extension reload). Keeping the same provider (and its event\n // emitter) means existing subscribers stay connected and the user's session\n // is preserved — unlike destroy, which disconnects.\n const rotateUnderlyingWallet: SuiWalletProvider['rotateUnderlyingWallet'] =\n ({ walletStandardWallet: nextWallet }) => {\n if (nextWallet === currentWallet) {\n return;\n }\n\n currentWallet = nextWallet;\n rewireEventListeners(setupEventListeners);\n };\n\n const walletProvider: SuiWalletProvider = {\n chain: 'SUI',\n confirmTransaction: (args) => suiConfirmTransaction(args, dynamicClient),\n connect,\n destroy,\n get events() {\n return getEventEmitter();\n },\n executeSwapTransaction: (args) =>\n suiExecuteSwapTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n getSuiClient,\n groupKey: formatWalletProviderGroupKey(walletStandardWallet.name),\n key,\n get metadata() {\n return {\n displayName: currentWallet.name,\n icon: currentWallet.icon,\n };\n },\n rotateUnderlyingWallet,\n signAndExecuteTransaction,\n signAndExecuteTransactionBlock,\n signMessage,\n signTransaction,\n signTransactionBlock,\n switchActiveNetwork,\n transferAmount: (args) => suiTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n\n return walletProvider;\n};\n","import {\n WalletProviderPriority,\n assertDefined,\n formatWalletProviderKey,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport type {\n SuiWalletFeatures,\n Wallet,\n WalletWithFeatures,\n} from '@mysten/wallet-standard';\nimport {\n getWallets,\n isWalletWithRequiredFeatureSet,\n} from '@mysten/wallet-standard';\n\nimport type { SuiWalletProvider } from '../../SuiWalletProvider.types';\nimport { registerSuiNetworkProviderBuilder } from '../../registerSuiNetworkProviderBuilder';\nimport { createWalletProviderFromSuiStandardWallet } from '../utils/createWalletProviderFromSuiStandardWallet';\n\nexport const SUI_WALLET_STANDARD_EXTENSION_KEY = 'suiWalletStandard';\n\nconst getSuiWallets = (wallets: readonly Wallet[]) =>\n wallets.filter((wallet) =>\n isWalletWithRequiredFeatureSet(wallet, [\n 'standard:events',\n 'standard:connect',\n 'sui:signPersonalMessage',\n ])\n ) as WalletWithFeatures<SuiWalletFeatures>[];\n\n/**\n * Adds the Sui Wallet Standard extension to the Dynamic client.\n *\n * This extension enables integration with wallets that implement the Sui Wallet Standard,\n * automatically detecting and 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 * @returns A function that removes the wallet-standard register listener when called.\n * @notInstrumented\n */\nexport const addSuiWalletStandardExtension = (\n client = getDefaultClient()\n): VoidFunction => {\n if (\n hasExtension({ extensionKey: SUI_WALLET_STANDARD_EXTENSION_KEY }, client)\n ) {\n return () => {\n // noop\n };\n }\n\n registerExtension(\n { extensionKey: SUI_WALLET_STANDARD_EXTENSION_KEY },\n client\n );\n\n registerSuiNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const getKeyForWallet = (wallet: Wallet) =>\n formatWalletProviderKey({\n chain: 'SUI',\n displayName: wallet.name,\n walletProviderType: WalletProviderEnum.BrowserExtension,\n });\n\n const registerSuiWallet = (\n walletStandardWallet: WalletWithFeatures<SuiWalletFeatures>\n ) => {\n const key = getKeyForWallet(walletStandardWallet);\n\n const existingProvider = walletProviderRegistry.getByKey(key) as\n | SuiWalletProvider\n | undefined;\n\n if (existingProvider) {\n assertDefined(\n existingProvider.rotateUnderlyingWallet,\n 'Sui wallet provider is missing rotateUnderlyingWallet'\n );\n existingProvider.rotateUnderlyingWallet({ walletStandardWallet });\n\n return;\n }\n\n const walletProvider = createWalletProviderFromSuiStandardWallet({\n dynamicClient: client,\n walletStandardWallet,\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,\n walletProvider,\n });\n };\n\n const wallets = getWallets();\n\n // Attach the register listener before reading the initial snapshot so any\n // synchronous registrations that happen while wallets are being enumerated\n // are not missed.\n const removeRegisterListener = wallets.on('register', (...registeredWallets) => {\n getSuiWallets(registeredWallets).forEach(registerSuiWallet);\n });\n\n getSuiWallets(wallets.get()).forEach(registerSuiWallet);\n\n // Wallet-standard unregister events are intentionally ignored: a\n // browser-extension wallet re-announces under the same key on reload, so the\n // provider is kept for the page session and rotated in place.\n return removeRegisterListener;\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"addSuiWalletStandardExtension-Z8DM_vIL.cjs","names":["WalletProviderEnum","connect: SuiWalletProvider['connect']","getActiveNetworkId: SuiWalletProvider['getActiveNetworkId']","getSuiClient: SuiWalletProvider['getSuiClient']","SuiClient","getConnectedAddresses: SuiWalletProvider['getConnectedAddresses']","signAndExecuteTransaction: SuiWalletProvider['signAndExecuteTransaction']","signAndExecuteTransactionBlock: SuiWalletProvider['signAndExecuteTransactionBlock']","signMessage: SuiWalletProvider['signMessage']","signTransaction: SuiWalletProvider['signTransaction']","signTransactionBlock: SuiWalletProvider['signTransactionBlock']","switchActiveNetwork: SuiWalletProvider['switchActiveNetwork']","destroy: SuiWalletProvider['destroy']","rotateUnderlyingWallet: SuiWalletProvider['rotateUnderlyingWallet']","suiConfirmTransaction","suiExecuteSwapTransaction","suiTransferAmount","WalletProviderEnum","WalletProviderPriority"],"sources":["../src/walletStandard/utils/createWalletProviderFromSuiStandardWallet/createWalletProviderFromSuiStandardWallet.ts","../src/walletStandard/addSuiWalletStandardExtension/addSuiWalletStandardExtension.ts"],"sourcesContent":["import {\n type DynamicClient,\n assertWalletAccountSigningAvailability,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { SuiClient } from '@mysten/sui/client';\nimport type {\n StandardEventsChangeProperties,\n SuiWalletFeatures,\n WalletWithFeatures,\n} from '@mysten/wallet-standard';\n\nimport type { SuiWalletProvider } from '../../../SuiWalletProvider.types';\nimport { suiConfirmTransaction } from '../../../utils/suiConfirmTransaction';\nimport { suiExecuteSwapTransaction } from '../../../utils/suiExecuteSwapTransaction';\nimport { suiTransferAmount } from '../../../utils/suiTransferAmount';\n\ntype CreateWalletProviderFromSuiStandardWalletParams = {\n dynamicClient: DynamicClient;\n walletStandardWallet: WalletWithFeatures<SuiWalletFeatures>;\n};\n\n/** @notInstrumented */\nexport const createWalletProviderFromSuiStandardWallet = ({\n dynamicClient,\n walletStandardWallet,\n}: CreateWalletProviderFromSuiStandardWalletParams): SuiWalletProvider => {\n // Mutable so rotateUnderlyingWallet can re-point the provider at a new wallet\n // object without recreating it. getFeatures() ensures every method reads from\n // the live wallet after a rotation.\n let currentWallet = walletStandardWallet;\n\n const getFeatures = () => currentWallet.features;\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain: 'SUI',\n displayName: walletStandardWallet.name,\n walletProviderType,\n });\n\n const runConnectFeature = async ({\n silent = false,\n }: {\n silent?: boolean;\n } = {}) => {\n const connectMethod = getFeatures()['standard:connect']?.connect;\n\n assertDefined(connectMethod, 'connect method not found in wallet features');\n\n const result = await connectMethod({ silent });\n\n return {\n addresses: result.accounts?.map((account) => ({\n address: account.address,\n publicKey: account.publicKey?.toString(),\n })),\n };\n };\n\n const connect: SuiWalletProvider['connect'] = async () => {\n const autoConnectedAccounts = currentWallet.accounts;\n\n if (autoConnectedAccounts?.length && autoConnectedAccounts[0].address) {\n return {\n addresses: [\n {\n address: autoConnectedAccounts[0].address,\n publicKey: autoConnectedAccounts[0].publicKey?.toString(),\n },\n ],\n };\n }\n\n return runConnectFeature();\n };\n\n const getActiveNetworkId: SuiWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n const getCurrentAccount = async () => {\n if (!isConnected()) {\n await runConnectFeature({ silent: true });\n }\n\n const account = currentWallet.accounts?.[0];\n\n assertDefined(account, 'No connected accounts found');\n\n return account;\n };\n\n const getSuiClient: SuiWalletProvider['getSuiClient'] = async ({\n walletAccount,\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 const client = new SuiClient({ url });\n return client;\n };\n\n const isConnected = (): boolean => {\n return currentWallet.accounts?.length > 0;\n };\n\n const getConnectedAddresses: SuiWalletProvider['getConnectedAddresses'] =\n async () => {\n if (!isConnected()) {\n await runConnectFeature({ silent: true });\n }\n\n return {\n addresses: currentWallet.accounts.map((account) => account.address),\n };\n };\n\n const signAndExecuteTransaction: SuiWalletProvider['signAndExecuteTransaction'] =\n async ({ transaction, walletAccount }) => {\n await assertWalletAccountSigningAvailability(\n {\n walletAccount,\n },\n dynamicClient\n );\n\n const signAndExecuteTransactionMethod =\n getFeatures()['sui:signAndExecuteTransaction']\n ?.signAndExecuteTransaction;\n\n assertDefined(\n signAndExecuteTransactionMethod,\n 'signAndExecuteTransaction method not found in wallet features'\n );\n\n const account = await getCurrentAccount();\n\n return signAndExecuteTransactionMethod({\n account,\n chain: account.chains[0],\n transaction,\n });\n };\n\n /* This method is deprecated, but still required by some wallets for backwards compatibility. */\n const signAndExecuteTransactionBlock: SuiWalletProvider['signAndExecuteTransactionBlock'] =\n async ({ options, requestType, transactionBlock, walletAccount }) => {\n await assertWalletAccountSigningAvailability(\n {\n walletAccount,\n },\n dynamicClient\n );\n\n const signAndExecuteTransactionBlockMethod =\n getFeatures()['sui:signAndExecuteTransactionBlock']\n ?.signAndExecuteTransactionBlock;\n\n assertDefined(\n signAndExecuteTransactionBlockMethod,\n 'signAndExecuteTransactionBlock method not found in wallet features'\n );\n\n const account = await getCurrentAccount();\n\n return signAndExecuteTransactionBlockMethod({\n account,\n chain: account.chains[0],\n options,\n requestType,\n transactionBlock,\n });\n };\n\n const signMessage: SuiWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n const signMessageMethod =\n getFeatures()['sui:signPersonalMessage']?.signPersonalMessage;\n\n assertDefined(\n signMessageMethod,\n 'signPersonalMessage method not found in wallet features'\n );\n\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n {\n walletAccount,\n },\n dynamicClient\n );\n\n const encodedMessage = new TextEncoder().encode(message);\n\n const account = await getCurrentAccount();\n\n const { signature } = await signMessageMethod({\n account,\n message: encodedMessage,\n });\n\n return { signature };\n };\n\n const signTransaction: SuiWalletProvider['signTransaction'] = async ({\n transaction,\n walletAccount,\n }) => {\n const signTransactionMethod =\n getFeatures()['sui:signTransaction']?.signTransaction;\n\n assertDefined(\n signTransactionMethod,\n 'signTransaction method not found in wallet features'\n );\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const account = await getCurrentAccount();\n\n return signTransactionMethod({\n account,\n chain: account.chains[0],\n transaction,\n });\n };\n\n /* This method is deprecated, but still required by some wallets for backwards compatibility. */\n const signTransactionBlock: SuiWalletProvider['signTransactionBlock'] =\n async ({ transactionBlock, walletAccount }) => {\n const signTransactionBlockMethod =\n getFeatures()['sui:signTransactionBlock']?.signTransactionBlock;\n\n assertDefined(\n signTransactionBlockMethod,\n 'signTransactionBlock method not found in wallet features'\n );\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const account = await getCurrentAccount();\n\n return signTransactionBlockMethod({\n account,\n chain: account.chains[0],\n transactionBlock,\n });\n };\n\n const switchActiveNetwork: SuiWalletProvider['switchActiveNetwork'] = async ({\n networkId,\n }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: dynamicClient,\n networkId,\n walletProviderKey: key,\n });\n\n // Subscribes to the current wallet's change events. Declared as a named\n // function so rotateUnderlyingWallet can re-run it against a new wallet object\n // via rewireEventListeners.\n const setupEventListeners = ({\n handleAccountsChanged,\n }: {\n handleAccountsChanged: (params: { addresses: string[] }) => void;\n }): VoidFunction => {\n const eventsFeature = getFeatures()['standard:events'];\n\n return eventsFeature.on(\n 'change',\n ({ accounts }: StandardEventsChangeProperties) => {\n handleAccountsChanged({\n addresses: accounts?.map((account) => account.address) ?? [],\n });\n }\n );\n };\n\n const { getEventEmitter, cleanupEventEmitter, rewireEventListeners } =\n createWalletProviderEventEmitter<VoidFunction>({\n removeEventListeners: ({ setupReturnValue }) => {\n assertDefined(setupReturnValue, 'Setup return value not defined');\n\n setupReturnValue();\n },\n\n setupEventListeners,\n\n supportedEvents: ['accountsChanged'],\n });\n\n const destroy: SuiWalletProvider['destroy'] = async () => {\n cleanupEventEmitter();\n try {\n await getFeatures()['standard:disconnect']?.disconnect();\n } catch {\n // Best-effort: wallet may already be disconnected\n }\n };\n\n // Re-points the provider at a new wallet object announced under the same key\n // (e.g. an extension reload). Keeping the same provider (and its event\n // emitter) means existing subscribers stay connected and the user's session\n // is preserved — unlike destroy, which disconnects.\n const rotateUnderlyingWallet: SuiWalletProvider['rotateUnderlyingWallet'] =\n ({ walletStandardWallet: nextWallet }) => {\n if (nextWallet === currentWallet) {\n return;\n }\n\n currentWallet = nextWallet;\n rewireEventListeners(setupEventListeners);\n };\n\n const walletProvider: SuiWalletProvider = {\n chain: 'SUI',\n confirmTransaction: (args) => suiConfirmTransaction(args, dynamicClient),\n connect,\n destroy,\n get events() {\n return getEventEmitter();\n },\n executeSwapTransaction: (args) =>\n suiExecuteSwapTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n getSuiClient,\n groupKey: formatWalletProviderGroupKey(walletStandardWallet.name),\n key,\n get metadata() {\n return {\n displayName: currentWallet.name,\n icon: currentWallet.icon,\n };\n },\n rotateUnderlyingWallet,\n signAndExecuteTransaction,\n signAndExecuteTransactionBlock,\n signMessage,\n signTransaction,\n signTransactionBlock,\n switchActiveNetwork,\n transferAmount: (args) => suiTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n\n return walletProvider;\n};\n","import {\n WalletProviderPriority,\n assertDefined,\n formatWalletProviderKey,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport type {\n SuiWalletFeatures,\n Wallet,\n WalletWithFeatures,\n} from '@mysten/wallet-standard';\nimport {\n getWallets,\n isWalletWithRequiredFeatureSet,\n} from '@mysten/wallet-standard';\n\nimport type { SuiWalletProvider } from '../../SuiWalletProvider.types';\nimport { registerSuiNetworkProviderBuilder } from '../../registerSuiNetworkProviderBuilder';\nimport { createWalletProviderFromSuiStandardWallet } from '../utils/createWalletProviderFromSuiStandardWallet';\n\nexport const SUI_WALLET_STANDARD_EXTENSION_KEY = 'suiWalletStandard';\n\nconst getSuiWallets = (wallets: readonly Wallet[]) =>\n wallets.filter((wallet) =>\n isWalletWithRequiredFeatureSet(wallet, [\n 'standard:events',\n 'standard:connect',\n 'sui:signPersonalMessage',\n ])\n ) as WalletWithFeatures<SuiWalletFeatures>[];\n\n/**\n * Adds the Sui Wallet Standard extension to the Dynamic client.\n *\n * This extension enables integration with wallets that implement the Sui Wallet Standard,\n * automatically detecting and 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 * @returns A function that removes the wallet-standard register listener when called.\n * @notInstrumented\n */\nexport const addSuiWalletStandardExtension = (\n client = getDefaultClient()\n): VoidFunction => {\n if (\n hasExtension({ extensionKey: SUI_WALLET_STANDARD_EXTENSION_KEY }, client)\n ) {\n return () => {\n // noop\n };\n }\n\n registerExtension(\n { extensionKey: SUI_WALLET_STANDARD_EXTENSION_KEY },\n client\n );\n\n registerSuiNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const getKeyForWallet = (wallet: Wallet) =>\n formatWalletProviderKey({\n chain: 'SUI',\n displayName: wallet.name,\n walletProviderType: WalletProviderEnum.BrowserExtension,\n });\n\n const registerSuiWallet = (\n walletStandardWallet: WalletWithFeatures<SuiWalletFeatures>\n ) => {\n const key = getKeyForWallet(walletStandardWallet);\n\n const existingProvider = walletProviderRegistry.getByKey(key) as\n | SuiWalletProvider\n | undefined;\n\n if (existingProvider) {\n assertDefined(\n existingProvider.rotateUnderlyingWallet,\n 'Sui wallet provider is missing rotateUnderlyingWallet'\n );\n existingProvider.rotateUnderlyingWallet({ walletStandardWallet });\n\n return;\n }\n\n const walletProvider = createWalletProviderFromSuiStandardWallet({\n dynamicClient: client,\n walletStandardWallet,\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,\n walletProvider,\n });\n };\n\n const wallets = getWallets();\n\n // Attach the register listener before reading the initial snapshot so any\n // synchronous registrations that happen while wallets are being enumerated\n // are not missed.\n const removeRegisterListener = wallets.on('register', (...registeredWallets) => {\n getSuiWallets(registeredWallets).forEach(registerSuiWallet);\n });\n\n getSuiWallets(wallets.get()).forEach(registerSuiWallet);\n\n // Wallet-standard unregister events are intentionally ignored: a\n // browser-extension wallet re-announces under the same key on reload, so the\n // provider is kept for the page session and rotated in place.\n return removeRegisterListener;\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"suiTransferAmount-6SgyhsN8.cjs","names":["SuiClient","MIST_PER_SUI","BaseError","InvalidParamError","InvalidParamError","Transaction","InvalidParamError","Transaction"],"sources":["../package.json","../src/utils/fetchSuiBalance/fetchSuiBalance.ts","../src/utils/createSuiNetworkProvider/createSuiNetworkProvider.ts","../src/registerSuiNetworkProviderBuilder/registerSuiNetworkProviderBuilder.ts","../src/errors/NotSuiProviderError/NotSuiProviderError.ts","../src/isSuiWalletProvider/isSuiWalletProvider.ts","../src/getSuiClient/getSuiClient.ts","../src/isSuiWalletAccount/isSuiWalletAccount.ts","../src/utils/suiConfirmTransaction/suiConfirmTransaction.ts","../src/utils/suiExecuteSwapTransaction/suiExecuteSwapTransaction.ts","../src/signAndExecuteTransaction/signAndExecuteTransaction.ts","../src/utils/suiTransferAmount/suiTransferAmount.ts"],"sourcesContent":["","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { SuiClient } from '@mysten/sui/client';\nimport { MIST_PER_SUI } from '@mysten/sui/utils';\n\n/** @notInstrumented */\nexport const fetchSuiBalance = async ({\n address,\n networkData,\n}: {\n address: string;\n networkData: NetworkData;\n}): Promise<string | null> => {\n // Create a SuiClient using the provided RPC URL.\n const suiClient = new SuiClient({\n url: networkData.rpcUrls.http[0],\n });\n\n const balanceInMist = await suiClient.getBalance({\n owner: address,\n });\n\n // Balance comes back as MIST, 1 SUI = 1e9 MIST\n const balance = Number(balanceInMist.totalBalance) / Number(MIST_PER_SUI);\n\n if (Number.isNaN(balance)) {\n return null;\n }\n\n return balance.toString();\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { SuiNetworkProvider } from '../../SuiNetworkProvider.types';\nimport { fetchSuiBalance } from '../fetchSuiBalance';\n\n/** @notInstrumented */\nexport const createSuiNetworkProvider = (\n networkData: NetworkData\n): SuiNetworkProvider => ({\n ...createBaseNetworkProvider('SUI', networkData),\n getBalance: async ({ address }) => ({\n balance: await fetchSuiBalance({\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 { createSuiNetworkProvider } from '../utils/createSuiNetworkProvider';\n\n/** @notInstrumented */\nexport const registerSuiNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n /**\n * If the Sui network provider builder is already registered, return.\n */\n if (networkProviderBuilderRegistry.get().get('SUI')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createSuiNetworkProvider,\n chain: 'SUI',\n });\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotSuiProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_sui_provider_error',\n docsUrl: null,\n name: 'NotSuiProviderError',\n shortMessage: 'Provider is not a Sui wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { SuiWalletProvider } from '../SuiWalletProvider.types';\n\n/** @notInstrumented */\nexport const isSuiWalletProvider = (\n provider: WalletProvider\n): provider is SuiWalletProvider => {\n return provider.chain === 'SUI';\n};\n","import {\n getDefaultClient,\n getWalletProviderFromWalletAccount,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { NotSuiProviderError } from '../errors/NotSuiProviderError';\nimport { isSuiWalletProvider } from '../isSuiWalletProvider';\nimport type { SuiWalletAccount } from '../SuiWalletAccount.types';\n\ntype GetSuiClientParams = {\n walletAccount: SuiWalletAccount;\n};\n\n/**\n * Retrieves a SuiClient from a wallet account.\n *\n * @example\n * ```ts\n * const suiClient = await getSuiClient({ walletAccount: suiAccount });\n * ```\n *\n * @param params.walletAccount - The wallet account to get the SuiClient for.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns A promise that resolves to a SuiClient instance.\n * @throws {NotSuiProviderError} If the wallet account's provider is not a SUI provider.\n * @see signAndExecuteTransaction\n * @see isSuiWalletAccount\n * @notInstrumented\n */\nexport const getSuiClient = async (\n { walletAccount }: GetSuiClientParams,\n client = getDefaultClient()\n) => {\n const provider = getWalletProviderFromWalletAccount(\n {\n walletAccount,\n },\n client\n );\n\n if (!isSuiWalletProvider(provider)) {\n throw new NotSuiProviderError({ providerKey: provider.key });\n }\n\n return provider.getSuiClient({ walletAccount });\n};\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { SuiWalletAccount } from '../SuiWalletAccount.types';\n\n/**\n * Type guard function to check if a wallet account is a Sui wallet account.\n *\n * @example\n * ```ts\n * const accounts = getWalletAccounts();\n * const suiAccounts = accounts.filter(isSuiWalletAccount);\n * ```\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Sui wallet account, false otherwise.\n * @see isSuiNetworkProvider\n * @see addSuiExtension\n * @notInstrumented\n */\nexport const isSuiWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is SuiWalletAccount => walletAccount.chain === 'SUI';\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';\n\nimport { getSuiClient } from '../../getSuiClient';\nimport { isSuiWalletAccount } from '../../isSuiWalletAccount';\n\n/**\n * Waits for a SUI transaction to be confirmed on-chain.\n *\n * @param params.transactionHash - The transaction digest to wait for.\n * @param params.walletAccount - The wallet account that submitted the transaction.\n * @param client - The Dynamic client instance.\n * @notInstrumented\n */\nexport const suiConfirmTransaction = async (\n { transactionHash, walletAccount }: ConfirmTransactionParams,\n client: DynamicClient\n): Promise<void> => {\n if (!isSuiWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not a SUI wallet account');\n }\n\n const suiClient = await getSuiClient({ walletAccount }, client);\n\n await suiClient.waitForTransaction({ digest: transactionHash });\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';\nimport { Transaction } from '@mysten/sui/transactions';\n\nimport { isSuiWalletAccount } from '../../isSuiWalletAccount';\nimport { isSuiWalletProvider } from '../../isSuiWalletProvider';\n\n/**\n * Executes a Sui checkout transaction by deserializing the base64-encoded\n * BCS transaction and sending it via the wallet provider's signAndExecuteTransaction.\n *\n * 1. Validates that the wallet account is a Sui wallet account\n * 2. Extracts and validates the serialized transaction from the signing payload\n * 3. Deserializes the transaction using Transaction.from()\n * 4. Signs and executes via the Sui wallet provider\n *\n * @param params.signingPayload - The signing payload containing `serializedTransaction`.\n * @param params.walletAccount - The wallet account used to sign and execute the transaction.\n * @param params.onStepChange - Optional callback invoked with `'transaction'` when the execution step begins.\n * @param client - The Dynamic client instance.\n * @returns The transaction hash (digest).\n * @notInstrumented\n */\nexport const suiExecuteSwapTransaction = async (\n { onStepChange, signingPayload, walletAccount }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\n const walletProvider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (\n !isSuiWalletAccount(walletAccount) ||\n !isSuiWalletProvider(walletProvider)\n ) {\n throw new InvalidParamError('Wallet account is not a Sui 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 // Backend sends transaction-kind bytes; wallet supplies gas at signing time.\n const transaction = Transaction.fromKind(serializedTransactionData);\n transaction.setSender(walletAccount.address);\n\n onStepChange?.('transaction');\n\n const result = await walletProvider.signAndExecuteTransaction({\n transaction,\n walletAccount,\n });\n\n return { transactionHash: result.digest };\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\nimport type { Transaction } from '@mysten/sui/transactions';\n\nimport { NotSuiProviderError } from '../errors/NotSuiProviderError';\nimport { isSuiWalletProvider } from '../isSuiWalletProvider';\nimport type { SuiWalletAccount } from '../SuiWalletAccount.types';\nimport type { SuiSignAndExecuteTransactionResult } from '../SuiWalletProvider.types';\n\ntype SignAndExecuteTransactionParams = {\n transaction: Transaction;\n walletAccount: SuiWalletAccount;\n};\n\n/**\n * Signs and executes a Sui transaction.\n *\n * @example\n * ```ts\n * const result = await signAndExecuteTransaction({\n * walletAccount: suiAccount,\n * transaction: suiTransaction,\n * });\n * ```\n *\n * @param params.transaction - The transaction to sign and execute.\n * @param params.walletAccount - The wallet account to sign the transaction with.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An object containing the signature and transaction bytes.\n * @throws {NotSuiProviderError} If the wallet account's provider is not a SUI provider.\n * @see signTransaction\n * @see getSuiClient\n * @notInstrumented\n */\nexport const signAndExecuteTransaction = async (\n { walletAccount, transaction }: SignAndExecuteTransactionParams,\n client = getDefaultClient()\n): Promise<SuiSignAndExecuteTransactionResult> => {\n const provider = getWalletProviderFromWalletAccount(\n {\n walletAccount,\n },\n client\n );\n\n if (!isSuiWalletProvider(provider)) {\n throw new NotSuiProviderError({ providerKey: provider.key });\n }\n\n transaction.setSender(walletAccount.address);\n\n return provider.signAndExecuteTransaction({ transaction, walletAccount });\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport {\n type TransferAmountParams,\n parseAmountToSmallestUnit,\n} from '@dynamic-labs-sdk/client/core';\nimport { Transaction } from '@mysten/sui/transactions';\n\nimport { getSuiClient } from '../../getSuiClient';\nimport { isSuiWalletAccount } from '../../isSuiWalletAccount';\nimport { signAndExecuteTransaction } from '../../signAndExecuteTransaction';\n\nconst SUI_DECIMALS = 9;\n\n/**\n * Transfers native SUI or a SUI token from one wallet to another.\n *\n * For native SUI, converts the human-readable amount string to MIST (9 decimals).\n * For tokens, fetches the user's coins of that type and splits from them.\n * @notInstrumented\n */\nexport const suiTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isSuiWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not a SUI wallet account');\n }\n\n const transaction = new Transaction();\n\n if (token?.address) {\n const suiClient = await getSuiClient({ walletAccount }, client);\n\n const { data: coins } = await suiClient.getCoins({\n coinType: token.address,\n owner: walletAccount.address,\n });\n\n if (coins.length === 0) {\n throw new InvalidParamError('Token not found');\n }\n\n const smallestUnit = parseAmountToSmallestUnit({\n amount,\n decimals: token.decimals,\n });\n\n const [coin] = transaction.splitCoins(coins[0].coinObjectId, [\n smallestUnit,\n ]);\n transaction.transferObjects([coin], recipient);\n } else {\n const mist = parseAmountToSmallestUnit({\n amount,\n decimals: SUI_DECIMALS,\n });\n\n const [coin] = transaction.splitCoins(transaction.gas, [mist]);\n transaction.transferObjects([coin], recipient);\n }\n\n const result = await signAndExecuteTransaction(\n { transaction, walletAccount },\n client\n );\n\n return { transactionHash: result.digest };\n};\n"],"mappings":";;;;;;;;;;;;;ACKA,MAAa,kBAAkB,OAAO,EACpC,SACA,kBAI4B;CAM5B,MAAM,gBAAgB,MAJJ,IAAIA,6BAAU,EAC9B,KAAK,YAAY,QAAQ,KAAK,IAC/B,CAAC,CAEoC,WAAW,EAC/C,OAAO,SACR,CAAC;CAGF,MAAM,UAAU,OAAO,cAAc,aAAa,GAAG,OAAOC,+BAAa;AAEzE,KAAI,OAAO,MAAM,QAAQ,CACvB,QAAO;AAGT,QAAO,QAAQ,UAAU;;;;;;ACrB3B,MAAa,4BACX,iBACwB;CACxB,gEAA6B,OAAO,YAAY;CAChD,YAAY,OAAO,EAAE,eAAe,EAClC,SAAS,MAAM,gBAAgB;EAC7B;EACA;EACD,CAAC,EACH;CACF;;;;;ACXD,MAAa,qCACX,WACS;CACT,MAAM,sGAC8B,OAAO;;;;AAK3C,KAAI,+BAA+B,KAAK,CAAC,IAAI,MAAM,CACjD;AAGF,gCAA+B,SAAS;EACtC,SAAS;EACT,OAAO;EACR,CAAC;;;;;ACpBJ,IAAa,sBAAb,cAAyCC,mCAAU;CACjD,AAAgB;CAEhB,YAAY,QAAiC;AAC3C,QAAM;GACJ,OAAO;GACP,MAAM;GACN,SAAS;GACT,MAAM;GACN,cAAc;GACf,CAAC;AAEF,OAAK,cAAc,OAAO;;;;;;;ACT9B,MAAa,uBACX,aACkC;AAClC,QAAO,SAAS,UAAU;;;;;;;;;;;;;;;;;;;;;ACqB5B,MAAa,eAAe,OAC1B,EAAE,iBACF,8DAA2B,KACxB;CACH,MAAM,iFACJ,EACE,eACD,EACD,OACD;AAED,KAAI,CAAC,oBAAoB,SAAS,CAChC,OAAM,IAAI,oBAAoB,EAAE,aAAa,SAAS,KAAK,CAAC;AAG9D,QAAO,SAAS,aAAa,EAAE,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;ACzBjD,MAAa,sBACX,kBACsC,cAAc,UAAU;;;;;;;;;;;;ACNhE,MAAa,wBAAwB,OACnC,EAAE,iBAAiB,iBACnB,WACkB;AAClB,KAAI,CAAC,mBAAmB,cAAc,CACpC,OAAM,IAAIC,2CAAkB,6CAA6C;AAK3E,QAFkB,MAAM,aAAa,EAAE,eAAe,EAAE,OAAO,EAE/C,mBAAmB,EAAE,QAAQ,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;ACKjE,MAAa,4BAA4B,OACvC,EAAE,cAAc,gBAAgB,iBAChC,WAC0C;CAC1C,MAAM,uFACJ,EAAE,eAAe,EACjB,OACD;AAED,KACE,CAAC,mBAAmB,cAAc,IAClC,CAAC,oBAAoB,eAAe,CAEpC,OAAM,IAAIC,2CAAkB,6CAA6C;CAG3E,MAAM,4BAA4B,eAAe;AAEjD,KAAI,CAAC,0BACH,OAAM,IAAIA,2CACR,yDACD;CAIH,MAAM,cAAcC,qCAAY,SAAS,0BAA0B;AACnE,aAAY,UAAU,cAAc,QAAQ;AAE5C,gBAAe,cAAc;AAO7B,QAAO,EAAE,kBALM,MAAM,eAAe,0BAA0B;EAC5D;EACA;EACD,CAAC,EAE+B,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;AC/B3C,MAAa,4BAA4B,OACvC,EAAE,eAAe,eACjB,yDAA2B,KACqB;CAChD,MAAM,iFACJ,EACE,eACD,EACD,OACD;AAED,KAAI,CAAC,oBAAoB,SAAS,CAChC,OAAM,IAAI,oBAAoB,EAAE,aAAa,SAAS,KAAK,CAAC;AAG9D,aAAY,UAAU,cAAc,QAAQ;AAE5C,QAAO,SAAS,0BAA0B;EAAE;EAAa;EAAe,CAAC;;;;;ACvC3E,MAAM,eAAe;;;;;;;;AASrB,MAAa,oBAAoB,OAC/B,EAAE,QAAQ,WAAW,OAAO,iBAC5B,WACyC;AACzC,KAAI,CAAC,mBAAmB,cAAc,CACpC,OAAM,IAAIC,2CAAkB,6CAA6C;CAG3E,MAAM,cAAc,IAAIC,sCAAa;AAErC,KAAI,OAAO,SAAS;EAGlB,MAAM,EAAE,MAAM,UAAU,OAFN,MAAM,aAAa,EAAE,eAAe,EAAE,OAAO,EAEvB,SAAS;GAC/C,UAAU,MAAM;GAChB,OAAO,cAAc;GACtB,CAAC;AAEF,MAAI,MAAM,WAAW,EACnB,OAAM,IAAID,2CAAkB,kBAAkB;EAGhD,MAAM,4EAAyC;GAC7C;GACA,UAAU,MAAM;GACjB,CAAC;EAEF,MAAM,CAAC,QAAQ,YAAY,WAAW,MAAM,GAAG,cAAc,CAC3D,aACD,CAAC;AACF,cAAY,gBAAgB,CAAC,KAAK,EAAE,UAAU;QACzC;EACL,MAAM,oEAAiC;GACrC;GACA,UAAU;GACX,CAAC;EAEF,MAAM,CAAC,QAAQ,YAAY,WAAW,YAAY,KAAK,CAAC,KAAK,CAAC;AAC9D,cAAY,gBAAgB,CAAC,KAAK,EAAE,UAAU;;AAQhD,QAAO,EAAE,kBALM,MAAM,0BACnB;EAAE;EAAa;EAAe,EAC9B,OACD,EAEgC,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"suiTransferAmount-BZ0dnhzm.esm.js","names":["getDefaultClient"],"sources":["../package.json","../src/utils/fetchSuiBalance/fetchSuiBalance.ts","../src/utils/createSuiNetworkProvider/createSuiNetworkProvider.ts","../src/registerSuiNetworkProviderBuilder/registerSuiNetworkProviderBuilder.ts","../src/errors/NotSuiProviderError/NotSuiProviderError.ts","../src/isSuiWalletProvider/isSuiWalletProvider.ts","../src/getSuiClient/getSuiClient.ts","../src/isSuiWalletAccount/isSuiWalletAccount.ts","../src/utils/suiConfirmTransaction/suiConfirmTransaction.ts","../src/utils/suiExecuteSwapTransaction/suiExecuteSwapTransaction.ts","../src/signAndExecuteTransaction/signAndExecuteTransaction.ts","../src/utils/suiTransferAmount/suiTransferAmount.ts"],"sourcesContent":["","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { SuiClient } from '@mysten/sui/client';\nimport { MIST_PER_SUI } from '@mysten/sui/utils';\n\n/** @notInstrumented */\nexport const fetchSuiBalance = async ({\n address,\n networkData,\n}: {\n address: string;\n networkData: NetworkData;\n}): Promise<string | null> => {\n // Create a SuiClient using the provided RPC URL.\n const suiClient = new SuiClient({\n url: networkData.rpcUrls.http[0],\n });\n\n const balanceInMist = await suiClient.getBalance({\n owner: address,\n });\n\n // Balance comes back as MIST, 1 SUI = 1e9 MIST\n const balance = Number(balanceInMist.totalBalance) / Number(MIST_PER_SUI);\n\n if (Number.isNaN(balance)) {\n return null;\n }\n\n return balance.toString();\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { SuiNetworkProvider } from '../../SuiNetworkProvider.types';\nimport { fetchSuiBalance } from '../fetchSuiBalance';\n\n/** @notInstrumented */\nexport const createSuiNetworkProvider = (\n networkData: NetworkData\n): SuiNetworkProvider => ({\n ...createBaseNetworkProvider('SUI', networkData),\n getBalance: async ({ address }) => ({\n balance: await fetchSuiBalance({\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 { createSuiNetworkProvider } from '../utils/createSuiNetworkProvider';\n\n/** @notInstrumented */\nexport const registerSuiNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n /**\n * If the Sui network provider builder is already registered, return.\n */\n if (networkProviderBuilderRegistry.get().get('SUI')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createSuiNetworkProvider,\n chain: 'SUI',\n });\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotSuiProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_sui_provider_error',\n docsUrl: null,\n name: 'NotSuiProviderError',\n shortMessage: 'Provider is not a Sui wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { SuiWalletProvider } from '../SuiWalletProvider.types';\n\n/** @notInstrumented */\nexport const isSuiWalletProvider = (\n provider: WalletProvider\n): provider is SuiWalletProvider => {\n return provider.chain === 'SUI';\n};\n","import {\n getDefaultClient,\n getWalletProviderFromWalletAccount,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { NotSuiProviderError } from '../errors/NotSuiProviderError';\nimport { isSuiWalletProvider } from '../isSuiWalletProvider';\nimport type { SuiWalletAccount } from '../SuiWalletAccount.types';\n\ntype GetSuiClientParams = {\n walletAccount: SuiWalletAccount;\n};\n\n/**\n * Retrieves a SuiClient from a wallet account.\n *\n * @example\n * ```ts\n * const suiClient = await getSuiClient({ walletAccount: suiAccount });\n * ```\n *\n * @param params.walletAccount - The wallet account to get the SuiClient for.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns A promise that resolves to a SuiClient instance.\n * @throws {NotSuiProviderError} If the wallet account's provider is not a SUI provider.\n * @see signAndExecuteTransaction\n * @see isSuiWalletAccount\n * @notInstrumented\n */\nexport const getSuiClient = async (\n { walletAccount }: GetSuiClientParams,\n client = getDefaultClient()\n) => {\n const provider = getWalletProviderFromWalletAccount(\n {\n walletAccount,\n },\n client\n );\n\n if (!isSuiWalletProvider(provider)) {\n throw new NotSuiProviderError({ providerKey: provider.key });\n }\n\n return provider.getSuiClient({ walletAccount });\n};\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { SuiWalletAccount } from '../SuiWalletAccount.types';\n\n/**\n * Type guard function to check if a wallet account is a Sui wallet account.\n *\n * @example\n * ```ts\n * const accounts = getWalletAccounts();\n * const suiAccounts = accounts.filter(isSuiWalletAccount);\n * ```\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Sui wallet account, false otherwise.\n * @see isSuiNetworkProvider\n * @see addSuiExtension\n * @notInstrumented\n */\nexport const isSuiWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is SuiWalletAccount => walletAccount.chain === 'SUI';\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';\n\nimport { getSuiClient } from '../../getSuiClient';\nimport { isSuiWalletAccount } from '../../isSuiWalletAccount';\n\n/**\n * Waits for a SUI transaction to be confirmed on-chain.\n *\n * @param params.transactionHash - The transaction digest to wait for.\n * @param params.walletAccount - The wallet account that submitted the transaction.\n * @param client - The Dynamic client instance.\n * @notInstrumented\n */\nexport const suiConfirmTransaction = async (\n { transactionHash, walletAccount }: ConfirmTransactionParams,\n client: DynamicClient\n): Promise<void> => {\n if (!isSuiWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not a SUI wallet account');\n }\n\n const suiClient = await getSuiClient({ walletAccount }, client);\n\n await suiClient.waitForTransaction({ digest: transactionHash });\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';\nimport { Transaction } from '@mysten/sui/transactions';\n\nimport { isSuiWalletAccount } from '../../isSuiWalletAccount';\nimport { isSuiWalletProvider } from '../../isSuiWalletProvider';\n\n/**\n * Executes a Sui checkout transaction by deserializing the base64-encoded\n * BCS transaction and sending it via the wallet provider's signAndExecuteTransaction.\n *\n * 1. Validates that the wallet account is a Sui wallet account\n * 2. Extracts and validates the serialized transaction from the signing payload\n * 3. Deserializes the transaction using Transaction.from()\n * 4. Signs and executes via the Sui wallet provider\n *\n * @param params.signingPayload - The signing payload containing `serializedTransaction`.\n * @param params.walletAccount - The wallet account used to sign and execute the transaction.\n * @param params.onStepChange - Optional callback invoked with `'transaction'` when the execution step begins.\n * @param client - The Dynamic client instance.\n * @returns The transaction hash (digest).\n * @notInstrumented\n */\nexport const suiExecuteSwapTransaction = async (\n { onStepChange, signingPayload, walletAccount }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\n const walletProvider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (\n !isSuiWalletAccount(walletAccount) ||\n !isSuiWalletProvider(walletProvider)\n ) {\n throw new InvalidParamError('Wallet account is not a Sui 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 // Backend sends transaction-kind bytes; wallet supplies gas at signing time.\n const transaction = Transaction.fromKind(serializedTransactionData);\n transaction.setSender(walletAccount.address);\n\n onStepChange?.('transaction');\n\n const result = await walletProvider.signAndExecuteTransaction({\n transaction,\n walletAccount,\n });\n\n return { transactionHash: result.digest };\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\nimport type { Transaction } from '@mysten/sui/transactions';\n\nimport { NotSuiProviderError } from '../errors/NotSuiProviderError';\nimport { isSuiWalletProvider } from '../isSuiWalletProvider';\nimport type { SuiWalletAccount } from '../SuiWalletAccount.types';\nimport type { SuiSignAndExecuteTransactionResult } from '../SuiWalletProvider.types';\n\ntype SignAndExecuteTransactionParams = {\n transaction: Transaction;\n walletAccount: SuiWalletAccount;\n};\n\n/**\n * Signs and executes a Sui transaction.\n *\n * @example\n * ```ts\n * const result = await signAndExecuteTransaction({\n * walletAccount: suiAccount,\n * transaction: suiTransaction,\n * });\n * ```\n *\n * @param params.transaction - The transaction to sign and execute.\n * @param params.walletAccount - The wallet account to sign the transaction with.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An object containing the signature and transaction bytes.\n * @throws {NotSuiProviderError} If the wallet account's provider is not a SUI provider.\n * @see signTransaction\n * @see getSuiClient\n * @notInstrumented\n */\nexport const signAndExecuteTransaction = async (\n { walletAccount, transaction }: SignAndExecuteTransactionParams,\n client = getDefaultClient()\n): Promise<SuiSignAndExecuteTransactionResult> => {\n const provider = getWalletProviderFromWalletAccount(\n {\n walletAccount,\n },\n client\n );\n\n if (!isSuiWalletProvider(provider)) {\n throw new NotSuiProviderError({ providerKey: provider.key });\n }\n\n transaction.setSender(walletAccount.address);\n\n return provider.signAndExecuteTransaction({ transaction, walletAccount });\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport {\n type TransferAmountParams,\n parseAmountToSmallestUnit,\n} from '@dynamic-labs-sdk/client/core';\nimport { Transaction } from '@mysten/sui/transactions';\n\nimport { getSuiClient } from '../../getSuiClient';\nimport { isSuiWalletAccount } from '../../isSuiWalletAccount';\nimport { signAndExecuteTransaction } from '../../signAndExecuteTransaction';\n\nconst SUI_DECIMALS = 9;\n\n/**\n * Transfers native SUI or a SUI token from one wallet to another.\n *\n * For native SUI, converts the human-readable amount string to MIST (9 decimals).\n * For tokens, fetches the user's coins of that type and splits from them.\n * @notInstrumented\n */\nexport const suiTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isSuiWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not a SUI wallet account');\n }\n\n const transaction = new Transaction();\n\n if (token?.address) {\n const suiClient = await getSuiClient({ walletAccount }, client);\n\n const { data: coins } = await suiClient.getCoins({\n coinType: token.address,\n owner: walletAccount.address,\n });\n\n if (coins.length === 0) {\n throw new InvalidParamError('Token not found');\n }\n\n const smallestUnit = parseAmountToSmallestUnit({\n amount,\n decimals: token.decimals,\n });\n\n const [coin] = transaction.splitCoins(coins[0].coinObjectId, [\n smallestUnit,\n ]);\n transaction.transferObjects([coin], recipient);\n } else {\n const mist = parseAmountToSmallestUnit({\n amount,\n decimals: SUI_DECIMALS,\n });\n\n const [coin] = transaction.splitCoins(transaction.gas, [mist]);\n transaction.transferObjects([coin], recipient);\n }\n\n const result = await signAndExecuteTransaction(\n { transaction, walletAccount },\n client\n );\n\n return { transactionHash: result.digest };\n};\n"],"mappings":"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"}