@ledgerhq/coin-filecoin 1.14.1-nightly.20251114023758 → 1.15.0-nightly.20251118023800
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/.unimportedrc.json +2 -0
- package/CHANGELOG.md +11 -7
- package/lib/api/api.d.ts +5 -3
- package/lib/api/api.d.ts.map +1 -1
- package/lib/api/api.js +66 -21
- package/lib/api/api.js.map +1 -1
- package/lib/common-logic/index.d.ts +1 -1
- package/lib/common-logic/index.d.ts.map +1 -1
- package/lib/common-logic/index.js +1 -3
- package/lib/common-logic/index.js.map +1 -1
- package/lib/common-logic/utils.d.ts +0 -2
- package/lib/common-logic/utils.d.ts.map +1 -1
- package/lib/common-logic/utils.js +16 -68
- package/lib/common-logic/utils.js.map +1 -1
- package/lib/erc20/tokenAccounts.d.ts +2 -3
- package/lib/erc20/tokenAccounts.d.ts.map +1 -1
- package/lib/erc20/tokenAccounts.js +46 -32
- package/lib/erc20/tokenAccounts.js.map +1 -1
- package/lib/test/fixtures.d.ts +87 -0
- package/lib/test/fixtures.d.ts.map +1 -0
- package/lib/test/fixtures.js +311 -0
- package/lib/test/fixtures.js.map +1 -0
- package/lib/types/common.d.ts +22 -2
- package/lib/types/common.d.ts.map +1 -1
- package/lib-es/api/api.d.ts +5 -3
- package/lib-es/api/api.d.ts.map +1 -1
- package/lib-es/api/api.js +61 -18
- package/lib-es/api/api.js.map +1 -1
- package/lib-es/common-logic/index.d.ts +1 -1
- package/lib-es/common-logic/index.d.ts.map +1 -1
- package/lib-es/common-logic/index.js +1 -1
- package/lib-es/common-logic/index.js.map +1 -1
- package/lib-es/common-logic/utils.d.ts +0 -2
- package/lib-es/common-logic/utils.d.ts.map +1 -1
- package/lib-es/common-logic/utils.js +16 -66
- package/lib-es/common-logic/utils.js.map +1 -1
- package/lib-es/erc20/tokenAccounts.d.ts +2 -3
- package/lib-es/erc20/tokenAccounts.d.ts.map +1 -1
- package/lib-es/erc20/tokenAccounts.js +47 -33
- package/lib-es/erc20/tokenAccounts.js.map +1 -1
- package/lib-es/test/fixtures.d.ts +87 -0
- package/lib-es/test/fixtures.d.ts.map +1 -0
- package/lib-es/test/fixtures.js +297 -0
- package/lib-es/test/fixtures.js.map +1 -0
- package/lib-es/types/common.d.ts +22 -2
- package/lib-es/types/common.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/api/api.ts +107 -26
- package/src/api/api.unit.test.ts +217 -0
- package/src/common-logic/index.ts +0 -2
- package/src/common-logic/utils.ts +19 -90
- package/src/common-logic/utils.unit.test.ts +429 -0
- package/src/erc20/tokenAccounts.ts +59 -34
- package/src/erc20/tokenAccounts.unit.test.ts +73 -0
- package/src/test/fixtures.ts +342 -0
- package/src/types/common.ts +24 -2
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
2
|
+
import { encodeOperationId } from "@ledgerhq/coin-framework/operation";
|
|
3
|
+
import { encodeAccountId } from "@ledgerhq/coin-framework/account/index";
|
|
4
|
+
/**
|
|
5
|
+
* Sample Filecoin addresses for testing
|
|
6
|
+
*/
|
|
7
|
+
export const TEST_ADDRESSES = {
|
|
8
|
+
// f1 address (SECP256K1)
|
|
9
|
+
F1_ADDRESS: "f1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za",
|
|
10
|
+
// f4 address (delegated)
|
|
11
|
+
F4_ADDRESS: "f410fkkld55ioe7qg24wvt7fu6pbknb56ht7ptloy",
|
|
12
|
+
// Another f1 address for recipient
|
|
13
|
+
RECIPIENT_F1: "f1z4nykg7q6q5qnxs7h4zknhlqbqhq5jxcqm5qw4y",
|
|
14
|
+
// Another f4 address for recipient
|
|
15
|
+
RECIPIENT_F4: "f410fagkr6pfqzd5q2kj42qrj54g3sxqjsrqn4fhoy",
|
|
16
|
+
// ERC20 contract address (f4)
|
|
17
|
+
ERC20_CONTRACT: "f410f3huuiyauahgjp7xjbvb7yfpuhvpyxvnqx3qy",
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Sample transaction hashes for testing
|
|
21
|
+
*/
|
|
22
|
+
export const TEST_TRANSACTION_HASHES = {
|
|
23
|
+
VALID: "bafy2bzacedpqzd6qm2r7nvxj5oetpqvhujwwmvkhz4u3xnfzdvwzxpjzuqhpa",
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Sample block heights for testing
|
|
27
|
+
*/
|
|
28
|
+
export const TEST_BLOCK_HEIGHTS = {
|
|
29
|
+
CURRENT: 3000000,
|
|
30
|
+
RECENT: 2999999,
|
|
31
|
+
OLD: 2500000,
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Create a mock Filecoin account for testing
|
|
35
|
+
*
|
|
36
|
+
* @param options Optional parameters to override default values
|
|
37
|
+
* @returns A mock Filecoin account
|
|
38
|
+
*/
|
|
39
|
+
export const createMockAccount = (options) => {
|
|
40
|
+
const seedIdentifier = options?.seedIdentifier || TEST_ADDRESSES.F1_ADDRESS;
|
|
41
|
+
// For Filecoin, we need to handle the currency ID appropriately
|
|
42
|
+
// Using a mock currency structure similar to what getCryptoCurrencyById would return
|
|
43
|
+
const mockCurrency = {
|
|
44
|
+
type: "CryptoCurrency",
|
|
45
|
+
id: "filecoin",
|
|
46
|
+
coinType: 461,
|
|
47
|
+
name: "Filecoin",
|
|
48
|
+
managerAppName: "Filecoin",
|
|
49
|
+
ticker: "FIL",
|
|
50
|
+
scheme: "filecoin",
|
|
51
|
+
color: "#0090FF",
|
|
52
|
+
family: "filecoin",
|
|
53
|
+
units: [
|
|
54
|
+
{
|
|
55
|
+
name: "FIL",
|
|
56
|
+
code: "FIL",
|
|
57
|
+
magnitude: 18,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: "attoFIL",
|
|
61
|
+
code: "attoFIL",
|
|
62
|
+
magnitude: 0,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
explorerViews: [
|
|
66
|
+
{
|
|
67
|
+
address: "https://filfox.info/en/address/$address",
|
|
68
|
+
tx: "https://filfox.info/en/message/$hash",
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
const account = {
|
|
73
|
+
type: "Account",
|
|
74
|
+
id: options?.id ||
|
|
75
|
+
encodeAccountId({
|
|
76
|
+
type: "js",
|
|
77
|
+
version: "2",
|
|
78
|
+
currencyId: "filecoin",
|
|
79
|
+
xpubOrAddress: seedIdentifier,
|
|
80
|
+
derivationMode: "",
|
|
81
|
+
}),
|
|
82
|
+
seedIdentifier,
|
|
83
|
+
derivationMode: "",
|
|
84
|
+
index: options?.index || 0,
|
|
85
|
+
freshAddress: options?.freshAddress || seedIdentifier,
|
|
86
|
+
freshAddressPath: options?.freshAddressPath || "44'/461'/0'/0/0",
|
|
87
|
+
blockHeight: options?.blockHeight || TEST_BLOCK_HEIGHTS.CURRENT,
|
|
88
|
+
balance: options?.balance instanceof BigNumber
|
|
89
|
+
? options.balance
|
|
90
|
+
: new BigNumber(options?.balance || "1000000000000000000"), // 1 FIL
|
|
91
|
+
spendableBalance: options?.spendableBalance instanceof BigNumber
|
|
92
|
+
? options.spendableBalance
|
|
93
|
+
: new BigNumber(options?.spendableBalance || "1000000000000000000"), // 1 FIL
|
|
94
|
+
operations: options?.operations || [],
|
|
95
|
+
pendingOperations: options?.pendingOperations || [],
|
|
96
|
+
currency: options?.currency || mockCurrency,
|
|
97
|
+
operationsCount: options?.operationsCount || 0,
|
|
98
|
+
subAccounts: options?.subAccounts || [],
|
|
99
|
+
swapHistory: [],
|
|
100
|
+
balanceHistoryCache: {
|
|
101
|
+
HOUR: { latestDate: null, balances: [] },
|
|
102
|
+
DAY: { latestDate: null, balances: [] },
|
|
103
|
+
WEEK: { latestDate: null, balances: [] },
|
|
104
|
+
},
|
|
105
|
+
creationDate: options?.creationDate || new Date(),
|
|
106
|
+
lastSyncDate: options?.lastSyncDate || new Date(),
|
|
107
|
+
nfts: options?.nfts || [],
|
|
108
|
+
used: true,
|
|
109
|
+
};
|
|
110
|
+
return { ...account, ...options };
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Create a mock Filecoin transaction for testing
|
|
114
|
+
*
|
|
115
|
+
* @param options Optional parameters to override default values
|
|
116
|
+
* @returns A mock Filecoin transaction
|
|
117
|
+
*/
|
|
118
|
+
export const createMockTransaction = (options) => {
|
|
119
|
+
const transaction = {
|
|
120
|
+
family: "filecoin",
|
|
121
|
+
amount: options?.amount instanceof BigNumber
|
|
122
|
+
? options.amount
|
|
123
|
+
: new BigNumber(options?.amount || "100000000000000000"), // 0.1 FIL
|
|
124
|
+
recipient: options?.recipient || TEST_ADDRESSES.RECIPIENT_F1,
|
|
125
|
+
useAllAmount: options?.useAllAmount || false,
|
|
126
|
+
nonce: options?.nonce || 0,
|
|
127
|
+
method: options?.method || 0,
|
|
128
|
+
version: options?.version || 0,
|
|
129
|
+
params: options?.params,
|
|
130
|
+
gasLimit: options?.gasLimit || new BigNumber(1000000),
|
|
131
|
+
gasFeeCap: options?.gasFeeCap || new BigNumber("100000"),
|
|
132
|
+
gasPremium: options?.gasPremium || new BigNumber("100000"),
|
|
133
|
+
};
|
|
134
|
+
return { ...transaction, ...options };
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Create a mock Filecoin operation for testing
|
|
138
|
+
*
|
|
139
|
+
* @param account The account associated with the operation
|
|
140
|
+
* @param transaction The transaction details
|
|
141
|
+
* @param options Optional parameters to override default values
|
|
142
|
+
* @returns A mock Filecoin operation
|
|
143
|
+
*/
|
|
144
|
+
export const createMockOperation = (account, transaction, options) => {
|
|
145
|
+
const hash = options?.hash || TEST_TRANSACTION_HASHES.VALID;
|
|
146
|
+
const type = options?.type || "OUT";
|
|
147
|
+
const fee = transaction.gasLimit.multipliedBy(transaction.gasFeeCap).plus(transaction.gasPremium);
|
|
148
|
+
const operation = {
|
|
149
|
+
id: options?.id || encodeOperationId(account.id, hash, type),
|
|
150
|
+
hash,
|
|
151
|
+
type,
|
|
152
|
+
senders: options?.senders || [account.freshAddress],
|
|
153
|
+
recipients: options?.recipients || [transaction.recipient],
|
|
154
|
+
accountId: account.id,
|
|
155
|
+
blockHash: options?.blockHash || null,
|
|
156
|
+
blockHeight: options?.blockHeight || null,
|
|
157
|
+
value: type === "OUT" ? transaction.amount.plus(fee) : transaction.amount,
|
|
158
|
+
fee,
|
|
159
|
+
date: options?.date || new Date(),
|
|
160
|
+
extra: options?.extra || {},
|
|
161
|
+
hasFailed: options?.hasFailed || false,
|
|
162
|
+
};
|
|
163
|
+
return { ...operation, ...options };
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* Create a mock TokenAccount for testing ERC20 functionality
|
|
167
|
+
*
|
|
168
|
+
* @param parentAccount The parent Filecoin account
|
|
169
|
+
* @param options Optional parameters to override default values
|
|
170
|
+
* @returns A mock TokenAccount
|
|
171
|
+
*/
|
|
172
|
+
export const createMockTokenAccount = (parentAccount, options) => {
|
|
173
|
+
const tokenAccount = {
|
|
174
|
+
type: "TokenAccount",
|
|
175
|
+
id: options?.id || `${parentAccount.id}+${TEST_ADDRESSES.ERC20_CONTRACT}`,
|
|
176
|
+
parentId: parentAccount.id,
|
|
177
|
+
token: options?.token || {
|
|
178
|
+
type: "TokenCurrency",
|
|
179
|
+
id: `filecoin/erc20/test_token`,
|
|
180
|
+
contractAddress: TEST_ADDRESSES.ERC20_CONTRACT,
|
|
181
|
+
parentCurrency: parentAccount.currency,
|
|
182
|
+
tokenType: "erc20",
|
|
183
|
+
name: "Test Token",
|
|
184
|
+
ticker: "TST",
|
|
185
|
+
units: [
|
|
186
|
+
{
|
|
187
|
+
name: "TST",
|
|
188
|
+
code: "TST",
|
|
189
|
+
magnitude: 18,
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
disableCountervalue: false,
|
|
193
|
+
},
|
|
194
|
+
balance: options?.balance instanceof BigNumber
|
|
195
|
+
? options.balance
|
|
196
|
+
: new BigNumber(options?.balance || "1000000000000000000"), // 1 TST
|
|
197
|
+
spendableBalance: options?.spendableBalance instanceof BigNumber
|
|
198
|
+
? options.spendableBalance
|
|
199
|
+
: new BigNumber(options?.spendableBalance || "1000000000000000000"),
|
|
200
|
+
creationDate: options?.creationDate || new Date(),
|
|
201
|
+
operationsCount: options?.operationsCount || 0,
|
|
202
|
+
operations: options?.operations || [],
|
|
203
|
+
pendingOperations: options?.pendingOperations || [],
|
|
204
|
+
swapHistory: options?.swapHistory || [],
|
|
205
|
+
balanceHistoryCache: options?.balanceHistoryCache || {
|
|
206
|
+
HOUR: { latestDate: null, balances: [] },
|
|
207
|
+
DAY: { latestDate: null, balances: [] },
|
|
208
|
+
WEEK: { latestDate: null, balances: [] },
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
return { ...tokenAccount, ...options };
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* Create mock API response for balance
|
|
215
|
+
*
|
|
216
|
+
* @param options Optional parameters to override default values
|
|
217
|
+
* @returns A mock BalanceResponse
|
|
218
|
+
*/
|
|
219
|
+
export const createMockBalanceResponse = (options) => {
|
|
220
|
+
return {
|
|
221
|
+
total_balance: options?.total_balance || "1000000000000000000",
|
|
222
|
+
spendable_balance: options?.spendable_balance || "1000000000000000000",
|
|
223
|
+
locked_balance: options?.locked_balance || "0",
|
|
224
|
+
};
|
|
225
|
+
};
|
|
226
|
+
/**
|
|
227
|
+
* Create mock API response for transaction
|
|
228
|
+
*
|
|
229
|
+
* @param options Optional parameters to override default values
|
|
230
|
+
* @returns A mock TransactionResponse
|
|
231
|
+
*/
|
|
232
|
+
export const createMockTransactionResponse = (options) => {
|
|
233
|
+
return {
|
|
234
|
+
hash: options?.hash || TEST_TRANSACTION_HASHES.VALID,
|
|
235
|
+
to: options?.to || TEST_ADDRESSES.RECIPIENT_F1,
|
|
236
|
+
from: options?.from || TEST_ADDRESSES.F1_ADDRESS,
|
|
237
|
+
amount: options?.amount || "100000000000000000",
|
|
238
|
+
status: options?.status || "Ok",
|
|
239
|
+
type: options?.type || "transfer",
|
|
240
|
+
timestamp: options?.timestamp || Math.floor(Date.now() / 1000),
|
|
241
|
+
height: options?.height || TEST_BLOCK_HEIGHTS.CURRENT,
|
|
242
|
+
fee_data: options?.fee_data || {
|
|
243
|
+
MinerFee: {
|
|
244
|
+
MinerAddress: "f0123",
|
|
245
|
+
Amount: "50000",
|
|
246
|
+
},
|
|
247
|
+
OverEstimationBurnFee: {
|
|
248
|
+
BurnAddress: "f099",
|
|
249
|
+
Amount: "25000",
|
|
250
|
+
},
|
|
251
|
+
BurnFee: {
|
|
252
|
+
BurnAddress: "f099",
|
|
253
|
+
Amount: "25000",
|
|
254
|
+
},
|
|
255
|
+
TotalCost: "100000",
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
};
|
|
259
|
+
/**
|
|
260
|
+
* Create mock API response for estimated fees
|
|
261
|
+
*
|
|
262
|
+
* @param options Optional parameters to override default values
|
|
263
|
+
* @returns A mock EstimatedFeesResponse
|
|
264
|
+
*/
|
|
265
|
+
export const createMockEstimatedFeesResponse = (options) => {
|
|
266
|
+
return {
|
|
267
|
+
gas_limit: options?.gas_limit || 1000000,
|
|
268
|
+
gas_fee_cap: options?.gas_fee_cap || "100000",
|
|
269
|
+
gas_premium: options?.gas_premium || "100000",
|
|
270
|
+
nonce: options?.nonce || 0,
|
|
271
|
+
};
|
|
272
|
+
};
|
|
273
|
+
/**
|
|
274
|
+
* Create mock ERC20 transfer for testing token functionality
|
|
275
|
+
*
|
|
276
|
+
* @param options Optional parameters to override default values
|
|
277
|
+
* @returns A mock ERC20Transfer
|
|
278
|
+
*/
|
|
279
|
+
export const createMockERC20Transfer = (options) => {
|
|
280
|
+
const transfer = {
|
|
281
|
+
id: options?.id || "1",
|
|
282
|
+
height: options?.height || TEST_BLOCK_HEIGHTS.CURRENT,
|
|
283
|
+
type: options?.type || "erc20_transfer",
|
|
284
|
+
status: options?.status || "Ok",
|
|
285
|
+
to: options?.to || TEST_ADDRESSES.RECIPIENT_F4,
|
|
286
|
+
from: options?.from || TEST_ADDRESSES.F4_ADDRESS,
|
|
287
|
+
amount: options?.amount || "1000000000000000000",
|
|
288
|
+
contract_address: options?.contract_address || TEST_ADDRESSES.ERC20_CONTRACT,
|
|
289
|
+
timestamp: options?.timestamp || Math.floor(Date.now() / 1000),
|
|
290
|
+
tx_hash: options?.tx_hash || TEST_TRANSACTION_HASHES.VALID,
|
|
291
|
+
};
|
|
292
|
+
if (options?.tx_cid !== undefined) {
|
|
293
|
+
transfer.tx_cid = options.tx_cid;
|
|
294
|
+
}
|
|
295
|
+
return transfer;
|
|
296
|
+
};
|
|
297
|
+
//# sourceMappingURL=fixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/test/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AASrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,yBAAyB;IACzB,UAAU,EAAE,2CAA2C;IACvD,yBAAyB;IACzB,UAAU,EAAE,2CAA2C;IACvD,mCAAmC;IACnC,YAAY,EAAE,2CAA2C;IACzD,mCAAmC;IACnC,YAAY,EAAE,4CAA4C;IAC1D,8BAA8B;IAC9B,cAAc,EAAE,2CAA2C;CAC5D,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,KAAK,EAAE,gEAAgE;CACxE,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,OAAO;IACf,GAAG,EAAE,OAAO;CACb,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAA0B,EAAW,EAAE;IACvE,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC;IAE5E,gEAAgE;IAChE,qFAAqF;IACrF,MAAM,YAAY,GAAG;QACnB,IAAI,EAAE,gBAAyB;QAC/B,EAAE,EAAE,UAAU;QACd,QAAQ,EAAE,GAAG;QACb,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,UAAU;QAC1B,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,UAAmB;QAC3B,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,KAAK;gBACX,SAAS,EAAE,EAAE;aACd;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,CAAC;aACb;SACF;QACD,aAAa,EAAE;YACb;gBACE,OAAO,EAAE,yCAAyC;gBAClD,EAAE,EAAE,sCAAsC;aAC3C;SACF;KACF,CAAC;IAEF,MAAM,OAAO,GAAY;QACvB,IAAI,EAAE,SAAS;QACf,EAAE,EACA,OAAO,EAAE,EAAE;YACX,eAAe,CAAC;gBACd,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,GAAG;gBACZ,UAAU,EAAE,UAAU;gBACtB,aAAa,EAAE,cAAc;gBAC7B,cAAc,EAAE,EAAE;aACnB,CAAC;QACJ,cAAc;QACd,cAAc,EAAE,EAAE;QAClB,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAC1B,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,cAAc;QACrD,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,IAAI,iBAAiB;QAChE,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,kBAAkB,CAAC,OAAO;QAC/D,OAAO,EACL,OAAO,EAAE,OAAO,YAAY,SAAS;YACnC,CAAC,CAAC,OAAO,CAAC,OAAO;YACjB,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,OAAO,IAAI,qBAAqB,CAAC,EAAE,QAAQ;QACxE,gBAAgB,EACd,OAAO,EAAE,gBAAgB,YAAY,SAAS;YAC5C,CAAC,CAAC,OAAO,CAAC,gBAAgB;YAC1B,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,gBAAgB,IAAI,qBAAqB,CAAC,EAAE,QAAQ;QACjF,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,EAAE;QACrC,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,IAAI,EAAE;QACnD,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAK,YAAoB;QACpD,eAAe,EAAE,OAAO,EAAE,eAAe,IAAI,CAAC;QAC9C,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,EAAE;QACvC,WAAW,EAAE,EAAE;QACf,mBAAmB,EAAE;YACnB,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxC,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACvC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;SACzC;QACD,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI,IAAI,EAAE;QACjD,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI,IAAI,EAAE;QACjD,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE;QACzB,IAAI,EAAE,IAAI;KACX,CAAC;IAEF,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;AACpC,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAA8B,EAAe,EAAE;IACnF,MAAM,WAAW,GAAgB;QAC/B,MAAM,EAAE,UAAU;QAClB,MAAM,EACJ,OAAO,EAAE,MAAM,YAAY,SAAS;YAClC,CAAC,CAAC,OAAO,CAAC,MAAM;YAChB,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,MAAM,IAAI,oBAAoB,CAAC,EAAE,UAAU;QACxE,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,cAAc,CAAC,YAAY;QAC5D,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,KAAK;QAC5C,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAC1B,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,EAAE,OAAO,EAAE,MAAM;QACvB,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC;QACrD,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC;QACxD,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC;KAC3D,CAAC;IAEF,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC;AACxC,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,OAAgB,EAChB,WAAwB,EACxB,OAA4B,EACjB,EAAE;IACb,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,uBAAuB,CAAC,KAAK,CAAC;IAC5D,MAAM,IAAI,GAAI,OAAO,EAAE,IAAsB,IAAI,KAAK,CAAC;IAEvD,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAElG,MAAM,SAAS,GAAc;QAC3B,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC;QAC5D,IAAI;QACJ,IAAI;QACJ,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QACnD,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QAC1D,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;QACrC,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI;QACzC,KAAK,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM;QACzE,GAAG;QACH,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE;QACjC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;QAC3B,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,KAAK;KACvC,CAAC;IAEF,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC;AACtC,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,aAAsB,EACtB,OAA+B,EACjB,EAAE;IAChB,MAAM,YAAY,GAAiB;QACjC,IAAI,EAAE,cAAc;QACpB,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,GAAG,aAAa,CAAC,EAAE,IAAI,cAAc,CAAC,cAAc,EAAE;QACzE,QAAQ,EAAE,aAAa,CAAC,EAAE;QAC1B,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI;YACvB,IAAI,EAAE,eAAwB;YAC9B,EAAE,EAAE,2BAA2B;YAC/B,eAAe,EAAE,cAAc,CAAC,cAAc;YAC9C,cAAc,EAAE,aAAa,CAAC,QAAQ;YACtC,SAAS,EAAE,OAAgB;YAC3B,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,KAAK;YACb,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,KAAK;oBACX,SAAS,EAAE,EAAE;iBACd;aACF;YACD,mBAAmB,EAAE,KAAK;SAC3B;QACD,OAAO,EACL,OAAO,EAAE,OAAO,YAAY,SAAS;YACnC,CAAC,CAAC,OAAO,CAAC,OAAO;YACjB,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,OAAO,IAAI,qBAAqB,CAAC,EAAE,QAAQ;QACxE,gBAAgB,EACd,OAAO,EAAE,gBAAgB,YAAY,SAAS;YAC5C,CAAC,CAAC,OAAO,CAAC,gBAAgB;YAC1B,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,gBAAgB,IAAI,qBAAqB,CAAC;QACvE,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI,IAAI,EAAE;QACjD,eAAe,EAAE,OAAO,EAAE,eAAe,IAAI,CAAC;QAC9C,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,EAAE;QACrC,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,IAAI,EAAE;QACnD,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,EAAE;QACvC,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,IAAI;YACnD,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxC,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACvC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;SACzC;KACF,CAAC;IAEF,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,EAAE,CAAC;AACzC,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,OAAkC,EAAmB,EAAE;IAC/F,OAAO;QACL,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,qBAAqB;QAC9D,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,IAAI,qBAAqB;QACtE,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,GAAG;KAC/C,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,OAAsC,EACjB,EAAE;IACvB,OAAO;QACL,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,uBAAuB,CAAC,KAAK;QACpD,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,cAAc,CAAC,YAAY;QAC9C,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,cAAc,CAAC,UAAU;QAChD,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,oBAAoB;QAC/C,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI;QAC/B,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,UAAU;QACjC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAC9D,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,kBAAkB,CAAC,OAAO;QACrD,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI;YAC7B,QAAQ,EAAE;gBACR,YAAY,EAAE,OAAO;gBACrB,MAAM,EAAE,OAAO;aAChB;YACD,qBAAqB,EAAE;gBACrB,WAAW,EAAE,MAAM;gBACnB,MAAM,EAAE,OAAO;aAChB;YACD,OAAO,EAAE;gBACP,WAAW,EAAE,MAAM;gBACnB,MAAM,EAAE,OAAO;aAChB;YACD,SAAS,EAAE,QAAQ;SACpB;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,OAAwC,EACjB,EAAE;IACzB,OAAO;QACL,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,OAAO;QACxC,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,QAAQ;QAC7C,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,QAAQ;QAC7C,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;KAC3B,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAgC,EAAiB,EAAE;IACzF,MAAM,QAAQ,GAAkB;QAC9B,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,GAAG;QACtB,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,kBAAkB,CAAC,OAAO;QACrD,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,gBAAgB;QACvC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI;QAC/B,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,cAAc,CAAC,YAAY;QAC9C,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,cAAc,CAAC,UAAU;QAChD,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,qBAAqB;QAChD,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,IAAI,cAAc,CAAC,cAAc;QAC5E,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAC9D,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,uBAAuB,CAAC,KAAK;KAC3D,CAAC;IAEF,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACnC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
|
package/lib-es/types/common.d.ts
CHANGED
|
@@ -17,19 +17,39 @@ export interface EstimatedFeesResponse {
|
|
|
17
17
|
gas_premium: string;
|
|
18
18
|
nonce: number;
|
|
19
19
|
}
|
|
20
|
+
export interface Metadata {
|
|
21
|
+
limit: number;
|
|
22
|
+
offset: number;
|
|
23
|
+
}
|
|
20
24
|
export interface TransactionsResponse {
|
|
21
25
|
txs: TransactionResponse[];
|
|
26
|
+
metadata: Metadata;
|
|
22
27
|
}
|
|
23
28
|
export interface TransactionResponse {
|
|
24
|
-
amount:
|
|
29
|
+
amount: string;
|
|
25
30
|
to: string;
|
|
26
31
|
from: string;
|
|
32
|
+
fee_data?: FeeData;
|
|
27
33
|
status: string;
|
|
28
34
|
type: string;
|
|
29
35
|
hash: string;
|
|
30
36
|
timestamp: number;
|
|
31
37
|
height: number;
|
|
32
|
-
|
|
38
|
+
}
|
|
39
|
+
export interface FeeData {
|
|
40
|
+
MinerFee: {
|
|
41
|
+
MinerAddress: string;
|
|
42
|
+
Amount: string;
|
|
43
|
+
};
|
|
44
|
+
OverEstimationBurnFee: {
|
|
45
|
+
BurnAddress: string;
|
|
46
|
+
Amount: string;
|
|
47
|
+
};
|
|
48
|
+
BurnFee: {
|
|
49
|
+
BurnAddress: string;
|
|
50
|
+
Amount: string;
|
|
51
|
+
};
|
|
52
|
+
TotalCost: string;
|
|
33
53
|
}
|
|
34
54
|
export interface BalanceResponse {
|
|
35
55
|
locked_balance: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,oBAAY,QAAQ;IAClB,EAAE,OAAO;IACT,IAAI,SAAS;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,mBAAmB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/coin-filecoin",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.15.0-nightly.20251118023800",
|
|
4
4
|
"description": "Ledger Filecoin Coin integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger",
|
|
@@ -100,15 +100,15 @@
|
|
|
100
100
|
"iso-filecoin": "^4.1.0",
|
|
101
101
|
"lodash": "^4.17.21",
|
|
102
102
|
"rxjs": "^7.8.1",
|
|
103
|
-
"@ledgerhq/coin-framework": "^6.9.0-nightly.
|
|
104
|
-
"@ledgerhq/cryptoassets": "^13.33.0-nightly.
|
|
103
|
+
"@ledgerhq/coin-framework": "^6.9.0-nightly.20251118023800",
|
|
104
|
+
"@ledgerhq/cryptoassets": "^13.33.0-nightly.20251118023800",
|
|
105
105
|
"@ledgerhq/devices": "8.7.0",
|
|
106
106
|
"@ledgerhq/errors": "^6.27.0",
|
|
107
|
-
"@ledgerhq/live-env": "^2.21.0-nightly.
|
|
108
|
-
"@ledgerhq/live-network": "^2.1.1-nightly.
|
|
107
|
+
"@ledgerhq/live-env": "^2.21.0-nightly.20251118023800",
|
|
108
|
+
"@ledgerhq/live-network": "^2.1.1-nightly.20251118023800",
|
|
109
109
|
"@ledgerhq/logs": "^6.13.0",
|
|
110
110
|
"@ledgerhq/types-cryptoassets": "^7.30.0",
|
|
111
|
-
"@ledgerhq/types-live": "^6.89.0-nightly.
|
|
111
|
+
"@ledgerhq/types-live": "^6.89.0-nightly.20251118023800"
|
|
112
112
|
},
|
|
113
113
|
"devDependencies": {
|
|
114
114
|
"@types/invariant": "^2.2.2",
|
package/src/api/api.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { log } from "@ledgerhq/logs";
|
|
2
|
-
import { AxiosRequestConfig, AxiosResponse } from "axios";
|
|
3
2
|
|
|
4
|
-
import network from "@ledgerhq/live-network
|
|
3
|
+
import network from "@ledgerhq/live-network";
|
|
5
4
|
import { makeLRUCache } from "@ledgerhq/live-network/cache";
|
|
6
5
|
import { getEnv } from "@ledgerhq/live-env";
|
|
7
6
|
|
|
@@ -19,62 +18,80 @@ import {
|
|
|
19
18
|
ERC20BalanceResponse,
|
|
20
19
|
} from "../types";
|
|
21
20
|
import { FilecoinFeeEstimationFailed } from "../errors";
|
|
21
|
+
import { LiveNetworkRequest } from "@ledgerhq/live-network/network";
|
|
22
22
|
|
|
23
|
-
const
|
|
23
|
+
const txsPerPageLimit = 1000;
|
|
24
|
+
const currentVersion = "/v2";
|
|
25
|
+
const fromHeightQueryParam = "from_height";
|
|
26
|
+
|
|
27
|
+
const getFilecoinURL = (version: string = currentVersion, path?: string): string => {
|
|
24
28
|
const baseUrl = getEnv("API_FILECOIN_ENDPOINT");
|
|
25
29
|
if (!baseUrl) throw new Error("API base URL not available");
|
|
26
30
|
|
|
27
|
-
return `${baseUrl}${path ? path : ""}`;
|
|
31
|
+
return `${baseUrl}${version ? version : ""}${path ? path : ""}`;
|
|
28
32
|
};
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
type FetchProps = {
|
|
35
|
+
version?: string;
|
|
36
|
+
};
|
|
37
|
+
const fetch = async <T>(path: string, { version }: FetchProps) => {
|
|
38
|
+
const url = getFilecoinURL(version, path);
|
|
32
39
|
|
|
33
40
|
// We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
|
|
34
|
-
const opts:
|
|
41
|
+
const opts: LiveNetworkRequest<undefined> = {
|
|
35
42
|
method: "GET",
|
|
36
43
|
url,
|
|
37
44
|
};
|
|
38
45
|
|
|
39
|
-
const rawResponse = await network(opts);
|
|
46
|
+
const rawResponse = await network<T>(opts);
|
|
40
47
|
|
|
41
48
|
// We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
|
|
42
|
-
const { data } = rawResponse
|
|
49
|
+
const { data } = rawResponse;
|
|
43
50
|
|
|
44
51
|
log("http", url);
|
|
45
52
|
return data;
|
|
46
53
|
};
|
|
47
54
|
|
|
48
|
-
|
|
49
|
-
|
|
55
|
+
type sendDataType = EstimatedFeesRequest | BroadcastTransactionRequest;
|
|
56
|
+
type sendProps = {
|
|
57
|
+
version?: string;
|
|
58
|
+
data: sendDataType;
|
|
59
|
+
};
|
|
60
|
+
const send = async <T>(path: string, { version, data }: sendProps): Promise<T> => {
|
|
61
|
+
const url = getFilecoinURL(version, path);
|
|
50
62
|
|
|
51
|
-
const opts:
|
|
63
|
+
const opts: LiveNetworkRequest<string> = {
|
|
52
64
|
method: "POST",
|
|
53
65
|
url,
|
|
54
66
|
data: JSON.stringify(data),
|
|
55
67
|
headers: { "Content-Type": "application/json" },
|
|
56
68
|
};
|
|
57
69
|
|
|
58
|
-
const rawResponse = await network(opts);
|
|
70
|
+
const rawResponse = await network<T>(opts);
|
|
59
71
|
|
|
60
72
|
// We force data to this way as network func is not using generics. Changing that func will generate errors in other implementations
|
|
61
|
-
const { data: responseData } = rawResponse
|
|
73
|
+
const { data: responseData } = rawResponse;
|
|
62
74
|
|
|
63
75
|
log("http", url);
|
|
64
76
|
return responseData;
|
|
65
77
|
};
|
|
66
78
|
|
|
67
79
|
export const fetchBalances = async (addr: string): Promise<BalanceResponse> => {
|
|
68
|
-
const data = await fetch<BalanceResponse>(`/addresses/${addr}/balance
|
|
80
|
+
const data = await fetch<BalanceResponse>(`/addresses/${addr}/balance`, {
|
|
81
|
+
version: currentVersion,
|
|
82
|
+
});
|
|
69
83
|
return data; // TODO Validate if the response fits this interface
|
|
70
84
|
};
|
|
71
85
|
|
|
72
86
|
export const fetchEstimatedFees = makeLRUCache(
|
|
73
87
|
async (request: EstimatedFeesRequest): Promise<EstimatedFeesResponse> => {
|
|
74
88
|
try {
|
|
75
|
-
const data = await send<EstimatedFeesResponse>(`/fees/estimate`,
|
|
89
|
+
const data = await send<EstimatedFeesResponse>(`/fees/estimate`, {
|
|
90
|
+
version: currentVersion,
|
|
91
|
+
data: request,
|
|
92
|
+
});
|
|
76
93
|
return data; // TODO Validate if the response fits this interface
|
|
77
|
-
} catch (e
|
|
94
|
+
} catch (e) {
|
|
78
95
|
log("error", "filecoin fetchEstimatedFees", e);
|
|
79
96
|
throw new FilecoinFeeEstimationFailed();
|
|
80
97
|
}
|
|
@@ -86,19 +103,53 @@ export const fetchEstimatedFees = makeLRUCache(
|
|
|
86
103
|
);
|
|
87
104
|
|
|
88
105
|
export const fetchBlockHeight = async (): Promise<NetworkStatusResponse> => {
|
|
89
|
-
const data = await fetch<NetworkStatusResponse>("/network/status"
|
|
90
|
-
|
|
106
|
+
const data = await fetch<NetworkStatusResponse>("/network/status", {
|
|
107
|
+
version: currentVersion,
|
|
108
|
+
});
|
|
109
|
+
return data; // TODO Validate if the response fits this interface
|
|
91
110
|
};
|
|
92
111
|
|
|
93
|
-
export const fetchTxs = async (
|
|
94
|
-
|
|
95
|
-
|
|
112
|
+
export const fetchTxs = async (
|
|
113
|
+
addr: string,
|
|
114
|
+
lastHeight: number,
|
|
115
|
+
offset: number = 0,
|
|
116
|
+
limit: number = 0,
|
|
117
|
+
): Promise<TransactionsResponse> => {
|
|
118
|
+
const response = await fetch<TransactionsResponse>(
|
|
119
|
+
`/addresses/${addr}/transactions?${fromHeightQueryParam}=${lastHeight}&offset=${offset}&limit=${limit}`,
|
|
120
|
+
{
|
|
121
|
+
version: currentVersion,
|
|
122
|
+
},
|
|
123
|
+
);
|
|
124
|
+
return response; // TODO Validate if the response fits this interface
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
export const fetchTxsWithPages = async (
|
|
128
|
+
addr: string,
|
|
129
|
+
lastHeight: number,
|
|
130
|
+
): Promise<TransactionResponse[]> => {
|
|
131
|
+
let result: TransactionResponse[] = [];
|
|
132
|
+
let offset = 0;
|
|
133
|
+
let txsLen = txsPerPageLimit;
|
|
134
|
+
|
|
135
|
+
while (txsLen === txsPerPageLimit) {
|
|
136
|
+
const { txs } = await fetchTxs(addr, lastHeight, offset, txsPerPageLimit);
|
|
137
|
+
result = result.concat(txs);
|
|
138
|
+
|
|
139
|
+
txsLen = txs.length;
|
|
140
|
+
offset += txsLen;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return result;
|
|
96
144
|
};
|
|
97
145
|
|
|
98
146
|
export const broadcastTx = async (
|
|
99
147
|
message: BroadcastTransactionRequest,
|
|
100
148
|
): Promise<BroadcastTransactionResponse> => {
|
|
101
|
-
const response = await send<BroadcastTransactionResponse>(`/transaction/broadcast`,
|
|
149
|
+
const response = await send<BroadcastTransactionResponse>(`/transaction/broadcast`, {
|
|
150
|
+
version: currentVersion,
|
|
151
|
+
data: message,
|
|
152
|
+
});
|
|
102
153
|
return response; // TODO Validate if the response fits this interface
|
|
103
154
|
};
|
|
104
155
|
|
|
@@ -108,6 +159,9 @@ export const fetchERC20TokenBalance = async (
|
|
|
108
159
|
): Promise<string> => {
|
|
109
160
|
const res = await fetch<ERC20BalanceResponse>(
|
|
110
161
|
`/contract/${contractAddr}/address/${ethAddr}/balance/erc20`,
|
|
162
|
+
{
|
|
163
|
+
version: currentVersion,
|
|
164
|
+
},
|
|
111
165
|
);
|
|
112
166
|
|
|
113
167
|
if (res.data.length) {
|
|
@@ -117,9 +171,36 @@ export const fetchERC20TokenBalance = async (
|
|
|
117
171
|
return "0";
|
|
118
172
|
};
|
|
119
173
|
|
|
120
|
-
export const fetchERC20Transactions = async (
|
|
174
|
+
export const fetchERC20Transactions = async (
|
|
175
|
+
ethAddr: string,
|
|
176
|
+
lastHeight: number,
|
|
177
|
+
offset: number = 0,
|
|
178
|
+
limit: number = 0,
|
|
179
|
+
): Promise<FetchERC20TransactionsResponse> => {
|
|
121
180
|
const res = await fetch<FetchERC20TransactionsResponse>(
|
|
122
|
-
`/addresses/${ethAddr}/transactions/erc20`,
|
|
181
|
+
`/addresses/${ethAddr}/transactions/erc20?${fromHeightQueryParam}=${lastHeight}&offset=${offset}&limit=${limit}`,
|
|
182
|
+
{
|
|
183
|
+
version: currentVersion,
|
|
184
|
+
},
|
|
123
185
|
);
|
|
124
|
-
return res
|
|
186
|
+
return res;
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
export const fetchERC20TransactionsWithPages = async (
|
|
190
|
+
addr: string,
|
|
191
|
+
lastHeight: number,
|
|
192
|
+
): Promise<ERC20Transfer[]> => {
|
|
193
|
+
let result: ERC20Transfer[] = [];
|
|
194
|
+
let offset = 0;
|
|
195
|
+
let txsLen = txsPerPageLimit;
|
|
196
|
+
|
|
197
|
+
while (txsLen === txsPerPageLimit) {
|
|
198
|
+
const { txs } = await fetchERC20Transactions(addr, lastHeight, offset, txsPerPageLimit);
|
|
199
|
+
result = result.concat(txs);
|
|
200
|
+
|
|
201
|
+
txsLen = txs.length;
|
|
202
|
+
offset += txsLen;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return result.sort((a, b) => b.timestamp - a.timestamp);
|
|
125
206
|
};
|