thirdweb 5.29.2 → 5.29.3-nightly-476b6cc271b0891fa01fb09ca509c564b850ccfa-20240614185219
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/exports/react-native/wallets/in-app.js +17 -0
- package/dist/cjs/exports/react-native/wallets/in-app.js.map +1 -0
- package/dist/cjs/exports/react-native/wallets.js +36 -0
- package/dist/cjs/exports/react-native/wallets.js.map +1 -0
- package/dist/cjs/exports/wallets/embedded.js +4 -4
- package/dist/cjs/exports/wallets/embedded.js.map +1 -1
- package/dist/cjs/exports/wallets/in-app.js +4 -3
- package/dist/cjs/exports/wallets/in-app.js.map +1 -1
- package/dist/cjs/exports/wallets/smart.js +2 -2
- package/dist/cjs/exports/wallets/smart.js.map +1 -1
- package/dist/cjs/exports/wallets.js +8 -5
- package/dist/cjs/exports/wallets.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Details.js +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Details.js.map +1 -1
- package/dist/cjs/react/web/wallets/in-app/InAppWalletOTPLoginUI.js +1 -1
- package/dist/cjs/react/web/wallets/in-app/InAppWalletOTPLoginUI.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/cjs/wallets/coinbase/coinbase-wallet.js +87 -0
- package/dist/cjs/wallets/coinbase/coinbase-wallet.js.map +1 -0
- package/dist/cjs/wallets/coinbase/coinbaseMobileSDK.js +17 -2
- package/dist/cjs/wallets/coinbase/coinbaseMobileSDK.js.map +1 -1
- package/dist/cjs/wallets/coinbase/coinbaseSDKWallet.js +12 -20
- package/dist/cjs/wallets/coinbase/coinbaseSDKWallet.js.map +1 -1
- package/dist/cjs/wallets/create-wallet.js +12 -300
- package/dist/cjs/wallets/create-wallet.js.map +1 -1
- package/dist/cjs/wallets/in-app/core/authentication/type.js +6 -1
- package/dist/cjs/wallets/in-app/core/authentication/type.js.map +1 -1
- package/dist/cjs/wallets/in-app/core/wallet/in-app-core.js +100 -0
- package/dist/cjs/wallets/in-app/core/wallet/in-app-core.js.map +1 -0
- package/dist/cjs/wallets/in-app/core/wallet/index.js +15 -7
- package/dist/cjs/wallets/in-app/core/wallet/index.js.map +1 -1
- package/dist/cjs/wallets/in-app/{core/authentication → native/auth}/index.js +15 -42
- package/dist/cjs/wallets/in-app/native/auth/index.js.map +1 -0
- package/dist/cjs/wallets/in-app/native/{auth.js → auth/native-auth.js} +9 -9
- package/dist/cjs/wallets/in-app/native/auth/native-auth.js.map +1 -0
- package/dist/cjs/wallets/in-app/native/in-app.js +69 -0
- package/dist/cjs/wallets/in-app/native/in-app.js.map +1 -0
- package/dist/cjs/wallets/in-app/native/native-connector.js +9 -10
- package/dist/cjs/wallets/in-app/native/native-connector.js.map +1 -1
- package/dist/cjs/wallets/in-app/web/in-app.js +69 -0
- package/dist/cjs/wallets/in-app/web/in-app.js.map +1 -0
- package/dist/cjs/wallets/in-app/web/lib/auth/iframe-auth.js +219 -0
- package/dist/cjs/wallets/in-app/web/lib/auth/iframe-auth.js.map +1 -0
- package/dist/cjs/wallets/in-app/web/lib/auth/index.js +121 -208
- package/dist/cjs/wallets/in-app/web/lib/auth/index.js.map +1 -1
- package/dist/cjs/wallets/in-app/web/lib/web-connector.js +3 -4
- package/dist/cjs/wallets/in-app/web/lib/web-connector.js.map +1 -1
- package/dist/cjs/wallets/manager/index.js +2 -2
- package/dist/cjs/wallets/manager/index.js.map +1 -1
- package/dist/cjs/wallets/native/create-wallet.js +174 -0
- package/dist/cjs/wallets/native/create-wallet.js.map +1 -0
- package/dist/cjs/wallets/smart/smart-wallet.js +103 -0
- package/dist/cjs/wallets/smart/smart-wallet.js.map +1 -0
- package/dist/esm/exports/react-native/wallets/in-app.js +9 -0
- package/dist/esm/exports/react-native/wallets/in-app.js.map +1 -0
- package/dist/esm/exports/react-native/wallets.js +23 -0
- package/dist/esm/exports/react-native/wallets.js.map +1 -0
- package/dist/esm/exports/wallets/embedded.js +3 -2
- package/dist/esm/exports/wallets/embedded.js.map +1 -1
- package/dist/esm/exports/wallets/in-app.js +4 -2
- package/dist/esm/exports/wallets/in-app.js.map +1 -1
- package/dist/esm/exports/wallets/smart.js +1 -1
- package/dist/esm/exports/wallets/smart.js.map +1 -1
- package/dist/esm/exports/wallets.js +5 -2
- package/dist/esm/exports/wallets.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Details.js +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Details.js.map +1 -1
- package/dist/esm/react/web/wallets/in-app/InAppWalletOTPLoginUI.js +1 -1
- package/dist/esm/react/web/wallets/in-app/InAppWalletOTPLoginUI.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/wallets/coinbase/coinbase-wallet.js +83 -0
- package/dist/esm/wallets/coinbase/coinbase-wallet.js.map +1 -0
- package/dist/esm/wallets/coinbase/coinbaseMobileSDK.js +16 -1
- package/dist/esm/wallets/coinbase/coinbaseMobileSDK.js.map +1 -1
- package/dist/esm/wallets/coinbase/coinbaseSDKWallet.js +10 -19
- package/dist/esm/wallets/coinbase/coinbaseSDKWallet.js.map +1 -1
- package/dist/esm/wallets/create-wallet.js +9 -295
- package/dist/esm/wallets/create-wallet.js.map +1 -1
- package/dist/esm/wallets/in-app/core/authentication/type.js +5 -0
- package/dist/esm/wallets/in-app/core/authentication/type.js.map +1 -1
- package/dist/esm/wallets/in-app/core/wallet/in-app-core.js +95 -0
- package/dist/esm/wallets/in-app/core/wallet/in-app-core.js.map +1 -0
- package/dist/esm/wallets/in-app/core/wallet/index.js +15 -7
- package/dist/esm/wallets/in-app/core/wallet/index.js.map +1 -1
- package/dist/esm/wallets/in-app/{core/authentication → native/auth}/index.js +14 -40
- package/dist/esm/wallets/in-app/native/auth/index.js.map +1 -0
- package/dist/esm/wallets/in-app/native/{auth.js → auth/native-auth.js} +9 -9
- package/dist/esm/wallets/in-app/native/auth/native-auth.js.map +1 -0
- package/dist/esm/wallets/in-app/native/in-app.js +65 -0
- package/dist/esm/wallets/in-app/native/in-app.js.map +1 -0
- package/dist/esm/wallets/in-app/native/native-connector.js +2 -3
- package/dist/esm/wallets/in-app/native/native-connector.js.map +1 -1
- package/dist/esm/wallets/in-app/web/in-app.js +65 -0
- package/dist/esm/wallets/in-app/web/in-app.js.map +1 -0
- package/dist/esm/wallets/in-app/web/lib/auth/iframe-auth.js +215 -0
- package/dist/esm/wallets/in-app/web/lib/auth/iframe-auth.js.map +1 -0
- package/dist/esm/wallets/in-app/web/lib/auth/index.js +115 -206
- package/dist/esm/wallets/in-app/web/lib/auth/index.js.map +1 -1
- package/dist/esm/wallets/in-app/web/lib/web-connector.js +2 -3
- package/dist/esm/wallets/in-app/web/lib/web-connector.js.map +1 -1
- package/dist/esm/wallets/manager/index.js +1 -1
- package/dist/esm/wallets/manager/index.js.map +1 -1
- package/dist/esm/wallets/native/create-wallet.js +169 -0
- package/dist/esm/wallets/native/create-wallet.js.map +1 -0
- package/dist/esm/wallets/smart/smart-wallet.js +99 -0
- package/dist/esm/wallets/smart/smart-wallet.js.map +1 -0
- package/dist/types/exports/react-native/wallets/in-app.d.ts +5 -0
- package/dist/types/exports/react-native/wallets/in-app.d.ts.map +1 -0
- package/dist/types/exports/react-native/wallets.d.ts +47 -0
- package/dist/types/exports/react-native/wallets.d.ts.map +1 -0
- package/dist/types/exports/wallets/embedded.d.ts +3 -2
- package/dist/types/exports/wallets/embedded.d.ts.map +1 -1
- package/dist/types/exports/wallets/in-app.d.ts +3 -2
- package/dist/types/exports/wallets/in-app.d.ts.map +1 -1
- package/dist/types/exports/wallets/smart.d.ts +1 -1
- package/dist/types/exports/wallets/smart.d.ts.map +1 -1
- package/dist/types/exports/wallets.d.ts +4 -2
- package/dist/types/exports/wallets.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/dist/types/wallets/coinbase/coinbase-wallet.d.ts +15 -0
- package/dist/types/wallets/coinbase/coinbase-wallet.d.ts.map +1 -0
- package/dist/types/wallets/coinbase/coinbaseMobileSDK.d.ts +7 -7
- package/dist/types/wallets/coinbase/coinbaseMobileSDK.d.ts.map +1 -1
- package/dist/types/wallets/coinbase/coinbaseSDKWallet.d.ts +6 -2
- package/dist/types/wallets/coinbase/coinbaseSDKWallet.d.ts.map +1 -1
- package/dist/types/wallets/create-wallet.d.ts +0 -74
- package/dist/types/wallets/create-wallet.d.ts.map +1 -1
- package/dist/types/wallets/in-app/core/authentication/type.d.ts +4 -0
- package/dist/types/wallets/in-app/core/authentication/type.d.ts.map +1 -1
- package/dist/types/wallets/in-app/core/wallet/in-app-core.d.ts +16 -0
- package/dist/types/wallets/in-app/core/wallet/in-app-core.d.ts.map +1 -0
- package/dist/types/wallets/in-app/core/wallet/index.d.ts +3 -2
- package/dist/types/wallets/in-app/core/wallet/index.d.ts.map +1 -1
- package/dist/types/wallets/in-app/{core/authentication → native/auth}/index.d.ts +3 -12
- package/dist/types/wallets/in-app/native/auth/index.d.ts.map +1 -0
- package/dist/types/wallets/in-app/native/{auth.d.ts → auth/native-auth.d.ts} +3 -3
- package/dist/types/wallets/in-app/native/auth/native-auth.d.ts.map +1 -0
- package/dist/types/wallets/in-app/native/in-app.d.ts +56 -0
- package/dist/types/wallets/in-app/native/in-app.d.ts.map +1 -0
- package/dist/types/wallets/in-app/native/native-connector.d.ts.map +1 -1
- package/dist/types/wallets/in-app/web/in-app.d.ts +56 -0
- package/dist/types/wallets/in-app/web/in-app.d.ts.map +1 -0
- package/dist/types/wallets/in-app/web/lib/auth/iframe-auth.d.ts +141 -0
- package/dist/types/wallets/in-app/web/lib/auth/iframe-auth.d.ts.map +1 -0
- package/dist/types/wallets/in-app/web/lib/auth/index.d.ts +78 -137
- package/dist/types/wallets/in-app/web/lib/auth/index.d.ts.map +1 -1
- package/dist/types/wallets/in-app/web/lib/web-connector.d.ts +1 -1
- package/dist/types/wallets/in-app/web/lib/web-connector.d.ts.map +1 -1
- package/dist/types/wallets/manager/index.d.ts.map +1 -1
- package/dist/types/wallets/native/create-wallet.d.ts +36 -0
- package/dist/types/wallets/native/create-wallet.d.ts.map +1 -0
- package/dist/types/wallets/smart/smart-wallet.d.ts +24 -0
- package/dist/types/wallets/smart/smart-wallet.d.ts.map +1 -0
- package/package.json +3 -1
- package/src/exports/react-native/wallets/in-app.ts +18 -0
- package/src/exports/react-native/wallets.ts +102 -0
- package/src/exports/wallets/embedded.ts +4 -3
- package/src/exports/wallets/in-app.ts +6 -3
- package/src/exports/wallets/smart.ts +1 -1
- package/src/exports/wallets.ts +7 -3
- package/src/react/web/ui/ConnectWallet/Details.tsx +1 -1
- package/src/react/web/wallets/in-app/InAppWalletOTPLoginUI.tsx +1 -1
- package/src/version.ts +1 -1
- package/src/wallets/coinbase/coinbase-wallet.ts +108 -0
- package/src/wallets/coinbase/coinbaseMobileSDK.ts +23 -1
- package/src/wallets/coinbase/coinbaseSDKWallet.ts +10 -21
- package/src/wallets/create-wallet.ts +9 -359
- package/src/wallets/in-app/core/authentication/type.ts +13 -0
- package/src/wallets/in-app/core/wallet/in-app-core.ts +134 -0
- package/src/wallets/in-app/core/wallet/index.ts +17 -6
- package/src/wallets/in-app/{core/authentication → native/auth}/index.ts +15 -57
- package/src/wallets/in-app/native/{auth.ts → auth/native-auth.ts} +10 -10
- package/src/wallets/in-app/native/in-app.ts +70 -0
- package/src/wallets/in-app/native/native-connector.ts +2 -2
- package/src/wallets/in-app/web/in-app.ts +70 -0
- package/src/wallets/in-app/web/lib/auth/iframe-auth.ts +266 -0
- package/src/wallets/in-app/web/lib/auth/index.ts +124 -249
- package/src/wallets/in-app/web/lib/web-connector.ts +2 -2
- package/src/wallets/manager/index.ts +1 -1
- package/src/wallets/native/create-wallet.ts +224 -0
- package/src/wallets/smart/smart-wallet-integration.test.ts +1 -1
- package/src/wallets/smart/smart-wallet-zksync.test.ts +1 -1
- package/src/wallets/smart/smart-wallet.ts +123 -0
- package/dist/cjs/wallets/in-app/core/authentication/index.js.map +0 -1
- package/dist/cjs/wallets/in-app/native/auth.js.map +0 -1
- package/dist/esm/wallets/in-app/core/authentication/index.js.map +0 -1
- package/dist/esm/wallets/in-app/native/auth.js.map +0 -1
- package/dist/types/wallets/in-app/core/authentication/index.d.ts.map +0 -1
- package/dist/types/wallets/in-app/native/auth.d.ts.map +0 -1
@@ -8,17 +8,15 @@ import type {
|
|
8
8
|
CreateWalletArgs,
|
9
9
|
InjectedConnectOptions,
|
10
10
|
WalletAutoConnectionOption,
|
11
|
-
WalletConnectionOption,
|
12
11
|
WalletId,
|
13
12
|
} from "./wallet-types.js";
|
14
13
|
|
15
14
|
import { trackConnect } from "../analytics/track.js";
|
16
|
-
import
|
17
|
-
import {
|
18
|
-
import { isContractDeployed } from "../utils/bytecode/is-contract-deployed.js";
|
15
|
+
import { coinbaseWalletSDK } from "./coinbase/coinbase-wallet.js";
|
16
|
+
import { getCoinbaseWebProvider } from "./coinbase/coinbaseSDKWallet.js";
|
19
17
|
import { COINBASE } from "./constants.js";
|
20
|
-
import {
|
21
|
-
import {
|
18
|
+
import { inAppWallet } from "./in-app/web/in-app.js";
|
19
|
+
import { smartWallet } from "./smart/smart-wallet.js";
|
22
20
|
import type { WCConnectOptions } from "./wallet-connect/types.js";
|
23
21
|
import { createWalletEmitter } from "./wallet-emitter.js";
|
24
22
|
|
@@ -69,9 +67,11 @@ export function createWallet<const ID extends WalletId>(
|
|
69
67
|
* -> if no injected coinbase found, we'll use the coinbase SDK
|
70
68
|
*/
|
71
69
|
case COINBASE: {
|
72
|
-
|
73
|
-
|
74
|
-
|
70
|
+
const options = creationOptions as CreateWalletArgs<typeof COINBASE>[1];
|
71
|
+
return coinbaseWalletSDK({
|
72
|
+
createOptions: options,
|
73
|
+
providerFactory: () => getCoinbaseWebProvider(options),
|
74
|
+
}) as Wallet<ID>;
|
75
75
|
}
|
76
76
|
|
77
77
|
/**
|
@@ -289,353 +289,3 @@ export function createWallet<const ID extends WalletId>(
|
|
289
289
|
export function walletConnect() {
|
290
290
|
return createWallet("walletConnect");
|
291
291
|
}
|
292
|
-
|
293
|
-
/**
|
294
|
-
* Creates a smart wallet.
|
295
|
-
* @param createOptions - The options for creating the wallet.
|
296
|
-
* @returns The created smart wallet.
|
297
|
-
* @example
|
298
|
-
* ```ts
|
299
|
-
* import { smartWallet } from "thirdweb/wallets";
|
300
|
-
*
|
301
|
-
* const wallet = smartWallet({
|
302
|
-
* chain: sepolia,
|
303
|
-
* gasless: true,
|
304
|
-
* });
|
305
|
-
*
|
306
|
-
* const account = await wallet.connect({
|
307
|
-
* client,
|
308
|
-
* personalAccount: account,
|
309
|
-
* });
|
310
|
-
* ```
|
311
|
-
* @wallet
|
312
|
-
*/
|
313
|
-
export function smartWallet(
|
314
|
-
createOptions: CreateWalletArgs<"smart">[1],
|
315
|
-
): Wallet<"smart"> {
|
316
|
-
const emitter = createWalletEmitter<"smart">();
|
317
|
-
let account: Account | undefined = undefined;
|
318
|
-
let chain: Chain | undefined = undefined;
|
319
|
-
let lastConnectOptions: WalletConnectionOption<"smart"> | undefined;
|
320
|
-
|
321
|
-
const _smartWallet: Wallet<"smart"> = {
|
322
|
-
id: "smart",
|
323
|
-
subscribe: emitter.subscribe,
|
324
|
-
getChain: () => chain,
|
325
|
-
getConfig: () => createOptions,
|
326
|
-
getAccount: () => account,
|
327
|
-
autoConnect: async (options) => {
|
328
|
-
const { connectSmartWallet } = await import("./smart/index.js");
|
329
|
-
const [connectedAccount, connectedChain] = await connectSmartWallet(
|
330
|
-
_smartWallet,
|
331
|
-
options,
|
332
|
-
createOptions,
|
333
|
-
);
|
334
|
-
// set the states
|
335
|
-
lastConnectOptions = options;
|
336
|
-
account = connectedAccount;
|
337
|
-
chain = connectedChain;
|
338
|
-
trackConnect({
|
339
|
-
client: options.client,
|
340
|
-
walletType: "smart",
|
341
|
-
walletAddress: account.address,
|
342
|
-
});
|
343
|
-
// return account
|
344
|
-
return account;
|
345
|
-
},
|
346
|
-
connect: async (options) => {
|
347
|
-
const { connectSmartWallet } = await import("./smart/index.js");
|
348
|
-
const [connectedAccount, connectedChain] = await connectSmartWallet(
|
349
|
-
_smartWallet,
|
350
|
-
options,
|
351
|
-
createOptions,
|
352
|
-
);
|
353
|
-
// set the states
|
354
|
-
lastConnectOptions = options;
|
355
|
-
account = connectedAccount;
|
356
|
-
chain = connectedChain;
|
357
|
-
trackConnect({
|
358
|
-
client: options.client,
|
359
|
-
walletType: "smart",
|
360
|
-
walletAddress: account.address,
|
361
|
-
});
|
362
|
-
// return account
|
363
|
-
emitter.emit("accountChanged", account);
|
364
|
-
return account;
|
365
|
-
},
|
366
|
-
disconnect: async () => {
|
367
|
-
account = undefined;
|
368
|
-
chain = undefined;
|
369
|
-
const { disconnectSmartWallet } = await import("./smart/index.js");
|
370
|
-
await disconnectSmartWallet(_smartWallet);
|
371
|
-
emitter.emit("disconnect", undefined);
|
372
|
-
},
|
373
|
-
switchChain: async (newChain: Chain) => {
|
374
|
-
if (!lastConnectOptions) {
|
375
|
-
throw new Error("Cannot switch chain without a previous connection");
|
376
|
-
}
|
377
|
-
// check if factory is deployed
|
378
|
-
const factory = getContract({
|
379
|
-
address: createOptions.factoryAddress || DEFAULT_ACCOUNT_FACTORY,
|
380
|
-
chain: newChain,
|
381
|
-
client: lastConnectOptions.client,
|
382
|
-
});
|
383
|
-
const isDeployed = await isContractDeployed(factory);
|
384
|
-
if (!isDeployed) {
|
385
|
-
throw new Error(
|
386
|
-
`Factory contract not deployed on chain: ${newChain.id}`,
|
387
|
-
);
|
388
|
-
}
|
389
|
-
const { connectSmartWallet } = await import("./smart/index.js");
|
390
|
-
const [connectedAccount, connectedChain] = await connectSmartWallet(
|
391
|
-
_smartWallet,
|
392
|
-
{ ...lastConnectOptions, chain: newChain },
|
393
|
-
createOptions,
|
394
|
-
);
|
395
|
-
// set the states
|
396
|
-
account = connectedAccount;
|
397
|
-
chain = connectedChain;
|
398
|
-
emitter.emit("chainChanged", newChain);
|
399
|
-
},
|
400
|
-
};
|
401
|
-
|
402
|
-
return _smartWallet;
|
403
|
-
}
|
404
|
-
|
405
|
-
/**
|
406
|
-
* Creates an in-app wallet.
|
407
|
-
* @param createOptions - configuration options
|
408
|
-
* @returns The created in-app wallet.
|
409
|
-
* @example
|
410
|
-
* ```ts
|
411
|
-
* import { inAppWallet } from "thirdweb/wallets";
|
412
|
-
*
|
413
|
-
* const wallet = inAppWallet();
|
414
|
-
*
|
415
|
-
* const account = await wallet.connect({
|
416
|
-
* client,
|
417
|
-
* chain,
|
418
|
-
* strategy: "google",
|
419
|
-
* });
|
420
|
-
* ```
|
421
|
-
*
|
422
|
-
* Enable smart accounts and sponsor gas for your users:
|
423
|
-
* ```ts
|
424
|
-
* import { inAppWallet } from "thirdweb/wallets";
|
425
|
-
* const wallet = inAppWallet({
|
426
|
-
* smartAccount: {
|
427
|
-
* chain: sepolia,
|
428
|
-
* sponsorGas: true,
|
429
|
-
* },
|
430
|
-
* });
|
431
|
-
* ```
|
432
|
-
*
|
433
|
-
* Specify a logo for your login page
|
434
|
-
* ```ts
|
435
|
-
* import { inAppWallet } from "thirdweb/wallets";
|
436
|
-
* const wallet = inAppWallet({
|
437
|
-
* metadata: {
|
438
|
-
* image: {
|
439
|
-
* src: "https://example.com/logo.png",
|
440
|
-
* alt: "My logo",
|
441
|
-
* width: 100,
|
442
|
-
* height: 100,
|
443
|
-
* },
|
444
|
-
* },
|
445
|
-
* });
|
446
|
-
* ```
|
447
|
-
*
|
448
|
-
* Hide the ability to export the private key within the Connect Modal
|
449
|
-
* ```ts
|
450
|
-
* import { inAppWallet } from "thirdweb/wallets";
|
451
|
-
* const wallet = inAppWallet({
|
452
|
-
* hidePrivateKeyExport: true
|
453
|
-
* });
|
454
|
-
* ```
|
455
|
-
* @wallet
|
456
|
-
*/
|
457
|
-
export function inAppWallet(
|
458
|
-
createOptions?: CreateWalletArgs<"inApp">[1],
|
459
|
-
): Wallet<"inApp"> {
|
460
|
-
const emitter = createWalletEmitter<"inApp">();
|
461
|
-
let account: Account | undefined = undefined;
|
462
|
-
let chain: Chain | undefined = undefined;
|
463
|
-
let client: ThirdwebClient | undefined;
|
464
|
-
|
465
|
-
return {
|
466
|
-
id: "inApp",
|
467
|
-
subscribe: emitter.subscribe,
|
468
|
-
getChain: () => chain,
|
469
|
-
getConfig: () => createOptions,
|
470
|
-
getAccount: () => account,
|
471
|
-
autoConnect: async (options) => {
|
472
|
-
const { autoConnectInAppWallet } = await import(
|
473
|
-
"./in-app/core/wallet/index.js"
|
474
|
-
);
|
475
|
-
|
476
|
-
const [connectedAccount, connectedChain] = await autoConnectInAppWallet(
|
477
|
-
options,
|
478
|
-
createOptions,
|
479
|
-
);
|
480
|
-
// set the states
|
481
|
-
client = options.client;
|
482
|
-
account = connectedAccount;
|
483
|
-
chain = connectedChain;
|
484
|
-
trackConnect({
|
485
|
-
client: options.client,
|
486
|
-
walletType: "inApp",
|
487
|
-
walletAddress: account.address,
|
488
|
-
});
|
489
|
-
// return only the account
|
490
|
-
return account;
|
491
|
-
},
|
492
|
-
connect: async (options) => {
|
493
|
-
const { connectInAppWallet } = await import(
|
494
|
-
"./in-app/core/wallet/index.js"
|
495
|
-
);
|
496
|
-
|
497
|
-
const [connectedAccount, connectedChain] = await connectInAppWallet(
|
498
|
-
options,
|
499
|
-
createOptions,
|
500
|
-
);
|
501
|
-
// set the states
|
502
|
-
client = options.client;
|
503
|
-
account = connectedAccount;
|
504
|
-
chain = connectedChain;
|
505
|
-
trackConnect({
|
506
|
-
client: options.client,
|
507
|
-
walletType: "inApp",
|
508
|
-
walletAddress: account.address,
|
509
|
-
});
|
510
|
-
// return only the account
|
511
|
-
return account;
|
512
|
-
},
|
513
|
-
disconnect: async () => {
|
514
|
-
// If no client is assigned, we should be fine just unsetting the states
|
515
|
-
if (client) {
|
516
|
-
const result = await logoutAuthenticatedUser({ client });
|
517
|
-
if (!result.success) {
|
518
|
-
throw new Error("Failed to logout");
|
519
|
-
}
|
520
|
-
}
|
521
|
-
account = undefined;
|
522
|
-
chain = undefined;
|
523
|
-
emitter.emit("disconnect", undefined);
|
524
|
-
},
|
525
|
-
switchChain: async (newChain) => {
|
526
|
-
if (createOptions?.smartAccount && client && account) {
|
527
|
-
// if account abstraction is enabled, reconnect to smart account on the new chain
|
528
|
-
const { autoConnectInAppWallet } = await import(
|
529
|
-
"./in-app/core/wallet/index.js"
|
530
|
-
);
|
531
|
-
const [connectedAccount, connectedChain] = await autoConnectInAppWallet(
|
532
|
-
{
|
533
|
-
chain: newChain,
|
534
|
-
client,
|
535
|
-
},
|
536
|
-
createOptions,
|
537
|
-
);
|
538
|
-
account = connectedAccount;
|
539
|
-
chain = connectedChain;
|
540
|
-
} else {
|
541
|
-
// if not, simply set the new chain
|
542
|
-
chain = newChain;
|
543
|
-
}
|
544
|
-
emitter.emit("chainChanged", newChain);
|
545
|
-
},
|
546
|
-
};
|
547
|
-
}
|
548
|
-
|
549
|
-
/**
|
550
|
-
* internal helper functions
|
551
|
-
*/
|
552
|
-
|
553
|
-
function coinbaseWalletSDK(
|
554
|
-
createOptions?: CreateWalletArgs<typeof COINBASE>[1],
|
555
|
-
): Wallet<typeof COINBASE> {
|
556
|
-
const emitter = createWalletEmitter<typeof COINBASE>();
|
557
|
-
let account: Account | undefined = undefined;
|
558
|
-
let chain: Chain | undefined = undefined;
|
559
|
-
|
560
|
-
function reset() {
|
561
|
-
account = undefined;
|
562
|
-
chain = undefined;
|
563
|
-
}
|
564
|
-
|
565
|
-
let handleDisconnect = async () => {};
|
566
|
-
|
567
|
-
let handleSwitchChain = async (newChain: Chain) => {
|
568
|
-
chain = newChain;
|
569
|
-
};
|
570
|
-
|
571
|
-
const unsubscribeChainChanged = emitter.subscribe(
|
572
|
-
"chainChanged",
|
573
|
-
(newChain) => {
|
574
|
-
chain = newChain;
|
575
|
-
},
|
576
|
-
);
|
577
|
-
|
578
|
-
const unsubscribeDisconnect = emitter.subscribe("disconnect", () => {
|
579
|
-
reset();
|
580
|
-
unsubscribeChainChanged();
|
581
|
-
unsubscribeDisconnect();
|
582
|
-
});
|
583
|
-
|
584
|
-
emitter.subscribe("accountChanged", (_account) => {
|
585
|
-
account = _account;
|
586
|
-
});
|
587
|
-
|
588
|
-
return {
|
589
|
-
id: COINBASE,
|
590
|
-
subscribe: emitter.subscribe,
|
591
|
-
getChain: () => chain,
|
592
|
-
getConfig: () => createOptions,
|
593
|
-
getAccount: () => account,
|
594
|
-
autoConnect: async (options) => {
|
595
|
-
const { autoConnectCoinbaseWalletSDK } = await import(
|
596
|
-
"./coinbase/coinbaseSDKWallet.js"
|
597
|
-
);
|
598
|
-
const [connectedAccount, connectedChain, doDisconnect, doSwitchChain] =
|
599
|
-
await autoConnectCoinbaseWalletSDK(options, createOptions, emitter);
|
600
|
-
// set the states
|
601
|
-
account = connectedAccount;
|
602
|
-
chain = connectedChain;
|
603
|
-
handleDisconnect = doDisconnect;
|
604
|
-
handleSwitchChain = doSwitchChain;
|
605
|
-
trackConnect({
|
606
|
-
client: options.client,
|
607
|
-
walletType: COINBASE,
|
608
|
-
walletAddress: account.address,
|
609
|
-
});
|
610
|
-
// return account
|
611
|
-
return account;
|
612
|
-
},
|
613
|
-
connect: async (options) => {
|
614
|
-
const { connectCoinbaseWalletSDK } = await import(
|
615
|
-
"./coinbase/coinbaseSDKWallet.js"
|
616
|
-
);
|
617
|
-
const [connectedAccount, connectedChain, doDisconnect, doSwitchChain] =
|
618
|
-
await connectCoinbaseWalletSDK(options, createOptions, emitter);
|
619
|
-
|
620
|
-
// set the states
|
621
|
-
account = connectedAccount;
|
622
|
-
chain = connectedChain;
|
623
|
-
handleDisconnect = doDisconnect;
|
624
|
-
handleSwitchChain = doSwitchChain;
|
625
|
-
trackConnect({
|
626
|
-
client: options.client,
|
627
|
-
walletType: COINBASE,
|
628
|
-
walletAddress: account.address,
|
629
|
-
});
|
630
|
-
// return account
|
631
|
-
return account;
|
632
|
-
},
|
633
|
-
disconnect: async () => {
|
634
|
-
reset();
|
635
|
-
await handleDisconnect();
|
636
|
-
},
|
637
|
-
switchChain: async (newChain) => {
|
638
|
-
await handleSwitchChain(newChain);
|
639
|
-
},
|
640
|
-
};
|
641
|
-
}
|
@@ -210,3 +210,16 @@ export type GetUser =
|
|
210
210
|
walletAddress: string;
|
211
211
|
}
|
212
212
|
| InitializedUser;
|
213
|
+
|
214
|
+
export type GetAuthenticatedUserParams = {
|
215
|
+
client: ThirdwebClient;
|
216
|
+
};
|
217
|
+
|
218
|
+
export const oauthStrategyToAuthProvider: Record<
|
219
|
+
"google" | "facebook" | "apple",
|
220
|
+
AuthProvider
|
221
|
+
> = {
|
222
|
+
google: AuthProvider.GOOGLE,
|
223
|
+
facebook: AuthProvider.FACEBOOK,
|
224
|
+
apple: AuthProvider.APPLE,
|
225
|
+
};
|
@@ -0,0 +1,134 @@
|
|
1
|
+
import { trackConnect } from "../../../../analytics/track.js";
|
2
|
+
import type { Chain } from "../../../../chains/types.js";
|
3
|
+
import type { ThirdwebClient } from "../../../../client/client.js";
|
4
|
+
import type { Account, Wallet } from "../../../interfaces/wallet.js";
|
5
|
+
import { createWalletEmitter } from "../../../wallet-emitter.js";
|
6
|
+
import type { CreateWalletArgs } from "../../../wallet-types.js";
|
7
|
+
import type { InAppConnector } from "../interfaces/connector.js";
|
8
|
+
|
9
|
+
const connectorCache = new WeakMap<ThirdwebClient, InAppConnector>();
|
10
|
+
|
11
|
+
/**
|
12
|
+
* @internal
|
13
|
+
*/
|
14
|
+
export async function getOrCreateInAppWalletConnector(
|
15
|
+
client: ThirdwebClient,
|
16
|
+
connectorFactory: (client: ThirdwebClient) => Promise<InAppConnector>,
|
17
|
+
) {
|
18
|
+
if (connectorCache.has(client)) {
|
19
|
+
return connectorCache.get(client) as InAppConnector;
|
20
|
+
}
|
21
|
+
const connector = await connectorFactory(client);
|
22
|
+
connectorCache.set(client, connector);
|
23
|
+
return connector;
|
24
|
+
}
|
25
|
+
|
26
|
+
/**
|
27
|
+
* @internal
|
28
|
+
*/
|
29
|
+
export function createInAppWallet(args: {
|
30
|
+
createOptions?: CreateWalletArgs<"inApp">[1];
|
31
|
+
connectorFactory: (client: ThirdwebClient) => Promise<InAppConnector>;
|
32
|
+
}): Wallet<"inApp"> {
|
33
|
+
const { createOptions, connectorFactory } = args;
|
34
|
+
const emitter = createWalletEmitter<"inApp">();
|
35
|
+
let account: Account | undefined = undefined;
|
36
|
+
let chain: Chain | undefined = undefined;
|
37
|
+
let client: ThirdwebClient | undefined;
|
38
|
+
|
39
|
+
return {
|
40
|
+
id: "inApp",
|
41
|
+
subscribe: emitter.subscribe,
|
42
|
+
getChain: () => chain,
|
43
|
+
getConfig: () => createOptions,
|
44
|
+
getAccount: () => account,
|
45
|
+
autoConnect: async (options) => {
|
46
|
+
const { autoConnectInAppWallet } = await import("./index.js");
|
47
|
+
|
48
|
+
const connector = await getOrCreateInAppWalletConnector(
|
49
|
+
options.client,
|
50
|
+
connectorFactory,
|
51
|
+
);
|
52
|
+
const [connectedAccount, connectedChain] = await autoConnectInAppWallet(
|
53
|
+
options,
|
54
|
+
createOptions,
|
55
|
+
connector,
|
56
|
+
);
|
57
|
+
// set the states
|
58
|
+
client = options.client;
|
59
|
+
account = connectedAccount;
|
60
|
+
chain = connectedChain;
|
61
|
+
trackConnect({
|
62
|
+
client: options.client,
|
63
|
+
walletType: "inApp",
|
64
|
+
walletAddress: account.address,
|
65
|
+
});
|
66
|
+
// return only the account
|
67
|
+
return account;
|
68
|
+
},
|
69
|
+
connect: async (options) => {
|
70
|
+
const { connectInAppWallet } = await import("./index.js");
|
71
|
+
|
72
|
+
const connector = await getOrCreateInAppWalletConnector(
|
73
|
+
options.client,
|
74
|
+
connectorFactory,
|
75
|
+
);
|
76
|
+
const [connectedAccount, connectedChain] = await connectInAppWallet(
|
77
|
+
options,
|
78
|
+
createOptions,
|
79
|
+
connector,
|
80
|
+
);
|
81
|
+
// set the states
|
82
|
+
client = options.client;
|
83
|
+
account = connectedAccount;
|
84
|
+
chain = connectedChain;
|
85
|
+
trackConnect({
|
86
|
+
client: options.client,
|
87
|
+
walletType: "inApp",
|
88
|
+
walletAddress: account.address,
|
89
|
+
});
|
90
|
+
// return only the account
|
91
|
+
return account;
|
92
|
+
},
|
93
|
+
disconnect: async () => {
|
94
|
+
// If no client is assigned, we should be fine just unsetting the states
|
95
|
+
if (client) {
|
96
|
+
const connector = await getOrCreateInAppWalletConnector(
|
97
|
+
client,
|
98
|
+
connectorFactory,
|
99
|
+
);
|
100
|
+
const result = await connector.logout();
|
101
|
+
if (!result.success) {
|
102
|
+
throw new Error("Failed to logout");
|
103
|
+
}
|
104
|
+
}
|
105
|
+
account = undefined;
|
106
|
+
chain = undefined;
|
107
|
+
emitter.emit("disconnect", undefined);
|
108
|
+
},
|
109
|
+
switchChain: async (newChain) => {
|
110
|
+
if (createOptions?.smartAccount && client && account) {
|
111
|
+
// if account abstraction is enabled, reconnect to smart account on the new chain
|
112
|
+
const { autoConnectInAppWallet } = await import("./index.js");
|
113
|
+
const connector = await getOrCreateInAppWalletConnector(
|
114
|
+
client,
|
115
|
+
connectorFactory,
|
116
|
+
);
|
117
|
+
const [connectedAccount, connectedChain] = await autoConnectInAppWallet(
|
118
|
+
{
|
119
|
+
chain: newChain,
|
120
|
+
client,
|
121
|
+
},
|
122
|
+
createOptions,
|
123
|
+
connector,
|
124
|
+
);
|
125
|
+
account = connectedAccount;
|
126
|
+
chain = connectedChain;
|
127
|
+
} else {
|
128
|
+
// if not, simply set the new chain
|
129
|
+
chain = newChain;
|
130
|
+
}
|
131
|
+
emitter.emit("chainChanged", newChain);
|
132
|
+
},
|
133
|
+
};
|
134
|
+
}
|
@@ -8,6 +8,8 @@ import type {
|
|
8
8
|
WalletAutoConnectionOption,
|
9
9
|
WalletConnectionOption,
|
10
10
|
} from "../../../wallet-types.js";
|
11
|
+
import { UserWalletStatus } from "../authentication/type.js";
|
12
|
+
import type { InAppConnector } from "../interfaces/connector.js";
|
11
13
|
|
12
14
|
/**
|
13
15
|
* Checks if the provided wallet is an in-app wallet.
|
@@ -27,10 +29,9 @@ export function isInAppWallet(
|
|
27
29
|
export async function connectInAppWallet(
|
28
30
|
options: WalletConnectionOption<"inApp">,
|
29
31
|
createOptions: CreateWalletArgs<"inApp">[1],
|
32
|
+
connector: InAppConnector,
|
30
33
|
): Promise<[Account, Chain]> {
|
31
|
-
const
|
32
|
-
|
33
|
-
const authResult = await authenticate(options);
|
34
|
+
const authResult = await connector.authenticate(options);
|
34
35
|
const authAccount = authResult.user.account;
|
35
36
|
|
36
37
|
if (createOptions?.smartAccount) {
|
@@ -54,9 +55,9 @@ export async function connectInAppWallet(
|
|
54
55
|
export async function autoConnectInAppWallet(
|
55
56
|
options: WalletAutoConnectionOption<"inApp">,
|
56
57
|
createOptions: CreateWalletArgs<"inApp">[1],
|
58
|
+
connector: InAppConnector,
|
57
59
|
): Promise<[Account, Chain]> {
|
58
|
-
const
|
59
|
-
const user = await getAuthenticatedUser({ client: options.client });
|
60
|
+
const user = await getAuthenticatedUser(connector);
|
60
61
|
if (!user) {
|
61
62
|
throw new Error("not authenticated");
|
62
63
|
}
|
@@ -85,7 +86,7 @@ async function convertToSmartAccount(options: {
|
|
85
86
|
chain?: Chain;
|
86
87
|
}) {
|
87
88
|
const [{ smartWallet }, { connectSmartWallet }] = await Promise.all([
|
88
|
-
import("../../../
|
89
|
+
import("../../../smart/smart-wallet.js"),
|
89
90
|
import("../../../smart/index.js"),
|
90
91
|
]);
|
91
92
|
|
@@ -100,3 +101,13 @@ async function convertToSmartAccount(options: {
|
|
100
101
|
options.smartAccountOptions,
|
101
102
|
);
|
102
103
|
}
|
104
|
+
|
105
|
+
async function getAuthenticatedUser(connector: InAppConnector) {
|
106
|
+
const user = await connector.getUser();
|
107
|
+
switch (user.status) {
|
108
|
+
case UserWalletStatus.LOGGED_IN_WALLET_INITIALIZED: {
|
109
|
+
return user;
|
110
|
+
}
|
111
|
+
}
|
112
|
+
return undefined;
|
113
|
+
}
|
@@ -1,59 +1,26 @@
|
|
1
1
|
import type { ThirdwebClient } from "../../../../client/client.js";
|
2
|
-
import { isBrowser, isReactNative } from "../../../../utils/platform.js";
|
3
|
-
import type { InAppConnector } from "../interfaces/connector.js";
|
4
2
|
import {
|
5
3
|
type AuthArgsType,
|
6
4
|
type AuthLoginReturnType,
|
7
|
-
|
5
|
+
type GetAuthenticatedUserParams,
|
8
6
|
type PreAuthArgsType,
|
9
7
|
UserWalletStatus,
|
10
|
-
} from "
|
8
|
+
} from "../../core/authentication/type.js";
|
9
|
+
import { getOrCreateInAppWalletConnector } from "../../core/wallet/in-app-core.js";
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
};
|
15
|
-
|
16
|
-
const ewsSDKCache = new WeakMap<ThirdwebClient, InAppConnector>();
|
11
|
+
// ---- KEEP IN SYNC WITH /wallets/in-app/web/lib/auth/index.ts ---- //
|
12
|
+
// duplication needed for separate exports between web and native
|
17
13
|
|
18
14
|
/**
|
19
15
|
* @internal
|
20
16
|
*/
|
21
17
|
async function getInAppWalletConnector(client: ThirdwebClient) {
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
let ewSDK: InAppConnector;
|
27
|
-
if (isBrowser()) {
|
28
|
-
const { InAppWebConnector } = await import(
|
29
|
-
"../../web/lib/web-connector.js"
|
30
|
-
);
|
31
|
-
ewSDK = new InAppWebConnector({
|
18
|
+
return getOrCreateInAppWalletConnector(client, async (client) => {
|
19
|
+
const { InAppNativeConnector } = await import("../native-connector.js");
|
20
|
+
return new InAppNativeConnector({
|
32
21
|
client: client,
|
33
22
|
});
|
34
|
-
}
|
35
|
-
const {
|
36
|
-
InAppNativeConnector,
|
37
|
-
} = require("../../native/native-connector.js");
|
38
|
-
ewSDK = new InAppNativeConnector({
|
39
|
-
client,
|
40
|
-
});
|
41
|
-
} else {
|
42
|
-
throw new Error("Unsupported platform");
|
43
|
-
}
|
44
|
-
|
45
|
-
ewsSDKCache.set(client, ewSDK);
|
46
|
-
return ewSDK;
|
47
|
-
}
|
48
|
-
|
49
|
-
/**
|
50
|
-
* @internal
|
51
|
-
*/
|
52
|
-
export async function logoutAuthenticatedUser(
|
53
|
-
options: GetAuthenticatedUserParams,
|
54
|
-
) {
|
55
|
-
const ewSDK = await getInAppWalletConnector(options.client);
|
56
|
-
return ewSDK.logout();
|
23
|
+
});
|
57
24
|
}
|
58
25
|
|
59
26
|
/**
|
@@ -75,8 +42,8 @@ export async function getAuthenticatedUser(
|
|
75
42
|
options: GetAuthenticatedUserParams,
|
76
43
|
) {
|
77
44
|
const { client } = options;
|
78
|
-
const
|
79
|
-
const user = await
|
45
|
+
const connector = await getInAppWalletConnector(client);
|
46
|
+
const user = await connector.getUser();
|
80
47
|
switch (user.status) {
|
81
48
|
case UserWalletStatus.LOGGED_IN_WALLET_INITIALIZED: {
|
82
49
|
return user;
|
@@ -145,8 +112,8 @@ export async function getUserPhoneNumber(options: GetAuthenticatedUserParams) {
|
|
145
112
|
* @wallet
|
146
113
|
*/
|
147
114
|
export async function preAuthenticate(args: PreAuthArgsType) {
|
148
|
-
const
|
149
|
-
return
|
115
|
+
const connector = await getInAppWalletConnector(args.client);
|
116
|
+
return connector.preAuthenticate(args);
|
150
117
|
}
|
151
118
|
|
152
119
|
/**
|
@@ -169,15 +136,6 @@ export async function preAuthenticate(args: PreAuthArgsType) {
|
|
169
136
|
export async function authenticate(
|
170
137
|
args: AuthArgsType,
|
171
138
|
): Promise<AuthLoginReturnType> {
|
172
|
-
const
|
173
|
-
return
|
139
|
+
const connector = await getInAppWalletConnector(args.client);
|
140
|
+
return connector.authenticate(args);
|
174
141
|
}
|
175
|
-
|
176
|
-
export const oauthStrategyToAuthProvider: Record<
|
177
|
-
"google" | "facebook" | "apple",
|
178
|
-
AuthProvider
|
179
|
-
> = {
|
180
|
-
google: AuthProvider.GOOGLE,
|
181
|
-
facebook: AuthProvider.FACEBOOK,
|
182
|
-
apple: AuthProvider.APPLE,
|
183
|
-
};
|