@@ -17,13 +17,12 @@ import {
17
17
import { ThirdwebStorage } from "@thirdweb-dev/storage" ;
18
18
import {
19
19
type DAppMetaData ,
20
- type EmbeddedWalletOauthStrategy ,
20
+ InAppWallet ,
21
+ type InAppWalletOauthStrategy ,
21
22
type SmartWalletConfig ,
22
- walletIds ,
23
23
} from "@thirdweb-dev/wallets" ;
24
24
import type { AbstractClientWallet } from "@thirdweb-dev/wallets/evm/wallets/base" ;
25
25
import { CoinbaseWallet } from "@thirdweb-dev/wallets/evm/wallets/coinbase-wallet" ;
26
- import { EmbeddedWallet } from "@thirdweb-dev/wallets/evm/wallets/embedded-wallet" ;
27
26
import { EthersWallet } from "@thirdweb-dev/wallets/evm/wallets/ethers" ;
28
27
import { InjectedWallet } from "@thirdweb-dev/wallets/evm/wallets/injected" ;
29
28
import { LocalWallet } from "@thirdweb-dev/wallets/evm/wallets/local-wallet" ;
@@ -66,30 +65,28 @@ const bigNumberReplacer = (_key: string, value: any) => {
66
65
return value ;
67
66
} ;
68
67
69
- const WALLETS = [
70
- MetaMaskWallet ,
71
- InjectedWallet ,
72
- WalletConnect ,
73
- CoinbaseWallet ,
74
- LocalWallet ,
75
- SmartWallet ,
76
- EmbeddedWallet ,
68
+ const SUPPORTED_WALLET_IDS = [
69
+ "injected" ,
70
+ "metamask" ,
71
+ "walletConnect" ,
72
+ "coinbase" ,
73
+ "localWallet" ,
74
+ "smartWallet" ,
75
+ "inAppWallet" ,
77
76
] as const ;
78
77
79
- type PossibleWallet = ( typeof WALLETS ) [ number ] [ "id" ] ;
80
-
81
78
type FundWalletInput = FundWalletOptions & {
82
79
appId : string ;
83
80
} ;
84
81
85
82
interface TWBridge {
86
83
initialize : ( chain : ChainIdOrName , options : string ) => void ;
87
84
connect : (
88
- wallet : PossibleWallet ,
85
+ wallet : string ,
89
86
chainId : string ,
90
87
password ?: string ,
91
88
email ?: string ,
92
- personalWallet ?: PossibleWallet ,
89
+ personalWallet ?: string ,
93
90
authOptions ?: string ,
94
91
smartWalletAccountOverride ?: string ,
95
92
) => Promise < string > ;
@@ -174,10 +171,11 @@ class ThirdwebBridge implements TWBridge {
174
171
// biome-ignore lint/suspicious/noExplicitAny: TODO: fix use of any
175
172
( globalThis as any ) . X_SDK_PLATFORM = "unity" ;
176
173
// biome-ignore lint/suspicious/noExplicitAny: TODO: fix use of any
177
- ( globalThis as any ) . X_SDK_VERSION = "unity-4.10.1 " ;
174
+ ( globalThis as any ) . X_SDK_VERSION = "unity-4.11.0 " ;
178
175
// biome-ignore lint/suspicious/noExplicitAny: TODO: fix use of any
179
176
( globalThis as any ) . X_SDK_OS = browser ?. os ?? "unknown" ;
180
177
}
178
+
181
179
this . initializedChain = chain ;
182
180
const sdkOptions = JSON . parse ( options ) ;
183
181
// biome-ignore lint/suspicious/noExplicitAny: TODO: fix use of any
@@ -215,7 +213,7 @@ class ThirdwebBridge implements TWBridge {
215
213
clientId : sdkOptions . clientId ,
216
214
} ) ;
217
215
this . activeSDK = new ThirdwebSDK ( chain , sdkOptions , storage ) ;
218
- for ( const possibleWallet of WALLETS ) {
216
+ for ( const walletId of SUPPORTED_WALLET_IDS ) {
219
217
let walletInstance : AbstractClientWallet ;
220
218
const dappMetadata : DAppMetaData = {
221
219
name : sdkOptions . wallet ?. appName || "thirdweb powered game" ,
@@ -224,22 +222,22 @@ class ThirdwebBridge implements TWBridge {
224
222
logoUrl : sdkOptions . wallet ?. appIcons ?. [ 0 ] || "" ,
225
223
...sdkOptions . wallet ?. extras ,
226
224
} ;
227
- switch ( possibleWallet . id ) {
225
+ switch ( walletId ) {
228
226
case "injected" :
229
227
walletInstance = new InjectedWallet ( {
230
228
dappMetadata,
231
229
chains : supportedChains ,
232
230
clientId : sdkOptions . clientId ,
233
231
} ) ;
234
232
break ;
235
- case walletIds . metamask :
233
+ case " metamask" :
236
234
walletInstance = new MetaMaskWallet ( {
237
235
dappMetadata,
238
236
chains : supportedChains ,
239
237
clientId : sdkOptions . clientId ,
240
238
} ) ;
241
239
break ;
242
- case walletIds . walletConnect :
240
+ case " walletConnect" :
243
241
walletInstance = new WalletConnect ( {
244
242
projectId : sdkOptions . wallet ?. walletConnectProjectId ,
245
243
dappMetadata,
@@ -261,21 +259,21 @@ class ThirdwebBridge implements TWBridge {
261
259
} ,
262
260
} ) ;
263
261
break ;
264
- case walletIds . coinbase :
262
+ case " coinbase" :
265
263
walletInstance = new CoinbaseWallet ( {
266
264
dappMetadata,
267
265
chains : supportedChains ,
268
266
clientId : sdkOptions . clientId ,
269
267
} ) ;
270
268
break ;
271
- case walletIds . localWallet :
269
+ case " localWallet" :
272
270
walletInstance = new LocalWallet ( {
273
271
dappMetadata,
274
272
chains : supportedChains ,
275
273
clientId : sdkOptions . clientId ,
276
274
} ) ;
277
275
break ;
278
- case walletIds . smartWallet : {
276
+ case " smartWallet" : {
279
277
const config : SmartWalletConfig = {
280
278
chain : chain ,
281
279
factoryAddress : sdkOptions . smartWalletConfig ?. factoryAddress ,
@@ -292,16 +290,16 @@ class ThirdwebBridge implements TWBridge {
292
290
walletInstance = new SmartWallet ( config ) ;
293
291
break ;
294
292
}
295
- case walletIds . embeddedWallet :
296
- walletInstance = new EmbeddedWallet ( {
293
+ case "inAppWallet" :
294
+ walletInstance = new InAppWallet ( {
297
295
clientId : sdkOptions . clientId ,
298
296
chain : Ethereum ,
299
297
dappMetadata,
300
298
chains : supportedChains ,
301
299
} ) ;
302
300
break ;
303
301
default :
304
- throw new Error ( `Unknown wallet type: ${ possibleWallet . id } ` ) ;
302
+ throw new Error ( `Unknown wallet type: ${ walletId } ` ) ;
305
303
}
306
304
if ( walletInstance ) {
307
305
walletInstance . on ( "connect" , async ( ) =>
@@ -312,19 +310,19 @@ class ThirdwebBridge implements TWBridge {
312
310
) ;
313
311
walletInstance . on ( "disconnect" , ( ) => this . updateSDKSigner ( ) ) ;
314
312
315
- this . walletMap . set ( possibleWallet . id , walletInstance ) ;
313
+ this . walletMap . set ( walletId , walletInstance ) ;
316
314
}
317
315
}
318
316
}
319
317
320
318
public async connect (
321
319
// biome-ignore lint/style/useDefaultParameterLast: would change the order of parameters to fix this
322
- wallet : PossibleWallet = "injected" ,
320
+ wallet : string ,
323
321
chainId : string ,
324
322
password ?: string ,
325
323
email ?: string ,
326
324
phoneNumber ?: string ,
327
- personalWallet : PossibleWallet = "localWallet" ,
325
+ personalWallet ?: string ,
328
326
authOptions ?: string ,
329
327
smartWalletAccountOverride ?: string ,
330
328
) {
@@ -335,13 +333,13 @@ class ThirdwebBridge implements TWBridge {
335
333
const chainIdNumber = Number ( chainId ) ;
336
334
if ( walletInstance ) {
337
335
// local wallet needs to be generated or loaded before connecting
338
- if ( walletInstance . walletId === walletIds . localWallet ) {
336
+ if ( wallet === " localWallet" ) {
339
337
await this . initializeLocalWallet ( password as string ) ;
340
338
walletInstance . connect ( { chainId : chainIdNumber } ) ;
341
339
}
342
340
343
- if ( walletInstance . walletId === walletIds . embeddedWallet ) {
344
- const embeddedWallet = walletInstance as EmbeddedWallet ;
341
+ if ( wallet === "inAppWallet" ) {
342
+ const embeddedWallet = walletInstance as InAppWallet ;
345
343
const authOptionsParsed = JSON . parse ( authOptions || "{}" ) ;
346
344
if ( authOptionsParsed . authProvider === 0 ) {
347
345
// EmailOTP
@@ -358,7 +356,7 @@ class ThirdwebBridge implements TWBridge {
358
356
} ) ;
359
357
} else if ( authOptionsParsed . authProvider < 4 ) {
360
358
// OAuth
361
- let authProvider : EmbeddedWalletOauthStrategy ;
359
+ let authProvider : InAppWalletOauthStrategy ;
362
360
switch ( authOptionsParsed . authProvider ) {
363
361
// Google
364
362
case 1 :
@@ -437,17 +435,21 @@ class ThirdwebBridge implements TWBridge {
437
435
`Invalid auth provider: ${ authOptionsParsed . authProvider } ` ,
438
436
) ;
439
437
}
440
- } else if ( walletInstance . walletId === walletIds . smartWallet ) {
438
+ } else if ( wallet === "smartWallet" ) {
439
+ if ( ! personalWallet ) {
440
+ throw new Error ( "Personal wallet is required for smart wallet" ) ;
441
+ }
441
442
const smartWallet = walletInstance as SmartWallet ;
442
- const eoaWallet = this . walletMap . get ( personalWallet ) ;
443
443
// Connect flow for EOA first
444
444
await this . connect (
445
- eoaWallet ?. walletId ,
445
+ personalWallet ,
446
446
chainId ,
447
447
password ,
448
448
email ,
449
- personalWallet ,
449
+ phoneNumber ,
450
+ undefined ,
450
451
authOptions ,
452
+ undefined ,
451
453
) ;
452
454
await this . switchNetwork ( chainId ) ; // workaround for polygon/mumbai
453
455
if ( this . activeWallet ) {
@@ -471,7 +473,7 @@ class ThirdwebBridge implements TWBridge {
471
473
this . updateSDKSigner ( await walletInstance . getSigner ( ) ) ;
472
474
return await this . activeSDK . wallet . getAddress ( ) ;
473
475
}
474
- throw new Error ( "Invalid Wallet" ) ;
476
+ throw new Error ( `This wallet is not supported in WebGL: ${ wallet } ` ) ;
475
477
}
476
478
477
479
public async disconnect ( ) {
@@ -728,9 +730,7 @@ class ThirdwebBridge implements TWBridge {
728
730
}
729
731
730
732
public async exportWallet ( password : string ) : Promise < string > {
731
- const localWallet = this . walletMap . get (
732
- walletIds . localWallet ,
733
- ) as LocalWallet ;
733
+ const localWallet = this . walletMap . get ( "localWallet" ) as LocalWallet ;
734
734
return await localWallet . export ( {
735
735
strategy : "encryptedJson" ,
736
736
password : password ,
@@ -754,9 +754,7 @@ class ThirdwebBridge implements TWBridge {
754
754
}
755
755
756
756
public async initializeLocalWallet ( password : string ) : Promise < LocalWallet > {
757
- const localWallet = this . walletMap . get (
758
- walletIds . localWallet ,
759
- ) as LocalWallet ;
757
+ const localWallet = this . walletMap . get ( "localWallet" ) as LocalWallet ;
760
758
try {
761
759
await localWallet . loadOrCreate ( {
762
760
strategy : "encryptedJson" ,
@@ -872,9 +870,7 @@ class ThirdwebBridge implements TWBridge {
872
870
if ( ! this . activeWallet ) {
873
871
throw new Error ( "No wallet connected" ) ;
874
872
}
875
- const embeddedWallet = this . walletMap . get (
876
- walletIds . embeddedWallet ,
877
- ) as EmbeddedWallet ;
873
+ const embeddedWallet = this . walletMap . get ( "inAppWallet" ) as InAppWallet ;
878
874
const email = await embeddedWallet . getEmail ( ) ;
879
875
return JSON . stringify ( { result : email } ) ;
880
876
}
0 commit comments