@reown/appkit-core-react-native 0.0.0-canary-20240912195440

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 (163) hide show
  1. package/lib/commonjs/controllers/AccountController.js +59 -0
  2. package/lib/commonjs/controllers/AccountController.js.map +1 -0
  3. package/lib/commonjs/controllers/ApiController.js +332 -0
  4. package/lib/commonjs/controllers/ApiController.js.map +1 -0
  5. package/lib/commonjs/controllers/AssetController.js +34 -0
  6. package/lib/commonjs/controllers/AssetController.js.map +1 -0
  7. package/lib/commonjs/controllers/BlockchainApiController.js +45 -0
  8. package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -0
  9. package/lib/commonjs/controllers/ConnectionController.js +98 -0
  10. package/lib/commonjs/controllers/ConnectionController.js.map +1 -0
  11. package/lib/commonjs/controllers/ConnectorController.js +41 -0
  12. package/lib/commonjs/controllers/ConnectorController.js.map +1 -0
  13. package/lib/commonjs/controllers/EventsController.js +79 -0
  14. package/lib/commonjs/controllers/EventsController.js.map +1 -0
  15. package/lib/commonjs/controllers/ModalController.js +64 -0
  16. package/lib/commonjs/controllers/ModalController.js.map +1 -0
  17. package/lib/commonjs/controllers/NetworkController.js +65 -0
  18. package/lib/commonjs/controllers/NetworkController.js.map +1 -0
  19. package/lib/commonjs/controllers/OptionsController.js +63 -0
  20. package/lib/commonjs/controllers/OptionsController.js.map +1 -0
  21. package/lib/commonjs/controllers/PublicStateController.js +33 -0
  22. package/lib/commonjs/controllers/PublicStateController.js.map +1 -0
  23. package/lib/commonjs/controllers/RouterController.js +56 -0
  24. package/lib/commonjs/controllers/RouterController.js.map +1 -0
  25. package/lib/commonjs/controllers/SnackController.js +34 -0
  26. package/lib/commonjs/controllers/SnackController.js.map +1 -0
  27. package/lib/commonjs/controllers/ThemeController.js +32 -0
  28. package/lib/commonjs/controllers/ThemeController.js.map +1 -0
  29. package/lib/commonjs/index.js +146 -0
  30. package/lib/commonjs/index.js.map +1 -0
  31. package/lib/commonjs/utils/AssetUtil.js +37 -0
  32. package/lib/commonjs/utils/AssetUtil.js.map +1 -0
  33. package/lib/commonjs/utils/ConstantsUtil.js +14 -0
  34. package/lib/commonjs/utils/ConstantsUtil.js.map +1 -0
  35. package/lib/commonjs/utils/CoreHelperUtil.js +214 -0
  36. package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -0
  37. package/lib/commonjs/utils/EventUtil.js +25 -0
  38. package/lib/commonjs/utils/EventUtil.js.map +1 -0
  39. package/lib/commonjs/utils/FetchUtil.js +118 -0
  40. package/lib/commonjs/utils/FetchUtil.js.map +1 -0
  41. package/lib/commonjs/utils/RouterUtil.js +25 -0
  42. package/lib/commonjs/utils/RouterUtil.js.map +1 -0
  43. package/lib/commonjs/utils/StorageUtil.js +130 -0
  44. package/lib/commonjs/utils/StorageUtil.js.map +1 -0
  45. package/lib/commonjs/utils/TypeUtil.js +2 -0
  46. package/lib/commonjs/utils/TypeUtil.js.map +1 -0
  47. package/lib/module/controllers/AccountController.js +54 -0
  48. package/lib/module/controllers/AccountController.js.map +1 -0
  49. package/lib/module/controllers/ApiController.js +327 -0
  50. package/lib/module/controllers/ApiController.js.map +1 -0
  51. package/lib/module/controllers/AssetController.js +29 -0
  52. package/lib/module/controllers/AssetController.js.map +1 -0
  53. package/lib/module/controllers/BlockchainApiController.js +40 -0
  54. package/lib/module/controllers/BlockchainApiController.js.map +1 -0
  55. package/lib/module/controllers/ConnectionController.js +93 -0
  56. package/lib/module/controllers/ConnectionController.js.map +1 -0
  57. package/lib/module/controllers/ConnectorController.js +36 -0
  58. package/lib/module/controllers/ConnectorController.js.map +1 -0
  59. package/lib/module/controllers/EventsController.js +73 -0
  60. package/lib/module/controllers/EventsController.js.map +1 -0
  61. package/lib/module/controllers/ModalController.js +59 -0
  62. package/lib/module/controllers/ModalController.js.map +1 -0
  63. package/lib/module/controllers/NetworkController.js +60 -0
  64. package/lib/module/controllers/NetworkController.js.map +1 -0
  65. package/lib/module/controllers/OptionsController.js +58 -0
  66. package/lib/module/controllers/OptionsController.js.map +1 -0
  67. package/lib/module/controllers/PublicStateController.js +28 -0
  68. package/lib/module/controllers/PublicStateController.js.map +1 -0
  69. package/lib/module/controllers/RouterController.js +51 -0
  70. package/lib/module/controllers/RouterController.js.map +1 -0
  71. package/lib/module/controllers/SnackController.js +29 -0
  72. package/lib/module/controllers/SnackController.js.map +1 -0
  73. package/lib/module/controllers/ThemeController.js +27 -0
  74. package/lib/module/controllers/ThemeController.js.map +1 -0
  75. package/lib/module/index.js +23 -0
  76. package/lib/module/index.js.map +1 -0
  77. package/lib/module/utils/AssetUtil.js +31 -0
  78. package/lib/module/utils/AssetUtil.js.map +1 -0
  79. package/lib/module/utils/ConstantsUtil.js +8 -0
  80. package/lib/module/utils/ConstantsUtil.js.map +1 -0
  81. package/lib/module/utils/CoreHelperUtil.js +208 -0
  82. package/lib/module/utils/CoreHelperUtil.js.map +1 -0
  83. package/lib/module/utils/EventUtil.js +19 -0
  84. package/lib/module/utils/EventUtil.js.map +1 -0
  85. package/lib/module/utils/FetchUtil.js +111 -0
  86. package/lib/module/utils/FetchUtil.js.map +1 -0
  87. package/lib/module/utils/RouterUtil.js +19 -0
  88. package/lib/module/utils/RouterUtil.js.map +1 -0
  89. package/lib/module/utils/StorageUtil.js +122 -0
  90. package/lib/module/utils/StorageUtil.js.map +1 -0
  91. package/lib/module/utils/TypeUtil.js +2 -0
  92. package/lib/module/utils/TypeUtil.js.map +1 -0
  93. package/lib/typescript/controllers/AccountController.d.ts +25 -0
  94. package/lib/typescript/controllers/AccountController.d.ts.map +1 -0
  95. package/lib/typescript/controllers/ApiController.d.ts +37 -0
  96. package/lib/typescript/controllers/ApiController.d.ts.map +1 -0
  97. package/lib/typescript/controllers/AssetController.d.ts +14 -0
  98. package/lib/typescript/controllers/AssetController.d.ts.map +1 -0
  99. package/lib/typescript/controllers/BlockchainApiController.d.ts +12 -0
  100. package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -0
  101. package/lib/typescript/controllers/ConnectionController.d.ts +47 -0
  102. package/lib/typescript/controllers/ConnectionController.d.ts.map +1 -0
  103. package/lib/typescript/controllers/ConnectorController.d.ts +17 -0
  104. package/lib/typescript/controllers/ConnectorController.d.ts.map +1 -0
  105. package/lib/typescript/controllers/EventsController.d.ts +18 -0
  106. package/lib/typescript/controllers/EventsController.d.ts.map +1 -0
  107. package/lib/typescript/controllers/ModalController.d.ts +17 -0
  108. package/lib/typescript/controllers/ModalController.d.ts.map +1 -0
  109. package/lib/typescript/controllers/NetworkController.d.ts +28 -0
  110. package/lib/typescript/controllers/NetworkController.d.ts.map +1 -0
  111. package/lib/typescript/controllers/OptionsController.d.ts +35 -0
  112. package/lib/typescript/controllers/OptionsController.d.ts.map +1 -0
  113. package/lib/typescript/controllers/PublicStateController.d.ts +12 -0
  114. package/lib/typescript/controllers/PublicStateController.d.ts.map +1 -0
  115. package/lib/typescript/controllers/RouterController.d.ts +21 -0
  116. package/lib/typescript/controllers/RouterController.d.ts.map +1 -0
  117. package/lib/typescript/controllers/SnackController.d.ts +12 -0
  118. package/lib/typescript/controllers/SnackController.d.ts.map +1 -0
  119. package/lib/typescript/controllers/ThemeController.d.ts +12 -0
  120. package/lib/typescript/controllers/ThemeController.d.ts.map +1 -0
  121. package/lib/typescript/index.d.ts +35 -0
  122. package/lib/typescript/index.d.ts.map +1 -0
  123. package/lib/typescript/utils/AssetUtil.d.ts +7 -0
  124. package/lib/typescript/utils/AssetUtil.d.ts.map +1 -0
  125. package/lib/typescript/utils/ConstantsUtil.d.ts +8 -0
  126. package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -0
  127. package/lib/typescript/utils/CoreHelperUtil.d.ts +32 -0
  128. package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -0
  129. package/lib/typescript/utils/EventUtil.d.ts +5 -0
  130. package/lib/typescript/utils/EventUtil.d.ts.map +1 -0
  131. package/lib/typescript/utils/FetchUtil.d.ts +26 -0
  132. package/lib/typescript/utils/FetchUtil.d.ts.map +1 -0
  133. package/lib/typescript/utils/RouterUtil.d.ts +5 -0
  134. package/lib/typescript/utils/RouterUtil.d.ts.map +1 -0
  135. package/lib/typescript/utils/StorageUtil.d.ts +19 -0
  136. package/lib/typescript/utils/StorageUtil.d.ts.map +1 -0
  137. package/lib/typescript/utils/TypeUtil.d.ts +277 -0
  138. package/lib/typescript/utils/TypeUtil.d.ts.map +1 -0
  139. package/package.json +69 -0
  140. package/readme.md +9 -0
  141. package/src/controllers/AccountController.ts +80 -0
  142. package/src/controllers/ApiController.ts +360 -0
  143. package/src/controllers/AssetController.ts +38 -0
  144. package/src/controllers/BlockchainApiController.ts +43 -0
  145. package/src/controllers/ConnectionController.ts +147 -0
  146. package/src/controllers/ConnectorController.ts +50 -0
  147. package/src/controllers/EventsController.ts +79 -0
  148. package/src/controllers/ModalController.ts +64 -0
  149. package/src/controllers/NetworkController.ts +79 -0
  150. package/src/controllers/OptionsController.ts +89 -0
  151. package/src/controllers/PublicStateController.ts +37 -0
  152. package/src/controllers/RouterController.ts +84 -0
  153. package/src/controllers/SnackController.ts +36 -0
  154. package/src/controllers/ThemeController.ts +31 -0
  155. package/src/index.ts +57 -0
  156. package/src/utils/AssetUtil.ts +40 -0
  157. package/src/utils/ConstantsUtil.ts +11 -0
  158. package/src/utils/CoreHelperUtil.ts +249 -0
  159. package/src/utils/EventUtil.ts +22 -0
  160. package/src/utils/FetchUtil.ts +117 -0
  161. package/src/utils/RouterUtil.ts +18 -0
  162. package/src/utils/StorageUtil.ts +138 -0
  163. package/src/utils/TypeUtil.ts +342 -0
@@ -0,0 +1,50 @@
1
+ import { subscribeKey as subKey } from 'valtio/utils';
2
+ import { proxy, ref } from 'valtio';
3
+ import type { Connector, ConnectorType } from '../utils/TypeUtil';
4
+
5
+ // -- Types --------------------------------------------- //
6
+ export interface ConnectorControllerState {
7
+ connectors: Connector[];
8
+ connectedConnector?: ConnectorType;
9
+ authLoading?: boolean;
10
+ }
11
+
12
+ type StateKey = keyof ConnectorControllerState;
13
+
14
+ // -- State --------------------------------------------- //
15
+ const state = proxy<ConnectorControllerState>({
16
+ connectors: []
17
+ });
18
+
19
+ // -- Controller ---------------------------------------- //
20
+ export const ConnectorController = {
21
+ state,
22
+
23
+ subscribeKey<K extends StateKey>(key: K, callback: (value: ConnectorControllerState[K]) => void) {
24
+ return subKey(state, key, callback);
25
+ },
26
+
27
+ setConnectors(connectors: ConnectorControllerState['connectors']) {
28
+ state.connectors = connectors.map(c => ref(c));
29
+ },
30
+
31
+ addConnector(connector: Connector) {
32
+ state.connectors.push(ref(connector));
33
+ },
34
+
35
+ getConnectors() {
36
+ return state.connectors;
37
+ },
38
+
39
+ getAuthConnector() {
40
+ return state.connectors.find(c => c.type === 'AUTH');
41
+ },
42
+
43
+ setConnectedConnector(connectorType: ConnectorControllerState['connectedConnector']) {
44
+ state.connectedConnector = connectorType;
45
+ },
46
+
47
+ setAuthLoading(loading: ConnectorControllerState['authLoading']) {
48
+ state.authLoading = loading;
49
+ }
50
+ };
@@ -0,0 +1,79 @@
1
+ import { Platform } from 'react-native';
2
+ import { proxy, subscribe as sub } from 'valtio/vanilla';
3
+ import { ApiController } from './ApiController';
4
+ import { OptionsController } from './OptionsController';
5
+ import { CoreHelperUtil } from '../utils/CoreHelperUtil';
6
+ import { FetchUtil } from '../utils/FetchUtil';
7
+ import type { Event } from '../utils/TypeUtil';
8
+
9
+ // -- Helpers ------------------------------------------- //
10
+ const baseUrl = CoreHelperUtil.getAnalyticsUrl();
11
+ const api = new FetchUtil({ baseUrl });
12
+ const excluded = ['MODAL_CREATED'];
13
+
14
+ // -- Types --------------------------------------------- //
15
+ export interface EventsControllerState {
16
+ timestamp: number;
17
+ data: Event;
18
+ }
19
+
20
+ // -- State --------------------------------------------- //
21
+ const state = proxy<EventsControllerState>({
22
+ timestamp: Date.now(),
23
+ data: {
24
+ type: 'track',
25
+ event: 'MODAL_CREATED' // just for init purposes
26
+ }
27
+ });
28
+
29
+ // -- Controller ---------------------------------------- //
30
+ export const EventsController = {
31
+ state,
32
+
33
+ subscribe(callback: (newState: EventsControllerState) => void) {
34
+ return sub(state, () => callback(state));
35
+ },
36
+
37
+ _getApiHeaders() {
38
+ const { projectId, sdkType, sdkVersion } = OptionsController.state;
39
+
40
+ return {
41
+ 'x-project-id': projectId,
42
+ 'x-sdk-type': sdkType,
43
+ 'x-sdk-version': sdkVersion,
44
+ 'User-Agent': `${Platform.OS}-${Platform.Version}`
45
+ };
46
+ },
47
+
48
+ async _sendAnalyticsEvent(data: EventsControllerState['data'], timestamp: number) {
49
+ if (excluded.includes(data.event)) {
50
+ return;
51
+ }
52
+
53
+ try {
54
+ await api.post({
55
+ path: '/e',
56
+ headers: this._getApiHeaders(),
57
+ body: {
58
+ eventId: CoreHelperUtil.getUUID(),
59
+ bundleId: CoreHelperUtil.getBundleId(),
60
+ timestamp,
61
+ props: data
62
+ }
63
+ });
64
+ } catch {
65
+ // Catch silently
66
+ }
67
+ },
68
+
69
+ async sendEvent(data: EventsControllerState['data']) {
70
+ const timestamp = Date.now();
71
+ state.timestamp = timestamp;
72
+ state.data = data;
73
+ await ApiController.state.prefetchPromise;
74
+
75
+ if (OptionsController.state.enableAnalytics) {
76
+ EventsController._sendAnalyticsEvent(data, timestamp);
77
+ }
78
+ }
79
+ };
@@ -0,0 +1,64 @@
1
+ import { proxy } from 'valtio';
2
+ import { AccountController } from './AccountController';
3
+ import type { RouterControllerState } from './RouterController';
4
+ import { RouterController } from './RouterController';
5
+ import { PublicStateController } from './PublicStateController';
6
+ import { EventsController } from './EventsController';
7
+ import { ApiController } from './ApiController';
8
+
9
+ // -- Types --------------------------------------------- //
10
+ export interface ModalControllerState {
11
+ open: boolean;
12
+ loading: boolean;
13
+ }
14
+
15
+ export interface ModalControllerArguments {
16
+ open: {
17
+ view?: RouterControllerState['view'];
18
+ };
19
+ }
20
+
21
+ // -- State --------------------------------------------- //
22
+ const state = proxy<ModalControllerState>({
23
+ open: false,
24
+ loading: false
25
+ });
26
+
27
+ // -- Controller ---------------------------------------- //
28
+ export const ModalController = {
29
+ state,
30
+
31
+ async open(options?: ModalControllerArguments['open']) {
32
+ await ApiController.state.prefetchPromise;
33
+ const connected = AccountController.state.isConnected;
34
+ if (options?.view) {
35
+ RouterController.reset(options.view);
36
+ } else if (AccountController.state.isConnected) {
37
+ RouterController.reset('Account');
38
+ } else {
39
+ RouterController.reset('Connect');
40
+ }
41
+ state.open = true;
42
+ PublicStateController.set({ open: true });
43
+ EventsController.sendEvent({
44
+ type: 'track',
45
+ event: 'MODAL_OPEN',
46
+ properties: { connected }
47
+ });
48
+ },
49
+
50
+ close() {
51
+ const connected = AccountController.state.isConnected;
52
+ state.open = false;
53
+ PublicStateController.set({ open: false });
54
+ EventsController.sendEvent({
55
+ type: 'track',
56
+ event: 'MODAL_CLOSE',
57
+ properties: { connected }
58
+ });
59
+ },
60
+
61
+ setLoading(loading: ModalControllerState['loading']) {
62
+ state.loading = loading;
63
+ }
64
+ };
@@ -0,0 +1,79 @@
1
+ import { proxy, ref } from 'valtio';
2
+ import type { CaipNetwork, CaipNetworkId } from '../utils/TypeUtil';
3
+ import { PublicStateController } from './PublicStateController';
4
+
5
+ // -- Types --------------------------------------------- //
6
+ export interface NetworkControllerClient {
7
+ switchCaipNetwork: (network: NetworkControllerState['caipNetwork']) => Promise<void>;
8
+ getApprovedCaipNetworksData: () => Promise<{
9
+ approvedCaipNetworkIds: NetworkControllerState['approvedCaipNetworkIds'];
10
+ supportsAllNetworks: NetworkControllerState['supportsAllNetworks'];
11
+ }>;
12
+ }
13
+
14
+ export interface NetworkControllerState {
15
+ supportsAllNetworks: boolean;
16
+ isDefaultCaipNetwork: boolean;
17
+ _client?: NetworkControllerClient;
18
+ caipNetwork?: CaipNetwork;
19
+ requestedCaipNetworks?: CaipNetwork[];
20
+ approvedCaipNetworkIds?: CaipNetworkId[];
21
+ }
22
+
23
+ // -- State --------------------------------------------- //
24
+ const state = proxy<NetworkControllerState>({
25
+ supportsAllNetworks: true,
26
+ isDefaultCaipNetwork: false
27
+ });
28
+
29
+ // -- Controller ---------------------------------------- //
30
+ export const NetworkController = {
31
+ state,
32
+
33
+ _getClient() {
34
+ if (!state._client) {
35
+ throw new Error('NetworkController client not set');
36
+ }
37
+
38
+ return state._client;
39
+ },
40
+
41
+ setClient(client: NetworkControllerClient) {
42
+ state._client = ref(client);
43
+ },
44
+
45
+ setCaipNetwork(caipNetwork: NetworkControllerState['caipNetwork']) {
46
+ state.caipNetwork = caipNetwork;
47
+ PublicStateController.set({ selectedNetworkId: caipNetwork?.id });
48
+ },
49
+
50
+ setDefaultCaipNetwork(caipNetwork: NetworkControllerState['caipNetwork']) {
51
+ state.caipNetwork = caipNetwork;
52
+ state.isDefaultCaipNetwork = true;
53
+ PublicStateController.set({ selectedNetworkId: caipNetwork?.id });
54
+ },
55
+
56
+ setRequestedCaipNetworks(requestedNetworks: NetworkControllerState['requestedCaipNetworks']) {
57
+ state.requestedCaipNetworks = requestedNetworks;
58
+ },
59
+
60
+ async getApprovedCaipNetworksData() {
61
+ const data = await this._getClient().getApprovedCaipNetworksData();
62
+ state.supportsAllNetworks = data.supportsAllNetworks;
63
+ state.approvedCaipNetworkIds = data.approvedCaipNetworkIds;
64
+ },
65
+
66
+ async switchActiveNetwork(network: NetworkControllerState['caipNetwork']) {
67
+ await this._getClient().switchCaipNetwork(network);
68
+ state.caipNetwork = network;
69
+ PublicStateController.set({ selectedNetworkId: network?.id });
70
+ },
71
+
72
+ resetNetwork() {
73
+ if (!state.isDefaultCaipNetwork) {
74
+ state.caipNetwork = undefined;
75
+ }
76
+ state.approvedCaipNetworkIds = undefined;
77
+ state.supportsAllNetworks = true;
78
+ }
79
+ };
@@ -0,0 +1,89 @@
1
+ import { proxy, ref } from 'valtio';
2
+ import type { CustomWallet, Metadata, ProjectId, SdkVersion, Tokens } from '../utils/TypeUtil';
3
+
4
+ // -- Types --------------------------------------------- //
5
+ export interface ClipboardClient {
6
+ setString: (value: string) => Promise<void>;
7
+ }
8
+
9
+ export interface OptionsControllerState {
10
+ projectId: ProjectId;
11
+ _clipboardClient?: ClipboardClient;
12
+ includeWalletIds?: string[];
13
+ excludeWalletIds?: string[];
14
+ featuredWalletIds?: string[];
15
+ customWallets?: CustomWallet[];
16
+ tokens?: Tokens;
17
+ enableAnalytics?: boolean;
18
+ sdkType: string;
19
+ sdkVersion: SdkVersion;
20
+ metadata?: Metadata;
21
+ isSiweEnabled?: boolean;
22
+ }
23
+
24
+ // -- State --------------------------------------------- //
25
+ const state = proxy<OptionsControllerState>({
26
+ projectId: '',
27
+ sdkType: 'appkit',
28
+ sdkVersion: 'react-native-wagmi-undefined'
29
+ });
30
+
31
+ // -- Controller ---------------------------------------- //
32
+ export const OptionsController = {
33
+ state,
34
+
35
+ setClipboardClient(client: ClipboardClient) {
36
+ state._clipboardClient = ref(client);
37
+ },
38
+
39
+ setProjectId(projectId: OptionsControllerState['projectId']) {
40
+ state.projectId = projectId;
41
+ },
42
+
43
+ setIncludeWalletIds(includeWalletIds: OptionsControllerState['includeWalletIds']) {
44
+ state.includeWalletIds = includeWalletIds;
45
+ },
46
+
47
+ setExcludeWalletIds(excludeWalletIds: OptionsControllerState['excludeWalletIds']) {
48
+ state.excludeWalletIds = excludeWalletIds;
49
+ },
50
+
51
+ setFeaturedWalletIds(featuredWalletIds: OptionsControllerState['featuredWalletIds']) {
52
+ state.featuredWalletIds = featuredWalletIds;
53
+ },
54
+
55
+ setTokens(tokens: OptionsControllerState['tokens']) {
56
+ state.tokens = tokens;
57
+ },
58
+
59
+ setCustomWallets(customWallets: OptionsControllerState['customWallets']) {
60
+ state.customWallets = customWallets;
61
+ },
62
+
63
+ setEnableAnalytics(enableAnalytics: OptionsControllerState['enableAnalytics']) {
64
+ state.enableAnalytics = enableAnalytics;
65
+ },
66
+
67
+ setSdkVersion(sdkVersion: OptionsControllerState['sdkVersion']) {
68
+ state.sdkVersion = sdkVersion;
69
+ },
70
+
71
+ setMetadata(metadata: OptionsControllerState['metadata']) {
72
+ state.metadata = metadata;
73
+ },
74
+
75
+ setIsSiweEnabled(isSiweEnabled: OptionsControllerState['isSiweEnabled']) {
76
+ state.isSiweEnabled = isSiweEnabled;
77
+ },
78
+
79
+ isClipboardAvailable() {
80
+ return !!state._clipboardClient;
81
+ },
82
+
83
+ copyToClipboard(value: string) {
84
+ const client = state._clipboardClient;
85
+ if (client) {
86
+ client.setString(value);
87
+ }
88
+ }
89
+ };
@@ -0,0 +1,37 @@
1
+ import { proxy, subscribe as sub } from 'valtio';
2
+ import { subscribeKey as subKey } from 'valtio/utils';
3
+ import type { CaipNetworkId } from '../utils/TypeUtil.js';
4
+
5
+ // -- Types --------------------------------------------- //
6
+ export interface PublicStateControllerState {
7
+ open: boolean;
8
+ selectedNetworkId?: CaipNetworkId;
9
+ }
10
+
11
+ type StateKey = keyof PublicStateControllerState;
12
+
13
+ // -- State --------------------------------------------- //
14
+ const state = proxy<PublicStateControllerState>({
15
+ open: false,
16
+ selectedNetworkId: undefined
17
+ });
18
+
19
+ // -- Controller ---------------------------------------- //
20
+ export const PublicStateController = {
21
+ state,
22
+
23
+ subscribe(callback: (newState: PublicStateControllerState) => void) {
24
+ return sub(state, () => callback(state));
25
+ },
26
+
27
+ subscribeKey<K extends StateKey>(
28
+ key: K,
29
+ callback: (value: PublicStateControllerState[K]) => void
30
+ ) {
31
+ return subKey(state, key, callback);
32
+ },
33
+
34
+ set(newState: Partial<PublicStateControllerState>) {
35
+ Object.assign(state, { ...state, ...newState });
36
+ }
37
+ };
@@ -0,0 +1,84 @@
1
+ import { proxy } from 'valtio';
2
+ import type { WcWallet, CaipNetwork, Connector } from '../utils/TypeUtil';
3
+
4
+ // -- Types --------------------------------------------- //
5
+ export interface RouterControllerState {
6
+ view:
7
+ | 'Account'
8
+ | 'Connect'
9
+ | 'ConnectingWalletConnect'
10
+ | 'ConnectingExternal'
11
+ | 'Networks'
12
+ | 'SwitchNetwork'
13
+ | 'AllWallets'
14
+ | 'WhatIsAWallet'
15
+ | 'WhatIsANetwork'
16
+ | 'GetWallet'
17
+ | 'EmailVerifyDevice'
18
+ | 'EmailVerifyOtp'
19
+ | 'UpdateEmailWallet'
20
+ | 'UpdateEmailPrimaryOtp'
21
+ | 'UpdateEmailSecondaryOtp'
22
+ | 'UpgradeEmailWallet'
23
+ | 'ConnectingSiwe';
24
+ history: RouterControllerState['view'][];
25
+ data?: {
26
+ connector?: Connector;
27
+ wallet?: WcWallet;
28
+ network?: CaipNetwork;
29
+ email?: string;
30
+ newEmail?: string;
31
+ };
32
+ }
33
+
34
+ // -- State --------------------------------------------- //
35
+ const state = proxy<RouterControllerState>({
36
+ view: 'Connect',
37
+ history: ['Connect']
38
+ });
39
+
40
+ // -- Controller ---------------------------------------- //
41
+ export const RouterController = {
42
+ state,
43
+
44
+ push(view: RouterControllerState['view'], data?: RouterControllerState['data']) {
45
+ if (view !== state.view) {
46
+ state.view = view;
47
+ state.history.push(view);
48
+ state.data = data;
49
+ }
50
+ },
51
+
52
+ reset(view: RouterControllerState['view']) {
53
+ state.view = view;
54
+ state.history = [view];
55
+ },
56
+
57
+ replace(view: RouterControllerState['view'], data?: RouterControllerState['data']) {
58
+ if (state.history.length > 1 && state.history.at(-1) !== view) {
59
+ state.view = view;
60
+ state.history[state.history.length - 1] = view;
61
+ state.data = data;
62
+ }
63
+ },
64
+
65
+ goBack() {
66
+ if (state.history.length > 1) {
67
+ state.history.pop();
68
+ const [last] = state.history.slice(-1);
69
+ if (last) {
70
+ state.view = last;
71
+ }
72
+ }
73
+ },
74
+
75
+ goBackToIndex(historyIndex: number) {
76
+ if (state.history.length > 1) {
77
+ state.history = state.history.slice(0, historyIndex + 1);
78
+ const [last] = state.history.slice(-1);
79
+ if (last) {
80
+ state.view = last;
81
+ }
82
+ }
83
+ }
84
+ };
@@ -0,0 +1,36 @@
1
+ import { proxy } from 'valtio';
2
+
3
+ // -- Types --------------------------------------------- //
4
+ export interface SnackControllerState {
5
+ message: string;
6
+ variant: 'error' | 'success';
7
+ open: boolean;
8
+ }
9
+
10
+ // -- State --------------------------------------------- //
11
+ const state = proxy<SnackControllerState>({
12
+ message: '',
13
+ variant: 'success',
14
+ open: false
15
+ });
16
+
17
+ // -- Controller ---------------------------------------- //
18
+ export const SnackController = {
19
+ state,
20
+
21
+ showSuccess(message: SnackControllerState['message']) {
22
+ state.message = message;
23
+ state.variant = 'success';
24
+ state.open = true;
25
+ },
26
+
27
+ showError(message: SnackControllerState['message']) {
28
+ state.message = message;
29
+ state.variant = 'error';
30
+ state.open = true;
31
+ },
32
+
33
+ hide() {
34
+ state.open = false;
35
+ }
36
+ };
@@ -0,0 +1,31 @@
1
+ import { proxy, subscribe as sub } from 'valtio';
2
+ import type { ThemeMode, ThemeVariables } from '../utils/TypeUtil';
3
+
4
+ // -- Types --------------------------------------------- //
5
+ export interface ThemeControllerState {
6
+ themeMode: ThemeMode;
7
+ themeVariables: ThemeVariables;
8
+ }
9
+
10
+ // -- State --------------------------------------------- //
11
+ const state = proxy<ThemeControllerState>({
12
+ themeMode: 'dark',
13
+ themeVariables: {}
14
+ });
15
+
16
+ // -- Controller ---------------------------------------- //
17
+ export const ThemeController = {
18
+ state,
19
+
20
+ subscribe(callback: (newState: ThemeControllerState) => void) {
21
+ return sub(state, () => callback(state));
22
+ },
23
+
24
+ setThemeMode(themeMode: ThemeControllerState['themeMode']) {
25
+ state.themeMode = themeMode;
26
+ },
27
+
28
+ setThemeVariables(themeVariables: ThemeControllerState['themeVariables']) {
29
+ state.themeVariables = { ...state.themeVariables, ...themeVariables };
30
+ }
31
+ };
package/src/index.ts ADDED
@@ -0,0 +1,57 @@
1
+ // -- Controllers -------------------------------------------------------------
2
+ export { ModalController } from './controllers/ModalController';
3
+ export type { ModalControllerArguments, ModalControllerState } from './controllers/ModalController';
4
+
5
+ export { RouterController } from './controllers/RouterController';
6
+ export type { RouterControllerState } from './controllers/RouterController';
7
+
8
+ export { AccountController } from './controllers/AccountController';
9
+ export type { AccountControllerState } from './controllers/AccountController';
10
+
11
+ export { NetworkController } from './controllers/NetworkController';
12
+ export type {
13
+ NetworkControllerClient,
14
+ NetworkControllerState
15
+ } from './controllers/NetworkController';
16
+
17
+ export { ConnectionController } from './controllers/ConnectionController';
18
+ export type {
19
+ ConnectionControllerClient,
20
+ ConnectionControllerState
21
+ } from './controllers/ConnectionController';
22
+
23
+ export { ConnectorController } from './controllers/ConnectorController';
24
+ export type { ConnectorControllerState } from './controllers/ConnectorController';
25
+
26
+ export { SnackController } from './controllers/SnackController';
27
+ export type { SnackControllerState } from './controllers/SnackController';
28
+
29
+ export { ApiController } from './controllers/ApiController';
30
+ export type { ApiControllerState } from './controllers/ApiController';
31
+
32
+ export { AssetController } from './controllers/AssetController';
33
+ export type { AssetControllerState } from './controllers/AssetController';
34
+
35
+ export { ThemeController } from './controllers/ThemeController';
36
+ export type { ThemeControllerState } from './controllers/ThemeController';
37
+
38
+ export { OptionsController } from './controllers/OptionsController';
39
+ export type { OptionsControllerState } from './controllers/OptionsController';
40
+
41
+ export { PublicStateController } from './controllers/PublicStateController';
42
+ export type { PublicStateControllerState } from './controllers/PublicStateController';
43
+
44
+ export { BlockchainApiController } from './controllers/BlockchainApiController';
45
+
46
+ export { EventsController } from './controllers/EventsController';
47
+ export type { EventsControllerState } from './controllers/EventsController';
48
+
49
+ // -- Utils -------------------------------------------------------------------
50
+ export { AssetUtil } from './utils/AssetUtil';
51
+ export { ConstantsUtil } from './utils/ConstantsUtil';
52
+ export { CoreHelperUtil } from './utils/CoreHelperUtil';
53
+ export { StorageUtil } from './utils/StorageUtil';
54
+ export { EventUtil } from './utils/EventUtil';
55
+ export { RouterUtil } from './utils/RouterUtil';
56
+
57
+ export type * from './utils/TypeUtil';
@@ -0,0 +1,40 @@
1
+ import { AssetController } from '../controllers/AssetController';
2
+ import type { CaipNetwork, Connector, WcWallet } from './TypeUtil';
3
+
4
+ export const AssetUtil = {
5
+ getWalletImage(wallet?: WcWallet) {
6
+ if (wallet?.image_url) {
7
+ return wallet?.image_url;
8
+ }
9
+
10
+ if (wallet?.image_id) {
11
+ return AssetController.state.walletImages[wallet.image_id];
12
+ }
13
+
14
+ return undefined;
15
+ },
16
+
17
+ getNetworkImage(network?: CaipNetwork) {
18
+ if (network?.imageUrl) {
19
+ return network?.imageUrl;
20
+ }
21
+
22
+ if (network?.imageId) {
23
+ return AssetController.state.networkImages[network.imageId];
24
+ }
25
+
26
+ return undefined;
27
+ },
28
+
29
+ getConnectorImage(connector?: Connector) {
30
+ if (connector?.imageUrl) {
31
+ return connector.imageUrl;
32
+ }
33
+
34
+ if (connector?.imageId) {
35
+ return AssetController.state.connectorImages[connector.imageId];
36
+ }
37
+
38
+ return undefined;
39
+ }
40
+ };
@@ -0,0 +1,11 @@
1
+ export const ConstantsUtil = {
2
+ FOUR_MINUTES_MS: 240000,
3
+
4
+ TEN_SEC_MS: 10000,
5
+
6
+ ONE_SEC_MS: 1000,
7
+
8
+ EMAIL_REGEX: /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+$/,
9
+
10
+ LINKING_ERROR: 'LINKING_ERROR'
11
+ };