@reown/appkit-siwx 1.6.6-basic-test.1.0 → 1.6.6-basic-test.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ export * from './SIWXConfig.js';
2
+ export * from './SIWXMessenger.js';
3
+ export * from './SIWXStorage.js';
4
+ export * from './SIWXVerifier.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA"}
@@ -2,4 +2,5 @@ export * from './messengers/index.js';
2
2
  export * from './verifiers/index.js';
3
3
  export * from './storages/index.js';
4
4
  export * from './configs/index.js';
5
+ export * from './core/index.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA"}
@@ -1,5 +1,6 @@
1
- import { verifyMessage } from 'viem';
1
+ import { createPublicClient, http } from 'viem';
2
2
  import { ConstantsUtil } from '@reown/appkit-common';
3
+ import { ChainController } from '@reown/appkit-core';
3
4
  import { SIWXVerifier } from '../core/SIWXVerifier.js';
4
5
  /**
5
6
  * Default verifier for EIP155 sessions.
@@ -10,8 +11,18 @@ export class EIP155Verifier extends SIWXVerifier {
10
11
  this.chainNamespace = ConstantsUtil.CHAIN.EVM;
11
12
  }
12
13
  async verify(session) {
14
+ const caipNetwork = ChainController.state.chains
15
+ .get('eip155')
16
+ ?.caipNetworks?.find(cn => cn.caipNetworkId === session.data.chainId);
17
+ if (!caipNetwork) {
18
+ throw new Error('EIP155.verify: CaipNetwork not found');
19
+ }
13
20
  try {
14
- return await verifyMessage({
21
+ const client = createPublicClient({
22
+ chain: caipNetwork,
23
+ transport: http(caipNetwork?.rpcUrls.default.http[0])
24
+ });
25
+ return await client.verifyMessage({
15
26
  message: session.message.toString(),
16
27
  signature: session.signature,
17
28
  address: session.data.accountAddress
@@ -1 +1 @@
1
- {"version":3,"file":"EIP155Verifier.js","sourceRoot":"","sources":["../../../../src/verifiers/EIP155Verifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;IAAhD;;QACkB,mBAAc,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAA;IAa1D,CAAC;IAXQ,KAAK,CAAC,MAAM,CAAC,OAAoB;QACtC,IAAI,CAAC;YACH,OAAO,MAAM,aAAa,CAAC;gBACzB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACnC,SAAS,EAAE,OAAO,CAAC,SAA0B;gBAC7C,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,cAA+B;aACtD,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"EIP155Verifier.js","sourceRoot":"","sources":["../../../../src/verifiers/EIP155Verifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE/C,OAAO,EAAoB,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,EAAE,eAAe,EAAoB,MAAM,oBAAoB,CAAA;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;IAAhD;;QACkB,mBAAc,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAA;IA0B1D,CAAC;IAxBQ,KAAK,CAAC,MAAM,CAAC,OAAoB;QACtC,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM;aAC7C,GAAG,CAAC,QAAQ,CAAC;YACd,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEvE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACzD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,kBAAkB,CAAC;gBAChC,KAAK,EAAE,WAA0B;gBACjC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACtD,CAAC,CAAA;YAEF,OAAO,MAAM,MAAM,CAAC,aAAa,CAAC;gBAChC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACnC,SAAS,EAAE,OAAO,CAAC,SAA0B;gBAC7C,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,cAA+B;aACtD,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"mockSession.js","sourceRoot":"","sources":["../../../../tests/mocks/mockSession.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,WAAW,CACzB,WAAgC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IAExE,OAAO;QACL,IAAI,EAAE;YACJ,MAAM,EAAE,aAAa;YACrB,cAAc,EAAE,4CAA4C;YAC5D,SAAS,EAAE,qBAAqB;YAChC,OAAO,EAAE,UAAU;YACnB,GAAG,EAAE,oBAAoB;YACzB,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,KAAK;YACZ,GAAG,QAAQ,CAAC,IAAI;SACjB;QACD,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,eAAe;QAC5C,SAAS,EACP,QAAQ,CAAC,SAAS;YAClB,sIAAsI;KACzI,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"mockSession.js","sourceRoot":"","sources":["../../../../tests/mocks/mockSession.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,WAAW,CACzB,WAAgC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IAExE,OAAO;QACL,IAAI,EAAE;YACJ,MAAM,EAAE,aAAa;YACrB,cAAc,EAAE,4CAA4C;YAC5D,SAAS,EAAE,qBAAqB;YAChC,OAAO,EAAE,UAA2B;YACpC,GAAG,EAAE,oBAAoB;YACzB,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,KAAK;YACZ,GAAG,QAAQ,CAAC,IAAI;SACjB;QACD,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,eAAe;QAC5C,SAAS,EACP,QAAQ,CAAC,SAAS;YAClB,sIAAsI;KACzI,CAAA;AACH,CAAC"}
@@ -1,49 +1,107 @@
1
- import { describe, expect, test } from 'vitest';
2
- import {} from '@reown/appkit-core';
1
+ import { createPublicClient, http } from 'viem';
2
+ import { beforeEach, describe, expect, test, vi } from 'vitest';
3
+ import { ChainController } from '@reown/appkit-core';
3
4
  import { EIP155Verifier } from '../../src/index.js';
4
5
  import { mockSession } from '../mocks/mockSession.js';
5
- const cases = [
6
- {
7
- reason: 'valid session',
8
- session: mockSession(),
9
- expected: true
6
+ const mockHttp = 'https://mock-rpc.com';
7
+ const mockCaipNetwork = {
8
+ id: 1,
9
+ chainNamespace: 'eip155',
10
+ caipNetworkId: 'eip155:1',
11
+ name: 'Mock Chain',
12
+ nativeCurrency: {
13
+ name: 'Mock Token',
14
+ symbol: 'MOCK',
15
+ decimals: 18
10
16
  },
11
- {
12
- reason: 'invalid session with an invalid signature',
13
- session: mockSession({
14
- signature: '0x1234567890abcdef'
15
- }),
16
- expected: false
17
- },
18
- {
19
- reason: 'invalid session with an invalid account address',
20
- session: mockSession({
21
- data: {
22
- accountAddress: '0x1234567890abcdef1234567890abcdef12345678'
23
- }
24
- }),
25
- expected: false
26
- }
27
- ];
17
+ rpcUrls: { default: { http: [mockHttp] } }
18
+ };
28
19
  describe('EIP155Verifier', () => {
29
20
  const verifier = new EIP155Verifier();
21
+ beforeEach(() => {
22
+ vi.clearAllMocks();
23
+ });
30
24
  test('should have eip155 as the chain namespace', () => {
31
25
  expect(verifier.chainNamespace).toBe('eip155');
32
26
  });
33
- test('should verify only eip155 chain id', () => {
34
- expect(verifier.shouldVerify(mockSession({
35
- data: {
36
- chainId: 'eip155:1'
37
- }
38
- }))).toBe(true);
39
- expect(verifier.shouldVerify(mockSession({
40
- data: {
41
- chainId: 'solana:mainnet'
42
- }
43
- }))).toBe(false);
27
+ describe('shouldVerify', () => {
28
+ test('should verify only eip155 chain id', () => {
29
+ expect(verifier.shouldVerify(mockSession({
30
+ data: {
31
+ chainId: 'eip155:1'
32
+ }
33
+ }))).toBe(true);
34
+ expect(verifier.shouldVerify(mockSession({
35
+ data: {
36
+ chainId: 'solana:mainnet'
37
+ }
38
+ }))).toBe(false);
39
+ });
44
40
  });
45
- test.each(cases)(`should verify $reason`, async ({ session, expected }) => {
46
- expect(await verifier.verify(session)).toBe(expected);
41
+ describe('verify', () => {
42
+ beforeEach(() => {
43
+ // Mock viem functions with proper typing
44
+ vi.mock('viem', () => ({
45
+ createPublicClient: vi.fn(() => ({
46
+ verifyMessage: vi.fn().mockResolvedValue(true)
47
+ })),
48
+ http: vi.fn()
49
+ }));
50
+ });
51
+ test('should successfully verify when caipNetwork is found', async () => {
52
+ const session = mockSession();
53
+ // Mock ChainController to return valid caipNetwork
54
+ vi.spyOn(ChainController.state.chains, 'get').mockReturnValue({
55
+ caipNetworks: [mockCaipNetwork]
56
+ });
57
+ const result = await verifier.verify(session);
58
+ expect(result).toBe(true);
59
+ expect(http).toHaveBeenCalledWith(mockHttp);
60
+ expect(createPublicClient).toHaveBeenCalledWith({
61
+ chain: expect.objectContaining(mockCaipNetwork),
62
+ transport: http(mockHttp)
63
+ });
64
+ const client = createPublicClient.mock.results[0].value;
65
+ expect(client.verifyMessage).toHaveBeenCalledWith({
66
+ message: session.message.toString(),
67
+ signature: session.signature,
68
+ address: session.data.accountAddress
69
+ });
70
+ });
71
+ test('should throw error when caipNetwork is not found', async () => {
72
+ const session = mockSession();
73
+ // Mock ChainController to return empty caipNetworks
74
+ vi.spyOn(ChainController.state.chains, 'get').mockReturnValue({
75
+ caipNetworks: []
76
+ });
77
+ await expect(verifier.verify(session)).rejects.toThrow('EIP155.verify: CaipNetwork not found');
78
+ });
79
+ test('should return false when verifyMessage fails', async () => {
80
+ const session = mockSession();
81
+ // Mock ChainController to return valid caipNetwork
82
+ vi.spyOn(ChainController.state.chains, 'get').mockReturnValue({
83
+ caipNetworks: [mockCaipNetwork]
84
+ });
85
+ // Mock verifyMessage to fail
86
+ vi.mocked(createPublicClient).mockImplementation(() => ({
87
+ verifyMessage: vi.fn().mockResolvedValue(false)
88
+ }));
89
+ const result = await verifier.verify(session);
90
+ expect(result).toBe(false);
91
+ });
92
+ test('should return false when verification throws error', async () => {
93
+ const session = mockSession();
94
+ // Mock ChainController to return valid caipNetwork
95
+ vi.spyOn(ChainController.state.chains, 'get').mockReturnValue({
96
+ caipNetworks: [mockCaipNetwork]
97
+ });
98
+ // Mock verifyMessage to throw error
99
+ vi.mocked(createPublicClient).mockImplementation(() => ({
100
+ verifyMessage: vi.fn().mockRejectedValue(new Error('Verification failed'))
101
+ }));
102
+ const result = await verifier.verify(session);
103
+ expect(result).toBe(false);
104
+ });
47
105
  });
48
106
  });
49
107
  //# sourceMappingURL=EIP155Verifier.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EIP155Verifier.test.js","sourceRoot":"","sources":["../../../../tests/verifiers/EIP155Verifier.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,EAAoB,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAQrD,MAAM,KAAK,GAAW;IACpB;QACE,MAAM,EAAE,eAAe;QACvB,OAAO,EAAE,WAAW,EAAE;QACtB,QAAQ,EAAE,IAAI;KACf;IACD;QACE,MAAM,EAAE,2CAA2C;QACnD,OAAO,EAAE,WAAW,CAAC;YACnB,SAAS,EAAE,oBAAoB;SAChC,CAAC;QACF,QAAQ,EAAE,KAAK;KAChB;IACD;QACE,MAAM,EAAE,iDAAiD;QACzD,OAAO,EAAE,WAAW,CAAC;YACnB,IAAI,EAAE;gBACJ,cAAc,EAAE,4CAA4C;aAC7D;SACF,CAAC;QACF,QAAQ,EAAE,KAAK;KAChB;CACF,CAAA;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAA;IAErC,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC9C,MAAM,CACJ,QAAQ,CAAC,YAAY,CACnB,WAAW,CAAC;YACV,IAAI,EAAE;gBACJ,OAAO,EAAE,UAAU;aACpB;SACF,CAAC,CACH,CACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,CACJ,QAAQ,CAAC,YAAY,CACnB,WAAW,CAAC;YACV,IAAI,EAAE;gBACJ,OAAO,EAAE,gBAAgB;aAC1B;SACF,CAAC,CACH,CACF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,uBAAuB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxE,MAAM,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"EIP155Verifier.test.js","sourceRoot":"","sources":["../../../../tests/verifiers/EIP155Verifier.test.ts"],"names":[],"mappings":"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"}