@spacesops/wdk-react-native-core 1.0.0-beta.70 → 1.0.0-beta.71
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/services/transactionService.js +22 -3
- package/dist/services/transactionService.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/package.json +1 -1
- package/src/__tests__/services/transactionService.test.ts +22 -0
- package/src/services/transactionService.ts +26 -4
- package/src/types.ts +6 -0
|
@@ -11,8 +11,24 @@ import { delay, withTransientRetry } from '../utils/retryUtils';
|
|
|
11
11
|
function normalizeBaseUrl(baseUrl) {
|
|
12
12
|
return baseUrl.replace(/\/$/, '');
|
|
13
13
|
}
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Resolve the WDK Indexer `{token}` path segment, or null when this asset has no indexer history.
|
|
16
|
+
*
|
|
17
|
+
* The indexer only tracks select assets (e.g. `usdt`, `xaut`, `btc`). Native EVM gas tokens
|
|
18
|
+
* (`eth`, `matic`, …) are not valid and return 400 if requested.
|
|
19
|
+
*/
|
|
20
|
+
function indexerTokenSlugFromConfig(token) {
|
|
21
|
+
if (token.indexerToken) {
|
|
22
|
+
return token.indexerToken.toLowerCase();
|
|
23
|
+
}
|
|
24
|
+
if (token.address !== null) {
|
|
25
|
+
return token.symbol.toLowerCase();
|
|
26
|
+
}
|
|
27
|
+
// Native: only Bitcoin is indexed under `btc` today.
|
|
28
|
+
if (token.symbol.toLowerCase() === 'btc') {
|
|
29
|
+
return 'btc';
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
16
32
|
}
|
|
17
33
|
function transactionDedupeKey(tx) {
|
|
18
34
|
return [
|
|
@@ -122,7 +138,10 @@ export class TransactionService {
|
|
|
122
138
|
if (i > 0) {
|
|
123
139
|
await delay(BALANCE_FETCH_INTRA_NETWORK_STAGGER_MS);
|
|
124
140
|
}
|
|
125
|
-
const tokenSlug =
|
|
141
|
+
const tokenSlug = indexerTokenSlugFromConfig(token);
|
|
142
|
+
if (!tokenSlug) {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
126
145
|
try {
|
|
127
146
|
const transfers = await this.fetchTokenTransfers(network, tokenSlug, address);
|
|
128
147
|
for (const tx of transfers) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionService.js","sourceRoot":"","sources":["../../src/services/transactionService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,sCAAsC,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AACrG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAS/D,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACnC,CAAC;AAED,SAAS,
|
|
1
|
+
{"version":3,"file":"transactionService.js","sourceRoot":"","sources":["../../src/services/transactionService.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -46,6 +46,12 @@ export interface TokenConfig {
|
|
|
46
46
|
decimals: number;
|
|
47
47
|
/** Token contract address (null for native tokens) */
|
|
48
48
|
address: string | null;
|
|
49
|
+
/**
|
|
50
|
+
* WDK Indexer token path segment for token-transfers.
|
|
51
|
+
* When omitted, ERC-20/jetton tokens use lowercase symbol; native gas tokens are skipped
|
|
52
|
+
* except Bitcoin (`btc`). Set explicitly to override or to enable native history when supported.
|
|
53
|
+
*/
|
|
54
|
+
indexerToken?: string;
|
|
49
55
|
}
|
|
50
56
|
/**
|
|
51
57
|
* Network Tokens
|
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.71",
|
|
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",
|
|
@@ -143,11 +143,33 @@ describe('TransactionService', () => {
|
|
|
143
143
|
tokenConfigs,
|
|
144
144
|
})
|
|
145
145
|
|
|
146
|
+
expect(mockFetch).toHaveBeenCalledTimes(2)
|
|
146
147
|
expect(list).toHaveLength(2)
|
|
147
148
|
expect(list[0].transactionHash).toBe('0x2')
|
|
148
149
|
expect(list[1].transactionHash).toBe('0x1')
|
|
149
150
|
})
|
|
150
151
|
|
|
152
|
+
it('skips native gas tokens that the indexer does not track', async () => {
|
|
153
|
+
mockFetch.mockResolvedValueOnce({
|
|
154
|
+
ok: true,
|
|
155
|
+
status: 200,
|
|
156
|
+
json: async () => ({ transfers: [] }),
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
await TransactionService.fetchWalletTransactions({
|
|
160
|
+
addresses: { ethereum: { 0: '0xWallet' } },
|
|
161
|
+
accountIndex: 0,
|
|
162
|
+
tokenConfigs: {
|
|
163
|
+
ethereum: {
|
|
164
|
+
native: { address: null, symbol: 'ETH', name: 'Ethereum', decimals: 18 },
|
|
165
|
+
tokens: [],
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
expect(mockFetch).not.toHaveBeenCalled()
|
|
171
|
+
})
|
|
172
|
+
|
|
151
173
|
it('resolveWalletTransactions returns empty when indexer not configured', async () => {
|
|
152
174
|
setIndexerConfig(null)
|
|
153
175
|
const list = await TransactionService.resolveWalletTransactions({
|
|
@@ -9,7 +9,7 @@ import { getIndexerConfig } from '../store/indexerConfigStore'
|
|
|
9
9
|
import { BALANCE_FETCH_INTRA_NETWORK_STAGGER_MS, BALANCE_FETCH_STAGGER_MS } from '../utils/constants'
|
|
10
10
|
import { logError, logWarn } from '../utils/logger'
|
|
11
11
|
import { delay, withTransientRetry } from '../utils/retryUtils'
|
|
12
|
-
import type { IndexerTokenTransfersResponse, TokenConfigs, WalletTransaction } from '../types'
|
|
12
|
+
import type { IndexerTokenTransfersResponse, TokenConfig, TokenConfigs, WalletTransaction } from '../types'
|
|
13
13
|
|
|
14
14
|
export interface FetchWalletTransactionsParams {
|
|
15
15
|
addresses: Record<string, Record<number, string>>
|
|
@@ -21,8 +21,27 @@ function normalizeBaseUrl(baseUrl: string): string {
|
|
|
21
21
|
return baseUrl.replace(/\/$/, '')
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Resolve the WDK Indexer `{token}` path segment, or null when this asset has no indexer history.
|
|
26
|
+
*
|
|
27
|
+
* The indexer only tracks select assets (e.g. `usdt`, `xaut`, `btc`). Native EVM gas tokens
|
|
28
|
+
* (`eth`, `matic`, …) are not valid and return 400 if requested.
|
|
29
|
+
*/
|
|
30
|
+
function indexerTokenSlugFromConfig(token: TokenConfig): string | null {
|
|
31
|
+
if (token.indexerToken) {
|
|
32
|
+
return token.indexerToken.toLowerCase()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (token.address !== null) {
|
|
36
|
+
return token.symbol.toLowerCase()
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Native: only Bitcoin is indexed under `btc` today.
|
|
40
|
+
if (token.symbol.toLowerCase() === 'btc') {
|
|
41
|
+
return 'btc'
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return null
|
|
26
45
|
}
|
|
27
46
|
|
|
28
47
|
function transactionDedupeKey(tx: WalletTransaction): string {
|
|
@@ -158,7 +177,10 @@ export class TransactionService {
|
|
|
158
177
|
await delay(BALANCE_FETCH_INTRA_NETWORK_STAGGER_MS)
|
|
159
178
|
}
|
|
160
179
|
|
|
161
|
-
const tokenSlug =
|
|
180
|
+
const tokenSlug = indexerTokenSlugFromConfig(token)
|
|
181
|
+
if (!tokenSlug) {
|
|
182
|
+
continue
|
|
183
|
+
}
|
|
162
184
|
try {
|
|
163
185
|
const transfers = await this.fetchTokenTransfers(network, tokenSlug, address)
|
|
164
186
|
for (const tx of transfers) {
|
package/src/types.ts
CHANGED
|
@@ -49,6 +49,12 @@ export interface TokenConfig {
|
|
|
49
49
|
decimals: number
|
|
50
50
|
/** Token contract address (null for native tokens) */
|
|
51
51
|
address: string | null
|
|
52
|
+
/**
|
|
53
|
+
* WDK Indexer token path segment for token-transfers.
|
|
54
|
+
* When omitted, ERC-20/jetton tokens use lowercase symbol; native gas tokens are skipped
|
|
55
|
+
* except Bitcoin (`btc`). Set explicitly to override or to enable native history when supported.
|
|
56
|
+
*/
|
|
57
|
+
indexerToken?: string
|
|
52
58
|
}
|
|
53
59
|
|
|
54
60
|
/**
|