@@ -10,13 +10,19 @@ import {
1010 mr ,
1111} from '@imtbl/generated-clients' ;
1212import { ZkEvmProvider } from './zkEvm/zkEvmProvider' ;
13- import { ConnectWalletOptions , PassportEventMap , ChainConfig } from './types' ;
13+ import { SequenceProvider } from './sequence/sequenceProvider' ;
14+ import {
15+ ConnectWalletOptions , PassportEventMap , ChainConfig , Provider ,
16+ } from './types' ;
1417import { WalletConfiguration } from './config' ;
1518import GuardianClient from './guardian' ;
1619import MagicTEESigner from './magic/magicTEESigner' ;
1720import { announceProvider , passportProviderInfo } from './provider/eip6963' ;
1821import { DEFAULT_CHAINS } from './presets' ;
19- import { MAGIC_CONFIG , IMMUTABLE_ZKEVM_TESTNET_CHAIN_ID } from './constants' ;
22+ import {
23+ MAGIC_CONFIG ,
24+ IMMUTABLE_ZKEVM_TESTNET_CHAIN_ID ,
25+ } from './constants' ;
2026
2127/**
2228 * Type guard to check if chainId is a valid key for MAGIC_CONFIG
@@ -64,6 +70,11 @@ const DEFAULT_REDIRECT_FALLBACK = 'https://auth.immutable.com/im-logged-in';
6470const DEFAULT_AUTHENTICATION_DOMAIN = 'https://auth.immutable.com' ;
6571const SANDBOX_DOMAIN_REGEX = / ( s a n d b o x | t e s t n e t ) / i;
6672
73+ function isZkEvmChain ( chain : ChainConfig ) : boolean {
74+ // Only zkEVM chains use magic
75+ return ! ! chain . magicPublishableApiKey || isValidMagicChainId ( chain . chainId ) ;
76+ }
77+
6778function isSandboxChain ( chain : ChainConfig ) : boolean {
6879 if ( chain . chainId === IMMUTABLE_ZKEVM_TESTNET_CHAIN_ID ) {
6980 return true ;
@@ -156,7 +167,7 @@ function createDefaultAuth(initialChain: ChainConfig, options: ConnectWalletOpti
156167 */
157168export async function connectWallet (
158169 config : ConnectWalletOptions = { } ,
159- ) : Promise < ZkEvmProvider > {
170+ ) : Promise < Provider > {
160171 // Use default chains if not provided (testnet + mainnet)
161172 const chains = config . chains && config . chains . length > 0
162173 ? config . chains
@@ -216,7 +227,10 @@ export async function connectWallet(
216227 feeTokenSymbol : config . feeTokenSymbol ,
217228 } ) ;
218229
219- // 6. Create GuardianClient
230+ // 6. Create PassportEventEmitter
231+ const passportEventEmitter = config . passportEventEmitter || new TypedEventEmitter < PassportEventMap > ( ) ;
232+
233+ // 7. Create GuardianClient
220234 const guardianApi = new mr . GuardianApi ( apiConfig ) ;
221235
222236 const guardianClient = new GuardianClient ( {
@@ -226,50 +240,57 @@ export async function connectWallet(
226240 authConfig,
227241 } ) ;
228242
229- // 7. Get Magic config for initial chain (from chain config or hard-coded default)
230- const magicConfig = getMagicConfigForChain ( initialChain ) ;
243+ // 8. Create provider based on chain type
244+ let provider : Provider ;
231245
232- // 8. Create MagicTEESigner with Magic TEE base path (separate from backend API)
233- const magicTeeBasePath = initialChain . magicTeeBasePath || 'https://tee.express.magiclabs.com' ;
234- const magicTeeApiClients = new MagicTeeApiClients ( {
235- basePath : magicTeeBasePath ,
236- timeout : 10000 ,
237- magicPublishableApiKey : magicConfig . magicPublishableApiKey ,
238- magicProviderId : magicConfig . magicProviderId ,
239- } ) ;
246+ if ( isZkEvmChain ( initialChain ) ) {
247+ // 9. Get Magic config for initial chain (from chain config or hard-coded default)
248+ const magicConfig = getMagicConfigForChain ( initialChain ) ;
240249
241- const ethSigner = new MagicTEESigner ( auth , magicTeeApiClients ) ;
242-
243- // 9. Determine session activity API URL (only for mainnet, testnet, devnet)
244- let sessionActivityApiUrl : string | null = null ;
245- if ( initialChain . chainId === 13371 ) {
246- // Mainnet
247- sessionActivityApiUrl = 'https://api.immutable.com' ;
248- } else if ( initialChain . chainId === 13473 ) {
249- // Testnet
250- sessionActivityApiUrl = 'https://api.sandbox.immutable.com' ;
251- } else if ( initialChain . apiUrl ) {
252- // Devnet - use the apiUrl from chain config
253- sessionActivityApiUrl = initialChain . apiUrl ;
250+ // 10. Create MagicTEESigner with Magic TEE base path (separate from backend API)
251+ const magicTeeBasePath = initialChain . magicTeeBasePath || 'https://tee.express.magiclabs.com' ;
252+ const magicTeeApiClients = new MagicTeeApiClients ( {
253+ basePath : magicTeeBasePath ,
254+ timeout : 10000 ,
255+ magicPublishableApiKey : magicConfig . magicPublishableApiKey ,
256+ magicProviderId : magicConfig . magicProviderId ,
257+ } ) ;
258+ const ethSigner = new MagicTEESigner ( auth , magicTeeApiClients ) ;
259+
260+ // 11. Determine session activity API URL (only for mainnet, testnet, devnet)
261+ let sessionActivityApiUrl : string | null = null ;
262+ if ( initialChain . chainId === 13371 ) {
263+ // Mainnet
264+ sessionActivityApiUrl = 'https://api.immutable.com' ;
265+ } else if ( initialChain . chainId === 13473 ) {
266+ // Testnet
267+ sessionActivityApiUrl = 'https://api.sandbox.immutable.com' ;
268+ } else if ( initialChain . apiUrl ) {
269+ // Devnet - use the apiUrl from chain config
270+ sessionActivityApiUrl = initialChain . apiUrl ;
271+ }
272+ // For any other chain, sessionActivityApiUrl remains null (no session activity tracking)
273+
274+ // 12. Create ZkEvmProvider
275+ provider = new ZkEvmProvider ( {
276+ auth,
277+ config : walletConfig ,
278+ multiRollupApiClients,
279+ passportEventEmitter,
280+ guardianClient,
281+ ethSigner,
282+ user,
283+ sessionActivityApiUrl,
284+ } ) ;
285+ } else {
286+ // Non-zkEVM chain - use SequenceProvider
287+ provider = new SequenceProvider ( {
288+ chainConfig : initialChain ,
289+ guardianClient,
290+ } ) ;
254291 }
255- // For any other chain, sessionActivityApiUrl remains null (no session activity tracking)
256-
257- // 10. Create PassportEventEmitter
258- const passportEventEmitter = config . passportEventEmitter || new TypedEventEmitter < PassportEventMap > ( ) ;
259-
260- // 11. Create ZkEvmProvider
261- const provider = new ZkEvmProvider ( {
262- auth,
263- config : walletConfig ,
264- multiRollupApiClients,
265- passportEventEmitter,
266- guardianClient,
267- ethSigner,
268- user,
269- sessionActivityApiUrl,
270- } ) ;
271292
272- // 12 . Announce provider via EIP-6963
293+ // 13 . Announce provider via EIP-6963
273294 if ( config . announceProvider !== false ) {
274295 announceProvider ( {
275296 info : passportProviderInfo ,
0 commit comments