@spacesops/wdk-react-native-core 1.0.0-beta.68 → 1.0.0-beta.70
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/dist/hooks/useBalance.js +50 -7
- package/dist/hooks/useBalance.js.map +1 -1
- package/dist/hooks/useTransactions.d.ts +21 -0
- package/dist/hooks/useTransactions.js +64 -0
- package/dist/hooks/useTransactions.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/provider/WdkAppProvider.d.ts +7 -2
- package/dist/provider/WdkAppProvider.js +6 -1
- package/dist/provider/WdkAppProvider.js.map +1 -1
- package/dist/services/transactionService.d.ts +27 -0
- package/dist/services/transactionService.js +154 -0
- package/dist/services/transactionService.js.map +1 -0
- package/dist/store/indexerConfigStore.d.ts +7 -0
- package/dist/store/indexerConfigStore.js +14 -0
- package/dist/store/indexerConfigStore.js.map +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/utils/constants.d.ts +18 -0
- package/dist/utils/constants.js +18 -0
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/mmkvKeyManager.js +3 -3
- package/dist/utils/mmkvKeyManager.js.map +1 -1
- package/dist/utils/operationMutex.js.map +1 -1
- package/dist/utils/retryUtils.d.ts +19 -0
- package/dist/utils/retryUtils.js +55 -0
- package/dist/utils/retryUtils.js.map +1 -0
- package/dist/utils/schemas.d.ts +15 -3
- package/dist/utils/schemas.js +27 -2
- package/dist/utils/schemas.js.map +1 -1
- package/dist/utils/typeGuards.d.ts +1 -1
- package/dist/utils/typeGuards.js +3 -3
- package/dist/utils/typeGuards.js.map +1 -1
- package/package.json +2 -1
- package/src/__tests__/services/transactionService.test.ts +166 -0
- package/src/hooks/useBalance.ts +15 -12
- package/src/hooks/useTransactions.ts +98 -0
- package/src/index.ts +6 -0
- package/src/provider/WdkAppProvider.tsx +13 -1
- package/src/services/transactionService.ts +195 -0
- package/src/store/indexerConfigStore.ts +19 -0
- package/src/types.ts +36 -0
- package/src/utils/constants.ts +6 -0
- package/src/utils/mmkvKeyManager.ts +3 -3
- package/src/utils/operationMutex.ts +1 -1
- package/dist/__mocks__/react.d.ts +0 -40
- package/dist/__mocks__/react.js +0 -33
- package/dist/__mocks__/react.js.map +0 -1
- package/dist/__mocks__/secureStorage.d.ts +0 -27
- package/dist/__mocks__/secureStorage.js +0 -81
- package/dist/__mocks__/secureStorage.js.map +0 -1
- package/dist/__tests__/hooks/useBalance.test.d.ts +0 -6
- package/dist/__tests__/hooks/useBalance.test.js +0 -217
- package/dist/__tests__/hooks/useBalance.test.js.map +0 -1
- package/dist/__tests__/hooks/useWallet.test.d.ts +0 -6
- package/dist/__tests__/hooks/useWallet.test.js +0 -105
- package/dist/__tests__/hooks/useWallet.test.js.map +0 -1
- package/dist/__tests__/hooks/useWalletManager.test.d.ts +0 -6
- package/dist/__tests__/hooks/useWalletManager.test.js +0 -193
- package/dist/__tests__/hooks/useWalletManager.test.js.map +0 -1
- package/dist/__tests__/hooks/useWdkApp.test.d.ts +0 -6
- package/dist/__tests__/hooks/useWdkApp.test.js +0 -55
- package/dist/__tests__/hooks/useWdkApp.test.js.map +0 -1
- package/dist/__tests__/hooks/useWorklet.test.d.ts +0 -6
- package/dist/__tests__/hooks/useWorklet.test.js +0 -168
- package/dist/__tests__/hooks/useWorklet.test.js.map +0 -1
- package/dist/__tests__/provider/WdkAppProvider.test.d.ts +0 -6
- package/dist/__tests__/provider/WdkAppProvider.test.js +0 -57
- package/dist/__tests__/provider/WdkAppProvider.test.js.map +0 -1
- package/dist/__tests__/services/accountService.test.d.ts +0 -6
- package/dist/__tests__/services/accountService.test.js +0 -263
- package/dist/__tests__/services/accountService.test.js.map +0 -1
- package/dist/__tests__/services/addressService.test.d.ts +0 -6
- package/dist/__tests__/services/addressService.test.js +0 -258
- package/dist/__tests__/services/addressService.test.js.map +0 -1
- package/dist/__tests__/services/balanceService.test.d.ts +0 -6
- package/dist/__tests__/services/balanceService.test.js +0 -333
- package/dist/__tests__/services/balanceService.test.js.map +0 -1
- package/dist/__tests__/services/walletSetupService.test.d.ts +0 -6
- package/dist/__tests__/services/walletSetupService.test.js +0 -304
- package/dist/__tests__/services/walletSetupService.test.js.map +0 -1
- package/dist/__tests__/services/walletSwitchingService.test.d.ts +0 -6
- package/dist/__tests__/services/walletSwitchingService.test.js +0 -209
- package/dist/__tests__/services/walletSwitchingService.test.js.map +0 -1
- package/dist/__tests__/services/workletLifecycleService.test.d.ts +0 -6
- package/dist/__tests__/services/workletLifecycleService.test.js +0 -451
- package/dist/__tests__/services/workletLifecycleService.test.js.map +0 -1
- package/dist/__tests__/setup.d.ts +0 -4
- package/dist/__tests__/setup.js +0 -49
- package/dist/__tests__/setup.js.map +0 -1
- package/dist/__tests__/storage/mmkvStorage.test.d.ts +0 -6
- package/dist/__tests__/storage/mmkvStorage.test.js +0 -213
- package/dist/__tests__/storage/mmkvStorage.test.js.map +0 -1
- package/dist/__tests__/store/walletStore.test.d.ts +0 -4
- package/dist/__tests__/store/walletStore.test.js +0 -86
- package/dist/__tests__/store/walletStore.test.js.map +0 -1
- package/dist/__tests__/store/workletStore.test.d.ts +0 -4
- package/dist/__tests__/store/workletStore.test.js +0 -255
- package/dist/__tests__/store/workletStore.test.js.map +0 -1
- package/dist/__tests__/types/hrpc.test.d.ts +0 -4
- package/dist/__tests__/types/hrpc.test.js +0 -99
- package/dist/__tests__/types/hrpc.test.js.map +0 -1
- package/dist/__tests__/utils/balanceUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/balanceUtils.test.js +0 -133
- package/dist/__tests__/utils/balanceUtils.test.js.map +0 -1
- package/dist/__tests__/utils/errorHandling.test.d.ts +0 -6
- package/dist/__tests__/utils/errorHandling.test.js +0 -119
- package/dist/__tests__/utils/errorHandling.test.js.map +0 -1
- package/dist/__tests__/utils/errorUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/errorUtils.test.js +0 -133
- package/dist/__tests__/utils/errorUtils.test.js.map +0 -1
- package/dist/__tests__/utils/initializationState.test.d.ts +0 -6
- package/dist/__tests__/utils/initializationState.test.js +0 -243
- package/dist/__tests__/utils/initializationState.test.js.map +0 -1
- package/dist/__tests__/utils/jsonUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/jsonUtils.test.js +0 -118
- package/dist/__tests__/utils/jsonUtils.test.js.map +0 -1
- package/dist/__tests__/utils/mmkvKeyManager.test.d.ts +0 -6
- package/dist/__tests__/utils/mmkvKeyManager.test.js +0 -158
- package/dist/__tests__/utils/mmkvKeyManager.test.js.map +0 -1
- package/dist/__tests__/utils/mnemonicUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/mnemonicUtils.test.js +0 -40
- package/dist/__tests__/utils/mnemonicUtils.test.js.map +0 -1
- package/dist/__tests__/utils/raceConditions.test.d.ts +0 -6
- package/dist/__tests__/utils/raceConditions.test.js +0 -239
- package/dist/__tests__/utils/raceConditions.test.js.map +0 -1
- package/dist/__tests__/utils/result.test.d.ts +0 -4
- package/dist/__tests__/utils/result.test.js +0 -66
- package/dist/__tests__/utils/result.test.js.map +0 -1
- package/dist/__tests__/utils/schemas.test.d.ts +0 -4
- package/dist/__tests__/utils/schemas.test.js +0 -66
- package/dist/__tests__/utils/schemas.test.js.map +0 -1
- package/dist/__tests__/utils/storeHelpers.test.d.ts +0 -4
- package/dist/__tests__/utils/storeHelpers.test.js +0 -227
- package/dist/__tests__/utils/storeHelpers.test.js.map +0 -1
- package/dist/__tests__/utils/typeGuards.test.d.ts +0 -4
- package/dist/__tests__/utils/typeGuards.test.js +0 -175
- package/dist/__tests__/utils/typeGuards.test.js.map +0 -1
- package/dist/__tests__/utils/validation.test.d.ts +0 -4
- package/dist/__tests__/utils/validation.test.js +0 -167
- package/dist/__tests__/utils/validation.test.js.map +0 -1
- package/dist/__tests__/utils/walletUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/walletUtils.test.js +0 -156
- package/dist/__tests__/utils/walletUtils.test.js.map +0 -1
- package/dist/utils/types.js +0 -6
- package/dist/utils/utils/schemas.js +0 -173
- package/dist/utils/utils/validation.js +0 -151
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime WDK Indexer configuration (set by WdkAppProvider from app env).
|
|
3
|
+
*/
|
|
4
|
+
let indexerConfig = null;
|
|
5
|
+
export function setIndexerConfig(config) {
|
|
6
|
+
indexerConfig = config;
|
|
7
|
+
}
|
|
8
|
+
export function getIndexerConfig() {
|
|
9
|
+
return indexerConfig;
|
|
10
|
+
}
|
|
11
|
+
export function isIndexerConfigured() {
|
|
12
|
+
return Boolean(indexerConfig?.baseUrl && indexerConfig?.apiKey);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=indexerConfigStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexerConfigStore.js","sourceRoot":"","sources":["../../src/store/indexerConfigStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,IAAI,aAAa,GAAyB,IAAI,CAAA;AAE9C,MAAM,UAAU,gBAAgB,CAAC,MAA4B;IAC3D,aAAa,GAAG,MAAM,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,OAAO,CAAC,aAAa,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,CAAC,CAAA;AACjE,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -143,6 +143,39 @@ export interface BalanceFetchResult {
|
|
|
143
143
|
* Allows for dynamic token configuration.
|
|
144
144
|
*/
|
|
145
145
|
export type TokenConfigProvider = TokenConfigs | (() => TokenConfigs);
|
|
146
|
+
/**
|
|
147
|
+
* WDK Indexer API configuration (balance/transaction history).
|
|
148
|
+
*/
|
|
149
|
+
export interface IndexerConfig {
|
|
150
|
+
/** Base URL, e.g. https://wdk-api.tether.io */
|
|
151
|
+
baseUrl: string;
|
|
152
|
+
/** API key sent as x-api-key header */
|
|
153
|
+
apiKey: string;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Token transfer from the WDK Indexer token-transfers endpoint.
|
|
157
|
+
*/
|
|
158
|
+
export interface WalletTransaction {
|
|
159
|
+
blockchain: string;
|
|
160
|
+
blockNumber?: number;
|
|
161
|
+
transactionHash: string;
|
|
162
|
+
transferIndex?: number;
|
|
163
|
+
token: string;
|
|
164
|
+
amount: string;
|
|
165
|
+
/** Unix timestamp in seconds (indexer convention) */
|
|
166
|
+
timestamp: number;
|
|
167
|
+
transactionIndex?: number;
|
|
168
|
+
logIndex?: number;
|
|
169
|
+
from: string;
|
|
170
|
+
to: string;
|
|
171
|
+
label?: string;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Raw indexer response for token-transfers.
|
|
175
|
+
*/
|
|
176
|
+
export interface IndexerTokenTransfersResponse {
|
|
177
|
+
transfers?: WalletTransaction[];
|
|
178
|
+
}
|
|
146
179
|
/**
|
|
147
180
|
* Token Helpers
|
|
148
181
|
*
|
|
@@ -58,6 +58,24 @@ export declare const DEFAULT_QUERY_STALE_TIME_MS: number;
|
|
|
58
58
|
* 5 minutes provides a good balance between cache efficiency and memory usage.
|
|
59
59
|
*/
|
|
60
60
|
export declare const DEFAULT_QUERY_GC_TIME_MS: number;
|
|
61
|
+
/**
|
|
62
|
+
* Delay between per-network balance fetches on wallet load (ms).
|
|
63
|
+
* Spreads RPC load across chains instead of firing every network at once.
|
|
64
|
+
*/
|
|
65
|
+
export declare const BALANCE_FETCH_STAGGER_MS = 400;
|
|
66
|
+
/**
|
|
67
|
+
* Delay between token balance fetches within the same network (ms).
|
|
68
|
+
* TON jetton balances issue multiple RPC calls each; serializing avoids 429 bursts.
|
|
69
|
+
*/
|
|
70
|
+
export declare const BALANCE_FETCH_INTRA_NETWORK_STAGGER_MS = 300;
|
|
71
|
+
/**
|
|
72
|
+
* Max attempts for transient blockchain/RPC errors (429, 5xx, network timeouts).
|
|
73
|
+
*/
|
|
74
|
+
export declare const TRANSIENT_ERROR_MAX_ATTEMPTS = 3;
|
|
75
|
+
/**
|
|
76
|
+
* Initial backoff for transient error retries (ms); doubled on each attempt.
|
|
77
|
+
*/
|
|
78
|
+
export declare const TRANSIENT_ERROR_INITIAL_BACKOFF_MS = 1000;
|
|
61
79
|
/**
|
|
62
80
|
* Allowed account methods whitelist
|
|
63
81
|
* Only these methods can be called through AccountService for security
|
package/dist/utils/constants.js
CHANGED
|
@@ -58,6 +58,24 @@ export const DEFAULT_QUERY_STALE_TIME_MS = 30 * 1000;
|
|
|
58
58
|
* 5 minutes provides a good balance between cache efficiency and memory usage.
|
|
59
59
|
*/
|
|
60
60
|
export const DEFAULT_QUERY_GC_TIME_MS = 5 * 60 * 1000;
|
|
61
|
+
/**
|
|
62
|
+
* Delay between per-network balance fetches on wallet load (ms).
|
|
63
|
+
* Spreads RPC load across chains instead of firing every network at once.
|
|
64
|
+
*/
|
|
65
|
+
export const BALANCE_FETCH_STAGGER_MS = 400;
|
|
66
|
+
/**
|
|
67
|
+
* Delay between token balance fetches within the same network (ms).
|
|
68
|
+
* TON jetton balances issue multiple RPC calls each; serializing avoids 429 bursts.
|
|
69
|
+
*/
|
|
70
|
+
export const BALANCE_FETCH_INTRA_NETWORK_STAGGER_MS = 300;
|
|
71
|
+
/**
|
|
72
|
+
* Max attempts for transient blockchain/RPC errors (429, 5xx, network timeouts).
|
|
73
|
+
*/
|
|
74
|
+
export const TRANSIENT_ERROR_MAX_ATTEMPTS = 3;
|
|
75
|
+
/**
|
|
76
|
+
* Initial backoff for transient error retries (ms); doubled on each attempt.
|
|
77
|
+
*/
|
|
78
|
+
export const TRANSIENT_ERROR_INITIAL_BACKOFF_MS = 1000;
|
|
61
79
|
/**
|
|
62
80
|
* Allowed account methods whitelist
|
|
63
81
|
* Only these methods can be called through AccountService for security
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,KAAK,CAAA;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,6CAA6C;IAC7C,MAAM,EAAE,EAAE;IACV,6CAA6C;IAC7C,WAAW,EAAE,EAAE;CACP,CAAA;AAEV;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,oBAAoB,CAAC,MAAM,CAAA;AAEtE;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAA;AACtD,MAAM,CAAC,MAAM,gCAAgC,GAAG,iBAAiB,CAAA;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,SAAS,CAAA;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAA;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAA;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAA;AAExC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;AAErD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,YAAY;IACZ,YAAY;IACZ,iBAAiB;IACjB,aAAa;IACb,iBAAiB;IACjB,iBAAiB;CACT,CAAA"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,KAAK,CAAA;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,6CAA6C;IAC7C,MAAM,EAAE,EAAE;IACV,6CAA6C;IAC7C,WAAW,EAAE,EAAE;CACP,CAAA;AAEV;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,oBAAoB,CAAC,MAAM,CAAA;AAEtE;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAA;AACtD,MAAM,CAAC,MAAM,gCAAgC,GAAG,iBAAiB,CAAA;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,SAAS,CAAA;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAA;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAA;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAA;AAExC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;AAErD;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG,GAAG,CAAA;AAEzD;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAA;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,IAAI,CAAA;AAEtD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,YAAY;IACZ,YAAY;IACZ,iBAAiB;IACjB,aAAa;IACb,iBAAiB;IACjB,iBAAiB;CACT,CAAA"}
|
|
@@ -21,9 +21,9 @@ import * as Crypto from 'expo-crypto';
|
|
|
21
21
|
* @returns Base64 encoded string
|
|
22
22
|
*/
|
|
23
23
|
function bytesToBase64(bytes) {
|
|
24
|
-
|
|
25
|
-
if (
|
|
26
|
-
return
|
|
24
|
+
const bufferCtor = globalThis.Buffer;
|
|
25
|
+
if (bufferCtor) {
|
|
26
|
+
return bufferCtor.from(bytes).toString('base64');
|
|
27
27
|
}
|
|
28
28
|
// Fallback to manual encoding for environments without Buffer
|
|
29
29
|
const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mmkvKeyManager.js","sourceRoot":"","sources":["../../src/utils/mmkvKeyManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAOrC;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,KAAiB;IACtC,
|
|
1
|
+
{"version":3,"file":"mmkvKeyManager.js","sourceRoot":"","sources":["../../src/utils/mmkvKeyManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operationMutex.js","sourceRoot":"","sources":["../../src/utils/operationMutex.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAcvC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,qBAAqB,CAAC,oBAA4B;IAChE,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAA;IAEpC,4CAA4C;IAC5C,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC;QAChC,OAAO,CAAC,+BAA+B,oBAAoB,iBAAiB,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAA;QACrG,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,gBAAgB;SACpC,CAAA;IACH,CAAC;IAED,gBAAgB;IAChB,WAAW,CAAC,QAAQ,CAAC;QACnB,qBAAqB,EAAE,IAAI;QAC3B,gBAAgB,EAAE,oBAAoB;KACvC,CAAC,CAAA;IAEF,GAAG,CAAC,wCAAwC,oBAAoB,EAAE,CAAC,CAAA;IAEnE,0BAA0B;IAC1B,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAA;YAC3C,oDAAoD;YACpD,IAAI,YAAY,CAAC,gBAAgB,KAAK,oBAAoB,EAAE,CAAC;gBAC3D,WAAW,CAAC,QAAQ,CAAC;oBACnB,qBAAqB,EAAE,KAAK;oBAC5B,gBAAgB,EAAE,IAAI;iBACvB,CAAC,CAAA;gBACF,GAAG,CAAC,wCAAwC,oBAAoB,EAAE,CAAC,CAAA;YACrE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,oDAAoD,oBAAoB,+BAA+B,YAAY,CAAC,gBAAgB,GAAG,CAAC,CAAA;YAClJ,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,4BAA4B,GAAG,EAAE,GAAG,IAAI,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,oBAA4B,EAC5B,SAA2B,EAC3B,YAAoB,4BAA4B;IAEhD,MAAM,KAAK,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,CAAA;IAEzD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,mBAAmB,oBAAoB,wCAAwC,KAAK,CAAC,gBAAgB,GAAG,CACzG,CAAA;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"operationMutex.js","sourceRoot":"","sources":["../../src/utils/operationMutex.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAcvC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,qBAAqB,CAAC,oBAA4B;IAChE,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAA;IAEpC,4CAA4C;IAC5C,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC;QAChC,OAAO,CAAC,+BAA+B,oBAAoB,iBAAiB,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAA;QACrG,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,gBAAgB;SACpC,CAAA;IACH,CAAC;IAED,gBAAgB;IAChB,WAAW,CAAC,QAAQ,CAAC;QACnB,qBAAqB,EAAE,IAAI;QAC3B,gBAAgB,EAAE,oBAAoB;KACvC,CAAC,CAAA;IAEF,GAAG,CAAC,wCAAwC,oBAAoB,EAAE,CAAC,CAAA;IAEnE,0BAA0B;IAC1B,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAA;YAC3C,oDAAoD;YACpD,IAAI,YAAY,CAAC,gBAAgB,KAAK,oBAAoB,EAAE,CAAC;gBAC3D,WAAW,CAAC,QAAQ,CAAC;oBACnB,qBAAqB,EAAE,KAAK;oBAC5B,gBAAgB,EAAE,IAAI;iBACvB,CAAC,CAAA;gBACF,GAAG,CAAC,wCAAwC,oBAAoB,EAAE,CAAC,CAAA;YACrE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,oDAAoD,oBAAoB,+BAA+B,YAAY,CAAC,gBAAgB,GAAG,CAAC,CAAA;YAClJ,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,4BAA4B,GAAG,EAAE,GAAG,IAAI,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,oBAA4B,EAC5B,SAA2B,EAC3B,YAAoB,4BAA4B;IAEhD,MAAM,KAAK,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,CAAA;IAEzD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,mBAAmB,oBAAoB,wCAAwC,KAAK,CAAC,gBAAgB,GAAG,CACzG,CAAA;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,SAAS,GAAyC,IAAI,CAAA;IAC1D,IAAI,eAAe,GAAG,KAAK,CAAA;IAE3B,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACtD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,eAAe,GAAG,IAAI,CAAA;YACtB,OAAO,CAAC,+BAA+B,oBAAoB,yBAAyB,SAAS,IAAI,CAAC,CAAA;YAClG,KAAK,CAAC,OAAO,EAAE,CAAA;YACf,MAAM,CAAC,IAAI,KAAK,CACd,cAAc,oBAAoB,yBAAyB,SAAS,IAAI,CACzE,CAAC,CAAA;QACJ,CAAC,EAAE,SAAS,CAAC,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,qCAAqC;QACrC,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACxB,SAAS,EAAE;YACX,cAAc;SACf,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gDAAgD;QAChD,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,KAAK,CAAA;QACb,CAAC;QACD,0CAA0C;QAC1C,MAAM,KAAK,CAAA;IACb,CAAC;YAAS,CAAC;QACT,sDAAsD;QACtD,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAA;QACzB,CAAC;QACD,oDAAoD;QACpD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,KAAK,CAAC,OAAO,EAAE,CAAA;QACjB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC,qBAAqB,CAAA;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC,gBAAgB,CAAA;AAChD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry helpers for transient blockchain/RPC failures (429, 5xx, network errors).
|
|
3
|
+
*/
|
|
4
|
+
export declare function delay(ms: number): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Whether an error is likely transient and worth retrying with backoff.
|
|
7
|
+
* Matches Spaces API retry rules: 429, 408, 5xx, and common network failures.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isTransientBlockchainError(error: unknown): boolean;
|
|
10
|
+
export interface WithTransientRetryOptions {
|
|
11
|
+
maxAttempts?: number;
|
|
12
|
+
initialBackoffMs?: number;
|
|
13
|
+
/** Label for retry log messages */
|
|
14
|
+
label?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Run an async function with exponential backoff on transient errors.
|
|
18
|
+
*/
|
|
19
|
+
export declare function withTransientRetry<T>(fn: () => Promise<T>, options?: WithTransientRetryOptions): Promise<T>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry helpers for transient blockchain/RPC failures (429, 5xx, network errors).
|
|
3
|
+
*/
|
|
4
|
+
import { TRANSIENT_ERROR_INITIAL_BACKOFF_MS, TRANSIENT_ERROR_MAX_ATTEMPTS, } from './constants';
|
|
5
|
+
import { getErrorMessage } from './errorUtils';
|
|
6
|
+
import { log } from './logger';
|
|
7
|
+
export function delay(ms) {
|
|
8
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Whether an error is likely transient and worth retrying with backoff.
|
|
12
|
+
* Matches Spaces API retry rules: 429, 408, 5xx, and common network failures.
|
|
13
|
+
*/
|
|
14
|
+
export function isTransientBlockchainError(error) {
|
|
15
|
+
const message = getErrorMessage(error).toLowerCase();
|
|
16
|
+
if (message.includes('429') ||
|
|
17
|
+
message.includes('too many requests') ||
|
|
18
|
+
message.includes('rate limit') ||
|
|
19
|
+
message.includes('408') ||
|
|
20
|
+
message.includes('request timeout') ||
|
|
21
|
+
message.includes('etimedout') ||
|
|
22
|
+
message.includes('econnreset') ||
|
|
23
|
+
message.includes('econnrefused') ||
|
|
24
|
+
message.includes('network request failed') ||
|
|
25
|
+
message.includes('network error') ||
|
|
26
|
+
message.includes('socket hang up')) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
return /\b5\d{2}\b/.test(message);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Run an async function with exponential backoff on transient errors.
|
|
33
|
+
*/
|
|
34
|
+
export async function withTransientRetry(fn, options = {}) {
|
|
35
|
+
const maxAttempts = options.maxAttempts ?? TRANSIENT_ERROR_MAX_ATTEMPTS;
|
|
36
|
+
const initialBackoffMs = options.initialBackoffMs ?? TRANSIENT_ERROR_INITIAL_BACKOFF_MS;
|
|
37
|
+
const label = options.label ?? 'operation';
|
|
38
|
+
let lastError;
|
|
39
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
40
|
+
try {
|
|
41
|
+
return await fn();
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
lastError = error;
|
|
45
|
+
if (!isTransientBlockchainError(error) || attempt >= maxAttempts) {
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
const backoffMs = initialBackoffMs * (1 << (attempt - 1));
|
|
49
|
+
log(`[Balance] ${label}: retry in ${backoffMs}ms (${attempt}/${maxAttempts})`);
|
|
50
|
+
await delay(backoffMs);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
throw lastError;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=retryUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retryUtils.js","sourceRoot":"","sources":["../../src/utils/retryUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,kCAAkC,EAClC,4BAA4B,GAC7B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAE9B,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IAEpD,IACE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;QAChC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;QACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAClC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC;AASD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAoB,EACpB,UAAqC,EAAE;IAEvC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,4BAA4B,CAAA;IACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,kCAAkC,CAAA;IACvF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,CAAA;IAE1C,IAAI,SAAkB,CAAA;IAEtB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAA;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAA;YACjB,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;gBACjE,MAAM,KAAK,CAAA;YACb,CAAC;YACD,MAAM,SAAS,GAAG,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;YACzD,GAAG,CAAC,aAAa,KAAK,cAAc,SAAS,OAAO,OAAO,IAAI,WAAW,GAAG,CAAC,CAAA;YAC9E,MAAM,KAAK,CAAC,SAAS,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAA;AACjB,CAAC"}
|
package/dist/utils/schemas.d.ts
CHANGED
|
@@ -23,9 +23,21 @@ export declare const sparkAddressSchema: z.ZodString;
|
|
|
23
23
|
*/
|
|
24
24
|
export declare const bitcoinAddressSchema: z.ZodString;
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* TON user-friendly wallet address (EQ/UQ + base64url).
|
|
27
27
|
*/
|
|
28
|
-
export declare const
|
|
28
|
+
export declare const tonAddressSchema: z.ZodString;
|
|
29
|
+
/**
|
|
30
|
+
* Tron Base58Check wallet address.
|
|
31
|
+
*/
|
|
32
|
+
export declare const tronAddressSchema: z.ZodString;
|
|
33
|
+
/**
|
|
34
|
+
* Solana Base58 wallet address.
|
|
35
|
+
*/
|
|
36
|
+
export declare const solanaAddressSchema: z.ZodString;
|
|
37
|
+
/**
|
|
38
|
+
* Address schema (Ethereum, Spark, Bitcoin, TON, Tron, or Solana)
|
|
39
|
+
*/
|
|
40
|
+
export declare const addressSchema: z.ZodUnion<[z.ZodString, z.ZodString, z.ZodString, z.ZodString, z.ZodString, z.ZodString]>;
|
|
29
41
|
/**
|
|
30
42
|
* Network configuration schema
|
|
31
43
|
*/
|
|
@@ -293,7 +305,7 @@ export declare const balanceStringSchema: z.ZodString;
|
|
|
293
305
|
* Wallet addresses schema
|
|
294
306
|
* Maps network -> accountIndex -> address
|
|
295
307
|
*/
|
|
296
|
-
export declare const walletAddressesSchema: z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodEffects<z.ZodString, number, string>, z.ZodUnion<[z.ZodString, z.ZodString, z.ZodString]>>>;
|
|
308
|
+
export declare const walletAddressesSchema: z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodEffects<z.ZodString, number, string>, z.ZodUnion<[z.ZodString, z.ZodString, z.ZodString, z.ZodString, z.ZodString, z.ZodString]>>>;
|
|
297
309
|
/**
|
|
298
310
|
* Wallet balances schema
|
|
299
311
|
* Maps network -> accountIndex -> tokenAddress -> balance
|
package/dist/utils/schemas.js
CHANGED
|
@@ -40,9 +40,34 @@ export const bitcoinAddressSchema = z.string().regex(/^(bc1[qp][a-z0-9]{11,71}|t
|
|
|
40
40
|
message: 'Must be a valid Bitcoin address (bech32 bc1/tb1/bcrt1 or legacy Base58)',
|
|
41
41
|
});
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
43
|
+
* TON user-friendly wallet address (EQ/UQ + base64url).
|
|
44
44
|
*/
|
|
45
|
-
export const
|
|
45
|
+
export const tonAddressSchema = z.string().regex(/^(EQ|UQ)[A-Za-z0-9_-]{46}$/, {
|
|
46
|
+
message: 'Must be a valid TON address (EQ/UQ user-friendly format)',
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* Tron Base58Check wallet address.
|
|
50
|
+
*/
|
|
51
|
+
export const tronAddressSchema = z.string().regex(/^T[1-9A-HJ-NP-Za-km-z]{33}$/, {
|
|
52
|
+
message: 'Must be a valid Tron address',
|
|
53
|
+
});
|
|
54
|
+
/**
|
|
55
|
+
* Solana Base58 wallet address.
|
|
56
|
+
*/
|
|
57
|
+
export const solanaAddressSchema = z.string().regex(/^[1-9A-HJ-NP-Za-km-z]{32,44}$/, {
|
|
58
|
+
message: 'Must be a valid Solana address',
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* Address schema (Ethereum, Spark, Bitcoin, TON, Tron, or Solana)
|
|
62
|
+
*/
|
|
63
|
+
export const addressSchema = z.union([
|
|
64
|
+
ethereumAddressSchema,
|
|
65
|
+
sparkAddressSchema,
|
|
66
|
+
bitcoinAddressSchema,
|
|
67
|
+
tonAddressSchema,
|
|
68
|
+
tronAddressSchema,
|
|
69
|
+
solanaAddressSchema,
|
|
70
|
+
]);
|
|
46
71
|
/**
|
|
47
72
|
* Network configuration schema
|
|
48
73
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE;IAC3E,OAAO,EAAE,qEAAqE;CAC/E,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC;IAChD,qBAAqB;IACrB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,6BAA6B,EAAE;QAC9C,OAAO,EAAE,6CAA6C;KACvD,CAAC;IACF,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,+BAA+B,EAAE;QAChD,OAAO,EAAE,2CAA2C;KACrD,CAAC;IACF,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,4BAA4B,EAAE;QAC7C,OAAO,EAAE,2CAA2C;KACrD,CAAC;CACH,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,kCAAkC,EAAE;IACrF,OAAO,EAAE,uFAAuF;CACjG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAElB;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAClD,6IAA6I,EAC7I;IACE,OAAO,EAAE,yEAAyE;CACnF,CACF,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,7 +54,7 @@ export declare function isSparkAddress(value: unknown): value is string;
|
|
|
54
54
|
*/
|
|
55
55
|
export declare function isBitcoinAddress(value: unknown): value is string;
|
|
56
56
|
/**
|
|
57
|
-
* Type guard to check if a value is a valid address (Ethereum, Spark, or
|
|
57
|
+
* Type guard to check if a value is a valid address (Ethereum, Spark, Bitcoin, TON, Tron, or Solana)
|
|
58
58
|
*/
|
|
59
59
|
export declare function isValidAddress(value: unknown): value is string;
|
|
60
60
|
/**
|
package/dist/utils/typeGuards.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* NOTE: These type guards now use Zod schemas internally for validation.
|
|
8
8
|
* They are kept for backward compatibility but may be deprecated in the future.
|
|
9
9
|
*/
|
|
10
|
-
import { networkConfigSchema, networkConfigsSchema, tokenConfigSchema, tokenConfigsSchema, walletAddressesSchema, walletBalancesSchema, ethereumAddressSchema, sparkAddressSchema, bitcoinAddressSchema, accountIndexSchema, networkNameSchema, balanceStringSchema, } from './schemas';
|
|
10
|
+
import { networkConfigSchema, networkConfigsSchema, tokenConfigSchema, tokenConfigsSchema, walletAddressesSchema, walletBalancesSchema, ethereumAddressSchema, sparkAddressSchema, bitcoinAddressSchema, accountIndexSchema, networkNameSchema, balanceStringSchema, addressSchema, } from './schemas';
|
|
11
11
|
/**
|
|
12
12
|
* Type guard to check if a value is a valid NetworkConfig
|
|
13
13
|
* Uses Zod schema internally for validation
|
|
@@ -72,10 +72,10 @@ export function isBitcoinAddress(value) {
|
|
|
72
72
|
return bitcoinAddressSchema.safeParse(value).success;
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
|
-
* Type guard to check if a value is a valid address (Ethereum, Spark, or
|
|
75
|
+
* Type guard to check if a value is a valid address (Ethereum, Spark, Bitcoin, TON, Tron, or Solana)
|
|
76
76
|
*/
|
|
77
77
|
export function isValidAddress(value) {
|
|
78
|
-
return
|
|
78
|
+
return addressSchema.safeParse(value).success;
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
81
81
|
* Type guard to check if a value is a valid account index
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../src/utils/typeGuards.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../src/utils/typeGuards.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,WAAW,CAAA;AAUlB;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AACrD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spacesops/wdk-react-native-core",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.70",
|
|
4
4
|
"description": "Core functionality for React Native wallets - wallet management, balance fetching, and worklet operations",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -66,6 +66,7 @@
|
|
|
66
66
|
"@testing-library/jest-native": "^5.4.3",
|
|
67
67
|
"@testing-library/react-native": "^12.4.0",
|
|
68
68
|
"@types/jest": "^29.5.0",
|
|
69
|
+
"@types/node": "^22.20.1",
|
|
69
70
|
"@types/react": "^19.0.0",
|
|
70
71
|
"@types/react-native": "^0.73.0",
|
|
71
72
|
"bufferutil": "^4.1.0",
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for TransactionService
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { setIndexerConfig } from '../../store/indexerConfigStore'
|
|
6
|
+
import { TransactionService } from '../../services/transactionService'
|
|
7
|
+
|
|
8
|
+
const mockFetch = jest.fn()
|
|
9
|
+
global.fetch = mockFetch as typeof fetch
|
|
10
|
+
|
|
11
|
+
describe('TransactionService', () => {
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
jest.clearAllMocks()
|
|
14
|
+
setIndexerConfig({
|
|
15
|
+
baseUrl: 'https://wdk-api.tether.io',
|
|
16
|
+
apiKey: 'test-api-key',
|
|
17
|
+
})
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
setIndexerConfig(null)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('fetches and parses token transfers', async () => {
|
|
25
|
+
mockFetch.mockResolvedValueOnce({
|
|
26
|
+
ok: true,
|
|
27
|
+
status: 200,
|
|
28
|
+
json: async () => ({
|
|
29
|
+
transfers: [
|
|
30
|
+
{
|
|
31
|
+
blockchain: 'ethereum',
|
|
32
|
+
transactionHash: '0xabc',
|
|
33
|
+
token: 'xaut',
|
|
34
|
+
amount: '1.5',
|
|
35
|
+
timestamp: 1700000000,
|
|
36
|
+
from: '0xfrom',
|
|
37
|
+
to: '0xto',
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
}),
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
const transfers = await TransactionService.fetchTokenTransfers(
|
|
44
|
+
'ethereum',
|
|
45
|
+
'xaut',
|
|
46
|
+
'0xWallet'
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
expect(mockFetch).toHaveBeenCalledWith(
|
|
50
|
+
'https://wdk-api.tether.io/api/v1/ethereum/xaut/0xWallet/token-transfers',
|
|
51
|
+
expect.objectContaining({
|
|
52
|
+
method: 'GET',
|
|
53
|
+
headers: expect.objectContaining({
|
|
54
|
+
'x-api-key': 'test-api-key',
|
|
55
|
+
}),
|
|
56
|
+
})
|
|
57
|
+
)
|
|
58
|
+
expect(transfers).toHaveLength(1)
|
|
59
|
+
expect(transfers[0].token).toBe('xaut')
|
|
60
|
+
expect(transfers[0].amount).toBe('1.5')
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
it('returns empty list on 404', async () => {
|
|
64
|
+
mockFetch.mockResolvedValueOnce({
|
|
65
|
+
ok: false,
|
|
66
|
+
status: 404,
|
|
67
|
+
text: async () => 'not found',
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
const transfers = await TransactionService.fetchTokenTransfers(
|
|
71
|
+
'ethereum',
|
|
72
|
+
'usdt',
|
|
73
|
+
'0xWallet'
|
|
74
|
+
)
|
|
75
|
+
expect(transfers).toEqual([])
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
it('aggregates transfers across networks and dedupes', async () => {
|
|
79
|
+
mockFetch
|
|
80
|
+
.mockResolvedValueOnce({
|
|
81
|
+
ok: true,
|
|
82
|
+
status: 200,
|
|
83
|
+
json: async () => ({ transfers: [] }),
|
|
84
|
+
})
|
|
85
|
+
.mockResolvedValueOnce({
|
|
86
|
+
ok: true,
|
|
87
|
+
status: 200,
|
|
88
|
+
json: async () => ({
|
|
89
|
+
transfers: [
|
|
90
|
+
{
|
|
91
|
+
blockchain: 'ethereum',
|
|
92
|
+
transactionHash: '0x1',
|
|
93
|
+
token: 'usdt',
|
|
94
|
+
amount: '10',
|
|
95
|
+
timestamp: 100,
|
|
96
|
+
from: '0xa',
|
|
97
|
+
to: '0xb',
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
}),
|
|
101
|
+
})
|
|
102
|
+
.mockResolvedValueOnce({
|
|
103
|
+
ok: true,
|
|
104
|
+
status: 200,
|
|
105
|
+
json: async () => ({
|
|
106
|
+
transfers: [
|
|
107
|
+
{
|
|
108
|
+
blockchain: 'ethereum',
|
|
109
|
+
transactionHash: '0x2',
|
|
110
|
+
token: 'xaut',
|
|
111
|
+
amount: '0.5',
|
|
112
|
+
timestamp: 200,
|
|
113
|
+
from: '0xc',
|
|
114
|
+
to: '0xd',
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
}),
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
const tokenConfigs = {
|
|
121
|
+
ethereum: {
|
|
122
|
+
native: { address: null, symbol: 'ETH', name: 'Ethereum', decimals: 18 },
|
|
123
|
+
tokens: [
|
|
124
|
+
{
|
|
125
|
+
address: '0xusdt',
|
|
126
|
+
symbol: 'USDT',
|
|
127
|
+
name: 'Tether USD',
|
|
128
|
+
decimals: 6,
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
address: '0xxaut',
|
|
132
|
+
symbol: 'XAUT',
|
|
133
|
+
name: 'Tether Gold',
|
|
134
|
+
decimals: 6,
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
},
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const list = await TransactionService.fetchWalletTransactions({
|
|
141
|
+
addresses: { ethereum: { 0: '0xWallet' } },
|
|
142
|
+
accountIndex: 0,
|
|
143
|
+
tokenConfigs,
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
expect(list).toHaveLength(2)
|
|
147
|
+
expect(list[0].transactionHash).toBe('0x2')
|
|
148
|
+
expect(list[1].transactionHash).toBe('0x1')
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
it('resolveWalletTransactions returns empty when indexer not configured', async () => {
|
|
152
|
+
setIndexerConfig(null)
|
|
153
|
+
const list = await TransactionService.resolveWalletTransactions({
|
|
154
|
+
addresses: { ethereum: { 0: '0xWallet' } },
|
|
155
|
+
accountIndex: 0,
|
|
156
|
+
tokenConfigs: {
|
|
157
|
+
ethereum: {
|
|
158
|
+
native: { address: null, symbol: 'ETH', name: 'Ethereum', decimals: 18 },
|
|
159
|
+
tokens: [],
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
})
|
|
163
|
+
expect(list).toEqual([])
|
|
164
|
+
expect(mockFetch).not.toHaveBeenCalled()
|
|
165
|
+
})
|
|
166
|
+
})
|
package/src/hooks/useBalance.ts
CHANGED
|
@@ -55,6 +55,7 @@ import {
|
|
|
55
55
|
DEFAULT_QUERY_STALE_TIME_MS,
|
|
56
56
|
DEFAULT_QUERY_GC_TIME_MS,
|
|
57
57
|
BALANCE_FETCH_STAGGER_MS,
|
|
58
|
+
BALANCE_FETCH_INTRA_NETWORK_STAGGER_MS,
|
|
58
59
|
} from '../utils/constants'
|
|
59
60
|
import { logError } from '../utils/logger'
|
|
60
61
|
import { delay, withTransientRetry } from '../utils/retryUtils'
|
|
@@ -388,18 +389,20 @@ async function fetchBalancesForQueryKeys(
|
|
|
388
389
|
}
|
|
389
390
|
isFirstNetwork = false
|
|
390
391
|
|
|
391
|
-
const networkResults =
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
392
|
+
const networkResults: Array<{ id: string; result: BalanceFetchResult }> = []
|
|
393
|
+
for (const queryKey of keys) {
|
|
394
|
+
if (networkResults.length > 0) {
|
|
395
|
+
await delay(BALANCE_FETCH_INTRA_NETWORK_STAGGER_MS)
|
|
396
|
+
}
|
|
397
|
+
const validated = validateQueryKeyStructure(queryKey)
|
|
398
|
+
const result = await fetchBalance(
|
|
399
|
+
validated.network,
|
|
400
|
+
validated.accountIndex,
|
|
401
|
+
validated.tokenAddress,
|
|
402
|
+
walletId
|
|
403
|
+
)
|
|
404
|
+
networkResults.push({ id: balanceQueryKeyId(queryKey), result })
|
|
405
|
+
}
|
|
403
406
|
|
|
404
407
|
for (const { id, result } of networkResults) {
|
|
405
408
|
results.set(id, result)
|