@reown/appkit-core-react-native 0.0.0-fix-email-login-20241010173711 → 0.0.0-fix-fetch-error-improvements-20241114122508

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 (172) hide show
  1. package/lib/commonjs/controllers/AccountController.js +35 -1
  2. package/lib/commonjs/controllers/AccountController.js.map +1 -1
  3. package/lib/commonjs/controllers/ApiController.js +16 -9
  4. package/lib/commonjs/controllers/ApiController.js.map +1 -1
  5. package/lib/commonjs/controllers/BlockchainApiController.js +84 -0
  6. package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -1
  7. package/lib/commonjs/controllers/ConnectionController.js +30 -7
  8. package/lib/commonjs/controllers/ConnectionController.js.map +1 -1
  9. package/lib/commonjs/controllers/ConnectorController.js +9 -1
  10. package/lib/commonjs/controllers/ConnectorController.js.map +1 -1
  11. package/lib/commonjs/controllers/EnsController.js +35 -0
  12. package/lib/commonjs/controllers/EnsController.js.map +1 -0
  13. package/lib/commonjs/controllers/EventsController.js +1 -15
  14. package/lib/commonjs/controllers/EventsController.js.map +1 -1
  15. package/lib/commonjs/controllers/ModalController.js +3 -1
  16. package/lib/commonjs/controllers/ModalController.js.map +1 -1
  17. package/lib/commonjs/controllers/NetworkController.js +20 -1
  18. package/lib/commonjs/controllers/NetworkController.js.map +1 -1
  19. package/lib/commonjs/controllers/OptionsController.js +14 -2
  20. package/lib/commonjs/controllers/OptionsController.js.map +1 -1
  21. package/lib/commonjs/controllers/RouterController.js +22 -1
  22. package/lib/commonjs/controllers/RouterController.js.map +1 -1
  23. package/lib/commonjs/controllers/SendController.js +176 -0
  24. package/lib/commonjs/controllers/SendController.js.map +1 -0
  25. package/lib/commonjs/controllers/SnackController.js +21 -1
  26. package/lib/commonjs/controllers/SnackController.js.map +1 -1
  27. package/lib/commonjs/controllers/SwapController.js +91 -0
  28. package/lib/commonjs/controllers/SwapController.js.map +1 -0
  29. package/lib/commonjs/controllers/TransactionsController.js +112 -0
  30. package/lib/commonjs/controllers/TransactionsController.js.map +1 -0
  31. package/lib/commonjs/controllers/WebviewController.js +52 -0
  32. package/lib/commonjs/controllers/WebviewController.js.map +1 -0
  33. package/lib/commonjs/index.js +42 -0
  34. package/lib/commonjs/index.js.map +1 -1
  35. package/lib/commonjs/utils/ApiUtil.js +18 -0
  36. package/lib/commonjs/utils/ApiUtil.js.map +1 -0
  37. package/lib/commonjs/utils/ConstantsUtil.js +8 -1
  38. package/lib/commonjs/utils/ConstantsUtil.js.map +1 -1
  39. package/lib/commonjs/utils/CoreHelperUtil.js +33 -0
  40. package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -1
  41. package/lib/commonjs/utils/FetchUtil.js.map +1 -1
  42. package/lib/commonjs/utils/StorageUtil.js +24 -0
  43. package/lib/commonjs/utils/StorageUtil.js.map +1 -1
  44. package/lib/commonjs/utils/SwapApiUtil.js +23 -0
  45. package/lib/commonjs/utils/SwapApiUtil.js.map +1 -0
  46. package/lib/commonjs/utils/SwapCalculationUtil.js +24 -0
  47. package/lib/commonjs/utils/SwapCalculationUtil.js.map +1 -0
  48. package/lib/commonjs/utils/TypeUtil.js +4 -0
  49. package/lib/module/controllers/AccountController.js +35 -1
  50. package/lib/module/controllers/AccountController.js.map +1 -1
  51. package/lib/module/controllers/ApiController.js +16 -9
  52. package/lib/module/controllers/ApiController.js.map +1 -1
  53. package/lib/module/controllers/BlockchainApiController.js +84 -0
  54. package/lib/module/controllers/BlockchainApiController.js.map +1 -1
  55. package/lib/module/controllers/ConnectionController.js +30 -7
  56. package/lib/module/controllers/ConnectionController.js.map +1 -1
  57. package/lib/module/controllers/ConnectorController.js +9 -1
  58. package/lib/module/controllers/ConnectorController.js.map +1 -1
  59. package/lib/module/controllers/EnsController.js +30 -0
  60. package/lib/module/controllers/EnsController.js.map +1 -0
  61. package/lib/module/controllers/EventsController.js +1 -15
  62. package/lib/module/controllers/EventsController.js.map +1 -1
  63. package/lib/module/controllers/ModalController.js +3 -1
  64. package/lib/module/controllers/ModalController.js.map +1 -1
  65. package/lib/module/controllers/NetworkController.js +20 -1
  66. package/lib/module/controllers/NetworkController.js.map +1 -1
  67. package/lib/module/controllers/OptionsController.js +14 -2
  68. package/lib/module/controllers/OptionsController.js.map +1 -1
  69. package/lib/module/controllers/RouterController.js +22 -1
  70. package/lib/module/controllers/RouterController.js.map +1 -1
  71. package/lib/module/controllers/SendController.js +171 -0
  72. package/lib/module/controllers/SendController.js.map +1 -0
  73. package/lib/module/controllers/SnackController.js +21 -1
  74. package/lib/module/controllers/SnackController.js.map +1 -1
  75. package/lib/module/controllers/SwapController.js +86 -0
  76. package/lib/module/controllers/SwapController.js.map +1 -0
  77. package/lib/module/controllers/TransactionsController.js +107 -0
  78. package/lib/module/controllers/TransactionsController.js.map +1 -0
  79. package/lib/module/controllers/WebviewController.js +47 -0
  80. package/lib/module/controllers/WebviewController.js.map +1 -0
  81. package/lib/module/index.js +7 -0
  82. package/lib/module/index.js.map +1 -1
  83. package/lib/module/utils/ApiUtil.js +12 -0
  84. package/lib/module/utils/ApiUtil.js.map +1 -0
  85. package/lib/module/utils/ConstantsUtil.js +8 -1
  86. package/lib/module/utils/ConstantsUtil.js.map +1 -1
  87. package/lib/module/utils/CoreHelperUtil.js +33 -0
  88. package/lib/module/utils/CoreHelperUtil.js.map +1 -1
  89. package/lib/module/utils/FetchUtil.js.map +1 -1
  90. package/lib/module/utils/StorageUtil.js +24 -0
  91. package/lib/module/utils/StorageUtil.js.map +1 -1
  92. package/lib/module/utils/SwapApiUtil.js +17 -0
  93. package/lib/module/utils/SwapApiUtil.js.map +1 -0
  94. package/lib/module/utils/SwapCalculationUtil.js +19 -0
  95. package/lib/module/utils/SwapCalculationUtil.js.map +1 -0
  96. package/lib/module/utils/TypeUtil.js +1 -1
  97. package/lib/typescript/controllers/AccountController.d.ts +9 -1
  98. package/lib/typescript/controllers/AccountController.d.ts.map +1 -1
  99. package/lib/typescript/controllers/ApiController.d.ts +2 -1
  100. package/lib/typescript/controllers/ApiController.d.ts.map +1 -1
  101. package/lib/typescript/controllers/BlockchainApiController.d.ts +6 -1
  102. package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -1
  103. package/lib/typescript/controllers/ConnectionController.d.ts +16 -1
  104. package/lib/typescript/controllers/ConnectionController.d.ts.map +1 -1
  105. package/lib/typescript/controllers/ConnectorController.d.ts +1 -1
  106. package/lib/typescript/controllers/ConnectorController.d.ts.map +1 -1
  107. package/lib/typescript/controllers/EnsController.d.ts +10 -0
  108. package/lib/typescript/controllers/EnsController.d.ts.map +1 -0
  109. package/lib/typescript/controllers/EventsController.d.ts +0 -6
  110. package/lib/typescript/controllers/EventsController.d.ts.map +1 -1
  111. package/lib/typescript/controllers/ModalController.d.ts.map +1 -1
  112. package/lib/typescript/controllers/NetworkController.d.ts +5 -0
  113. package/lib/typescript/controllers/NetworkController.d.ts.map +1 -1
  114. package/lib/typescript/controllers/OptionsController.d.ts +6 -2
  115. package/lib/typescript/controllers/OptionsController.d.ts.map +1 -1
  116. package/lib/typescript/controllers/RouterController.d.ts +15 -1
  117. package/lib/typescript/controllers/RouterController.d.ts.map +1 -1
  118. package/lib/typescript/controllers/SendController.d.ts +41 -0
  119. package/lib/typescript/controllers/SendController.d.ts.map +1 -0
  120. package/lib/typescript/controllers/SnackController.d.ts +7 -0
  121. package/lib/typescript/controllers/SnackController.d.ts.map +1 -1
  122. package/lib/typescript/controllers/SwapController.d.ts +29 -0
  123. package/lib/typescript/controllers/SwapController.d.ts.map +1 -0
  124. package/lib/typescript/controllers/TransactionsController.d.ts +21 -0
  125. package/lib/typescript/controllers/TransactionsController.d.ts.map +1 -0
  126. package/lib/typescript/controllers/WebviewController.d.ts +21 -0
  127. package/lib/typescript/controllers/WebviewController.d.ts.map +1 -0
  128. package/lib/typescript/index.d.ts +19 -26
  129. package/lib/typescript/index.d.ts.map +1 -1
  130. package/lib/typescript/utils/ApiUtil.d.ts +5 -0
  131. package/lib/typescript/utils/ApiUtil.d.ts.map +1 -0
  132. package/lib/typescript/utils/ConstantsUtil.d.ts +3 -0
  133. package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -1
  134. package/lib/typescript/utils/CoreHelperUtil.d.ts +6 -0
  135. package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -1
  136. package/lib/typescript/utils/FetchUtil.d.ts +4 -0
  137. package/lib/typescript/utils/FetchUtil.d.ts.map +1 -1
  138. package/lib/typescript/utils/StorageUtil.d.ts +5 -1
  139. package/lib/typescript/utils/StorageUtil.d.ts.map +1 -1
  140. package/lib/typescript/utils/SwapApiUtil.d.ts +4 -0
  141. package/lib/typescript/utils/SwapApiUtil.d.ts.map +1 -0
  142. package/lib/typescript/utils/SwapCalculationUtil.d.ts +5 -0
  143. package/lib/typescript/utils/SwapCalculationUtil.d.ts.map +1 -0
  144. package/lib/typescript/utils/TypeUtil.d.ts +242 -3
  145. package/lib/typescript/utils/TypeUtil.d.ts.map +1 -1
  146. package/package.json +5 -5
  147. package/readme.md +1 -1
  148. package/src/controllers/AccountController.ts +50 -2
  149. package/src/controllers/ApiController.ts +27 -23
  150. package/src/controllers/BlockchainApiController.ts +88 -1
  151. package/src/controllers/ConnectionController.ts +52 -8
  152. package/src/controllers/ConnectorController.ts +13 -1
  153. package/src/controllers/EnsController.ts +39 -0
  154. package/src/controllers/EventsController.ts +1 -13
  155. package/src/controllers/ModalController.ts +3 -1
  156. package/src/controllers/NetworkController.ts +34 -1
  157. package/src/controllers/OptionsController.ts +25 -4
  158. package/src/controllers/RouterController.ts +59 -10
  159. package/src/controllers/SendController.ts +234 -0
  160. package/src/controllers/SnackController.ts +28 -1
  161. package/src/controllers/SwapController.ts +108 -0
  162. package/src/controllers/TransactionsController.ts +142 -0
  163. package/src/controllers/WebviewController.ts +63 -0
  164. package/src/index.ts +43 -30
  165. package/src/utils/ApiUtil.ts +18 -0
  166. package/src/utils/ConstantsUtil.ts +13 -1
  167. package/src/utils/CoreHelperUtil.ts +38 -1
  168. package/src/utils/FetchUtil.ts +4 -0
  169. package/src/utils/StorageUtil.ts +31 -1
  170. package/src/utils/SwapApiUtil.ts +19 -0
  171. package/src/utils/SwapCalculationUtil.ts +21 -0
  172. package/src/utils/TypeUtil.ts +273 -3
@@ -0,0 +1,142 @@
1
+ import type { Transaction } from '@reown/appkit-common-react-native';
2
+ import { proxy, subscribe as sub } from 'valtio/vanilla';
3
+ import { OptionsController } from './OptionsController';
4
+ import { EventsController } from './EventsController';
5
+ import { SnackController } from './SnackController';
6
+ import { NetworkController } from './NetworkController';
7
+ import { BlockchainApiController } from './BlockchainApiController';
8
+ import { AccountController } from './AccountController';
9
+
10
+ // -- Types --------------------------------------------- //
11
+ type TransactionByMonthMap = Record<string, Transaction[]>;
12
+ type TransactionByYearMap = Record<string, TransactionByMonthMap>;
13
+
14
+ export interface TransactionsControllerState {
15
+ transactions: Transaction[];
16
+ loading: boolean;
17
+ empty: boolean;
18
+ next: string | undefined;
19
+ }
20
+
21
+ // -- State --------------------------------------------- //
22
+ const state = proxy<TransactionsControllerState>({
23
+ transactions: [],
24
+ loading: false,
25
+ empty: false,
26
+ next: undefined
27
+ });
28
+
29
+ // -- Controller ---------------------------------------- //
30
+ export const TransactionsController = {
31
+ state,
32
+
33
+ subscribe(callback: (newState: TransactionsControllerState) => void) {
34
+ return sub(state, () => callback(state));
35
+ },
36
+
37
+ async fetchTransactions(accountAddress?: string, reset?: boolean) {
38
+ const { projectId } = OptionsController.state;
39
+
40
+ if (!projectId || !accountAddress) {
41
+ throw new Error("Transactions can't be fetched without a projectId and an accountAddress");
42
+ }
43
+
44
+ state.loading = true;
45
+
46
+ if (reset) {
47
+ state.next = undefined;
48
+ }
49
+
50
+ try {
51
+ const response = await BlockchainApiController.fetchTransactions({
52
+ account: accountAddress,
53
+ projectId,
54
+ cursor: state.next
55
+ });
56
+
57
+ const nonSpamTransactions = this.filterSpamTransactions(response?.data ?? []);
58
+ let filteredTransactions = [...state.transactions, ...nonSpamTransactions];
59
+
60
+ if (reset) {
61
+ filteredTransactions = nonSpamTransactions;
62
+ }
63
+
64
+ state.loading = false;
65
+
66
+ state.transactions = filteredTransactions;
67
+
68
+ state.empty = nonSpamTransactions.length === 0;
69
+ state.next = response?.next ? response.next : undefined;
70
+ } catch (error) {
71
+ EventsController.sendEvent({
72
+ type: 'track',
73
+ event: 'ERROR_FETCH_TRANSACTIONS',
74
+ properties: {
75
+ address: accountAddress,
76
+ projectId,
77
+ cursor: state.next,
78
+ isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount'
79
+ }
80
+ });
81
+ SnackController.showError('Failed to fetch transactions');
82
+ state.loading = false;
83
+ state.empty = true;
84
+ state.next = undefined;
85
+ }
86
+ },
87
+
88
+ getTransactionsByYearAndMonth(transactions: Transaction[]) {
89
+ const grouped: TransactionByYearMap = {};
90
+ let filteredTransactions = this.filterByConnectedChain(transactions);
91
+
92
+ filteredTransactions.forEach(transaction => {
93
+ const year = new Date(transaction.metadata.minedAt).getFullYear();
94
+ const month = new Date(transaction.metadata.minedAt).getMonth();
95
+
96
+ const yearTransactions = grouped[year] ?? {};
97
+ const monthTransactions = yearTransactions[month] ?? [];
98
+
99
+ // If there's a transaction with the same id, remove the old one
100
+ const newMonthTransactions = monthTransactions.filter(tx => tx.id !== transaction.id);
101
+
102
+ grouped[year] = {
103
+ ...yearTransactions,
104
+ [month]: [...newMonthTransactions, transaction].sort(
105
+ (a, b) => new Date(b.metadata.minedAt).getTime() - new Date(a.metadata.minedAt).getTime()
106
+ )
107
+ };
108
+ });
109
+
110
+ return grouped;
111
+ },
112
+
113
+ filterSpamTransactions(transactions: Transaction[]) {
114
+ return transactions.filter(transaction => {
115
+ const isAllSpam = transaction.transfers.every(
116
+ transfer => transfer.nft_info?.flags.is_spam === true
117
+ );
118
+
119
+ return !isAllSpam;
120
+ });
121
+ },
122
+
123
+ filterByConnectedChain(transactions: Transaction[]) {
124
+ const chainId = NetworkController.state.caipNetwork?.id;
125
+ const filteredTransactions = transactions.filter(
126
+ transaction => transaction.metadata.chain === chainId
127
+ );
128
+
129
+ return filteredTransactions;
130
+ },
131
+
132
+ clearCursor() {
133
+ state.next = undefined;
134
+ },
135
+
136
+ resetTransactions() {
137
+ state.transactions = [];
138
+ state.loading = false;
139
+ state.empty = false;
140
+ state.next = undefined;
141
+ }
142
+ };
@@ -0,0 +1,63 @@
1
+ import type { SocialProvider } from '@reown/appkit-common-react-native';
2
+ import { proxy, subscribe as sub } from 'valtio';
3
+
4
+ // -- Types --------------------------------------------- //
5
+ export interface WebviewControllerState {
6
+ frameViewVisible: boolean;
7
+ webviewVisible: boolean;
8
+ webviewUrl?: string;
9
+ connecting?: boolean;
10
+ connectingProvider?: SocialProvider;
11
+ processingAuth?: boolean;
12
+ }
13
+
14
+ // -- State --------------------------------------------- //
15
+ const state = proxy<WebviewControllerState>({
16
+ frameViewVisible: false,
17
+ webviewVisible: false,
18
+ connecting: false,
19
+ connectingProvider: undefined,
20
+ processingAuth: false
21
+ });
22
+
23
+ // -- Controller ---------------------------------------- //
24
+ export const WebviewController = {
25
+ state,
26
+
27
+ subscribe(callback: (newState: WebviewControllerState) => void) {
28
+ return sub(state, () => callback(state));
29
+ },
30
+
31
+ setFrameViewVisible(frameViewVisible: WebviewControllerState['frameViewVisible']) {
32
+ state.frameViewVisible = frameViewVisible;
33
+ },
34
+
35
+ setWebviewVisible(visible: WebviewControllerState['webviewVisible']) {
36
+ state.webviewVisible = visible;
37
+ },
38
+
39
+ setWebviewUrl(url: WebviewControllerState['webviewUrl']) {
40
+ state.webviewUrl = url;
41
+ },
42
+
43
+ setConnecting(connecting: WebviewControllerState['connecting']) {
44
+ state.connecting = connecting;
45
+ },
46
+
47
+ setConnectingProvider(provider: WebviewControllerState['connectingProvider']) {
48
+ state.connectingProvider = provider;
49
+ },
50
+
51
+ setProcessingAuth(processingAuth: WebviewControllerState['processingAuth']) {
52
+ state.processingAuth = processingAuth;
53
+ },
54
+
55
+ reset() {
56
+ state.frameViewVisible = false;
57
+ state.webviewVisible = false;
58
+ state.connecting = false;
59
+ state.connectingProvider = undefined;
60
+ state.processingAuth = false;
61
+ state.webviewUrl = undefined;
62
+ }
63
+ };
package/src/index.ts CHANGED
@@ -1,52 +1,65 @@
1
1
  // -- Controllers -------------------------------------------------------------
2
- export { ModalController } from './controllers/ModalController';
3
- export type { ModalControllerArguments, ModalControllerState } from './controllers/ModalController';
2
+ export {
3
+ ModalController,
4
+ type ModalControllerArguments,
5
+ type ModalControllerState
6
+ } from './controllers/ModalController';
4
7
 
5
- export { RouterController } from './controllers/RouterController';
6
- export type { RouterControllerState } from './controllers/RouterController';
8
+ export { RouterController, type RouterControllerState } from './controllers/RouterController';
7
9
 
8
- export { AccountController } from './controllers/AccountController';
9
- export type { AccountControllerState } from './controllers/AccountController';
10
+ export { AccountController, type AccountControllerState } from './controllers/AccountController';
10
11
 
11
- export { NetworkController } from './controllers/NetworkController';
12
- export type {
13
- NetworkControllerClient,
14
- NetworkControllerState
12
+ export {
13
+ NetworkController,
14
+ type NetworkControllerClient,
15
+ type NetworkControllerState
15
16
  } from './controllers/NetworkController';
16
17
 
17
- export { ConnectionController } from './controllers/ConnectionController';
18
- export type {
19
- ConnectionControllerClient,
20
- ConnectionControllerState
18
+ export {
19
+ ConnectionController,
20
+ type ConnectionControllerClient,
21
+ type ConnectionControllerState
21
22
  } from './controllers/ConnectionController';
22
23
 
23
- export { ConnectorController } from './controllers/ConnectorController';
24
- export type { ConnectorControllerState } from './controllers/ConnectorController';
24
+ export {
25
+ ConnectorController,
26
+ type ConnectorControllerState
27
+ } from './controllers/ConnectorController';
25
28
 
26
- export { SnackController } from './controllers/SnackController';
27
- export type { SnackControllerState } from './controllers/SnackController';
29
+ export { SnackController, type SnackControllerState } from './controllers/SnackController';
28
30
 
29
- export { ApiController } from './controllers/ApiController';
30
- export type { ApiControllerState } from './controllers/ApiController';
31
+ export { ApiController, type ApiControllerState } from './controllers/ApiController';
31
32
 
32
- export { AssetController } from './controllers/AssetController';
33
- export type { AssetControllerState } from './controllers/AssetController';
33
+ export { AssetController, type AssetControllerState } from './controllers/AssetController';
34
34
 
35
- export { ThemeController } from './controllers/ThemeController';
36
- export type { ThemeControllerState } from './controllers/ThemeController';
35
+ export { ThemeController, type ThemeControllerState } from './controllers/ThemeController';
37
36
 
38
- export { OptionsController } from './controllers/OptionsController';
39
- export type { OptionsControllerState } from './controllers/OptionsController';
37
+ export { OptionsController, type OptionsControllerState } from './controllers/OptionsController';
40
38
 
41
- export { PublicStateController } from './controllers/PublicStateController';
42
- export type { PublicStateControllerState } from './controllers/PublicStateController';
39
+ export {
40
+ PublicStateController,
41
+ type PublicStateControllerState
42
+ } from './controllers/PublicStateController';
43
43
 
44
44
  export { BlockchainApiController } from './controllers/BlockchainApiController';
45
45
 
46
- export { EventsController } from './controllers/EventsController';
47
- export type { EventsControllerState } from './controllers/EventsController';
46
+ export { SwapController, type SwapControllerState } from './controllers/SwapController';
47
+
48
+ export { EventsController, type EventsControllerState } from './controllers/EventsController';
49
+
50
+ export { EnsController, type EnsControllerState } from './controllers/EnsController';
51
+
52
+ export {
53
+ TransactionsController,
54
+ type TransactionsControllerState
55
+ } from './controllers/TransactionsController';
56
+
57
+ export { SendController, type SendControllerState } from './controllers/SendController';
58
+
59
+ export { WebviewController, type WebviewControllerState } from './controllers/WebviewController';
48
60
 
49
61
  // -- Utils -------------------------------------------------------------------
62
+ export { ApiUtil } from './utils/ApiUtil';
50
63
  export { AssetUtil } from './utils/AssetUtil';
51
64
  export { ConstantsUtil } from './utils/ConstantsUtil';
52
65
  export { CoreHelperUtil } from './utils/CoreHelperUtil';
@@ -0,0 +1,18 @@
1
+ import { Platform } from 'react-native';
2
+ import { CoreHelperUtil } from './CoreHelperUtil';
3
+
4
+ export const ApiUtil = {
5
+ getOrigin() {
6
+ return CoreHelperUtil.getBundleId();
7
+ },
8
+
9
+ getUserAgent() {
10
+ const reactNativeVersion = [
11
+ Platform.constants.reactNativeVersion.major,
12
+ Platform.constants.reactNativeVersion.minor,
13
+ Platform.constants.reactNativeVersion.patch
14
+ ].join('.');
15
+
16
+ return `${Platform.OS}-${Platform.Version}@rn-${reactNativeVersion}`;
17
+ }
18
+ };
@@ -1,3 +1,11 @@
1
+ import type { Features } from './TypeUtil';
2
+
3
+ const defaultFeatures: Features = {
4
+ email: true,
5
+ emailShowWallets: true,
6
+ socials: ['x', 'discord', 'apple', 'farcaster']
7
+ };
8
+
1
9
  export const ConstantsUtil = {
2
10
  FOUR_MINUTES_MS: 240000,
3
11
 
@@ -7,5 +15,9 @@ export const ConstantsUtil = {
7
15
 
8
16
  EMAIL_REGEX: /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+$/,
9
17
 
10
- LINKING_ERROR: 'LINKING_ERROR'
18
+ LINKING_ERROR: 'LINKING_ERROR',
19
+
20
+ NATIVE_TOKEN_ADDRESS: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
21
+
22
+ DEFAULT_FEATURES: defaultFeatures
11
23
  };
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-bitwise */
2
2
 
3
3
  import { Linking, Platform } from 'react-native';
4
- import { ConstantsUtil as CommonConstants } from '@reown/appkit-common-react-native';
4
+ import { ConstantsUtil as CommonConstants, type Balance } from '@reown/appkit-common-react-native';
5
5
 
6
6
  import { ConstantsUtil } from './ConstantsUtil';
7
7
  import type { CaipAddress, DataWallet, LinkingRecord } from './TypeUtil';
@@ -157,6 +157,27 @@ export const CoreHelperUtil = {
157
157
  return formattedBalance ? `${formattedBalance} ${symbol}` : `0.000 ${symbol || ''}`;
158
158
  },
159
159
 
160
+ isAddress(address: string, chain = 'eip155'): boolean {
161
+ switch (chain) {
162
+ case 'eip155':
163
+ if (!/^(?:0x)?[0-9a-f]{40}$/iu.test(address)) {
164
+ return false;
165
+ } else if (
166
+ /^(?:0x)?[0-9a-f]{40}$/iu.test(address) ||
167
+ /^(?:0x)?[0-9A-F]{40}$/iu.test(address)
168
+ ) {
169
+ return true;
170
+ }
171
+
172
+ return false;
173
+ case 'solana':
174
+ return /[1-9A-HJ-NP-Za-km-z]{32,44}$/iu.test(address);
175
+
176
+ default:
177
+ return false;
178
+ }
179
+ },
180
+
160
181
  getApiUrl() {
161
182
  return CommonConstants.API_URL;
162
183
  },
@@ -245,5 +266,21 @@ export const CoreHelperUtil = {
245
266
  .catch(reason => ({ status: 'rejected', reason }))
246
267
  )
247
268
  );
269
+ },
270
+
271
+ calculateAndFormatBalance(array?: Balance[]) {
272
+ if (!array?.length) {
273
+ return { dollars: '0', pennies: '00' };
274
+ }
275
+
276
+ let sum = 0;
277
+ for (const item of array) {
278
+ sum += item.value ?? 0;
279
+ }
280
+
281
+ const roundedNumber = sum.toFixed(2);
282
+ const [dollars, pennies] = roundedNumber.split('.');
283
+
284
+ return { dollars, pennies };
248
285
  }
249
286
  };
@@ -1,3 +1,5 @@
1
+ import type { RequestCache } from './TypeUtil';
2
+
1
3
  // -- Types ----------------------------------------------------------------------
2
4
  interface Options {
3
5
  baseUrl: string;
@@ -8,6 +10,8 @@ interface RequestArguments {
8
10
  path: string;
9
11
  headers?: HeadersInit_;
10
12
  params?: Record<string, string | undefined>;
13
+ cache?: RequestCache;
14
+ signal?: AbortSignal;
11
15
  }
12
16
 
13
17
  interface PostArguments extends RequestArguments {
@@ -1,12 +1,14 @@
1
1
  /* eslint-disable no-console */
2
2
  import AsyncStorage from '@react-native-async-storage/async-storage';
3
3
  import type { ConnectorType, WcWallet } from './TypeUtil';
4
+ import type { SocialProvider } from '@reown/appkit-common-react-native';
4
5
 
5
6
  // -- Helpers -----------------------------------------------------------------
6
7
  const WC_DEEPLINK = 'WALLETCONNECT_DEEPLINK_CHOICE';
7
8
  const RECENT_WALLET = '@w3m/recent';
8
9
  const CONNECTED_WALLET_IMAGE_URL = '@w3m/connected_wallet_image_url';
9
10
  const CONNECTED_CONNECTOR = '@w3m/connected_connector';
11
+ const CONNECTED_SOCIAL = '@appkit/connected_social';
10
12
 
11
13
  // -- Utility -----------------------------------------------------------------
12
14
  export const StorageUtil = {
@@ -90,7 +92,7 @@ export const StorageUtil = {
90
92
  }
91
93
  },
92
94
 
93
- async getConnectedConnector() {
95
+ async getConnectedConnector(): Promise<ConnectorType | undefined> {
94
96
  try {
95
97
  const connector = (await AsyncStorage.getItem(CONNECTED_CONNECTOR)) as ConnectorType;
96
98
 
@@ -134,5 +136,33 @@ export const StorageUtil = {
134
136
  } catch {
135
137
  console.info('Unable to remove Connected Wallet Image URL');
136
138
  }
139
+ },
140
+
141
+ async setConnectedSocialProvider(provider: SocialProvider) {
142
+ try {
143
+ await AsyncStorage.setItem(CONNECTED_SOCIAL, JSON.stringify(provider));
144
+ } catch {
145
+ console.info('Unable to set Connected Social Provider');
146
+ }
147
+ },
148
+
149
+ async getConnectedSocialProvider() {
150
+ try {
151
+ const provider = (await AsyncStorage.getItem(CONNECTED_SOCIAL)) as SocialProvider;
152
+
153
+ return provider ? JSON.parse(provider) : undefined;
154
+ } catch {
155
+ console.info('Unable to get Connected Social Provider');
156
+ }
157
+
158
+ return undefined;
159
+ },
160
+
161
+ async removeConnectedSocialProvider() {
162
+ try {
163
+ await AsyncStorage.removeItem(CONNECTED_SOCIAL);
164
+ } catch {
165
+ console.info('Unable to remove Connected Social Provider');
166
+ }
137
167
  }
138
168
  };
@@ -0,0 +1,19 @@
1
+ import { BlockchainApiController } from '../controllers/BlockchainApiController';
2
+ import { OptionsController } from '../controllers/OptionsController';
3
+ import { NetworkController } from '../controllers/NetworkController';
4
+
5
+ export const SwapApiUtil = {
6
+ async fetchGasPrice() {
7
+ const projectId = OptionsController.state.projectId;
8
+ const caipNetwork = NetworkController.state.caipNetwork;
9
+
10
+ if (!caipNetwork) {
11
+ return null;
12
+ }
13
+
14
+ return await BlockchainApiController.fetchGasPrice({
15
+ projectId,
16
+ chainId: caipNetwork.id
17
+ });
18
+ }
19
+ };
@@ -0,0 +1,21 @@
1
+ // -- Types --------------------------------------------- //
2
+
3
+ import { NumberUtil } from '@reown/appkit-common-react-native';
4
+
5
+ // -- Util ---------------------------------------- //
6
+ export const SwapCalculationUtil = {
7
+ getGasPriceInEther(gas: bigint, gasPrice: bigint) {
8
+ const totalGasCostInWei = gasPrice * gas;
9
+ const totalGasCostInEther = Number(totalGasCostInWei) / 1e18;
10
+
11
+ return totalGasCostInEther;
12
+ },
13
+
14
+ getGasPriceInUSD(networkPrice: string, gas: bigint, gasPrice: bigint) {
15
+ const totalGasCostInEther = SwapCalculationUtil.getGasPriceInEther(gas, gasPrice);
16
+ const networkPriceInUSD = NumberUtil.bigNumber(networkPrice);
17
+ const gasCostInUSD = networkPriceInUSD.multipliedBy(totalGasCostInEther);
18
+
19
+ return gasCostInUSD.toNumber();
20
+ }
21
+ };