@reown/appkit-siwx 1.8.15-viem-upgrade.0 → 1.8.15-wc-linking-reset-headless.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.
Files changed (86) hide show
  1. package/dist/esm/exports/index.js +2 -0
  2. package/dist/esm/exports/index.js.map +1 -0
  3. package/dist/esm/exports/react.js +10 -0
  4. package/dist/esm/exports/react.js.map +1 -0
  5. package/dist/esm/exports/vue.js +16 -0
  6. package/dist/esm/exports/vue.js.map +1 -0
  7. package/dist/esm/src/configs/DefaultSIWX.js +37 -0
  8. package/dist/esm/src/configs/DefaultSIWX.js.map +1 -0
  9. package/dist/esm/src/configs/ReownAuthenticationSIWX.js +3 -0
  10. package/dist/esm/src/configs/ReownAuthenticationSIWX.js.map +1 -0
  11. package/dist/esm/src/configs/index.js +3 -0
  12. package/dist/esm/src/configs/index.js.map +1 -0
  13. package/dist/esm/src/core/SIWXConfig.js +107 -0
  14. package/dist/esm/src/core/SIWXConfig.js.map +1 -0
  15. package/dist/esm/src/core/SIWXMessenger.js +87 -0
  16. package/dist/esm/src/core/SIWXMessenger.js.map +1 -0
  17. package/dist/esm/src/core/SIWXSigner.js +3 -0
  18. package/dist/esm/src/core/SIWXSigner.js.map +1 -0
  19. package/dist/esm/src/core/SIWXStorage.js +2 -0
  20. package/dist/esm/src/core/SIWXStorage.js.map +1 -0
  21. package/dist/esm/src/core/SIWXVerifier.js +16 -0
  22. package/dist/esm/src/core/SIWXVerifier.js.map +1 -0
  23. package/dist/esm/src/core/index.js +5 -0
  24. package/dist/esm/src/core/index.js.map +1 -0
  25. package/dist/esm/src/index.js +6 -0
  26. package/dist/esm/src/index.js.map +1 -0
  27. package/dist/esm/src/messengers/InformalMessenger.js +68 -0
  28. package/dist/esm/src/messengers/InformalMessenger.js.map +1 -0
  29. package/dist/esm/src/messengers/index.js +2 -0
  30. package/dist/esm/src/messengers/index.js.map +1 -0
  31. package/dist/esm/src/signers/DefaultSigner.js +21 -0
  32. package/dist/esm/src/signers/DefaultSigner.js.map +1 -0
  33. package/dist/esm/src/storages/LocalStorage.js +51 -0
  34. package/dist/esm/src/storages/LocalStorage.js.map +1 -0
  35. package/dist/esm/src/storages/index.js +2 -0
  36. package/dist/esm/src/storages/index.js.map +1 -0
  37. package/dist/esm/src/verifiers/BIP122Verifier.js +21 -0
  38. package/dist/esm/src/verifiers/BIP122Verifier.js.map +1 -0
  39. package/dist/esm/src/verifiers/EIP155Verifier.js +36 -0
  40. package/dist/esm/src/verifiers/EIP155Verifier.js.map +1 -0
  41. package/dist/esm/src/verifiers/SolanaVerifier.js +26 -0
  42. package/dist/esm/src/verifiers/SolanaVerifier.js.map +1 -0
  43. package/dist/esm/src/verifiers/index.js +4 -0
  44. package/dist/esm/src/verifiers/index.js.map +1 -0
  45. package/dist/esm/tests/configs/ReownAuthenticationSIWX.test.js +7 -0
  46. package/dist/esm/tests/configs/ReownAuthenticationSIWX.test.js.map +1 -0
  47. package/dist/esm/tests/messengers/InformalMessenger.test.js +96 -0
  48. package/dist/esm/tests/messengers/InformalMessenger.test.js.map +1 -0
  49. package/dist/esm/tests/storages/LocalStorage.test.js +52 -0
  50. package/dist/esm/tests/storages/LocalStorage.test.js.map +1 -0
  51. package/dist/esm/tests/verifiers/BIP122Verifier.test.js +68 -0
  52. package/dist/esm/tests/verifiers/BIP122Verifier.test.js.map +1 -0
  53. package/dist/esm/tests/verifiers/EIP155Verifier.test.js +107 -0
  54. package/dist/esm/tests/verifiers/EIP155Verifier.test.js.map +1 -0
  55. package/dist/esm/tests/verifiers/SolanaVerifier.test.js +58 -0
  56. package/dist/esm/tests/verifiers/SolanaVerifier.test.js.map +1 -0
  57. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  58. package/dist/types/exports/index.d.ts +1 -0
  59. package/dist/types/exports/react.d.ts +2 -0
  60. package/dist/types/exports/vue.d.ts +3 -0
  61. package/dist/types/src/configs/DefaultSIWX.d.ts +11 -0
  62. package/dist/types/src/configs/ReownAuthenticationSIWX.d.ts +2 -0
  63. package/dist/types/src/configs/index.d.ts +2 -0
  64. package/dist/types/src/core/SIWXConfig.d.ts +104 -0
  65. package/dist/types/src/core/SIWXMessenger.d.ts +93 -0
  66. package/dist/types/src/core/SIWXSigner.d.ts +3 -0
  67. package/dist/types/src/core/SIWXStorage.d.ts +40 -0
  68. package/dist/types/src/core/SIWXVerifier.d.ts +27 -0
  69. package/dist/types/src/core/index.d.ts +4 -0
  70. package/dist/types/src/index.d.ts +6 -0
  71. package/dist/types/src/messengers/InformalMessenger.d.ts +46 -0
  72. package/dist/types/src/messengers/index.d.ts +1 -0
  73. package/dist/types/src/signers/DefaultSigner.d.ts +4 -0
  74. package/dist/types/src/storages/LocalStorage.d.ts +25 -0
  75. package/dist/types/src/storages/index.d.ts +1 -0
  76. package/dist/types/src/verifiers/BIP122Verifier.d.ts +9 -0
  77. package/dist/types/src/verifiers/EIP155Verifier.d.ts +9 -0
  78. package/dist/types/src/verifiers/SolanaVerifier.d.ts +9 -0
  79. package/dist/types/src/verifiers/index.d.ts +3 -0
  80. package/dist/types/tests/configs/ReownAuthenticationSIWX.test.d.ts +1 -0
  81. package/dist/types/tests/messengers/InformalMessenger.test.d.ts +1 -0
  82. package/dist/types/tests/storages/LocalStorage.test.d.ts +1 -0
  83. package/dist/types/tests/verifiers/BIP122Verifier.test.d.ts +1 -0
  84. package/dist/types/tests/verifiers/EIP155Verifier.test.d.ts +1 -0
  85. package/dist/types/tests/verifiers/SolanaVerifier.test.d.ts +1 -0
  86. package/package.json +5 -5
@@ -0,0 +1,26 @@
1
+ import bs58 from 'bs58';
2
+ import nacl from 'tweetnacl';
3
+ import { ConstantsUtil } from '@reown/appkit-common';
4
+ import { SIWXVerifier } from '../core/SIWXVerifier.js';
5
+ /**
6
+ * Default verifier for Solana sessions.
7
+ */
8
+ export class SolanaVerifier extends SIWXVerifier {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.chainNamespace = ConstantsUtil.CHAIN.SOLANA;
12
+ }
13
+ async verify(session) {
14
+ try {
15
+ const publicKey = bs58.decode(session.data.accountAddress);
16
+ const signature = bs58.decode(session.signature);
17
+ const message = new TextEncoder().encode(session.message.toString());
18
+ const isValid = nacl.sign.detached.verify(message, signature, publicKey);
19
+ return Promise.resolve(isValid);
20
+ }
21
+ catch (error) {
22
+ return Promise.resolve(false);
23
+ }
24
+ }
25
+ }
26
+ //# sourceMappingURL=SolanaVerifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolanaVerifier.js","sourceRoot":"","sources":["../../../../src/verifiers/SolanaVerifier.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,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,MAAM,CAAA;IAe7D,CAAC;IAbQ,KAAK,CAAC,MAAM,CAAC,OAAoB;QACtC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YAChD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;YAEpE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;YAExE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export * from './EIP155Verifier.js';
2
+ export * from './SolanaVerifier.js';
3
+ export * from './BIP122Verifier.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/verifiers/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { expect, it } from 'vitest';
2
+ import { CloudAuthSIWX, ReownAuthentication } from '../../src/configs/ReownAuthenticationSIWX';
3
+ it('should have same instance for CloudAuthSIWX and ReownAuthentication guaranteeing backwards compatibility', () => {
4
+ expect(ReownAuthentication).toBe(CloudAuthSIWX);
5
+ expect(new ReownAuthentication()).toBeInstanceOf(CloudAuthSIWX);
6
+ });
7
+ //# sourceMappingURL=ReownAuthenticationSIWX.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReownAuthenticationSIWX.test.js","sourceRoot":"","sources":["../../../../tests/configs/ReownAuthenticationSIWX.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEnC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAA;AAE9F,EAAE,CAAC,0GAA0G,EAAE,GAAG,EAAE;IAClH,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC/C,MAAM,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;AACjE,CAAC,CAAC,CAAA"}
@@ -0,0 +1,96 @@
1
+ import { afterAll, beforeAll, describe, expect, test, vi } from 'vitest';
2
+ import {} from '@reown/appkit-controllers';
3
+ import { InformalMessenger } from '../../src/index.js';
4
+ const cases = [
5
+ {
6
+ params: {
7
+ domain: 'example.com',
8
+ accountAddress: '0x1234567890abcdef1234567890abcdef12345678',
9
+ statement: 'This is a statement',
10
+ chainId: 'eip155:1',
11
+ uri: 'siwx://example.com',
12
+ getNonce: () => Promise.resolve('123')
13
+ },
14
+ expected: `example.com wants you to sign in with your EVM Networks account:
15
+ 0x1234567890abcdef1234567890abcdef12345678
16
+
17
+ This is a statement
18
+
19
+ URI: siwx://example.com
20
+ Version: 1
21
+ Chain ID: eip155:1
22
+ Nonce: 123
23
+ Issued At: 2024-01-01T00:00:00.000Z`
24
+ },
25
+ {
26
+ params: {
27
+ domain: 'example.com',
28
+ accountAddress: '0x1234567890abcdef1234567890abcdef12345678',
29
+ chainId: 'eip155:1',
30
+ uri: 'siwx://example.com',
31
+ getNonce: () => Promise.resolve('123'),
32
+ getRequestId: () => Promise.resolve('123'),
33
+ expiration: 24 * 60 * 60 * 1000,
34
+ notBefore: '2022-01-02T00:00:00Z',
35
+ resources: ['resource1', 'resource2']
36
+ },
37
+ expected: `example.com wants you to sign in with your EVM Networks account:
38
+ 0x1234567890abcdef1234567890abcdef12345678
39
+
40
+ URI: siwx://example.com
41
+ Version: 1
42
+ Chain ID: eip155:1
43
+ Nonce: 123
44
+ Issued At: 2024-01-01T00:00:00.000Z
45
+ Expiration Time: 2022-01-03T00:00:00.000Z
46
+ Not Before: 2022-01-02T00:00:00.000Z
47
+ Request ID: 123
48
+ Resources:
49
+ - resource1
50
+ - resource2`
51
+ },
52
+ {
53
+ params: {
54
+ domain: 'example.com',
55
+ accountAddress: '0x1234567890abcdef1234567890abcdef12345678',
56
+ chainId: 'eip155:1',
57
+ uri: 'siwx://example.com',
58
+ getNonce: () => Promise.resolve('123'),
59
+ getRequestId: () => Promise.resolve('123'),
60
+ expiration: 24 * 60 * 60 * 1000,
61
+ notBefore: '2022-01-02T00:00:00Z',
62
+ resources: ['resource1', 'resource2'],
63
+ clearChainIdNamespace: true
64
+ },
65
+ expected: `example.com wants you to sign in with your EVM Networks account:
66
+ 0x1234567890abcdef1234567890abcdef12345678
67
+
68
+ URI: siwx://example.com
69
+ Version: 1
70
+ Chain ID: 1
71
+ Nonce: 123
72
+ Issued At: 2024-01-01T00:00:00.000Z
73
+ Expiration Time: 2022-01-03T00:00:00.000Z
74
+ Not Before: 2022-01-02T00:00:00.000Z
75
+ Request ID: 123
76
+ Resources:
77
+ - resource1
78
+ - resource2`
79
+ }
80
+ ];
81
+ describe('InformalMessenger', () => {
82
+ beforeAll(() => {
83
+ vi.useFakeTimers({
84
+ now: new Date('2024-01-01T00:00:00Z')
85
+ });
86
+ });
87
+ afterAll(() => {
88
+ vi.useRealTimers();
89
+ });
90
+ test.each(cases)(`should return expected message`, async ({ params, expected }) => {
91
+ const messageFactory = new InformalMessenger(params);
92
+ const message = await messageFactory.createMessage(params);
93
+ expect(message.toString()).toBe(expected);
94
+ });
95
+ });
96
+ //# sourceMappingURL=InformalMessenger.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InformalMessenger.test.js","sourceRoot":"","sources":["../../../../tests/messengers/InformalMessenger.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAExE,OAAO,EAAoB,MAAM,2BAA2B,CAAA;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAOtD,MAAM,KAAK,GAAW;IACpB;QACE,MAAM,EAAE;YACN,MAAM,EAAE,aAAa;YACrB,cAAc,EAAE,4CAA4C;YAC5D,SAAS,EAAE,qBAAqB;YAChC,OAAO,EAAE,UAAU;YACnB,GAAG,EAAE,oBAAoB;YACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;SACvC;QACD,QAAQ,EAAE;;;;;;;;;oCASsB;KACjC;IACD;QACE,MAAM,EAAE;YACN,MAAM,EAAE,aAAa;YACrB,cAAc,EAAE,4CAA4C;YAC5D,OAAO,EAAE,UAAU;YACnB,GAAG,EAAE,oBAAoB;YACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YACtC,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YAC1C,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;YAC/B,SAAS,EAAE,sBAAsB;YACjC,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;SACtC;QACD,QAAQ,EAAE;;;;;;;;;;;;;YAaF;KACT;IACD;QACE,MAAM,EAAE;YACN,MAAM,EAAE,aAAa;YACrB,cAAc,EAAE,4CAA4C;YAC5D,OAAO,EAAE,UAAU;YACnB,GAAG,EAAE,oBAAoB;YACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YACtC,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YAC1C,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;YAC/B,SAAS,EAAE,sBAAsB;YACjC,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;YACrC,qBAAqB,EAAE,IAAI;SAC5B;QACD,QAAQ,EAAE;;;;;;;;;;;;;YAaF;KACT;CACF,CAAA;AAED,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,aAAa,CAAC;YACf,GAAG,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;SACtC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,aAAa,EAAE,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,gCAAgC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAChF,MAAM,cAAc,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAA;QACpD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC1D,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,52 @@
1
+ import { afterAll, afterEach, beforeAll, describe, expect, test, vi } from 'vitest';
2
+ import { mockSession } from '@reown/appkit-controllers/testing';
3
+ import { LocalStorage } from '../../src';
4
+ const previousLocalStorage = globalThis.localStorage;
5
+ const previousWindow = globalThis.window;
6
+ afterAll(() => {
7
+ Object.assign(globalThis, { localStorage: previousLocalStorage, window: previousWindow });
8
+ });
9
+ describe('LocalStorage', () => {
10
+ const key = 'localstorage-key';
11
+ const storage = new LocalStorage({ key });
12
+ const getItem = vi.fn(() => null);
13
+ const setItem = vi.fn();
14
+ const removeItem = vi.fn();
15
+ beforeAll(() => {
16
+ Object.assign(globalThis, { window: {}, localStorage: { getItem, setItem, removeItem } });
17
+ });
18
+ afterEach(() => {
19
+ getItem.mockClear();
20
+ setItem.mockClear();
21
+ removeItem.mockClear();
22
+ });
23
+ test('should get sessions empty', async () => {
24
+ const sessions = await storage.get('eip155:1', '0x1234567890abcdef');
25
+ expect(sessions).toEqual([]);
26
+ });
27
+ test('should get sessions', async () => {
28
+ getItem.mockImplementation(() => JSON.stringify([
29
+ mockSession({ data: { accountAddress: '0x1234567890abcdef', chainId: 'eip155:1' } })
30
+ ]));
31
+ const sessions = await storage.get('eip155:1', '0x1234567890abcdef');
32
+ expect(getItem).toHaveBeenCalledWith(key);
33
+ expect(sessions).toHaveLength(1);
34
+ });
35
+ test('should set sessions', async () => {
36
+ const session = mockSession();
37
+ await storage.set([session]);
38
+ expect(setItem).toHaveBeenCalledWith(key, JSON.stringify([session]));
39
+ });
40
+ test('should remove sessions', async () => {
41
+ getItem.mockImplementation(() => JSON.stringify([
42
+ mockSession({
43
+ data: { accountAddress: '0x1234567890abcdef', chainId: 'eip155:1' }
44
+ })
45
+ ]));
46
+ expect(await storage.get('eip155:1', '0x1234567890abcdef')).toHaveLength(1);
47
+ await storage.delete('eip155:1', '0x1234567890abcdef');
48
+ expect(getItem).toHaveBeenCalledWith(key);
49
+ expect(setItem).toHaveBeenCalledWith(key, JSON.stringify([]));
50
+ });
51
+ });
52
+ //# sourceMappingURL=LocalStorage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalStorage.test.js","sourceRoot":"","sources":["../../../../tests/storages/LocalStorage.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,oBAAoB,GAAG,UAAU,CAAC,YAAY,CAAA;AACpD,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAA;AAExC,QAAQ,CAAC,GAAG,EAAE;IACZ,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;AAC3F,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,GAAG,GAAG,kBAAkB,CAAA;IAC9B,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;IAEzC,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAsB,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;IACvB,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;IAE1B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAAA;IAC3F,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,SAAS,EAAE,CAAA;QACnB,OAAO,CAAC,SAAS,EAAE,CAAA;QACnB,UAAU,CAAC,SAAS,EAAE,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAA;QACpE,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACrC,OAAO,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAC9B,IAAI,CAAC,SAAS,CAAC;YACb,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,oBAAoB,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC;SACrF,CAAC,CACH,CAAA;QACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAA;QAEpE,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAA;QACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAA;QAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;QAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACtE,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACxC,OAAO,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAC9B,IAAI,CAAC,SAAS,CAAC;YACb,WAAW,CAAC;gBACV,IAAI,EAAE,EAAE,cAAc,EAAE,oBAAoB,EAAE,OAAO,EAAE,UAAU,EAAE;aACpE,CAAC;SACH,CAAC,CACH,CAAA;QACD,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAE3E,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAA;QACtD,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAA;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,68 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import {} from '@reown/appkit-controllers';
3
+ import { mockSession } from '@reown/appkit-controllers/testing';
4
+ import { BIP122Verifier } from '../../src/verifiers/BIP122Verifier.js';
5
+ const cases = [
6
+ {
7
+ reason: 'valid session',
8
+ session: mockSession({
9
+ data: {
10
+ accountAddress: 'bc1qczn7zmd0n8rddeyhfjm9vz5edwznd4vsce4w7a'
11
+ },
12
+ signature: 'KML3pFh5aNynPZKegsEcasua2W17sKRhpsNgP/jMMbT3LR4N6jXM9Yl9n7hdHNJdff4clSAzvE/rICl/FsSu5uo='
13
+ }),
14
+ expected: true
15
+ },
16
+ {
17
+ reason: 'invalid session with an invalid signature',
18
+ session: mockSession({
19
+ data: {
20
+ accountAddress: 'bc1qczn7zmd0n8rddeyhfjm9vz5edwznd4vsce4w7a'
21
+ },
22
+ signature: 'KFgSwkIlLxUuJ0N59F50AKMdiXi8bNF/O/OB9lKh85xnXB/9HoA50T0nZb6SQ1RHBDWPhmBukWU0Py01NU4VI0o='
23
+ }),
24
+ expected: false
25
+ },
26
+ {
27
+ reason: 'invalid session with an invalid account address',
28
+ session: mockSession({
29
+ data: {
30
+ accountAddress: 'bc1quht40y4r6psc6v5kdxpdumqv89azrdffvra2dn'
31
+ },
32
+ signature: 'KML3pFh5aNynPZKegsEcasua2W17sKRhpsNgP/jMMbT3LR4N6jXM9Yl9n7hdHNJdff4clSAzvE/rICl/FsSu5uo='
33
+ }),
34
+ expected: false
35
+ },
36
+ {
37
+ reason: 'different signature type',
38
+ session: mockSession({
39
+ data: {
40
+ accountAddress: 'bc1qczn7zmd0n8rddeyhfjm9vz5edwznd4vsce4w7a'
41
+ },
42
+ signature: 'AkcwRAIgIB8eAIUCg4bHJm7IuOktrosDZn4A0wUrlAxSU8WySNgCIBecJ7eTrlzNGvzXcLAxIC44STrZm+MsCNDGr4IYwTIbASECBPlzqRYbRCAR7uxM+u3okxS8AeBojHtyHstbbC4/6EU='
43
+ }),
44
+ expected: true
45
+ }
46
+ ];
47
+ describe('BIP122Verifier', () => {
48
+ const verifier = new BIP122Verifier();
49
+ test('should have bip122 as the chain namespace', () => {
50
+ expect(verifier.chainNamespace).toBe('bip122');
51
+ });
52
+ test('should verify only bip122 chain id', () => {
53
+ expect(verifier.shouldVerify(mockSession({
54
+ data: {
55
+ chainId: 'bip122:000000000019d6689c085ae165831e93'
56
+ }
57
+ }))).toBe(true);
58
+ expect(verifier.shouldVerify(mockSession({
59
+ data: {
60
+ chainId: 'eip155:1'
61
+ }
62
+ }))).toBe(false);
63
+ });
64
+ test.each(cases)(`should verify $reason`, async ({ session, expected }) => {
65
+ expect(await verifier.verify(session)).toBe(expected);
66
+ });
67
+ });
68
+ //# sourceMappingURL=BIP122Verifier.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BIP122Verifier.test.js","sourceRoot":"","sources":["../../../../tests/verifiers/BIP122Verifier.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,EAAoB,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAQtE,MAAM,KAAK,GAAW;IACpB;QACE,MAAM,EAAE,eAAe;QACvB,OAAO,EAAE,WAAW,CAAC;YACnB,IAAI,EAAE;gBACJ,cAAc,EAAE,4CAA4C;aAC7D;YACD,SAAS,EACP,0FAA0F;SAC7F,CAAC;QACF,QAAQ,EAAE,IAAI;KACf;IACD;QACE,MAAM,EAAE,2CAA2C;QACnD,OAAO,EAAE,WAAW,CAAC;YACnB,IAAI,EAAE;gBACJ,cAAc,EAAE,4CAA4C;aAC7D;YACD,SAAS,EACP,0FAA0F;SAC7F,CAAC;QACF,QAAQ,EAAE,KAAK;KAChB;IACD;QACE,MAAM,EAAE,iDAAiD;QACzD,OAAO,EAAE,WAAW,CAAC;YACnB,IAAI,EAAE;gBACJ,cAAc,EAAE,4CAA4C;aAC7D;YACD,SAAS,EACP,0FAA0F;SAC7F,CAAC;QACF,QAAQ,EAAE,KAAK;KAChB;IACD;QACE,MAAM,EAAE,0BAA0B;QAClC,OAAO,EAAE,WAAW,CAAC;YACnB,IAAI,EAAE;gBACJ,cAAc,EAAE,4CAA4C;aAC7D;YACD,SAAS,EACP,kJAAkJ;SACrJ,CAAC;QACF,QAAQ,EAAE,IAAI;KACf;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,yCAAyC;aACnD;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,UAAU;aACpB;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"}
@@ -0,0 +1,107 @@
1
+ import { createPublicClient, http } from 'viem';
2
+ import { beforeEach, describe, expect, test, vi } from 'vitest';
3
+ import { ChainController } from '@reown/appkit-controllers';
4
+ import { mockSession } from '@reown/appkit-controllers/testing';
5
+ import { EIP155Verifier } from '../../src/index.js';
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
16
+ },
17
+ rpcUrls: { default: { http: [mockHttp] } }
18
+ };
19
+ describe('EIP155Verifier', () => {
20
+ const verifier = new EIP155Verifier();
21
+ beforeEach(() => {
22
+ vi.clearAllMocks();
23
+ });
24
+ test('should have eip155 as the chain namespace', () => {
25
+ expect(verifier.chainNamespace).toBe('eip155');
26
+ });
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
+ });
40
+ });
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
+ });
105
+ });
106
+ });
107
+ //# sourceMappingURL=EIP155Verifier.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EIP155Verifier.test.js","sourceRoot":"","sources":["../../../../tests/verifiers/EIP155Verifier.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import {} from '@reown/appkit-controllers';
3
+ import { mockSession } from '@reown/appkit-controllers/testing';
4
+ import { SolanaVerifier } from '../../src/verifiers/SolanaVerifier.js';
5
+ const cases = [
6
+ {
7
+ reason: 'valid session',
8
+ session: mockSession({
9
+ data: {
10
+ accountAddress: '2VqKhjZ766ZN3uBtBpb7Ls3cN4HrocP1rzxzekhVEgpU'
11
+ },
12
+ signature: '2ZpgpUKF6RtmbrE8uBmPwRiBqRnsCKiBKkjsPSpf6c64r4XdDoevjhjNX35X7GeuSwwRhmbB2Ro4NfHWAeXWNhDL'
13
+ }),
14
+ expected: true
15
+ },
16
+ {
17
+ reason: 'invalid session with an invalid signature',
18
+ session: mockSession({
19
+ data: {
20
+ accountAddress: '2VqKhjZ766ZN3uBtBpb7Ls3cN4HrocP1rzxzekhVEgpU'
21
+ },
22
+ signature: '3ErkFZkvhSJVR7E1uakGwj8icgfxvRSS6AwW5bq4CZsXPZ83XrT1H9xcCWLvhsYCLYzFc7WSMQEJxGgpZvtgqbdE'
23
+ }),
24
+ expected: false
25
+ },
26
+ {
27
+ reason: 'invalid session with an invalid account address',
28
+ session: mockSession({
29
+ data: {
30
+ accountAddress: 'C6ydkvKcRdXz3ZTEYy6uWAAyZgyUF49qP4XPdaDB2nqS'
31
+ },
32
+ signature: '2ZpgpUKF6RtmbrE8uBmPwRiBqRnsCKiBKkjsPSpf6c64r4XdDoevjhjNX35X7GeuSwwRhmbB2Ro4NfHWAeXWNhDL'
33
+ }),
34
+ expected: false
35
+ }
36
+ ];
37
+ describe('SolanaVerifier', () => {
38
+ const verifier = new SolanaVerifier();
39
+ test('should have solana as the chain namespace', () => {
40
+ expect(verifier.chainNamespace).toBe('solana');
41
+ });
42
+ test('should verify only solana chain id', () => {
43
+ expect(verifier.shouldVerify(mockSession({
44
+ data: {
45
+ chainId: 'solana:mainnet'
46
+ }
47
+ }))).toBe(true);
48
+ expect(verifier.shouldVerify(mockSession({
49
+ data: {
50
+ chainId: 'eip155:1'
51
+ }
52
+ }))).toBe(false);
53
+ });
54
+ test.each(cases)(`should verify $reason`, async ({ session, expected }) => {
55
+ expect(await verifier.verify(session)).toBe(expected);
56
+ });
57
+ });
58
+ //# sourceMappingURL=SolanaVerifier.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolanaVerifier.test.js","sourceRoot":"","sources":["../../../../tests/verifiers/SolanaVerifier.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,EAAoB,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAQtE,MAAM,KAAK,GAAW;IACpB;QACE,MAAM,EAAE,eAAe;QACvB,OAAO,EAAE,WAAW,CAAC;YACnB,IAAI,EAAE;gBACJ,cAAc,EAAE,8CAA8C;aAC/D;YACD,SAAS,EACP,0FAA0F;SAC7F,CAAC;QACF,QAAQ,EAAE,IAAI;KACf;IACD;QACE,MAAM,EAAE,2CAA2C;QACnD,OAAO,EAAE,WAAW,CAAC;YACnB,IAAI,EAAE;gBACJ,cAAc,EAAE,8CAA8C;aAC/D;YACD,SAAS,EACP,0FAA0F;SAC7F,CAAC;QACF,QAAQ,EAAE,KAAK;KAChB;IACD;QACE,MAAM,EAAE,iDAAiD;QACzD,OAAO,EAAE,WAAW,CAAC;YACnB,IAAI,EAAE;gBACJ,cAAc,EAAE,8CAA8C;aAC/D;YACD,SAAS,EACP,0FAA0F;SAC7F,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,gBAAgB;aAC1B;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,UAAU;aACpB;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"}