Skip to content

Commit 4c289dd

Browse files
fix events of authorized emits
1 parent 73e1481 commit 4c289dd

File tree

14 files changed

+83
-53
lines changed

14 files changed

+83
-53
lines changed

packages/modal/src/modalManager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ export class Web3Auth extends Web3AuthNoModal implements IWeb3AuthModal {
197197

198198
const handleVisibility = (visibility: boolean) => {
199199
// modal is closed but user is not connected to any wallet.
200-
if (!visibility && this.status !== CONNECTOR_STATUS.CONNECTED) {
200+
if (!visibility && !CONNECTED_STATUSES.includes(this.status)) {
201201
this.removeListener(CONNECTOR_EVENTS.CONNECTED, handleConnected);
202202
this.removeListener(CONNECTOR_EVENTS.ERRORED, handleError);
203203
this.removeListener(CONNECTOR_EVENTS.AUTHORIZED, handleConnected);

packages/modal/src/react/hooks/useIdentityToken.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export interface IUseIdentityToken {
1111
}
1212

1313
export const useIdentityToken = () => {
14-
const { web3Auth, isConnected } = useWeb3AuthInner();
14+
const { web3Auth, isAuthorized } = useWeb3AuthInner();
1515

1616
const [loading, setLoading] = useState(false);
1717
const [error, setError] = useState<Web3AuthError | null>(null);
@@ -34,10 +34,14 @@ export const useIdentityToken = () => {
3434
}, [web3Auth]);
3535

3636
useEffect(() => {
37-
if (!isConnected && token) {
37+
if (!web3Auth) return;
38+
if (!isAuthorized && token) {
3839
setToken(null);
3940
}
40-
}, [isConnected, token]);
41+
if (isAuthorized && !token) {
42+
setToken(web3Auth.idToken);
43+
}
44+
}, [isAuthorized, token, web3Auth]);
4145

4246
return { loading, error, token, getIdentityToken };
4347
};

packages/modal/src/vue/composables/useIdentityToken.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export interface IUseIdentityToken {
1111
}
1212

1313
export const useIdentityToken = (): IUseIdentityToken => {
14-
const { web3Auth, isConnected } = useWeb3AuthInner();
14+
const { web3Auth, isAuthorized } = useWeb3AuthInner();
1515
const loading = ref(false);
1616
const error = ref<Web3AuthError | null>(null);
1717
const token = ref<string | null>(null);
@@ -33,11 +33,19 @@ export const useIdentityToken = (): IUseIdentityToken => {
3333
}
3434
};
3535

36-
watch(isConnected, (newIsConnected) => {
37-
if (!newIsConnected && token.value) {
38-
token.value = null;
39-
}
40-
});
36+
watch(
37+
isAuthorized,
38+
(newIsAuthorized) => {
39+
if (!web3Auth.value) return;
40+
if (!newIsAuthorized && token.value) {
41+
token.value = null;
42+
}
43+
if (newIsAuthorized && !token.value) {
44+
token.value = web3Auth.value.idToken;
45+
}
46+
},
47+
{ immediate: true }
48+
);
4149

4250
return {
4351
loading,

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,25 +101,30 @@ export type BaseConnectorLoginParams = {
101101
export type ConnectorFn = (params: ConnectorParams) => IConnector<unknown>;
102102

103103
export type CONNECTED_EVENT_DATA = {
104-
connector: WALLET_CONNECTOR_TYPE;
104+
connector: WALLET_CONNECTOR_TYPE | string;
105105
provider: IProvider;
106106
reconnected: boolean;
107107
identityTokenInfo: IdentityTokenInfo;
108108
};
109109

110+
export type AUTHORIZED_EVENT_DATA = {
111+
connector: WALLET_CONNECTOR_TYPE | string;
112+
identityTokenInfo: IdentityTokenInfo;
113+
};
114+
110115
export interface IConnectorDataEvent {
111116
connectorName: string;
112117
data: unknown;
113118
}
114119

115120
export type ConnectorEvents = {
116121
[CONNECTOR_EVENTS.NOT_READY]: () => void;
117-
[CONNECTOR_EVENTS.READY]: (connector: string) => void;
122+
[CONNECTOR_EVENTS.READY]: (connector: WALLET_CONNECTOR_TYPE | string) => void;
118123
[CONNECTOR_EVENTS.CONNECTED]: (data: CONNECTED_EVENT_DATA) => void;
119124
[CONNECTOR_EVENTS.DISCONNECTED]: () => void;
120-
[CONNECTOR_EVENTS.CONNECTING]: (data: { connector: string }) => void;
121-
[CONNECTOR_EVENTS.AUTHORIZING]: (data: { connector: string }) => void;
122-
[CONNECTOR_EVENTS.AUTHORIZED]: (data: { connector: string }) => void;
125+
[CONNECTOR_EVENTS.CONNECTING]: (data: { connector: WALLET_CONNECTOR_TYPE | string }) => void;
126+
[CONNECTOR_EVENTS.AUTHORIZING]: (data: { connector: WALLET_CONNECTOR_TYPE | string }) => void;
127+
[CONNECTOR_EVENTS.AUTHORIZED]: (data: AUTHORIZED_EVENT_DATA) => void;
123128
[CONNECTOR_EVENTS.ERRORED]: (error: Web3AuthError) => void;
124129
[CONNECTOR_EVENTS.REHYDRATION_ERROR]: (error: Web3AuthError) => void;
125130
[CONNECTOR_EVENTS.CONNECTOR_DATA_UPDATED]: (data: IConnectorDataEvent) => void;

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,11 @@ class AuthConnector extends BaseConnector<AuthLoginParams> {
273273

274274
async getIdentityToken(): Promise<{ idToken: string }> {
275275
if (!this.canAuthorize) throw WalletLoginError.notConnectedError("Not connected with wallet, Please login/connect first");
276+
this.status = CONNECTOR_STATUS.AUTHORIZING;
277+
this.emit(CONNECTOR_EVENTS.AUTHORIZING, { connector: WALLET_CONNECTORS.AUTH });
276278
const userInfo = await this.getUserInfo();
279+
this.status = CONNECTOR_STATUS.AUTHORIZED;
280+
this.emit(CONNECTOR_EVENTS.AUTHORIZED, { connector: WALLET_CONNECTORS.AUTH, identityTokenInfo: { idToken: userInfo.idToken as string } });
277281
return { idToken: userInfo.idToken as string };
278282
}
279283

@@ -410,11 +414,7 @@ class AuthConnector extends BaseConnector<AuthLoginParams> {
410414
} as CONNECTED_EVENT_DATA);
411415

412416
if (params.getIdentityToken) {
413-
this.status = CONNECTOR_STATUS.AUTHORIZING;
414-
this.emit(CONNECTOR_EVENTS.AUTHORIZING, { connector: WALLET_CONNECTORS.AUTH });
415417
identityTokenInfo = await this.getIdentityToken();
416-
this.status = CONNECTOR_STATUS.AUTHORIZED;
417-
this.emit(CONNECTOR_EVENTS.AUTHORIZED, { connector: WALLET_CONNECTORS.AUTH });
418418
}
419419
// handle disconnect from ws embed
420420
this.wsEmbedInstance?.provider.on("accountsChanged", (accounts: unknown[] = []) => {

packages/no-modal/src/connectors/base-evm-connector/baseEvmConnector.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import {
66
checkIfTokenIsExpired,
77
clearToken,
88
CONNECTOR_EVENTS,
9+
CONNECTOR_STATUS,
910
ConnectorInitOptions,
1011
getSavedToken,
1112
IdentityTokenInfo,
1213
saveToken,
14+
WALLET_CONNECTOR_TYPE,
1315
WalletInitializationError,
1416
WalletLoginError,
1517
} from "../../base";
@@ -20,13 +22,16 @@ export abstract class BaseEvmConnector<T> extends BaseConnector<T> {
2022
async getIdentityToken(): Promise<IdentityTokenInfo> {
2123
if (!this.provider || !this.canAuthorize) throw WalletLoginError.notConnectedError();
2224
if (!this.coreOptions) throw WalletInitializationError.invalidParams("Please initialize Web3Auth with valid options");
23-
25+
this.status = CONNECTOR_STATUS.AUTHORIZING;
26+
this.emit(CONNECTOR_EVENTS.AUTHORIZING, { connector: this.name as WALLET_CONNECTOR_TYPE });
2427
const accounts = await this.provider.request<never, string[]>({ method: EVM_METHOD_TYPES.GET_ACCOUNTS });
2528
if (accounts && accounts.length > 0) {
2629
const existingToken = getSavedToken(accounts[0] as string, this.name);
2730
if (existingToken) {
2831
const isExpired = checkIfTokenIsExpired(existingToken);
2932
if (!isExpired) {
33+
this.status = CONNECTOR_STATUS.AUTHORIZED;
34+
this.emit(CONNECTOR_EVENTS.AUTHORIZED, { connector: this.name as WALLET_CONNECTOR_TYPE, identityTokenInfo: { idToken: existingToken } });
3035
return { idToken: existingToken };
3136
}
3237
}
@@ -63,6 +68,8 @@ export abstract class BaseEvmConnector<T> extends BaseConnector<T> {
6368
this.coreOptions.web3AuthNetwork
6469
);
6570
saveToken(accounts[0] as string, this.name, idToken);
71+
this.status = CONNECTOR_STATUS.AUTHORIZED;
72+
this.emit(CONNECTOR_EVENTS.AUTHORIZED, { connector: this.name as WALLET_CONNECTOR_TYPE, identityTokenInfo: { idToken } });
6673
return { idToken };
6774
}
6875
throw WalletLoginError.notConnectedError("Not connected with wallet, Please login/connect first");

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,7 @@ class CoinbaseConnector extends BaseEvmConnector<void> {
125125
} as CONNECTED_EVENT_DATA);
126126

127127
if (getIdentityToken) {
128-
this.status = CONNECTOR_STATUS.AUTHORIZING;
129-
this.emit(CONNECTOR_EVENTS.AUTHORIZING, { connector: WALLET_CONNECTORS.COINBASE });
130128
identityTokenInfo = await this.getIdentityToken();
131-
this.status = CONNECTOR_STATUS.AUTHORIZED;
132-
this.emit(CONNECTOR_EVENTS.AUTHORIZED, { connector: WALLET_CONNECTORS.COINBASE });
133129
}
134130

135131
return this.provider;

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,7 @@ class InjectedEvmConnector extends BaseEvmConnector<void> {
119119
} as CONNECTED_EVENT_DATA);
120120

121121
if (getIdentityToken) {
122-
this.status = CONNECTOR_STATUS.AUTHORIZING;
123-
this.emit(CONNECTOR_EVENTS.AUTHORIZING, { connector: this.name });
124122
identityTokenInfo = await this.getIdentityToken();
125-
this.status = CONNECTOR_STATUS.AUTHORIZED;
126-
this.emit(CONNECTOR_EVENTS.AUTHORIZED, { connector: this.name });
127123
}
128124

129125
return this.injectedProvider;

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,7 @@ export class WalletStandardConnector extends BaseSolanaConnector<void> {
121121
} as CONNECTED_EVENT_DATA);
122122

123123
if (getIdentityToken) {
124-
this.status = CONNECTOR_STATUS.AUTHORIZING;
125-
this.emit(CONNECTOR_EVENTS.AUTHORIZING, { connector: this.name });
126124
identityTokenInfo = await this.getIdentityToken();
127-
this.status = CONNECTOR_STATUS.AUTHORIZED;
128-
this.emit(CONNECTOR_EVENTS.AUTHORIZED, { connector: this.name });
129125
}
130126

131127
return this.provider;

packages/no-modal/src/connectors/metamask-connector/metamaskConnector.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,11 +188,7 @@ class MetaMaskConnector extends BaseEvmConnector<void> {
188188
} as CONNECTED_EVENT_DATA);
189189

190190
if (getIdentityToken) {
191-
this.status = CONNECTOR_STATUS.AUTHORIZING;
192-
this.emit(CONNECTOR_EVENTS.AUTHORIZING, { connector: WALLET_CONNECTORS.METAMASK });
193191
identityTokenInfo = await this.getIdentityToken();
194-
this.status = CONNECTOR_STATUS.AUTHORIZED;
195-
this.emit(CONNECTOR_EVENTS.AUTHORIZED, { connector: WALLET_CONNECTORS.METAMASK });
196192
}
197193

198194
return this.metamaskProvider;

0 commit comments

Comments
 (0)