@dynamic-labs-sdk/sui 1.27.2 → 1.29.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 (27) hide show
  1. package/dist/SuiWalletProvider.types.d.ts +9 -1
  2. package/dist/SuiWalletProvider.types.d.ts.map +1 -1
  3. package/dist/{addSuiWalletStandardExtension-qz95_2mf.esm.js → addSuiWalletStandardExtension-4da_E4Pk.esm.js} +59 -30
  4. package/dist/addSuiWalletStandardExtension-4da_E4Pk.esm.js.map +1 -0
  5. package/dist/{addSuiWalletStandardExtension-DLZLdRCj.cjs → addSuiWalletStandardExtension-Z8DM_vIL.cjs} +59 -30
  6. package/dist/addSuiWalletStandardExtension-Z8DM_vIL.cjs.map +1 -0
  7. package/dist/{addWaasSuiExtension-DvqF4NMC.esm.js → addWaasSuiExtension-BQNXrF0f.esm.js} +2 -2
  8. package/dist/{addWaasSuiExtension-DvqF4NMC.esm.js.map → addWaasSuiExtension-BQNXrF0f.esm.js.map} +1 -1
  9. package/dist/{addWaasSuiExtension-DClGjifO.cjs → addWaasSuiExtension-DtkMzhAT.cjs} +2 -2
  10. package/dist/{addWaasSuiExtension-DClGjifO.cjs.map → addWaasSuiExtension-DtkMzhAT.cjs.map} +1 -1
  11. package/dist/index.cjs +3 -3
  12. package/dist/index.esm.js +3 -3
  13. package/dist/{suiTransferAmount-D0J9llxd.cjs → suiTransferAmount-6SgyhsN8.cjs} +2 -2
  14. package/dist/{suiTransferAmount-D0J9llxd.cjs.map → suiTransferAmount-6SgyhsN8.cjs.map} +1 -1
  15. package/dist/{suiTransferAmount-B8YHx0ao.esm.js → suiTransferAmount-BZ0dnhzm.esm.js} +2 -2
  16. package/dist/{suiTransferAmount-B8YHx0ao.esm.js.map → suiTransferAmount-BZ0dnhzm.esm.js.map} +1 -1
  17. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  18. package/dist/waas.cjs +2 -2
  19. package/dist/waas.esm.js +2 -2
  20. package/dist/walletStandard/addSuiWalletStandardExtension/addSuiWalletStandardExtension.d.ts +3 -2
  21. package/dist/walletStandard/addSuiWalletStandardExtension/addSuiWalletStandardExtension.d.ts.map +1 -1
  22. package/dist/walletStandard/utils/createWalletProviderFromSuiStandardWallet/createWalletProviderFromSuiStandardWallet.d.ts.map +1 -1
  23. package/dist/walletStandard.cjs +2 -2
  24. package/dist/walletStandard.esm.js +2 -2
  25. package/package.json +4 -4
  26. package/dist/addSuiWalletStandardExtension-DLZLdRCj.cjs.map +0 -1
  27. package/dist/addSuiWalletStandardExtension-qz95_2mf.esm.js.map +0 -1
@@ -4,7 +4,7 @@
4
4
  import type { WalletProvider } from '@dynamic-labs-sdk/client/core';
5
5
  import type { ExecuteTransactionRequestType, SuiClient, SuiTransactionBlockResponseOptions } from '@mysten/sui/client';
6
6
  import type { Transaction } from '@mysten/sui/transactions';
7
- import type { SignedTransaction, SuiSignAndExecuteTransactionBlockOutput, SuiSignAndExecuteTransactionOutput, SuiSignTransactionBlockOutput } from '@mysten/wallet-standard';
7
+ import type { SignedTransaction, SuiSignAndExecuteTransactionBlockOutput, SuiSignAndExecuteTransactionOutput, SuiSignTransactionBlockOutput, SuiWalletFeatures, WalletWithFeatures } from '@mysten/wallet-standard';
8
8
  import type { SuiWalletAccount } from './SuiWalletAccount.types';
9
9
  export type { SuiClient } from '@mysten/sui/client';
10
10
  export type { SuiSignAndExecuteTransactionBlockOutput as SuiSignAndExecuteTransactionBlockResult, SuiSignAndExecuteTransactionOutput as SuiSignAndExecuteTransactionResult, SuiSignTransactionBlockOutput as SuiSignTransactionBlockResult, SignedTransaction as SuiSignTransactionResult, } from '@mysten/wallet-standard';
@@ -18,6 +18,14 @@ export type SuiWalletProvider = WalletProvider & {
18
18
  getSuiClient: (args: {
19
19
  walletAccount: SuiWalletAccount;
20
20
  }) => Promise<SuiClient>;
21
+ /**
22
+ * Re-points the provider at a new wallet object announced under the same key
23
+ * (e.g. an extension reload) without disconnecting or recreating the provider.
24
+ * This preserves existing event subscriptions.
25
+ */
26
+ rotateUnderlyingWallet?: (args: {
27
+ walletStandardWallet: WalletWithFeatures<SuiWalletFeatures>;
28
+ }) => void;
21
29
  signAndExecuteTransaction: (args: {
22
30
  transaction: Transaction;
23
31
  walletAccount: SuiWalletAccount;
@@ -1 +1 @@
1
- {"version":3,"file":"SuiWalletProvider.types.d.ts","sourceRoot":"","sources":["../src/SuiWalletProvider.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EACV,6BAA6B,EAC7B,SAAS,EACT,kCAAkC,EACnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EACV,iBAAiB,EACjB,uCAAuC,EACvC,kCAAkC,EAClC,6BAA6B,EAC9B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EACV,uCAAuC,IAAI,uCAAuC,EAClF,kCAAkC,IAAI,kCAAkC,EACxE,6BAA6B,IAAI,6BAA6B,EAC9D,iBAAiB,IAAI,wBAAwB,GAC9C,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,6BAA6B,IAAI,gCAAgC,EACjE,kCAAkC,GACnC,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,wCAAwC,GAAG;IACrD,OAAO,CAAC,EAAE,kCAAkC,CAAC;IAC7C,WAAW,CAAC,EAAE,6BAA6B,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,CAAC,IAAI,EAAE;QACnB,aAAa,EAAE,gBAAgB,CAAC;KACjC,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACzB,yBAAyB,EAAE,CAAC,IAAI,EAAE;QAChC,WAAW,EAAE,WAAW,CAAC;QACzB,aAAa,EAAE,gBAAgB,CAAC;KACjC,KAAK,OAAO,CAAC,kCAAkC,CAAC,CAAC;IAClD,8BAA8B,CAAC,EAAE,CAAC,IAAI,EAAE;QACtC,OAAO,CAAC,EAAE,kCAAkC,CAAC;QAC7C,WAAW,CAAC,EAAE,6BAA6B,CAAC;QAC5C,gBAAgB,EAAE,WAAW,CAAC;QAC9B,aAAa,EAAE,gBAAgB,CAAC;KACjC,KAAK,OAAO,CAAC,uCAAuC,CAAC,CAAC;IACvD,eAAe,EAAE,CAAC,IAAI,EAAE;QACtB,WAAW,EAAE,WAAW,CAAC;QACzB,aAAa,EAAE,gBAAgB,CAAC;KACjC,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC5B,gBAAgB,EAAE,WAAW,CAAC;QAC9B,aAAa,EAAE,gBAAgB,CAAC;KACjC,KAAK,OAAO,CAAC,6BAA6B,CAAC,CAAC;CAC9C,CAAC"}
1
+ {"version":3,"file":"SuiWalletProvider.types.d.ts","sourceRoot":"","sources":["../src/SuiWalletProvider.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EACV,6BAA6B,EAC7B,SAAS,EACT,kCAAkC,EACnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EACV,iBAAiB,EACjB,uCAAuC,EACvC,kCAAkC,EAClC,6BAA6B,EAC7B,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EACV,uCAAuC,IAAI,uCAAuC,EAClF,kCAAkC,IAAI,kCAAkC,EACxE,6BAA6B,IAAI,6BAA6B,EAC9D,iBAAiB,IAAI,wBAAwB,GAC9C,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,6BAA6B,IAAI,gCAAgC,EACjE,kCAAkC,GACnC,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,wCAAwC,GAAG;IACrD,OAAO,CAAC,EAAE,kCAAkC,CAAC;IAC7C,WAAW,CAAC,EAAE,6BAA6B,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,CAAC,IAAI,EAAE;QACnB,aAAa,EAAE,gBAAgB,CAAC;KACjC,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACzB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC9B,oBAAoB,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;KAC7D,KAAK,IAAI,CAAC;IACX,yBAAyB,EAAE,CAAC,IAAI,EAAE;QAChC,WAAW,EAAE,WAAW,CAAC;QACzB,aAAa,EAAE,gBAAgB,CAAC;KACjC,KAAK,OAAO,CAAC,kCAAkC,CAAC,CAAC;IAClD,8BAA8B,CAAC,EAAE,CAAC,IAAI,EAAE;QACtC,OAAO,CAAC,EAAE,kCAAkC,CAAC;QAC7C,WAAW,CAAC,EAAE,6BAA6B,CAAC;QAC5C,gBAAgB,EAAE,WAAW,CAAC;QAC9B,aAAa,EAAE,gBAAgB,CAAC;KACjC,KAAK,OAAO,CAAC,uCAAuC,CAAC,CAAC;IACvD,eAAe,EAAE,CAAC,IAAI,EAAE;QACtB,WAAW,EAAE,WAAW,CAAC;QACzB,aAAa,EAAE,gBAAgB,CAAC;KACjC,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC5B,gBAAgB,EAAE,WAAW,CAAC;QAC9B,aAAa,EAAE,gBAAgB,CAAC;KACjC,KAAK,OAAO,CAAC,6BAA6B,CAAC,CAAC;CAC9C,CAAC"}
@@ -1,4 +1,4 @@
1
- import { i as suiConfirmTransaction, l as registerSuiNetworkProviderBuilder, r as suiExecuteSwapTransaction, t as suiTransferAmount } from "./suiTransferAmount-B8YHx0ao.esm.js";
1
+ import { i as suiConfirmTransaction, l as registerSuiNetworkProviderBuilder, r as suiExecuteSwapTransaction, t as suiTransferAmount } from "./suiTransferAmount-BZ0dnhzm.esm.js";
2
2
  import { WalletProviderPriority, assertDefined, createWalletProviderEventEmitter, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getDefaultClient, getWalletProviderRegistry, hasExtension, registerExtension, switchActiveNetworkInLastKnownRegistry } from "@dynamic-labs-sdk/client/core";
3
3
  import { SuiClient } from "@mysten/sui/client";
4
4
  import { assertWalletAccountSigningAvailability, getActiveNetworkData } from "@dynamic-labs-sdk/client";
@@ -8,7 +8,8 @@ import { getWallets, isWalletWithRequiredFeatureSet } from "@mysten/wallet-stand
8
8
  //#region src/walletStandard/utils/createWalletProviderFromSuiStandardWallet/createWalletProviderFromSuiStandardWallet.ts
9
9
  /** @notInstrumented */
10
10
  const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStandardWallet }) => {
11
- const features = walletStandardWallet.features;
11
+ let currentWallet = walletStandardWallet;
12
+ const getFeatures = () => currentWallet.features;
12
13
  const walletProviderType = WalletProviderEnum.BrowserExtension;
13
14
  const key = formatWalletProviderKey({
14
15
  chain: "SUI",
@@ -16,7 +17,7 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
16
17
  walletProviderType
17
18
  });
18
19
  const runConnectFeature = async ({ silent = false } = {}) => {
19
- const connectMethod = features["standard:connect"]?.connect;
20
+ const connectMethod = getFeatures()["standard:connect"]?.connect;
20
21
  assertDefined(connectMethod, "connect method not found in wallet features");
21
22
  return { addresses: (await connectMethod({ silent })).accounts?.map((account) => ({
22
23
  address: account.address,
@@ -24,21 +25,20 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
24
25
  })) };
25
26
  };
26
27
  const connect = async () => {
27
- const autoConnectedAccounts = walletStandardWallet.accounts;
28
+ const autoConnectedAccounts = currentWallet.accounts;
28
29
  if (autoConnectedAccounts?.length && autoConnectedAccounts[0].address) return { addresses: [{
29
30
  address: autoConnectedAccounts[0].address,
30
31
  publicKey: autoConnectedAccounts[0].publicKey?.toString()
31
32
  }] };
32
33
  return runConnectFeature();
33
34
  };
34
- const disconnectFeature = features["standard:disconnect"]?.disconnect;
35
35
  const getActiveNetworkId = async () => getActiveNetworkIdFromLastKnownRegistry({
36
36
  client: dynamicClient,
37
37
  walletProviderKey: key
38
38
  });
39
39
  const getCurrentAccount = async () => {
40
40
  if (!isConnected()) await runConnectFeature({ silent: true });
41
- const account = walletStandardWallet.accounts?.[0];
41
+ const account = currentWallet.accounts?.[0];
42
42
  assertDefined(account, "No connected accounts found");
43
43
  return account;
44
44
  };
@@ -50,15 +50,15 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
50
50
  return new SuiClient({ url });
51
51
  };
52
52
  const isConnected = () => {
53
- return walletStandardWallet.accounts?.length > 0;
53
+ return currentWallet.accounts?.length > 0;
54
54
  };
55
55
  const getConnectedAddresses = async () => {
56
56
  if (!isConnected()) await runConnectFeature({ silent: true });
57
- return { addresses: walletStandardWallet.accounts.map((account) => account.address) };
57
+ return { addresses: currentWallet.accounts.map((account) => account.address) };
58
58
  };
59
59
  const signAndExecuteTransaction = async ({ transaction, walletAccount }) => {
60
60
  await assertWalletAccountSigningAvailability({ walletAccount }, dynamicClient);
61
- const signAndExecuteTransactionMethod = features["sui:signAndExecuteTransaction"]?.signAndExecuteTransaction;
61
+ const signAndExecuteTransactionMethod = getFeatures()["sui:signAndExecuteTransaction"]?.signAndExecuteTransaction;
62
62
  assertDefined(signAndExecuteTransactionMethod, "signAndExecuteTransaction method not found in wallet features");
63
63
  const account = await getCurrentAccount();
64
64
  return signAndExecuteTransactionMethod({
@@ -69,7 +69,7 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
69
69
  };
70
70
  const signAndExecuteTransactionBlock = async ({ options, requestType, transactionBlock, walletAccount }) => {
71
71
  await assertWalletAccountSigningAvailability({ walletAccount }, dynamicClient);
72
- const signAndExecuteTransactionBlockMethod = features["sui:signAndExecuteTransactionBlock"]?.signAndExecuteTransactionBlock;
72
+ const signAndExecuteTransactionBlockMethod = getFeatures()["sui:signAndExecuteTransactionBlock"]?.signAndExecuteTransactionBlock;
73
73
  assertDefined(signAndExecuteTransactionBlockMethod, "signAndExecuteTransactionBlock method not found in wallet features");
74
74
  const account = await getCurrentAccount();
75
75
  return signAndExecuteTransactionBlockMethod({
@@ -81,7 +81,7 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
81
81
  });
82
82
  };
83
83
  const signMessage = async ({ message, walletAccount }) => {
84
- const signMessageMethod = features["sui:signPersonalMessage"]?.signPersonalMessage;
84
+ const signMessageMethod = getFeatures()["sui:signPersonalMessage"]?.signPersonalMessage;
85
85
  assertDefined(signMessageMethod, "signPersonalMessage method not found in wallet features");
86
86
  assertDefined(walletAccount, "Wallet account not found");
87
87
  await assertWalletAccountSigningAvailability({ walletAccount }, dynamicClient);
@@ -93,7 +93,7 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
93
93
  return { signature };
94
94
  };
95
95
  const signTransaction = async ({ transaction, walletAccount }) => {
96
- const signTransactionMethod = features["sui:signTransaction"]?.signTransaction;
96
+ const signTransactionMethod = getFeatures()["sui:signTransaction"]?.signTransaction;
97
97
  assertDefined(signTransactionMethod, "signTransaction method not found in wallet features");
98
98
  await assertWalletAccountSigningAvailability({ walletAccount }, dynamicClient);
99
99
  const account = await getCurrentAccount();
@@ -104,7 +104,7 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
104
104
  });
105
105
  };
106
106
  const signTransactionBlock = async ({ transactionBlock, walletAccount }) => {
107
- const signTransactionBlockMethod = features["sui:signTransactionBlock"]?.signTransactionBlock;
107
+ const signTransactionBlockMethod = getFeatures()["sui:signTransactionBlock"]?.signTransactionBlock;
108
108
  assertDefined(signTransactionBlockMethod, "signTransactionBlock method not found in wallet features");
109
109
  await assertWalletAccountSigningAvailability({ walletAccount }, dynamicClient);
110
110
  const account = await getCurrentAccount();
@@ -119,24 +119,30 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
119
119
  networkId,
120
120
  walletProviderKey: key
121
121
  });
122
- const { getEventEmitter, cleanupEventEmitter } = createWalletProviderEventEmitter({
122
+ const setupEventListeners = ({ handleAccountsChanged }) => {
123
+ return getFeatures()["standard:events"].on("change", ({ accounts }) => {
124
+ handleAccountsChanged({ addresses: accounts?.map((account) => account.address) ?? [] });
125
+ });
126
+ };
127
+ const { getEventEmitter, cleanupEventEmitter, rewireEventListeners } = createWalletProviderEventEmitter({
123
128
  removeEventListeners: ({ setupReturnValue }) => {
124
129
  assertDefined(setupReturnValue, "Setup return value not defined");
125
130
  setupReturnValue();
126
131
  },
127
- setupEventListeners: ({ handleAccountsChanged }) => {
128
- return features["standard:events"].on("change", ({ accounts }) => {
129
- handleAccountsChanged({ addresses: accounts?.map((account) => account.address) ?? [] });
130
- });
131
- },
132
+ setupEventListeners,
132
133
  supportedEvents: ["accountsChanged"]
133
134
  });
134
135
  const destroy = async () => {
135
136
  cleanupEventEmitter();
136
137
  try {
137
- await disconnectFeature?.();
138
+ await getFeatures()["standard:disconnect"]?.disconnect();
138
139
  } catch {}
139
140
  };
141
+ const rotateUnderlyingWallet = ({ walletStandardWallet: nextWallet }) => {
142
+ if (nextWallet === currentWallet) return;
143
+ currentWallet = nextWallet;
144
+ rewireEventListeners(setupEventListeners);
145
+ };
140
146
  return {
141
147
  chain: "SUI",
142
148
  confirmTransaction: (args) => suiConfirmTransaction(args, dynamicClient),
@@ -151,10 +157,13 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
151
157
  getSuiClient,
152
158
  groupKey: formatWalletProviderGroupKey(walletStandardWallet.name),
153
159
  key,
154
- metadata: {
155
- displayName: walletStandardWallet.name,
156
- icon: walletStandardWallet.icon
160
+ get metadata() {
161
+ return {
162
+ displayName: currentWallet.name,
163
+ icon: currentWallet.icon
164
+ };
157
165
  },
166
+ rotateUnderlyingWallet,
158
167
  signAndExecuteTransaction,
159
168
  signAndExecuteTransactionBlock,
160
169
  signMessage,
@@ -169,6 +178,11 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
169
178
  //#endregion
170
179
  //#region src/walletStandard/addSuiWalletStandardExtension/addSuiWalletStandardExtension.ts
171
180
  const SUI_WALLET_STANDARD_EXTENSION_KEY = "suiWalletStandard";
181
+ const getSuiWallets = (wallets) => wallets.filter((wallet) => isWalletWithRequiredFeatureSet(wallet, [
182
+ "standard:events",
183
+ "standard:connect",
184
+ "sui:signPersonalMessage"
185
+ ]));
172
186
  /**
173
187
  * Adds the Sui Wallet Standard extension to the Dynamic client.
174
188
  *
@@ -176,18 +190,27 @@ const SUI_WALLET_STANDARD_EXTENSION_KEY = "suiWalletStandard";
176
190
  * automatically detecting and registering compatible wallets for use with the Dynamic SDK.
177
191
  *
178
192
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
193
+ * @returns A function that removes the wallet-standard register listener when called.
179
194
  * @notInstrumented
180
195
  */
181
196
  const addSuiWalletStandardExtension = (client = getDefaultClient()) => {
182
- if (hasExtension({ extensionKey: SUI_WALLET_STANDARD_EXTENSION_KEY }, client)) return;
197
+ if (hasExtension({ extensionKey: SUI_WALLET_STANDARD_EXTENSION_KEY }, client)) return () => {};
183
198
  registerExtension({ extensionKey: SUI_WALLET_STANDARD_EXTENSION_KEY }, client);
184
199
  registerSuiNetworkProviderBuilder(client);
185
200
  const walletProviderRegistry = getWalletProviderRegistry(client);
186
- getWallets().get().filter((wallet) => isWalletWithRequiredFeatureSet(wallet, [
187
- "standard:events",
188
- "standard:connect",
189
- "sui:signPersonalMessage"
190
- ])).forEach((walletStandardWallet) => {
201
+ const getKeyForWallet = (wallet) => formatWalletProviderKey({
202
+ chain: "SUI",
203
+ displayName: wallet.name,
204
+ walletProviderType: WalletProviderEnum.BrowserExtension
205
+ });
206
+ const registerSuiWallet = (walletStandardWallet) => {
207
+ const key = getKeyForWallet(walletStandardWallet);
208
+ const existingProvider = walletProviderRegistry.getByKey(key);
209
+ if (existingProvider) {
210
+ assertDefined(existingProvider.rotateUnderlyingWallet, "Sui wallet provider is missing rotateUnderlyingWallet");
211
+ existingProvider.rotateUnderlyingWallet({ walletStandardWallet });
212
+ return;
213
+ }
191
214
  const walletProvider = createWalletProviderFromSuiStandardWallet({
192
215
  dynamicClient: client,
193
216
  walletStandardWallet
@@ -196,9 +219,15 @@ const addSuiWalletStandardExtension = (client = getDefaultClient()) => {
196
219
  priority: WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,
197
220
  walletProvider
198
221
  });
222
+ };
223
+ const wallets = getWallets();
224
+ const removeRegisterListener = wallets.on("register", (...registeredWallets) => {
225
+ getSuiWallets(registeredWallets).forEach(registerSuiWallet);
199
226
  });
227
+ getSuiWallets(wallets.get()).forEach(registerSuiWallet);
228
+ return removeRegisterListener;
200
229
  };
201
230
 
202
231
  //#endregion
203
232
  export { addSuiWalletStandardExtension as t };
204
- //# sourceMappingURL=addSuiWalletStandardExtension-qz95_2mf.esm.js.map
233
+ //# sourceMappingURL=addSuiWalletStandardExtension-4da_E4Pk.esm.js.map
@@ -0,0 +1 @@
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,4 +1,4 @@
1
- const require_suiTransferAmount = require('./suiTransferAmount-D0J9llxd.cjs');
1
+ const require_suiTransferAmount = require('./suiTransferAmount-6SgyhsN8.cjs');
2
2
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
3
3
  let _mysten_sui_client = require("@mysten/sui/client");
4
4
  let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
@@ -8,7 +8,8 @@ let _mysten_wallet_standard = require("@mysten/wallet-standard");
8
8
  //#region src/walletStandard/utils/createWalletProviderFromSuiStandardWallet/createWalletProviderFromSuiStandardWallet.ts
9
9
  /** @notInstrumented */
10
10
  const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStandardWallet }) => {
11
- const features = walletStandardWallet.features;
11
+ let currentWallet = walletStandardWallet;
12
+ const getFeatures = () => currentWallet.features;
12
13
  const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension;
13
14
  const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
14
15
  chain: "SUI",
@@ -16,7 +17,7 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
16
17
  walletProviderType
17
18
  });
18
19
  const runConnectFeature = async ({ silent = false } = {}) => {
19
- const connectMethod = features["standard:connect"]?.connect;
20
+ const connectMethod = getFeatures()["standard:connect"]?.connect;
20
21
  (0, _dynamic_labs_sdk_client_core.assertDefined)(connectMethod, "connect method not found in wallet features");
21
22
  return { addresses: (await connectMethod({ silent })).accounts?.map((account) => ({
22
23
  address: account.address,
@@ -24,21 +25,20 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
24
25
  })) };
25
26
  };
26
27
  const connect = async () => {
27
- const autoConnectedAccounts = walletStandardWallet.accounts;
28
+ const autoConnectedAccounts = currentWallet.accounts;
28
29
  if (autoConnectedAccounts?.length && autoConnectedAccounts[0].address) return { addresses: [{
29
30
  address: autoConnectedAccounts[0].address,
30
31
  publicKey: autoConnectedAccounts[0].publicKey?.toString()
31
32
  }] };
32
33
  return runConnectFeature();
33
34
  };
34
- const disconnectFeature = features["standard:disconnect"]?.disconnect;
35
35
  const getActiveNetworkId = async () => (0, _dynamic_labs_sdk_client_core.getActiveNetworkIdFromLastKnownRegistry)({
36
36
  client: dynamicClient,
37
37
  walletProviderKey: key
38
38
  });
39
39
  const getCurrentAccount = async () => {
40
40
  if (!isConnected()) await runConnectFeature({ silent: true });
41
- const account = walletStandardWallet.accounts?.[0];
41
+ const account = currentWallet.accounts?.[0];
42
42
  (0, _dynamic_labs_sdk_client_core.assertDefined)(account, "No connected accounts found");
43
43
  return account;
44
44
  };
@@ -50,15 +50,15 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
50
50
  return new _mysten_sui_client.SuiClient({ url });
51
51
  };
52
52
  const isConnected = () => {
53
- return walletStandardWallet.accounts?.length > 0;
53
+ return currentWallet.accounts?.length > 0;
54
54
  };
55
55
  const getConnectedAddresses = async () => {
56
56
  if (!isConnected()) await runConnectFeature({ silent: true });
57
- return { addresses: walletStandardWallet.accounts.map((account) => account.address) };
57
+ return { addresses: currentWallet.accounts.map((account) => account.address) };
58
58
  };
59
59
  const signAndExecuteTransaction = async ({ transaction, walletAccount }) => {
60
60
  await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
61
- const signAndExecuteTransactionMethod = features["sui:signAndExecuteTransaction"]?.signAndExecuteTransaction;
61
+ const signAndExecuteTransactionMethod = getFeatures()["sui:signAndExecuteTransaction"]?.signAndExecuteTransaction;
62
62
  (0, _dynamic_labs_sdk_client_core.assertDefined)(signAndExecuteTransactionMethod, "signAndExecuteTransaction method not found in wallet features");
63
63
  const account = await getCurrentAccount();
64
64
  return signAndExecuteTransactionMethod({
@@ -69,7 +69,7 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
69
69
  };
70
70
  const signAndExecuteTransactionBlock = async ({ options, requestType, transactionBlock, walletAccount }) => {
71
71
  await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
72
- const signAndExecuteTransactionBlockMethod = features["sui:signAndExecuteTransactionBlock"]?.signAndExecuteTransactionBlock;
72
+ const signAndExecuteTransactionBlockMethod = getFeatures()["sui:signAndExecuteTransactionBlock"]?.signAndExecuteTransactionBlock;
73
73
  (0, _dynamic_labs_sdk_client_core.assertDefined)(signAndExecuteTransactionBlockMethod, "signAndExecuteTransactionBlock method not found in wallet features");
74
74
  const account = await getCurrentAccount();
75
75
  return signAndExecuteTransactionBlockMethod({
@@ -81,7 +81,7 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
81
81
  });
82
82
  };
83
83
  const signMessage = async ({ message, walletAccount }) => {
84
- const signMessageMethod = features["sui:signPersonalMessage"]?.signPersonalMessage;
84
+ const signMessageMethod = getFeatures()["sui:signPersonalMessage"]?.signPersonalMessage;
85
85
  (0, _dynamic_labs_sdk_client_core.assertDefined)(signMessageMethod, "signPersonalMessage method not found in wallet features");
86
86
  (0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account not found");
87
87
  await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
@@ -93,7 +93,7 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
93
93
  return { signature };
94
94
  };
95
95
  const signTransaction = async ({ transaction, walletAccount }) => {
96
- const signTransactionMethod = features["sui:signTransaction"]?.signTransaction;
96
+ const signTransactionMethod = getFeatures()["sui:signTransaction"]?.signTransaction;
97
97
  (0, _dynamic_labs_sdk_client_core.assertDefined)(signTransactionMethod, "signTransaction method not found in wallet features");
98
98
  await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
99
99
  const account = await getCurrentAccount();
@@ -104,7 +104,7 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
104
104
  });
105
105
  };
106
106
  const signTransactionBlock = async ({ transactionBlock, walletAccount }) => {
107
- const signTransactionBlockMethod = features["sui:signTransactionBlock"]?.signTransactionBlock;
107
+ const signTransactionBlockMethod = getFeatures()["sui:signTransactionBlock"]?.signTransactionBlock;
108
108
  (0, _dynamic_labs_sdk_client_core.assertDefined)(signTransactionBlockMethod, "signTransactionBlock method not found in wallet features");
109
109
  await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
110
110
  const account = await getCurrentAccount();
@@ -119,24 +119,30 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
119
119
  networkId,
120
120
  walletProviderKey: key
121
121
  });
122
- const { getEventEmitter, cleanupEventEmitter } = (0, _dynamic_labs_sdk_client_core.createWalletProviderEventEmitter)({
122
+ const setupEventListeners = ({ handleAccountsChanged }) => {
123
+ return getFeatures()["standard:events"].on("change", ({ accounts }) => {
124
+ handleAccountsChanged({ addresses: accounts?.map((account) => account.address) ?? [] });
125
+ });
126
+ };
127
+ const { getEventEmitter, cleanupEventEmitter, rewireEventListeners } = (0, _dynamic_labs_sdk_client_core.createWalletProviderEventEmitter)({
123
128
  removeEventListeners: ({ setupReturnValue }) => {
124
129
  (0, _dynamic_labs_sdk_client_core.assertDefined)(setupReturnValue, "Setup return value not defined");
125
130
  setupReturnValue();
126
131
  },
127
- setupEventListeners: ({ handleAccountsChanged }) => {
128
- return features["standard:events"].on("change", ({ accounts }) => {
129
- handleAccountsChanged({ addresses: accounts?.map((account) => account.address) ?? [] });
130
- });
131
- },
132
+ setupEventListeners,
132
133
  supportedEvents: ["accountsChanged"]
133
134
  });
134
135
  const destroy = async () => {
135
136
  cleanupEventEmitter();
136
137
  try {
137
- await disconnectFeature?.();
138
+ await getFeatures()["standard:disconnect"]?.disconnect();
138
139
  } catch {}
139
140
  };
141
+ const rotateUnderlyingWallet = ({ walletStandardWallet: nextWallet }) => {
142
+ if (nextWallet === currentWallet) return;
143
+ currentWallet = nextWallet;
144
+ rewireEventListeners(setupEventListeners);
145
+ };
140
146
  return {
141
147
  chain: "SUI",
142
148
  confirmTransaction: (args) => require_suiTransferAmount.suiConfirmTransaction(args, dynamicClient),
@@ -151,10 +157,13 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
151
157
  getSuiClient,
152
158
  groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(walletStandardWallet.name),
153
159
  key,
154
- metadata: {
155
- displayName: walletStandardWallet.name,
156
- icon: walletStandardWallet.icon
160
+ get metadata() {
161
+ return {
162
+ displayName: currentWallet.name,
163
+ icon: currentWallet.icon
164
+ };
157
165
  },
166
+ rotateUnderlyingWallet,
158
167
  signAndExecuteTransaction,
159
168
  signAndExecuteTransactionBlock,
160
169
  signMessage,
@@ -169,6 +178,11 @@ const createWalletProviderFromSuiStandardWallet = ({ dynamicClient, walletStanda
169
178
  //#endregion
170
179
  //#region src/walletStandard/addSuiWalletStandardExtension/addSuiWalletStandardExtension.ts
171
180
  const SUI_WALLET_STANDARD_EXTENSION_KEY = "suiWalletStandard";
181
+ const getSuiWallets = (wallets) => wallets.filter((wallet) => (0, _mysten_wallet_standard.isWalletWithRequiredFeatureSet)(wallet, [
182
+ "standard:events",
183
+ "standard:connect",
184
+ "sui:signPersonalMessage"
185
+ ]));
172
186
  /**
173
187
  * Adds the Sui Wallet Standard extension to the Dynamic client.
174
188
  *
@@ -176,18 +190,27 @@ const SUI_WALLET_STANDARD_EXTENSION_KEY = "suiWalletStandard";
176
190
  * automatically detecting and registering compatible wallets for use with the Dynamic SDK.
177
191
  *
178
192
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
193
+ * @returns A function that removes the wallet-standard register listener when called.
179
194
  * @notInstrumented
180
195
  */
181
196
  const addSuiWalletStandardExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
182
- if ((0, _dynamic_labs_sdk_client_core.hasExtension)({ extensionKey: SUI_WALLET_STANDARD_EXTENSION_KEY }, client)) return;
197
+ if ((0, _dynamic_labs_sdk_client_core.hasExtension)({ extensionKey: SUI_WALLET_STANDARD_EXTENSION_KEY }, client)) return () => {};
183
198
  (0, _dynamic_labs_sdk_client_core.registerExtension)({ extensionKey: SUI_WALLET_STANDARD_EXTENSION_KEY }, client);
184
199
  require_suiTransferAmount.registerSuiNetworkProviderBuilder(client);
185
200
  const walletProviderRegistry = (0, _dynamic_labs_sdk_client_core.getWalletProviderRegistry)(client);
186
- (0, _mysten_wallet_standard.getWallets)().get().filter((wallet) => (0, _mysten_wallet_standard.isWalletWithRequiredFeatureSet)(wallet, [
187
- "standard:events",
188
- "standard:connect",
189
- "sui:signPersonalMessage"
190
- ])).forEach((walletStandardWallet) => {
201
+ const getKeyForWallet = (wallet) => (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
202
+ chain: "SUI",
203
+ displayName: wallet.name,
204
+ walletProviderType: _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension
205
+ });
206
+ const registerSuiWallet = (walletStandardWallet) => {
207
+ const key = getKeyForWallet(walletStandardWallet);
208
+ const existingProvider = walletProviderRegistry.getByKey(key);
209
+ if (existingProvider) {
210
+ (0, _dynamic_labs_sdk_client_core.assertDefined)(existingProvider.rotateUnderlyingWallet, "Sui wallet provider is missing rotateUnderlyingWallet");
211
+ existingProvider.rotateUnderlyingWallet({ walletStandardWallet });
212
+ return;
213
+ }
191
214
  const walletProvider = createWalletProviderFromSuiStandardWallet({
192
215
  dynamicClient: client,
193
216
  walletStandardWallet
@@ -196,7 +219,13 @@ const addSuiWalletStandardExtension = (client = (0, _dynamic_labs_sdk_client_cor
196
219
  priority: _dynamic_labs_sdk_client_core.WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,
197
220
  walletProvider
198
221
  });
222
+ };
223
+ const wallets = (0, _mysten_wallet_standard.getWallets)();
224
+ const removeRegisterListener = wallets.on("register", (...registeredWallets) => {
225
+ getSuiWallets(registeredWallets).forEach(registerSuiWallet);
199
226
  });
227
+ getSuiWallets(wallets.get()).forEach(registerSuiWallet);
228
+ return removeRegisterListener;
200
229
  };
201
230
 
202
231
  //#endregion
@@ -206,4 +235,4 @@ Object.defineProperty(exports, 'addSuiWalletStandardExtension', {
206
235
  return addSuiWalletStandardExtension;
207
236
  }
208
237
  });
209
- //# sourceMappingURL=addSuiWalletStandardExtension-DLZLdRCj.cjs.map
238
+ //# sourceMappingURL=addSuiWalletStandardExtension-Z8DM_vIL.cjs.map
@@ -0,0 +1 @@
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,4 +1,4 @@
1
- import { i as suiConfirmTransaction, l as registerSuiNetworkProviderBuilder, r as suiExecuteSwapTransaction, t as suiTransferAmount } from "./suiTransferAmount-B8YHx0ao.esm.js";
1
+ import { i as suiConfirmTransaction, l as registerSuiNetworkProviderBuilder, r as suiExecuteSwapTransaction, t as suiTransferAmount } from "./suiTransferAmount-BZ0dnhzm.esm.js";
2
2
  import { WalletProviderPriority, assertDefined, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getBuffer, getDefaultClient, getWalletProviderRegistry, hasExtension, registerExtension, switchActiveNetworkInLastKnownRegistry } from "@dynamic-labs-sdk/client/core";
3
3
  import { SuiClient } from "@mysten/sui/client";
4
4
  import { getActiveNetworkData } from "@dynamic-labs-sdk/client";
@@ -124,4 +124,4 @@ const addWaasSuiExtension = (client = getDefaultClient()) => {
124
124
 
125
125
  //#endregion
126
126
  export { addWaasSuiExtension as t };
127
- //# sourceMappingURL=addWaasSuiExtension-DvqF4NMC.esm.js.map
127
+ //# sourceMappingURL=addWaasSuiExtension-BQNXrF0f.esm.js.map