thirdweb 5.29.3-nightly-c94bcd574aa4eaf2bd76ab8b6379302de4731ed4-20240615050020 → 5.29.3-nightly-df84f9c4ce4d3e402c82037230515513380e73d1-20240616231119
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/cjs/react/web/ui/ConnectWallet/ConnectButton.js +5 -0
- package/dist/cjs/react/web/ui/ConnectWallet/ConnectButton.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js +5 -0
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectModalContent.js +11 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectModalContent.js.map +1 -1
- package/dist/cjs/react/web/ui/components/WalletImage.js +5 -2
- package/dist/cjs/react/web/ui/components/WalletImage.js.map +1 -1
- package/dist/cjs/react/web/utils/usePreloadWalletProviders.js +43 -0
- package/dist/cjs/react/web/utils/usePreloadWalletProviders.js.map +1 -0
- package/dist/cjs/transaction/actions/send-transaction.js +3 -0
- package/dist/cjs/transaction/actions/send-transaction.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/wallets/coinbase/coinbase-wallet.js +9 -0
- package/dist/cjs/wallets/coinbase/coinbase-wallet.js.map +1 -1
- package/dist/cjs/wallets/coinbase/coinbaseSDKWallet.js +11 -1
- package/dist/cjs/wallets/coinbase/coinbaseSDKWallet.js.map +1 -1
- package/dist/cjs/wallets/smart/index.js +6 -0
- package/dist/cjs/wallets/smart/index.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/ConnectButton.js +5 -0
- package/dist/esm/react/web/ui/ConnectWallet/ConnectButton.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js +5 -0
- package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectModalContent.js +11 -1
- package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectModalContent.js.map +1 -1
- package/dist/esm/react/web/ui/components/WalletImage.js +5 -2
- package/dist/esm/react/web/ui/components/WalletImage.js.map +1 -1
- package/dist/esm/react/web/utils/usePreloadWalletProviders.js +39 -0
- package/dist/esm/react/web/utils/usePreloadWalletProviders.js.map +1 -0
- package/dist/esm/transaction/actions/send-transaction.js +3 -0
- package/dist/esm/transaction/actions/send-transaction.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/wallets/coinbase/coinbase-wallet.js +9 -0
- package/dist/esm/wallets/coinbase/coinbase-wallet.js.map +1 -1
- package/dist/esm/wallets/coinbase/coinbaseSDKWallet.js +9 -0
- package/dist/esm/wallets/coinbase/coinbaseSDKWallet.js.map +1 -1
- package/dist/esm/wallets/smart/index.js +6 -0
- package/dist/esm/wallets/smart/index.js.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/ConnectButton.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectEmbed.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModalContent.d.ts.map +1 -1
- package/dist/types/react/web/utils/usePreloadWalletProviders.d.ts +7 -0
- package/dist/types/react/web/utils/usePreloadWalletProviders.d.ts.map +1 -0
- package/dist/types/transaction/actions/send-transaction.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/wallets/coinbase/coinbase-wallet.d.ts.map +1 -1
- package/dist/types/wallets/coinbase/coinbaseSDKWallet.d.ts +1 -0
- package/dist/types/wallets/coinbase/coinbaseSDKWallet.d.ts.map +1 -1
- package/dist/types/wallets/interfaces/wallet.d.ts +9 -0
- package/dist/types/wallets/interfaces/wallet.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/react/web/ui/ConnectWallet/ConnectButton.tsx +6 -0
- package/src/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.tsx +1 -1
- package/src/react/web/ui/ConnectWallet/Modal/ConnectEmbed.tsx +6 -0
- package/src/react/web/ui/ConnectWallet/Modal/ConnectModalContent.tsx +10 -1
- package/src/react/web/ui/components/WalletImage.tsx +4 -4
- package/src/react/web/utils/usePreloadWalletProviders.ts +49 -0
- package/src/transaction/actions/send-transaction.ts +4 -0
- package/src/version.ts +1 -1
- package/src/wallets/coinbase/coinbase-wallet.ts +11 -0
- package/src/wallets/coinbase/coinbaseSDKWallet.ts +10 -0
- package/src/wallets/interfaces/wallet.ts +15 -0
- package/src/wallets/smart/index.ts +10 -2
@@ -0,0 +1,49 @@
|
|
1
|
+
import { useQueries } from "@tanstack/react-query";
|
2
|
+
import type { ThirdwebClient } from "../../../client/client.js";
|
3
|
+
import { COINBASE } from "../../../wallets/constants.js";
|
4
|
+
import type { Wallet } from "../../../wallets/interfaces/wallet.js";
|
5
|
+
|
6
|
+
export function usePreloadWalletProviders({
|
7
|
+
client,
|
8
|
+
wallets,
|
9
|
+
}: { client: ThirdwebClient; wallets: Wallet[] }) {
|
10
|
+
useQueries({
|
11
|
+
queries: wallets
|
12
|
+
.filter((w) => w.id === COINBASE || w.id === "inApp")
|
13
|
+
.map((w) => ({
|
14
|
+
queryKey: ["preload-wallet", w.id],
|
15
|
+
queryFn: async () => {
|
16
|
+
switch (w.id) {
|
17
|
+
case COINBASE: {
|
18
|
+
const { getCoinbaseWebProvider } = await import(
|
19
|
+
"../../../wallets/coinbase/coinbaseSDKWallet.js"
|
20
|
+
);
|
21
|
+
await getCoinbaseWebProvider();
|
22
|
+
// return _something_
|
23
|
+
return true;
|
24
|
+
}
|
25
|
+
case "inApp": {
|
26
|
+
const [
|
27
|
+
{ InAppWebConnector },
|
28
|
+
{ getOrCreateInAppWalletConnector },
|
29
|
+
] = await Promise.all([
|
30
|
+
import("../../../wallets/in-app/web/lib/web-connector.js"),
|
31
|
+
import("../../../wallets/in-app/core/wallet/in-app-core.js"),
|
32
|
+
]);
|
33
|
+
await getOrCreateInAppWalletConnector(client, async (client) => {
|
34
|
+
return new InAppWebConnector({
|
35
|
+
client,
|
36
|
+
});
|
37
|
+
});
|
38
|
+
// return _something_
|
39
|
+
return true;
|
40
|
+
}
|
41
|
+
// potentially add more wallets here
|
42
|
+
default: {
|
43
|
+
return false;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
},
|
47
|
+
})),
|
48
|
+
});
|
49
|
+
}
|
@@ -33,6 +33,10 @@ export async function sendTransaction(
|
|
33
33
|
): Promise<WaitForReceiptOptions> {
|
34
34
|
const { account, transaction, gasless } = options;
|
35
35
|
|
36
|
+
if (account.onTransactionRequested) {
|
37
|
+
await account.onTransactionRequested(transaction);
|
38
|
+
}
|
39
|
+
|
36
40
|
const serializableTransaction = await toSerializableTransaction({
|
37
41
|
transaction: transaction,
|
38
42
|
from: account.address,
|
package/src/version.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export const version = "5.29.3-nightly-
|
1
|
+
export const version = "5.29.3-nightly-df84f9c4ce4d3e402c82037230515513380e73d1-20240616231119";
|
@@ -104,5 +104,16 @@ export function coinbaseWalletSDK(args: {
|
|
104
104
|
switchChain: async (newChain) => {
|
105
105
|
await handleSwitchChain(newChain);
|
106
106
|
},
|
107
|
+
onConnectRequested: async () => {
|
108
|
+
// make sure to show the coinbase popup IMMEDIATELY on connection requested
|
109
|
+
// otherwise the popup might get blocked in safari
|
110
|
+
// TODO these 2 awaits are fast only thanks to preloading that happens in our components
|
111
|
+
// these probably need to actually imported / created synchronously to be used headless properly
|
112
|
+
const { getCoinbaseWebProvider, showCoinbasePopup } = await import(
|
113
|
+
"./coinbaseSDKWallet.js"
|
114
|
+
);
|
115
|
+
const provider = await getCoinbaseWebProvider(createOptions);
|
116
|
+
await showCoinbasePopup(provider);
|
117
|
+
},
|
107
118
|
};
|
108
119
|
}
|
@@ -334,11 +334,21 @@ function createAccount(provider: ProviderInterface, address: string) {
|
|
334
334
|
params: [account.address, stringifiedData],
|
335
335
|
});
|
336
336
|
},
|
337
|
+
onTransactionRequested: async () => {
|
338
|
+
// make sure to show the coinbase popup BEFORE doing any transaction preprocessing
|
339
|
+
// otherwise the popup might get blocked in safari
|
340
|
+
await showCoinbasePopup(provider);
|
341
|
+
},
|
337
342
|
};
|
338
343
|
|
339
344
|
return account;
|
340
345
|
}
|
341
346
|
|
347
|
+
export async function showCoinbasePopup(provider: ProviderInterface) {
|
348
|
+
// biome-ignore lint/suspicious/noExplicitAny: based on the latest CB SDK - scary but works
|
349
|
+
await (provider as any).communicator?.waitForPopupLoaded();
|
350
|
+
}
|
351
|
+
|
342
352
|
function onConnect(
|
343
353
|
address: string,
|
344
354
|
chain: Chain,
|
@@ -123,6 +123,13 @@ export type Wallet<TWalletId extends WalletId = WalletId> = {
|
|
123
123
|
* ```
|
124
124
|
*/
|
125
125
|
getConfig: () => CreateWalletArgs<TWalletId>[1];
|
126
|
+
|
127
|
+
// OPTIONAL
|
128
|
+
|
129
|
+
/**
|
130
|
+
* Can be used to execute any pre-connection actions like showing a modal, etc.
|
131
|
+
*/
|
132
|
+
onConnectRequested?: () => Promise<void>;
|
126
133
|
};
|
127
134
|
|
128
135
|
/**
|
@@ -223,4 +230,12 @@ export type Account = {
|
|
223
230
|
sendRawTransaction?: (
|
224
231
|
tx: SendRawTransactionOptions,
|
225
232
|
) => Promise<SendTransactionResult>;
|
233
|
+
/**
|
234
|
+
* Used to do any pre-transaction actions like showing a confirmation modal, etc.
|
235
|
+
* @returns
|
236
|
+
*/
|
237
|
+
onTransactionRequested?: (
|
238
|
+
// biome-ignore lint/suspicious/noExplicitAny: any transaction type is allowed here
|
239
|
+
transaction: PreparedTransaction<any>,
|
240
|
+
) => Promise<void>;
|
226
241
|
};
|
@@ -162,7 +162,7 @@ async function createSmartAccount(
|
|
162
162
|
options: SmartAccountOptions,
|
163
163
|
): Promise<Account> {
|
164
164
|
const { accountContract } = options;
|
165
|
-
const account = {
|
165
|
+
const account: Account = {
|
166
166
|
address: accountContract.address,
|
167
167
|
async sendTransaction(transaction: SendTransactionOption) {
|
168
168
|
const executeTx = prepareExecute({
|
@@ -353,6 +353,9 @@ async function createSmartAccount(
|
|
353
353
|
"Unable to verify signature on smart account, please make sure the smart account is deployed and the signature is valid.",
|
354
354
|
);
|
355
355
|
},
|
356
|
+
async onTransactionRequested(transaction) {
|
357
|
+
return options.personalAccount.onTransactionRequested?.(transaction);
|
358
|
+
},
|
356
359
|
};
|
357
360
|
return account;
|
358
361
|
}
|
@@ -364,7 +367,7 @@ function createZkSyncAccount(args: {
|
|
364
367
|
sponsorGas: boolean;
|
365
368
|
}): Account {
|
366
369
|
const { creationOptions, connectionOptions, chain } = args;
|
367
|
-
const account = {
|
370
|
+
const account: Account = {
|
368
371
|
address: connectionOptions.personalAccount.address,
|
369
372
|
async sendTransaction(transaction: SendTransactionOption) {
|
370
373
|
// override passed tx, we have to refetch gas and fees always
|
@@ -430,6 +433,11 @@ function createZkSyncAccount(args: {
|
|
430
433
|
const typedData = parseTypedData(_typedData);
|
431
434
|
return connectionOptions.personalAccount.signTypedData(typedData);
|
432
435
|
},
|
436
|
+
async onTransactionRequested(transaction) {
|
437
|
+
return connectionOptions.personalAccount.onTransactionRequested?.(
|
438
|
+
transaction,
|
439
|
+
);
|
440
|
+
},
|
433
441
|
};
|
434
442
|
return account;
|
435
443
|
}
|