@reown/appkit-core-react-native 1.0.1 → 1.1.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.
- package/lib/commonjs/controllers/AccountController.js +35 -1
- package/lib/commonjs/controllers/AccountController.js.map +1 -1
- package/lib/commonjs/controllers/ApiController.js +21 -9
- package/lib/commonjs/controllers/ApiController.js.map +1 -1
- package/lib/commonjs/controllers/BlockchainApiController.js +84 -0
- package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -1
- package/lib/commonjs/controllers/ConnectionController.js +33 -7
- package/lib/commonjs/controllers/ConnectionController.js.map +1 -1
- package/lib/commonjs/controllers/ConnectorController.js +9 -1
- package/lib/commonjs/controllers/ConnectorController.js.map +1 -1
- package/lib/commonjs/controllers/EnsController.js +35 -0
- package/lib/commonjs/controllers/EnsController.js.map +1 -0
- package/lib/commonjs/controllers/EventsController.js +1 -15
- package/lib/commonjs/controllers/EventsController.js.map +1 -1
- package/lib/commonjs/controllers/ModalController.js +3 -1
- package/lib/commonjs/controllers/ModalController.js.map +1 -1
- package/lib/commonjs/controllers/NetworkController.js +20 -1
- package/lib/commonjs/controllers/NetworkController.js.map +1 -1
- package/lib/commonjs/controllers/OptionsController.js +14 -2
- package/lib/commonjs/controllers/OptionsController.js.map +1 -1
- package/lib/commonjs/controllers/RouterController.js +22 -1
- package/lib/commonjs/controllers/RouterController.js.map +1 -1
- package/lib/commonjs/controllers/SendController.js +176 -0
- package/lib/commonjs/controllers/SendController.js.map +1 -0
- package/lib/commonjs/controllers/SnackController.js +21 -1
- package/lib/commonjs/controllers/SnackController.js.map +1 -1
- package/lib/commonjs/controllers/SwapController.js +91 -0
- package/lib/commonjs/controllers/SwapController.js.map +1 -0
- package/lib/commonjs/controllers/TransactionsController.js +112 -0
- package/lib/commonjs/controllers/TransactionsController.js.map +1 -0
- package/lib/commonjs/controllers/WebviewController.js +52 -0
- package/lib/commonjs/controllers/WebviewController.js.map +1 -0
- package/lib/commonjs/index.js +42 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/ApiUtil.js +25 -0
- package/lib/commonjs/utils/ApiUtil.js.map +1 -0
- package/lib/commonjs/utils/ConstantsUtil.js +8 -1
- package/lib/commonjs/utils/ConstantsUtil.js.map +1 -1
- package/lib/commonjs/utils/CoreHelperUtil.js +33 -0
- package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -1
- package/lib/commonjs/utils/FetchUtil.js.map +1 -1
- package/lib/commonjs/utils/StorageUtil.js +24 -0
- package/lib/commonjs/utils/StorageUtil.js.map +1 -1
- package/lib/commonjs/utils/SwapApiUtil.js +23 -0
- package/lib/commonjs/utils/SwapApiUtil.js.map +1 -0
- package/lib/commonjs/utils/SwapCalculationUtil.js +24 -0
- package/lib/commonjs/utils/SwapCalculationUtil.js.map +1 -0
- package/lib/commonjs/utils/TypeUtil.js +4 -0
- package/lib/module/controllers/AccountController.js +35 -1
- package/lib/module/controllers/AccountController.js.map +1 -1
- package/lib/module/controllers/ApiController.js +21 -9
- package/lib/module/controllers/ApiController.js.map +1 -1
- package/lib/module/controllers/BlockchainApiController.js +84 -0
- package/lib/module/controllers/BlockchainApiController.js.map +1 -1
- package/lib/module/controllers/ConnectionController.js +33 -7
- package/lib/module/controllers/ConnectionController.js.map +1 -1
- package/lib/module/controllers/ConnectorController.js +9 -1
- package/lib/module/controllers/ConnectorController.js.map +1 -1
- package/lib/module/controllers/EnsController.js +30 -0
- package/lib/module/controllers/EnsController.js.map +1 -0
- package/lib/module/controllers/EventsController.js +1 -15
- package/lib/module/controllers/EventsController.js.map +1 -1
- package/lib/module/controllers/ModalController.js +3 -1
- package/lib/module/controllers/ModalController.js.map +1 -1
- package/lib/module/controllers/NetworkController.js +20 -1
- package/lib/module/controllers/NetworkController.js.map +1 -1
- package/lib/module/controllers/OptionsController.js +14 -2
- package/lib/module/controllers/OptionsController.js.map +1 -1
- package/lib/module/controllers/RouterController.js +22 -1
- package/lib/module/controllers/RouterController.js.map +1 -1
- package/lib/module/controllers/SendController.js +171 -0
- package/lib/module/controllers/SendController.js.map +1 -0
- package/lib/module/controllers/SnackController.js +21 -1
- package/lib/module/controllers/SnackController.js.map +1 -1
- package/lib/module/controllers/SwapController.js +86 -0
- package/lib/module/controllers/SwapController.js.map +1 -0
- package/lib/module/controllers/TransactionsController.js +107 -0
- package/lib/module/controllers/TransactionsController.js.map +1 -0
- package/lib/module/controllers/WebviewController.js +47 -0
- package/lib/module/controllers/WebviewController.js.map +1 -0
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/ApiUtil.js +19 -0
- package/lib/module/utils/ApiUtil.js.map +1 -0
- package/lib/module/utils/ConstantsUtil.js +8 -1
- package/lib/module/utils/ConstantsUtil.js.map +1 -1
- package/lib/module/utils/CoreHelperUtil.js +33 -0
- package/lib/module/utils/CoreHelperUtil.js.map +1 -1
- package/lib/module/utils/FetchUtil.js.map +1 -1
- package/lib/module/utils/StorageUtil.js +24 -0
- package/lib/module/utils/StorageUtil.js.map +1 -1
- package/lib/module/utils/SwapApiUtil.js +17 -0
- package/lib/module/utils/SwapApiUtil.js.map +1 -0
- package/lib/module/utils/SwapCalculationUtil.js +19 -0
- package/lib/module/utils/SwapCalculationUtil.js.map +1 -0
- package/lib/module/utils/TypeUtil.js +1 -1
- package/lib/typescript/controllers/AccountController.d.ts +9 -1
- package/lib/typescript/controllers/AccountController.d.ts.map +1 -1
- package/lib/typescript/controllers/ApiController.d.ts +3 -1
- package/lib/typescript/controllers/ApiController.d.ts.map +1 -1
- package/lib/typescript/controllers/BlockchainApiController.d.ts +6 -1
- package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -1
- package/lib/typescript/controllers/ConnectionController.d.ts +18 -1
- package/lib/typescript/controllers/ConnectionController.d.ts.map +1 -1
- package/lib/typescript/controllers/ConnectorController.d.ts +1 -1
- package/lib/typescript/controllers/ConnectorController.d.ts.map +1 -1
- package/lib/typescript/controllers/EnsController.d.ts +10 -0
- package/lib/typescript/controllers/EnsController.d.ts.map +1 -0
- package/lib/typescript/controllers/EventsController.d.ts +0 -6
- package/lib/typescript/controllers/EventsController.d.ts.map +1 -1
- package/lib/typescript/controllers/ModalController.d.ts.map +1 -1
- package/lib/typescript/controllers/NetworkController.d.ts +5 -0
- package/lib/typescript/controllers/NetworkController.d.ts.map +1 -1
- package/lib/typescript/controllers/OptionsController.d.ts +6 -2
- package/lib/typescript/controllers/OptionsController.d.ts.map +1 -1
- package/lib/typescript/controllers/RouterController.d.ts +13 -1
- package/lib/typescript/controllers/RouterController.d.ts.map +1 -1
- package/lib/typescript/controllers/SendController.d.ts +41 -0
- package/lib/typescript/controllers/SendController.d.ts.map +1 -0
- package/lib/typescript/controllers/SnackController.d.ts +7 -0
- package/lib/typescript/controllers/SnackController.d.ts.map +1 -1
- package/lib/typescript/controllers/SwapController.d.ts +29 -0
- package/lib/typescript/controllers/SwapController.d.ts.map +1 -0
- package/lib/typescript/controllers/TransactionsController.d.ts +21 -0
- package/lib/typescript/controllers/TransactionsController.d.ts.map +1 -0
- package/lib/typescript/controllers/WebviewController.d.ts +21 -0
- package/lib/typescript/controllers/WebviewController.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +19 -26
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/utils/ApiUtil.d.ts +6 -0
- package/lib/typescript/utils/ApiUtil.d.ts.map +1 -0
- package/lib/typescript/utils/ConstantsUtil.d.ts +3 -0
- package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -1
- package/lib/typescript/utils/CoreHelperUtil.d.ts +6 -0
- package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -1
- package/lib/typescript/utils/FetchUtil.d.ts +3 -0
- package/lib/typescript/utils/FetchUtil.d.ts.map +1 -1
- package/lib/typescript/utils/StorageUtil.d.ts +5 -1
- package/lib/typescript/utils/StorageUtil.d.ts.map +1 -1
- package/lib/typescript/utils/SwapApiUtil.d.ts +4 -0
- package/lib/typescript/utils/SwapApiUtil.d.ts.map +1 -0
- package/lib/typescript/utils/SwapCalculationUtil.d.ts +5 -0
- package/lib/typescript/utils/SwapCalculationUtil.d.ts.map +1 -0
- package/lib/typescript/utils/TypeUtil.d.ts +257 -4
- package/lib/typescript/utils/TypeUtil.d.ts.map +1 -1
- package/package.json +5 -5
- package/readme.md +1 -1
- package/src/controllers/AccountController.ts +50 -2
- package/src/controllers/ApiController.ts +34 -23
- package/src/controllers/BlockchainApiController.ts +88 -1
- package/src/controllers/ConnectionController.ts +57 -8
- package/src/controllers/ConnectorController.ts +13 -1
- package/src/controllers/EnsController.ts +39 -0
- package/src/controllers/EventsController.ts +1 -13
- package/src/controllers/ModalController.ts +3 -1
- package/src/controllers/NetworkController.ts +34 -1
- package/src/controllers/OptionsController.ts +25 -4
- package/src/controllers/RouterController.ts +57 -10
- package/src/controllers/SendController.ts +234 -0
- package/src/controllers/SnackController.ts +28 -1
- package/src/controllers/SwapController.ts +108 -0
- package/src/controllers/TransactionsController.ts +142 -0
- package/src/controllers/WebviewController.ts +63 -0
- package/src/index.ts +43 -30
- package/src/utils/ApiUtil.ts +26 -0
- package/src/utils/ConstantsUtil.ts +13 -1
- package/src/utils/CoreHelperUtil.ts +38 -1
- package/src/utils/FetchUtil.ts +4 -0
- package/src/utils/StorageUtil.ts +31 -1
- package/src/utils/SwapApiUtil.ts +19 -0
- package/src/utils/SwapCalculationUtil.ts +21 -0
- package/src/utils/TypeUtil.ts +290 -4
|
@@ -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 {
|
|
3
|
-
|
|
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 {
|
|
12
|
-
|
|
13
|
-
NetworkControllerClient,
|
|
14
|
-
NetworkControllerState
|
|
12
|
+
export {
|
|
13
|
+
NetworkController,
|
|
14
|
+
type NetworkControllerClient,
|
|
15
|
+
type NetworkControllerState
|
|
15
16
|
} from './controllers/NetworkController';
|
|
16
17
|
|
|
17
|
-
export {
|
|
18
|
-
|
|
19
|
-
ConnectionControllerClient,
|
|
20
|
-
ConnectionControllerState
|
|
18
|
+
export {
|
|
19
|
+
ConnectionController,
|
|
20
|
+
type ConnectionControllerClient,
|
|
21
|
+
type ConnectionControllerState
|
|
21
22
|
} from './controllers/ConnectionController';
|
|
22
23
|
|
|
23
|
-
export {
|
|
24
|
-
|
|
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 {
|
|
42
|
-
|
|
39
|
+
export {
|
|
40
|
+
PublicStateController,
|
|
41
|
+
type PublicStateControllerState
|
|
42
|
+
} from './controllers/PublicStateController';
|
|
43
43
|
|
|
44
44
|
export { BlockchainApiController } from './controllers/BlockchainApiController';
|
|
45
45
|
|
|
46
|
-
export {
|
|
47
|
-
|
|
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,26 @@
|
|
|
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
|
+
getReactNativeVersion() {
|
|
10
|
+
return [
|
|
11
|
+
Platform.constants?.reactNativeVersion?.major,
|
|
12
|
+
Platform.constants?.reactNativeVersion?.minor,
|
|
13
|
+
Platform.constants?.reactNativeVersion?.patch
|
|
14
|
+
].join('.');
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
getUserAgent() {
|
|
18
|
+
const rnVersion = Platform.select({
|
|
19
|
+
ios: this.getReactNativeVersion(),
|
|
20
|
+
android: this.getReactNativeVersion(),
|
|
21
|
+
default: 'undefined'
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
return `${Platform.OS}-${Platform.Version}@rn-${rnVersion}`;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
@@ -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']
|
|
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
|
};
|
package/src/utils/FetchUtil.ts
CHANGED
|
@@ -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 {
|
package/src/utils/StorageUtil.ts
CHANGED
|
@@ -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
|
+
};
|