@reown/appkit 1.6.8 → 1.6.9-rc.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 (92) hide show
  1. package/dist/esm/exports/basic.js +11 -0
  2. package/dist/esm/exports/basic.js.map +1 -0
  3. package/dist/esm/exports/constants.js +1 -1
  4. package/dist/esm/exports/constants.js.map +1 -1
  5. package/dist/esm/package.json +6 -6
  6. package/dist/esm/src/client/appkit-basic.js +35 -0
  7. package/dist/esm/src/client/appkit-basic.js.map +1 -0
  8. package/dist/esm/src/client/appkit.js +371 -0
  9. package/dist/esm/src/client/appkit.js.map +1 -0
  10. package/dist/esm/src/client/core.js +1367 -0
  11. package/dist/esm/src/client/core.js.map +1 -0
  12. package/dist/esm/src/client.js +98 -24
  13. package/dist/esm/src/client.js.map +1 -1
  14. package/dist/esm/src/utils/HelpersUtil.js.map +1 -1
  15. package/dist/esm/tests/client/adapter-management.test.js +83 -0
  16. package/dist/esm/tests/client/adapter-management.test.js.map +1 -0
  17. package/dist/esm/tests/client/appkit-basic.test.js +68 -0
  18. package/dist/esm/tests/client/appkit-basic.test.js.map +1 -0
  19. package/dist/esm/tests/client/balance.test.js +54 -0
  20. package/dist/esm/tests/client/balance.test.js.map +1 -0
  21. package/dist/esm/tests/client/connection.test.js +52 -0
  22. package/dist/esm/tests/client/connection.test.js.map +1 -0
  23. package/dist/esm/tests/client/initialization.test.js +122 -0
  24. package/dist/esm/tests/client/initialization.test.js.map +1 -0
  25. package/dist/esm/tests/client/listeners.test.js +50 -0
  26. package/dist/esm/tests/client/listeners.test.js.map +1 -0
  27. package/dist/esm/tests/client/public-methods.test.js +654 -0
  28. package/dist/esm/tests/client/public-methods.test.js.map +1 -0
  29. package/dist/esm/tests/client/universal-adapter.test.js +44 -0
  30. package/dist/esm/tests/client/universal-adapter.test.js.map +1 -0
  31. package/dist/esm/tests/client/walletconnect-events.test.js +61 -0
  32. package/dist/esm/tests/client/walletconnect-events.test.js.map +1 -0
  33. package/dist/esm/tests/connectors/WalletConnectConnector.test.js +63 -0
  34. package/dist/esm/tests/connectors/WalletConnectConnector.test.js.map +1 -0
  35. package/dist/esm/tests/mocks/Account.js +13 -0
  36. package/dist/esm/tests/mocks/Account.js.map +1 -0
  37. package/dist/esm/tests/mocks/Adapter.js +95 -0
  38. package/dist/esm/tests/mocks/Adapter.js.map +1 -0
  39. package/dist/esm/tests/mocks/AppKit.js +24 -0
  40. package/dist/esm/tests/mocks/AppKit.js.map +1 -0
  41. package/dist/esm/tests/mocks/Networks.js +17 -0
  42. package/dist/esm/tests/mocks/Networks.js.map +1 -0
  43. package/dist/esm/tests/mocks/Options.js +17 -0
  44. package/dist/esm/tests/mocks/Options.js.map +1 -0
  45. package/dist/esm/tests/mocks/Providers.js +46 -0
  46. package/dist/esm/tests/mocks/Providers.js.map +1 -0
  47. package/dist/esm/tests/mocks/UniversalProvider.js +139 -0
  48. package/dist/esm/tests/mocks/UniversalProvider.js.map +1 -0
  49. package/dist/esm/tests/siwe.test.js +258 -0
  50. package/dist/esm/tests/siwe.test.js.map +1 -0
  51. package/dist/esm/tests/test-utils.js +36 -0
  52. package/dist/esm/tests/test-utils.js.map +1 -0
  53. package/dist/esm/tests/universal-adapter.test.js +246 -0
  54. package/dist/esm/tests/universal-adapter.test.js.map +1 -0
  55. package/dist/esm/tests/utils/HelpersUtil.test.js +218 -0
  56. package/dist/esm/tests/utils/HelpersUtil.test.js.map +1 -0
  57. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  58. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  59. package/dist/types/exports/basic.d.ts +8 -0
  60. package/dist/types/exports/constants.d.ts +1 -1
  61. package/dist/types/src/client/appkit-basic.d.ts +24 -0
  62. package/dist/types/src/client/appkit.d.ts +23 -0
  63. package/dist/types/src/client/core.d.ts +208 -0
  64. package/dist/types/src/client.d.ts +3 -2
  65. package/dist/types/src/library/react/index.d.ts +1 -1
  66. package/dist/types/src/networks/bitcoin.d.ts +5 -5
  67. package/dist/types/src/networks/solana/solana.d.ts +1 -1
  68. package/dist/types/src/networks/solana/solanaDevnet.d.ts +1 -1
  69. package/dist/types/src/networks/solana/solanaTestnet.d.ts +1 -1
  70. package/dist/types/src/store/ProviderUtil.d.ts +5 -3
  71. package/dist/types/tests/client/adapter-management.test.d.ts +1 -0
  72. package/dist/types/tests/client/appkit-basic.test.d.ts +1 -0
  73. package/dist/types/tests/client/balance.test.d.ts +1 -0
  74. package/dist/types/tests/client/connection.test.d.ts +1 -0
  75. package/dist/types/tests/client/initialization.test.d.ts +1 -0
  76. package/dist/types/tests/client/listeners.test.d.ts +1 -0
  77. package/dist/types/tests/client/public-methods.test.d.ts +1 -0
  78. package/dist/types/tests/client/universal-adapter.test.d.ts +1 -0
  79. package/dist/types/tests/client/walletconnect-events.test.d.ts +1 -0
  80. package/dist/types/tests/connectors/WalletConnectConnector.test.d.ts +1 -0
  81. package/dist/types/tests/mocks/Account.d.ts +12 -0
  82. package/dist/types/tests/mocks/Adapter.d.ts +5 -0
  83. package/dist/types/tests/mocks/AppKit.d.ts +3 -0
  84. package/dist/types/tests/mocks/Networks.d.ts +4 -0
  85. package/dist/types/tests/mocks/Options.d.ts +6 -0
  86. package/dist/types/tests/mocks/Providers.d.ts +42 -0
  87. package/dist/types/tests/mocks/UniversalProvider.d.ts +3 -0
  88. package/dist/types/tests/siwe.test.d.ts +1 -0
  89. package/dist/types/tests/test-utils.d.ts +4 -0
  90. package/dist/types/tests/universal-adapter.test.d.ts +1 -0
  91. package/dist/types/tests/utils/HelpersUtil.test.d.ts +1 -0
  92. package/package.json +14 -14
@@ -0,0 +1,83 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { ChainController, ConnectorController } from '@reown/appkit-core';
3
+ import { AppKit } from '../../src/client.js';
4
+ import { mockBitcoinAdapter } from '../mocks/Adapter.js';
5
+ import { bitcoin } from '../mocks/Networks.js';
6
+ import { mockOptions } from '../mocks/Options.js';
7
+ import { mockBlockchainApiController, mockStorageUtil, mockWindowAndDocument } from '../test-utils';
8
+ mockWindowAndDocument();
9
+ mockStorageUtil();
10
+ mockBlockchainApiController();
11
+ describe('Adapter Management', () => {
12
+ describe('addAdapter', () => {
13
+ it('should add a new adapter successfully', () => {
14
+ const addAdapter = vi.spyOn(ChainController, 'addAdapter');
15
+ const appKit = new AppKit(mockOptions);
16
+ appKit.addAdapter(mockBitcoinAdapter, [bitcoin]);
17
+ expect(appKit.chainAdapters?.bip122).toBeDefined();
18
+ expect(appKit.chainNamespaces).toContain('bip122');
19
+ expect(addAdapter).toHaveBeenCalledWith(mockBitcoinAdapter, {
20
+ connectionControllerClient: expect.any(Object),
21
+ networkControllerClient: expect.any(Object)
22
+ }, expect.any(Array));
23
+ });
24
+ it('should not add adapter if clients are not initialized', () => {
25
+ const appKit = new AppKit(mockOptions);
26
+ appKit.connectionControllerClient = undefined;
27
+ appKit.networkControllerClient = undefined;
28
+ appKit.addAdapter(mockBitcoinAdapter, [bitcoin]);
29
+ expect(appKit.chainAdapters?.bip122).toBeUndefined();
30
+ });
31
+ it('should not add adapter if chainAdapters is not initialized', () => {
32
+ const addAdapter = vi.spyOn(ChainController, 'addAdapter');
33
+ const appKit = new AppKit(mockOptions);
34
+ const initChainAdapter = vi.spyOn(appKit, 'initChainAdapter');
35
+ const createAdapter = vi.spyOn(appKit, 'createAdapter');
36
+ appKit.chainAdapters = undefined;
37
+ appKit.addAdapter(mockBitcoinAdapter, [bitcoin]);
38
+ expect(createAdapter).not.toHaveBeenCalled();
39
+ expect(initChainAdapter).not.toHaveBeenCalled();
40
+ expect(addAdapter).not.toHaveBeenCalled();
41
+ });
42
+ });
43
+ describe('removeAdapter', () => {
44
+ it('should remove an existing adapter successfully', () => {
45
+ const removeAdapter = vi.spyOn(ChainController, 'removeAdapter');
46
+ const removeConnectorAdapter = vi.spyOn(ConnectorController, 'removeAdapter');
47
+ const appKit = new AppKit(mockOptions);
48
+ appKit.removeAdapter('eip155');
49
+ expect(appKit.chainAdapters?.eip155).toBeUndefined();
50
+ expect(appKit.chainNamespaces).not.toContain('eip155');
51
+ expect(removeAdapter).toHaveBeenCalledWith('eip155');
52
+ expect(removeConnectorAdapter).toHaveBeenCalledWith('eip155');
53
+ });
54
+ it('should not remove adapter if user is connected', () => {
55
+ const removeAdapter = vi.spyOn(ChainController, 'removeAdapter');
56
+ const removeConnectorAdapter = vi.spyOn(ConnectorController, 'removeAdapter');
57
+ vi.spyOn(ChainController.state, 'activeCaipAddress', 'get').mockReturnValue('eip155:1:0x123');
58
+ const appKit = new AppKit(mockOptions);
59
+ appKit.removeAdapter('eip155');
60
+ expect(appKit.chainAdapters?.eip155).toBeDefined();
61
+ expect(appKit.chainNamespaces).toContain('eip155');
62
+ expect(removeAdapter).not.toHaveBeenCalled();
63
+ expect(removeConnectorAdapter).not.toHaveBeenCalled();
64
+ vi.spyOn(ChainController.state, 'activeCaipAddress', 'get').mockClear();
65
+ });
66
+ it('should not remove adapter if adapter does not exist', () => {
67
+ const removeAdapter = vi.spyOn(ChainController, 'removeAdapter');
68
+ const removeConnectorAdapter = vi.spyOn(ConnectorController, 'removeAdapter');
69
+ const appKit = new AppKit(mockOptions);
70
+ appKit.removeAdapter('bip122');
71
+ expect(removeAdapter).not.toHaveBeenCalled();
72
+ expect(removeConnectorAdapter).not.toHaveBeenCalled();
73
+ });
74
+ it('should not remove adapter if chainAdapters is not initialized', () => {
75
+ const appKit = new AppKit(mockOptions);
76
+ appKit.chainAdapters = undefined;
77
+ appKit.removeAdapter('eip155');
78
+ expect(ChainController.removeAdapter).not.toHaveBeenCalled();
79
+ expect(ConnectorController.removeAdapter).not.toHaveBeenCalled();
80
+ });
81
+ });
82
+ });
83
+ //# sourceMappingURL=adapter-management.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-management.test.js","sourceRoot":"","sources":["../../../../tests/client/adapter-management.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAGjD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAEnG,qBAAqB,EAAE,CAAA;AACvB,eAAe,EAAE,CAAA;AACjB,2BAA2B,EAAE,CAAA;AAE7B,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,YAAY,CAAC,CAAA;YAE1D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAA;YAEtC,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;YAEhD,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;YAClD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YAClD,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CACrC,kBAAkB,EAClB;gBACE,0BAA0B,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC9C,uBAAuB,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;aAC5C,EACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAClB,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAGrC;YAAC,MAAc,CAAC,0BAA0B,GAAG,SAAS,CACtD;YAAC,MAAc,CAAC,uBAAuB,GAAG,SAAS,CAAA;YAEpD,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;YAEhD,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,aAAa,EAAE,CAAA;QACtD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,YAAY,CAAC,CAAA;YAE1D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAA;YACtC,MAAM,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,MAAa,EAAE,kBAAkB,CAAC,CAAA;YACpE,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,MAAa,EAAE,eAAe,CAAC,CAE7D;YAAC,MAAc,CAAC,aAAa,GAAG,SAAS,CAAA;YAE1C,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;YAEhD,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;YAC5C,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;YAC/C,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QAC3C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;YAChE,MAAM,sBAAsB,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAA;YAE7E,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAA;YACtC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;YAE9B,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,aAAa,EAAE,CAAA;YACpD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YACtD,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAA;YACpD,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;YAChE,MAAM,sBAAsB,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAA;YAC7E,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAA;YAE7F,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAA;YACtC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;YAE9B,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;YAClD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YAClD,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;YAC5C,MAAM,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;YAErD,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC,SAAS,EAAE,CAAA;QACzE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;YAChE,MAAM,sBAAsB,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAA;YAE7E,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAA;YACtC,MAAM,CAAC,aAAa,CAAC,QAA0B,CAAC,CAAA;YAEhD,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;YAC5C,MAAM,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACvD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAErC;YAAC,MAAc,CAAC,aAAa,GAAG,SAAS,CAAA;YAC1C,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;YAE9B,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;YAC5D,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QAClE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,68 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { AccountController, ApiController, ConnectionController, ModalController } from '@reown/appkit-core';
3
+ import { AppKit } from '../../src/client/appkit-basic';
4
+ import { mockOptions } from '../mocks/Options';
5
+ import { mockBlockchainApiController, mockStorageUtil, mockWindowAndDocument } from '../test-utils';
6
+ mockWindowAndDocument();
7
+ mockStorageUtil();
8
+ mockBlockchainApiController();
9
+ describe('AppKitBasic', () => {
10
+ let appKit;
11
+ beforeEach(() => {
12
+ appKit = new AppKit(mockOptions);
13
+ });
14
+ afterEach(() => {
15
+ vi.clearAllMocks();
16
+ });
17
+ it('should have valid default state', () => {
18
+ expect(appKit.activeAdapter).toBeUndefined();
19
+ expect(appKit.adapters).toBeUndefined();
20
+ expect(appKit.activeChainNamespace).toBeUndefined();
21
+ expect(appKit.adapter).toBeUndefined();
22
+ });
23
+ describe('open', () => {
24
+ beforeEach(() => {
25
+ vi.spyOn(AccountController, 'state', 'get').mockReturnValue({
26
+ caipAddress: undefined
27
+ });
28
+ });
29
+ it('should open modal when not connected', async () => {
30
+ const modalSpy = vi.spyOn(ModalController, 'open');
31
+ await appKit.open({ view: 'Connect' });
32
+ expect(modalSpy).toHaveBeenCalledWith({ view: 'Connect' });
33
+ });
34
+ it('should not open modal when connected', async () => {
35
+ vi.spyOn(AccountController, 'state', 'get').mockReturnValue({
36
+ caipAddress: 'eip155:1:0x123'
37
+ });
38
+ const modalSpy = vi.spyOn(ModalController, 'open');
39
+ await appKit.open({ view: 'Connect' });
40
+ expect(modalSpy).not.toHaveBeenCalled();
41
+ });
42
+ });
43
+ describe('close', () => {
44
+ it('should call finalizeWcConnection when manualWCControl is true', async () => {
45
+ vi.spyOn(ConnectionController, 'finalizeWcConnection');
46
+ const appKit = new AppKit({ ...mockOptions, manualWCControl: true });
47
+ await appKit.close();
48
+ expect(ConnectionController.finalizeWcConnection).toHaveBeenCalled();
49
+ });
50
+ it('should not call finalizeWcConnection when manualWCControl is false', async () => {
51
+ vi.spyOn(ConnectionController, 'finalizeWcConnection');
52
+ const appKit = new AppKit({ ...mockOptions, manualWCControl: false });
53
+ await appKit.close();
54
+ expect(ConnectionController.finalizeWcConnection).not.toHaveBeenCalled();
55
+ });
56
+ });
57
+ describe('initialize', () => {
58
+ it('should not initialize excluded wallet rdns if basic is true', () => {
59
+ vi.spyOn(ApiController, 'initializeExcludedWalletRdns');
60
+ new AppKit({
61
+ ...mockOptions,
62
+ excludeWalletIds: ['eoa', 'ordinal']
63
+ });
64
+ expect(ApiController.initializeExcludedWalletRdns).not.toHaveBeenCalled();
65
+ });
66
+ });
67
+ });
68
+ //# sourceMappingURL=appkit-basic.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appkit-basic.test.js","sourceRoot":"","sources":["../../../../tests/client/appkit-basic.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { NetworkUtil } from '@reown/appkit-common';
3
+ import { setBalance } from '@reown/appkit-core';
4
+ import { AppKit } from '../../src/client';
5
+ import { mockEvmAdapter } from '../mocks/Adapter';
6
+ import { base, mainnet, sepolia } from '../mocks/Networks';
7
+ import { mockOptions } from '../mocks/Options';
8
+ import { mockBlockchainApiController, mockStorageUtil, mockWindowAndDocument } from '../test-utils';
9
+ mockWindowAndDocument();
10
+ mockStorageUtil();
11
+ mockBlockchainApiController();
12
+ describe('Balance sync', () => {
13
+ it('should not sync balance if theres no matching caipNetwork', async () => {
14
+ const getNetworksByNamespaceSpy = vi.spyOn(NetworkUtil, 'getNetworksByNamespace');
15
+ const setBalanceSpy = vi.mocked(setBalance);
16
+ const appKit = new AppKit(mockOptions);
17
+ await appKit['syncBalance']({
18
+ address: '0x123',
19
+ chainId: base.id,
20
+ chainNamespace: base.chainNamespace
21
+ });
22
+ expect(getNetworksByNamespaceSpy).toHaveBeenCalled();
23
+ expect(mockEvmAdapter.getBalance).not.toHaveBeenCalled();
24
+ expect(setBalanceSpy).not.toHaveBeenCalled();
25
+ });
26
+ it('should fetch native balance on testnet', async () => {
27
+ const getNetworksByNamespaceSpy = vi.spyOn(NetworkUtil, 'getNetworksByNamespace');
28
+ const setBalanceSpy = vi.mocked(setBalance);
29
+ const mockAccount = {
30
+ address: '0x123',
31
+ chainId: sepolia.id,
32
+ chainNamespace: sepolia.chainNamespace
33
+ };
34
+ const appKit = new AppKit({ ...mockOptions, networks: [sepolia] });
35
+ await appKit['syncAccount'](mockAccount);
36
+ expect(getNetworksByNamespaceSpy).toHaveBeenCalled();
37
+ expect(mockEvmAdapter.getBalance).toHaveBeenCalled();
38
+ expect(setBalanceSpy).toHaveBeenCalledWith('1.00', 'ETH', sepolia.chainNamespace);
39
+ });
40
+ it('should set the correct native token balance', async () => {
41
+ const getNetworksByNamespaceSpy = vi.spyOn(NetworkUtil, 'getNetworksByNamespace');
42
+ const setBalanceSpy = vi.mocked(setBalance);
43
+ const appKit = new AppKit(mockOptions);
44
+ await appKit['syncBalance']({
45
+ address: '0x123',
46
+ chainId: mainnet.id,
47
+ chainNamespace: mainnet.chainNamespace
48
+ });
49
+ expect(getNetworksByNamespaceSpy).toHaveBeenCalled();
50
+ expect(mockEvmAdapter.getBalance).toHaveBeenCalled();
51
+ expect(setBalanceSpy).toHaveBeenCalledWith('1.00', 'ETH', 'eip155');
52
+ });
53
+ });
54
+ //# sourceMappingURL=balance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.test.js","sourceRoot":"","sources":["../../../../tests/client/balance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { StorageUtil, setStatus } from '@reown/appkit-core';
3
+ import { AppKit } from '../../src/client';
4
+ import { mockEvmAdapter, mockSolanaAdapter } from '../mocks/Adapter';
5
+ import { mainnet, sepolia } from '../mocks/Networks';
6
+ import { mockOptions } from '../mocks/Options';
7
+ import { mockBlockchainApiController, mockStorageUtil, mockWindowAndDocument } from '../test-utils';
8
+ mockWindowAndDocument();
9
+ mockStorageUtil();
10
+ mockBlockchainApiController();
11
+ describe('syncExistingConnection', () => {
12
+ it('should set status to "connecting" and sync the connection when a connector and namespace are present', async () => {
13
+ const setStatusSpy = vi.mocked(setStatus);
14
+ vi.spyOn(StorageUtil, 'getConnectedConnectorId').mockReturnValue('evm-connector');
15
+ vi.spyOn(StorageUtil, 'getConnectionStatus').mockReturnValue('connected');
16
+ const appKit = new AppKit({
17
+ ...mockOptions,
18
+ adapters: [mockEvmAdapter],
19
+ networks: [mainnet, sepolia]
20
+ });
21
+ await appKit['syncExistingConnection']();
22
+ expect(setStatusSpy).toHaveBeenCalledWith('connecting', 'eip155');
23
+ expect(setStatusSpy).toHaveBeenCalledWith('connected', 'eip155');
24
+ vi.spyOn(StorageUtil, 'getConnectedConnectorId').mockReturnValue(undefined);
25
+ vi.spyOn(StorageUtil, 'getConnectionStatus').mockReturnValue('connected');
26
+ await appKit['syncExistingConnection']();
27
+ expect(setStatus).toHaveBeenCalledWith('connecting', 'eip155');
28
+ expect(setStatus).toHaveBeenCalledWith('disconnected', 'eip155');
29
+ vi.spyOn(StorageUtil, 'getConnectedConnectorId').mockClear();
30
+ vi.spyOn(StorageUtil, 'getConnectionStatus').mockClear();
31
+ });
32
+ it('should reconnect to multiple namespaces if previously connected', async () => {
33
+ const setConnectedConnectorId = vi.spyOn(StorageUtil, 'setConnectedConnectorId');
34
+ // const setProviderId = vi.spyOn(ProviderUtil, 'setProviderId').mockImplementation(() => {})
35
+ vi.spyOn(StorageUtil, 'getConnectedConnectorId').mockReturnValue('universal-connector');
36
+ const appKit = new AppKit(mockOptions);
37
+ await appKit['syncExistingConnection']();
38
+ expect(mockEvmAdapter.syncConnection).toHaveBeenCalled();
39
+ expect(mockSolanaAdapter.syncConnection).toHaveBeenCalled();
40
+ expect(mockEvmAdapter.getAccounts).toHaveBeenCalled();
41
+ expect(mockSolanaAdapter.getAccounts).toHaveBeenCalled();
42
+ // NOTE: Even though setConnectedConnectorId is getting called in the same function (syncProvider),
43
+ // it's getting detected as not called by the test runner.
44
+ // expect(setProviderId).toHaveBeenCalledWith('eip155', 'EXTERNAL')
45
+ // expect(setProviderId).toHaveBeenCalledWith('solana', 'EXTERNAL')
46
+ expect(setConnectedConnectorId).toHaveBeenCalledWith('eip155', 'evm-connector');
47
+ expect(setConnectedConnectorId).toHaveBeenCalledWith('solana', 'solana-connector');
48
+ vi.spyOn(StorageUtil, 'getConnectedConnectorId').mockClear();
49
+ vi.spyOn(StorageUtil, 'getConnectionStatus').mockClear();
50
+ });
51
+ });
52
+ //# sourceMappingURL=connection.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.test.js","sourceRoot":"","sources":["../../../../tests/client/connection.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ import { afterEach, describe, expect, it, vi } from 'vitest';
2
+ import {} from '@reown/appkit-common';
3
+ import { AlertController, ChainController, EventsController, OptionsController, StorageUtil } from '@reown/appkit-core';
4
+ import { ErrorUtil } from '@reown/appkit-utils';
5
+ import { AppKit } from '../../src/client';
6
+ import { mainnet, polygon, sepolia, solana } from '../mocks/Networks';
7
+ import { mockOptions } from '../mocks/Options';
8
+ import { mockBlockchainApiController, mockStorageUtil, mockWindowAndDocument } from '../test-utils';
9
+ mockWindowAndDocument();
10
+ mockStorageUtil();
11
+ mockBlockchainApiController();
12
+ describe('Base', () => {
13
+ afterEach(() => {
14
+ vi.clearAllMocks();
15
+ });
16
+ describe('Base Initialization', () => {
17
+ it('should initialize controllers', async () => {
18
+ const sendEvent = vi.spyOn(EventsController, 'sendEvent');
19
+ const initialize = vi.spyOn(ChainController, 'initialize');
20
+ new AppKit(mockOptions);
21
+ const options = { ...mockOptions };
22
+ delete options.adapters;
23
+ expect(sendEvent).toHaveBeenCalled();
24
+ expect(sendEvent).toHaveBeenCalledWith({
25
+ type: 'track',
26
+ event: 'INITIALIZE',
27
+ properties: {
28
+ ...options,
29
+ networks: options.networks.map((n) => n.id),
30
+ siweConfig: {
31
+ options: options.siweConfig?.options || {}
32
+ }
33
+ }
34
+ });
35
+ expect(initialize).toHaveBeenCalledOnce();
36
+ expect(initialize).toHaveBeenCalledWith(mockOptions.adapters, [mainnet, sepolia, solana], {
37
+ connectionControllerClient: expect.any(Object),
38
+ networkControllerClient: expect.any(Object)
39
+ });
40
+ });
41
+ it('should set EIP6963 enabled by default', () => {
42
+ const setEIP6963Enabled = vi.spyOn(OptionsController, 'setEIP6963Enabled');
43
+ new AppKit(mockOptions);
44
+ expect(setEIP6963Enabled).toHaveBeenCalledWith(true);
45
+ });
46
+ it('should set EIP6963 disabled when option is disabled in config', () => {
47
+ const setEIP6963Enabled = vi.spyOn(OptionsController, 'setEIP6963Enabled');
48
+ new AppKit({
49
+ ...mockOptions,
50
+ enableEIP6963: false
51
+ });
52
+ expect(setEIP6963Enabled).toHaveBeenCalledWith(false);
53
+ });
54
+ it('should set partially defaultAccountType', () => {
55
+ const setDefaultAccountTypes = vi.spyOn(OptionsController, 'setDefaultAccountTypes');
56
+ new AppKit({
57
+ ...mockOptions,
58
+ defaultAccountTypes: {
59
+ eip155: 'eoa',
60
+ bip122: 'ordinal'
61
+ }
62
+ });
63
+ expect(setDefaultAccountTypes).toHaveBeenCalledWith({
64
+ eip155: 'eoa',
65
+ bip122: 'ordinal'
66
+ });
67
+ });
68
+ it('should use default network prop when defaultNetwork prop is not included in the networks array', () => {
69
+ vi.spyOn(StorageUtil, 'getActiveCaipNetworkId').mockReturnValueOnce(undefined);
70
+ const setActiveCaipNetwork = vi.spyOn(ChainController, 'setActiveCaipNetwork');
71
+ new AppKit({
72
+ ...mockOptions,
73
+ defaultNetwork: polygon
74
+ });
75
+ expect(setActiveCaipNetwork).toHaveBeenCalledWith(mainnet);
76
+ });
77
+ it('should use default network prop when there is no network in storage', () => {
78
+ vi.spyOn(StorageUtil, 'getActiveCaipNetworkId').mockReturnValueOnce(undefined);
79
+ const setActiveCaipNetwork = vi.spyOn(ChainController, 'setActiveCaipNetwork');
80
+ new AppKit({
81
+ ...mockOptions,
82
+ defaultNetwork: sepolia
83
+ });
84
+ expect(setActiveCaipNetwork).toHaveBeenCalledWith(sepolia);
85
+ });
86
+ it('should not use default network prop when there is a network in storage', () => {
87
+ vi.spyOn(StorageUtil, 'getActiveCaipNetworkId').mockReturnValueOnce(sepolia.caipNetworkId);
88
+ const setActiveCaipNetwork = vi.spyOn(ChainController, 'setActiveCaipNetwork');
89
+ new AppKit({
90
+ ...mockOptions,
91
+ defaultNetwork: polygon
92
+ });
93
+ expect(setActiveCaipNetwork).toHaveBeenCalledWith(sepolia);
94
+ });
95
+ });
96
+ describe('Alert Errors', () => {
97
+ it('should handle alert errors based on error messages', () => {
98
+ const open = vi.spyOn(AlertController, 'open');
99
+ const errors = [
100
+ {
101
+ alert: ErrorUtil.ALERT_ERRORS.INVALID_APP_CONFIGURATION,
102
+ message: 'Error: WebSocket connection closed abnormally with code: 3000 (Unauthorized: origin not allowed)'
103
+ },
104
+ {
105
+ alert: ErrorUtil.ALERT_ERRORS.JWT_TOKEN_NOT_VALID,
106
+ message: 'WebSocket connection closed abnormally with code: 3000 (JWT validation error: JWT Token is not yet valid:)'
107
+ },
108
+ {
109
+ alert: ErrorUtil.ALERT_ERRORS.INVALID_PROJECT_ID,
110
+ message: 'Uncaught Error: WebSocket connection closed abnormally with code: 3000 (Unauthorized: invalid key)'
111
+ }
112
+ ];
113
+ const appKit = new AppKit(mockOptions);
114
+ for (const { alert, message } of errors) {
115
+ // @ts-expect-error
116
+ appKit.handleAlertError(new Error(message));
117
+ expect(open).toHaveBeenCalledWith(alert, 'error');
118
+ }
119
+ });
120
+ });
121
+ });
122
+ //# sourceMappingURL=initialization.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialization.test.js","sourceRoot":"","sources":["../../../../tests/client/initialization.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { Emitter } from '@reown/appkit-common';
3
+ import { BlockchainApiController, ChainController, setCaipAddress, setProfileImage, setProfileName } from '@reown/appkit-core';
4
+ import { AppKit } from '../../src/client';
5
+ import { mainnet, unsupportedNetwork } from '../mocks/Networks';
6
+ import { mockOptions } from '../mocks/Options';
7
+ import { mockBlockchainApiController, mockChainControllerStateWithUnsupportedChain, mockStorageUtil, mockWindowAndDocument } from '../test-utils';
8
+ mockWindowAndDocument();
9
+ mockStorageUtil();
10
+ mockBlockchainApiController();
11
+ describe('Listeners', () => {
12
+ it('should set caip address, profile name and profile image on accountChanged event', async () => {
13
+ const identity = { name: 'vitalik.eth', avatar: null };
14
+ const setCaipAddressSpy = vi.mocked(setCaipAddress);
15
+ const fetchIdentitySpy = vi
16
+ .spyOn(BlockchainApiController, 'fetchIdentity')
17
+ .mockResolvedValueOnce(identity);
18
+ const mockAccount = {
19
+ address: '0x123',
20
+ chainId: mainnet.id,
21
+ chainNamespace: mainnet.chainNamespace
22
+ };
23
+ const emitter = new Emitter();
24
+ const appKit = new AppKit({ ...mockOptions, features: { email: false, socials: [] } });
25
+ const setProfileNameSpy = vi.mocked(setProfileName).mockImplementation(() => { });
26
+ const setProfileImageSpy = vi.mocked(setProfileImage).mockImplementation(() => { });
27
+ await appKit['syncAccount'](mockAccount);
28
+ emitter.emit('accountChanged', mockAccount);
29
+ expect(setCaipAddressSpy).toHaveBeenCalledWith(`${mockAccount.chainNamespace}:${mockAccount.chainId}:${mockAccount.address}`, 'eip155');
30
+ expect(fetchIdentitySpy).toHaveBeenCalledWith({ address: mockAccount.address });
31
+ expect(setProfileNameSpy).toHaveBeenCalledWith(identity.name, 'eip155');
32
+ expect(setProfileImageSpy).toHaveBeenCalledWith(identity.avatar, 'eip155');
33
+ });
34
+ it('should show unsupported chain UI when network is unsupported and allowUnsupportedChain is false', async () => {
35
+ const showUnsupportedChainUISpy = vi.spyOn(ChainController, 'showUnsupportedChainUI');
36
+ const appKit = new AppKit({
37
+ ...mockOptions,
38
+ allowUnsupportedChain: false,
39
+ features: { email: false, socials: [] }
40
+ });
41
+ mockChainControllerStateWithUnsupportedChain();
42
+ await appKit['syncAccount']({
43
+ address: '0x123',
44
+ chainId: unsupportedNetwork.id,
45
+ chainNamespace: unsupportedNetwork.chainNamespace
46
+ });
47
+ expect(showUnsupportedChainUISpy).toHaveBeenCalled();
48
+ });
49
+ });
50
+ //# sourceMappingURL=listeners.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listeners.test.js","sourceRoot":"","sources":["../../../../tests/client/listeners.test.ts"],"names":[],"mappings":"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"}