Skip to content

Commit 13f5e74

Browse files
author
Nguyen Anh Tu
committed
use sdk chain state in provider and connector
1 parent 6514a46 commit 13f5e74

File tree

28 files changed

+321
-503
lines changed

28 files changed

+321
-503
lines changed

demo/vue-app-new/src/MainView.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ const accountAbstractionProvider = computed((): IBaseProvider<IProvider> | undef
5959
6060
return new AccountAbstractionProvider({
6161
config: {
62-
chainConfig,
6362
bundlerConfig: { url: formData.bundlerUrl ?? getDefaultBundlerUrl(chainConfig.chainId) },
6463
paymasterConfig: formData.paymasterUrl
6564
? {

packages/modal/src/modalManager.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,10 @@ export class Web3Auth extends Web3AuthNoModal implements IWeb3AuthModal {
7373
await this.loginModal.initModal();
7474

7575
// setup common JRPC provider
76-
this.commonJRPCProvider = await CommonJRPCProvider.getProviderInstance({ chainConfig: this.currentChain });
76+
this.commonJRPCProvider = await CommonJRPCProvider.getProviderInstance({
77+
getCurrentChain: this.getCurrentChain.bind(this),
78+
getChain: this.getChain.bind(this),
79+
});
7780
const { key_export_enabled: keyExportEnabled } = projectConfig;
7881
if (typeof keyExportEnabled === "boolean") {
7982
// dont know if we need to do this.

packages/no-modal/src/base/connector/interfaces.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
} from "@web3auth/auth";
1414

1515
import { ConnectorNamespaceType, CustomChainConfig } from "../chain/IChainInterface";
16-
import { IWeb3AuthCoreOptions } from "../core/IWeb3Auth";
16+
import { IWeb3Auth, IWeb3AuthCoreOptions } from "../core/IWeb3Auth";
1717
import { Web3AuthError } from "../errors";
1818
import { PROJECT_CONFIG_RESPONSE } from "../interfaces";
1919
import { ProviderEvents, SafeEventEmitterProvider } from "../provider/IProvider";
@@ -42,6 +42,8 @@ export type UserAuthInfo = { idToken: string };
4242

4343
export interface BaseConnectorSettings {
4444
coreOptions: IWeb3AuthCoreOptions;
45+
getCurrentChain: IWeb3Auth["getCurrentChain"];
46+
getChain: IWeb3Auth["getChain"];
4547
}
4648

4749
export interface IProvider extends SafeEventEmitter<ProviderEvents> {
@@ -54,8 +56,8 @@ export interface IProvider extends SafeEventEmitter<ProviderEvents> {
5456

5557
export interface IBaseProvider<T> extends IProvider {
5658
provider: SafeEventEmitterProvider | null;
57-
currentChainConfig: CustomChainConfig;
58-
setupProvider(provider: T): Promise<void>;
59+
currentChain: CustomChainConfig;
60+
setupProvider(provider: T, chainId: string): Promise<void>;
5961
switchChain(params: { chainId: string }): Promise<void>;
6062
updateProviderEngineProxy(provider: SafeEventEmitterProvider): void;
6163
setKeyExportFlag(flag: boolean): void;
@@ -83,6 +85,8 @@ export interface IConnector<T> extends SafeEventEmitter {
8385
export type ConnectorParams = {
8486
projectConfig?: PROJECT_CONFIG_RESPONSE;
8587
coreOptions: IWeb3AuthCoreOptions;
88+
getCurrentChain: IWeb3Auth["getCurrentChain"];
89+
getChain: IWeb3Auth["getChain"];
8690
};
8791

8892
export type ConnectorFn = (params: ConnectorParams) => IConnector<unknown>;

packages/no-modal/src/base/core/IWeb3Auth.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ export interface IWeb3AuthCore extends SafeEventEmitter {
129129
export interface IWeb3Auth extends IWeb3AuthCore {
130130
connected: boolean;
131131
cachedConnector: string | null;
132+
getCurrentChain(): CustomChainConfig;
133+
getChain(chainId: string): CustomChainConfig | undefined;
132134
getConnector(connectorName: WALLET_CONNECTOR_TYPE): IConnector<unknown> | null;
133135
/**
134136
* Connect to a specific wallet connector

packages/no-modal/src/connectors/auth-connector/authConnector.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,18 @@ class AuthConnector extends BaseConnector<AuthLoginParams> {
5757

5858
private wsEmbedInstance: WsEmbed | null = null;
5959

60+
private getCurrentChain: AuthConnectorOptions["getCurrentChain"];
61+
62+
private getChain: AuthConnectorOptions["getChain"];
63+
6064
constructor(params: AuthConnectorOptions) {
6165
super(params);
6266

6367
// set auth options
64-
const defaultOptions = getAuthDefaultOptions();
68+
const defaultOptions = getAuthDefaultOptions({
69+
getCurrentChain: params.getCurrentChain,
70+
getChain: params.getChain,
71+
});
6572
log.info("setting connector settings", params.connectorSettings);
6673
this.authOptions = deepmerge.all([
6774
defaultOptions.connectorSettings,
@@ -71,6 +78,8 @@ class AuthConnector extends BaseConnector<AuthLoginParams> {
7178

7279
this.loginSettings = params.loginSettings || { loginProvider: "" };
7380
this.wsSettings = params.walletServicesSettings || {};
81+
this.getCurrentChain = params.getCurrentChain;
82+
this.getChain = params.getChain;
7483
}
7584

7685
get provider(): IProvider | null {
@@ -132,14 +141,14 @@ class AuthConnector extends BaseConnector<AuthLoginParams> {
132141
case CHAIN_NAMESPACES.XRPL: {
133142
const { XrplPrivateKeyProvider } = await import("@/core/xrpl-provider");
134143
this.privateKeyProvider = new XrplPrivateKeyProvider({
135-
config: { chainConfig },
144+
config: { getCurrentChain: this.getCurrentChain, getChain: this.getChain },
136145
});
137146
break;
138147
}
139148
default: {
140149
const { CommonPrivateKeyProvider } = await import("@/core/base-provider");
141150
this.privateKeyProvider = new CommonPrivateKeyProvider({
142-
config: { chainConfig },
151+
config: {},
143152
});
144153
}
145154
}
@@ -333,7 +342,7 @@ class AuthConnector extends BaseConnector<AuthLoginParams> {
333342
// setup private key provider if chainNamespace is other
334343
const finalPrivKey = this._getFinalPrivKey();
335344
if (finalPrivKey) {
336-
await this.privateKeyProvider.setupProvider(finalPrivKey);
345+
await this.privateKeyProvider.setupProvider(finalPrivKey, params.chainId);
337346
this.status = CONNECTOR_STATUS.CONNECTED;
338347
this.emit(CONNECTOR_EVENTS.CONNECTED, {
339348
connector: WALLET_CONNECTORS.AUTH,
@@ -346,7 +355,7 @@ class AuthConnector extends BaseConnector<AuthLoginParams> {
346355
}
347356

348357
export const authConnector = (params?: { uxMode?: UX_MODE_TYPE }): ConnectorFn => {
349-
return ({ projectConfig, coreOptions }: ConnectorParams) => {
358+
return ({ projectConfig, coreOptions, getCurrentChain, getChain }: ConnectorParams) => {
350359
const connectorSettings: AuthConnectorOptions["connectorSettings"] = {
351360
network: coreOptions.web3AuthNetwork || WEB3AUTH_NETWORK.SAPPHIRE_MAINNET,
352361
clientId: coreOptions.clientId,
@@ -387,6 +396,8 @@ export const authConnector = (params?: { uxMode?: UX_MODE_TYPE }): ConnectorFn =
387396
connectorSettings,
388397
walletServicesSettings: finalWsSettings,
389398
coreOptions,
399+
getCurrentChain,
400+
getChain,
390401
};
391402
return new AuthConnector(connectorOptions);
392403
};

packages/no-modal/src/connectors/auth-connector/config.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
import { UX_MODE, WEB3AUTH_NETWORK } from "@web3auth/auth";
22

3+
import { IWeb3Auth } from "@/core/base";
4+
35
import { AuthConnectorOptions } from "./interface";
46

5-
export const getAuthDefaultOptions = (): AuthConnectorOptions => {
7+
export const getAuthDefaultOptions = ({
8+
getCurrentChain,
9+
getChain,
10+
}: {
11+
getCurrentChain: IWeb3Auth["getCurrentChain"];
12+
getChain: IWeb3Auth["getChain"];
13+
}): AuthConnectorOptions => {
614
return {
715
connectorSettings: {
816
network: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET,
@@ -14,5 +22,7 @@ export const getAuthDefaultOptions = (): AuthConnectorOptions => {
1422
chains: [],
1523
clientId: "",
1624
},
25+
getCurrentChain,
26+
getChain,
1727
};
1828
};

packages/no-modal/src/connectors/coinbase-connector/coinbaseConnector.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,12 @@ class CoinbaseConnector extends BaseEvmConnector<void> {
167167
}
168168

169169
export const coinbaseConnector = (params?: CoinbaseWalletSDKOptions): ConnectorFn => {
170-
return ({ coreOptions }: ConnectorParams) => {
170+
return ({ coreOptions, getCurrentChain, getChain }: ConnectorParams) => {
171171
return new CoinbaseConnector({
172172
connectorSettings: params,
173173
coreOptions,
174+
getCurrentChain,
175+
getChain,
174176
});
175177
};
176178
};

packages/no-modal/src/connectors/default-evm-connector/injectedEvmConnector.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,13 @@ class InjectedEvmConnector extends BaseEvmConnector<void> {
173173
}
174174

175175
export const injectedEvmConnector = (providerDetail: EIP6963ProviderDetail): ConnectorFn => {
176-
return ({ coreOptions }: ConnectorParams) => {
176+
return ({ coreOptions, getCurrentChain, getChain }: ConnectorParams) => {
177177
return new InjectedEvmConnector({
178178
name: normalizeWalletName(providerDetail.info.name),
179179
provider: providerDetail.provider as IProvider,
180180
coreOptions,
181+
getCurrentChain,
182+
getChain,
181183
});
182184
};
183185
};

packages/no-modal/src/connectors/default-solana-connector/walletStandardConnector.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,15 @@ export class WalletStandardConnector extends BaseSolanaConnector<void> {
4646

4747
private injectedProvider: WalletStandardProvider | null = null;
4848

49+
private getCurrentChain: BaseConnectorSettings["getCurrentChain"];
50+
51+
private getChain: BaseConnectorSettings["getChain"];
52+
4953
constructor(options: BaseConnectorSettings & { name: string; wallet: Wallet }) {
5054
super(options);
5155
this.name = options.name;
56+
this.getCurrentChain = options.getCurrentChain;
57+
this.getChain = options.getChain;
5258
// in VueJS, for some wallets e.g. Gate, Solflare, when connecting it throws error "attempted to get private field on non-instance"
5359
// it seems that Vue create a Proxy object for the wallet object which causes the issue
5460
// ref: https://stackoverflow.com/questions/64917686/vue-array-converted-to-proxy-object
@@ -71,12 +77,12 @@ export class WalletStandardConnector extends BaseSolanaConnector<void> {
7177
const chainConfig = this.coreOptions.chains.find((x) => x.chainId === options.chainId);
7278
super.checkInitializationRequirements({ chainConfig });
7379

74-
this.injectedProvider = new WalletStandardProvider({ config: { chainConfig } });
80+
this.injectedProvider = new WalletStandardProvider({ config: { getCurrentChain: this.getCurrentChain, getChain: this.getChain } });
7581
const providerHandler = new WalletStandardProviderHandler({
7682
wallet: this.wallet,
7783
getCurrentChain: () => getSolanaChainByChainConfig(chainConfig),
7884
});
79-
this.injectedProvider.setupProvider(providerHandler);
85+
this.injectedProvider.setupProvider(providerHandler, options.chainId);
8086

8187
this.status = CONNECTOR_STATUS.READY;
8288
this.emit(CONNECTOR_EVENTS.READY, this.name);
@@ -159,11 +165,13 @@ export class WalletStandardConnector extends BaseSolanaConnector<void> {
159165
}
160166

161167
export const walletStandardConnector = (wallet: Wallet): ConnectorFn => {
162-
return ({ coreOptions }: ConnectorParams) => {
168+
return ({ coreOptions, getCurrentChain, getChain }: ConnectorParams) => {
163169
return new WalletStandardConnector({
164170
name: normalizeWalletName(wallet.name),
165171
wallet,
166172
coreOptions,
173+
getCurrentChain,
174+
getChain,
167175
});
168176
};
169177
};

0 commit comments

Comments
 (0)