@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.
- package/dist/SuiWalletProvider.types.d.ts +9 -1
- package/dist/SuiWalletProvider.types.d.ts.map +1 -1
- package/dist/{addSuiWalletStandardExtension-qz95_2mf.esm.js → addSuiWalletStandardExtension-4da_E4Pk.esm.js} +59 -30
- package/dist/addSuiWalletStandardExtension-4da_E4Pk.esm.js.map +1 -0
- package/dist/{addSuiWalletStandardExtension-DLZLdRCj.cjs → addSuiWalletStandardExtension-Z8DM_vIL.cjs} +59 -30
- package/dist/addSuiWalletStandardExtension-Z8DM_vIL.cjs.map +1 -0
- package/dist/{addWaasSuiExtension-DvqF4NMC.esm.js → addWaasSuiExtension-BQNXrF0f.esm.js} +2 -2
- package/dist/{addWaasSuiExtension-DvqF4NMC.esm.js.map → addWaasSuiExtension-BQNXrF0f.esm.js.map} +1 -1
- package/dist/{addWaasSuiExtension-DClGjifO.cjs → addWaasSuiExtension-DtkMzhAT.cjs} +2 -2
- package/dist/{addWaasSuiExtension-DClGjifO.cjs.map → addWaasSuiExtension-DtkMzhAT.cjs.map} +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.esm.js +3 -3
- package/dist/{suiTransferAmount-D0J9llxd.cjs → suiTransferAmount-6SgyhsN8.cjs} +2 -2
- package/dist/{suiTransferAmount-D0J9llxd.cjs.map → suiTransferAmount-6SgyhsN8.cjs.map} +1 -1
- package/dist/{suiTransferAmount-B8YHx0ao.esm.js → suiTransferAmount-BZ0dnhzm.esm.js} +2 -2
- package/dist/{suiTransferAmount-B8YHx0ao.esm.js.map → suiTransferAmount-BZ0dnhzm.esm.js.map} +1 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/waas.cjs +2 -2
- package/dist/waas.esm.js +2 -2
- package/dist/walletStandard/addSuiWalletStandardExtension/addSuiWalletStandardExtension.d.ts +3 -2
- package/dist/walletStandard/addSuiWalletStandardExtension/addSuiWalletStandardExtension.d.ts.map +1 -1
- package/dist/walletStandard/utils/createWalletProviderFromSuiStandardWallet/createWalletProviderFromSuiStandardWallet.d.ts.map +1 -1
- package/dist/walletStandard.cjs +2 -2
- package/dist/walletStandard.esm.js +2 -2
- package/package.json +4 -4
- package/dist/addSuiWalletStandardExtension-DLZLdRCj.cjs.map +0 -1
- 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,
|
|
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-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
53
|
+
return currentWallet.accounts?.length > 0;
|
|
54
54
|
};
|
|
55
55
|
const getConnectedAddresses = async () => {
|
|
56
56
|
if (!isConnected()) await runConnectFeature({ silent: true });
|
|
57
|
-
return { addresses:
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 {
|
|
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
|
|
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
|
|
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
|
-
|
|
156
|
-
|
|
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
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
53
|
+
return currentWallet.accounts?.length > 0;
|
|
54
54
|
};
|
|
55
55
|
const getConnectedAddresses = async () => {
|
|
56
56
|
if (!isConnected()) await runConnectFeature({ silent: true });
|
|
57
|
-
return { addresses:
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 {
|
|
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
|
|
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
|
|
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
|
-
|
|
156
|
-
|
|
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
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
127
|
+
//# sourceMappingURL=addWaasSuiExtension-BQNXrF0f.esm.js.map
|