Skip to content

Commit fe294d2

Browse files
scastleman-immutableSamuel Castleman
andauthored
feat: moved magic client instantiation to the adapter class constructor; added call to magic preload function (#988)
Co-authored-by: Samuel Castleman <[email protected]>
1 parent 306fd90 commit fe294d2

File tree

7 files changed

+28
-19
lines changed

7 files changed

+28
-19
lines changed

packages/passport/sdk/src/Passport.int.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ describe('Passport', () => {
8383
rpcProvider: {
8484
request: mockMagicRequest,
8585
},
86+
preload: jest.fn(),
8687
}));
8788
});
8889

packages/passport/sdk/src/magicAdapter.test.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ describe('MagicWallet', () => {
2626
magicProviderId: providerId,
2727
} as PassportConfiguration;
2828
const idToken = 'e30=.e30=.e30=';
29+
const preload = jest.fn();
2930

3031
beforeEach(() => {
3132
jest.resetAllMocks();
@@ -37,13 +38,20 @@ describe('MagicWallet', () => {
3738
logout: logoutMock,
3839
},
3940
rpcProvider,
41+
preload,
4042
}));
4143
magicWallet = new MagicAdapter(config);
4244
});
4345

46+
describe('preload', () => {
47+
it('should have called the magic client preload method', () => {
48+
expect(preload).toHaveBeenCalled();
49+
});
50+
});
51+
4452
describe('login', () => {
4553
it('should call loginWithOIDC and initialise the provider with the correct arguments', async () => {
46-
const magicProvider = await magicWallet.login(idToken, config.network);
54+
const magicProvider = await magicWallet.login(idToken);
4755

4856
expect(Magic).toHaveBeenCalledWith(apiKey, {
4957
network: config.network,
@@ -64,7 +72,7 @@ describe('MagicWallet', () => {
6472
});
6573

6674
await expect(async () => {
67-
await magicWallet.login(idToken, config.network);
75+
await magicWallet.login(idToken);
6876
}).rejects.toThrow(
6977
new PassportError(
7078
'oops',
@@ -76,7 +84,7 @@ describe('MagicWallet', () => {
7684

7785
describe('logout', () => {
7886
it('calls the logout function', async () => {
79-
await magicWallet.login(idToken, config.network);
87+
await magicWallet.login(idToken);
8088
await magicWallet.logout();
8189

8290
expect(logoutMock).toHaveBeenCalled();

packages/passport/sdk/src/magicAdapter.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,25 @@ import { OpenIdExtension } from '@magic-ext/oidc';
44
import { ethers } from 'ethers';
55
import { PassportErrorType, withPassportError } from './errors/passportError';
66
import { PassportConfiguration } from './config';
7-
import { Networks } from './types';
87

98
export default class MagicAdapter {
109
private readonly config: PassportConfiguration;
1110

12-
private magicClient?: InstanceWithExtensions<SDKBase, [OpenIdExtension]>;
11+
private magicClient: InstanceWithExtensions<SDKBase, [OpenIdExtension]>;
1312

1413
constructor(config: PassportConfiguration) {
1514
this.config = config;
15+
this.magicClient = new Magic(this.config.magicPublishableApiKey, {
16+
extensions: [new OpenIdExtension()],
17+
network: config.network,
18+
});
19+
this.magicClient.preload();
1620
}
1721

1822
async login(
1923
idToken: string,
20-
network: Networks,
2124
): Promise<ethers.providers.ExternalProvider> {
2225
return withPassportError<ethers.providers.ExternalProvider>(async () => {
23-
this.magicClient = new Magic(this.config.magicPublishableApiKey, {
24-
extensions: [new OpenIdExtension()],
25-
network,
26-
});
2726
await this.magicClient.openid.loginWithOIDC({
2827
jwt: idToken,
2928
providerId: this.config.magicProviderId,
@@ -34,7 +33,7 @@ export default class MagicAdapter {
3433
}
3534

3635
async logout() {
37-
if (this.magicClient?.user) {
36+
if (this.magicClient.user) {
3837
await this.magicClient.user.logout();
3938
}
4039
}

packages/passport/sdk/src/starkEx/passportImxProviderFactory.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ describe('PassportImxProviderFactory', () => {
100100
);
101101

102102
expect(authManagerMock.login).toHaveBeenCalledTimes(1);
103-
expect(magicAdapterMock.login).toHaveBeenCalledWith(mockUser.idToken, config.network);
103+
expect(magicAdapterMock.login).toHaveBeenCalledWith(mockUser.idToken);
104104
expect(getSignerMock).toHaveBeenCalledTimes(1);
105105
expect(registerPassportStarkEx).toHaveBeenCalledWith({
106106
ethSigner: ethSignerMock,
@@ -127,7 +127,7 @@ describe('PassportImxProviderFactory', () => {
127127

128128
expect(result).toBe(passportImxProviderMock);
129129
expect(authManagerMock.login).toHaveBeenCalledTimes(1);
130-
expect(magicAdapterMock.login).toHaveBeenCalledWith(mockUserImx.idToken, config.network);
130+
expect(magicAdapterMock.login).toHaveBeenCalledWith(mockUserImx.idToken);
131131
expect(getSignerMock).toHaveBeenCalledTimes(1);
132132
expect(registerPassportStarkEx).toHaveBeenCalledWith({
133133
ethSigner: ethSignerMock,
@@ -160,7 +160,7 @@ describe('PassportImxProviderFactory', () => {
160160

161161
expect(result).toBe(passportImxProviderMock);
162162
expect(authManagerMock.login).toHaveBeenCalledTimes(1);
163-
expect(magicAdapterMock.login).toHaveBeenCalledWith(mockUserImx.idToken, config.network);
163+
expect(magicAdapterMock.login).toHaveBeenCalledWith(mockUserImx.idToken);
164164
expect(getSignerMock).toHaveBeenCalledTimes(1);
165165
expect(registerPassportStarkEx).not.toHaveBeenCalled();
166166
expect(authManagerMock.loginSilent).not.toHaveBeenCalled();

packages/passport/sdk/src/starkEx/passportImxProviderFactory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ export class PassportImxProviderFactory {
9898
);
9999
}
100100

101-
const magicRpcProvider = await this.magicAdapter.login(user.idToken, this.config.network);
101+
const magicRpcProvider = await this.magicAdapter.login(user.idToken);
102102
const web3Provider = new Web3Provider(
103103
magicRpcProvider,
104104
);

packages/passport/sdk/src/zkEvm/signTypedDataV4.test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,11 @@ describe('signTypedDataV4', () => {
140140
user: mockUserZkEvm,
141141
guardianClient: guardianClient as any,
142142
})
143-
)).rejects.toThrow(
144-
new JsonRpcError(RpcErrorCode.INVALID_PARAMS, 'Failed to parse typed data JSON: SyntaxError: Unexpected token * in JSON at position 0'),
145-
);
143+
)).rejects.toMatchObject({
144+
code: RpcErrorCode.INVALID_PARAMS,
145+
// Using stringMatching to avoid differing error message formats across Node
146+
message: expect.stringMatching(/Failed to parse typed data JSON: SyntaxError: Unexpected token.*/),
147+
});
146148
});
147149
});
148150

packages/passport/sdk/src/zkEvm/user/loginZkEvmUser.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export const loginZkEvmUser = async ({
3131

3232
const magicProvider = await magicAdapter.login(
3333
user.idToken,
34-
config.network,
3534
);
3635

3736
if (!user.zkEvm) {

0 commit comments

Comments
 (0)