@ledgerhq/live-common 21.19.7 → 21.20.0-nft.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.
Files changed (41) hide show
  1. package/lib/bridge/jsHelpers.d.ts +1 -1
  2. package/lib/bridge/jsHelpers.d.ts.map +1 -1
  3. package/lib/bridge/jsHelpers.js +7 -8
  4. package/lib/bridge/jsHelpers.js.map +1 -1
  5. package/lib/families/ethereum/modules/erc20.d.ts.map +1 -1
  6. package/lib/families/ethereum/modules/erc20.js +0 -12
  7. package/lib/families/ethereum/modules/erc20.js.map +1 -1
  8. package/lib/families/ethereum/modules/erc721.d.ts.map +1 -1
  9. package/lib/families/ethereum/modules/erc721.js +0 -1
  10. package/lib/families/ethereum/modules/erc721.js.map +1 -1
  11. package/lib/families/ethereum/nft.integration.test.d.ts +2 -0
  12. package/lib/families/ethereum/nft.integration.test.d.ts.map +1 -0
  13. package/lib/families/ethereum/nft.integration.test.js +264 -0
  14. package/lib/families/ethereum/nft.integration.test.js.map +1 -0
  15. package/lib/families/ethereum/nft.merging.unit.test.d.ts +2 -0
  16. package/lib/families/ethereum/nft.merging.unit.test.d.ts.map +1 -0
  17. package/lib/families/ethereum/nft.merging.unit.test.js +72 -0
  18. package/lib/families/ethereum/nft.merging.unit.test.js.map +1 -0
  19. package/lib/families/ethereum/synchronisation.js +4 -4
  20. package/lib/families/ethereum/synchronisation.js.map +1 -1
  21. package/lib/nft/NftMetadataProvider/index.d.ts +3 -2
  22. package/lib/nft/NftMetadataProvider/index.d.ts.map +1 -1
  23. package/lib/nft/NftMetadataProvider/index.js +9 -2
  24. package/lib/nft/NftMetadataProvider/index.js.map +1 -1
  25. package/lib/operation.d.ts.map +1 -1
  26. package/lib/operation.js +0 -2
  27. package/lib/operation.js.map +1 -1
  28. package/package.json +1 -1
  29. package/src/bridge/jsHelpers.ts +9 -15
  30. package/src/families/ethereum/modules/erc20.ts +0 -4
  31. package/src/families/ethereum/modules/erc721.ts +0 -4
  32. package/src/families/ethereum/nft.integration.test.ts +168 -0
  33. package/src/families/ethereum/nft.merging.unit.test.ts +78 -0
  34. package/src/families/ethereum/synchronisation.ts +4 -4
  35. package/src/nft/NftMetadataProvider/index.tsx +12 -3
  36. package/src/operation.ts +0 -2
  37. package/lib/families/ethereum/nft.test.d.ts +0 -2
  38. package/lib/families/ethereum/nft.test.d.ts.map +0 -1
  39. package/lib/families/ethereum/nft.test.js +0 -360
  40. package/lib/families/ethereum/nft.test.js.map +0 -1
  41. package/src/families/ethereum/nft.test.ts +0 -263
@@ -1 +0,0 @@
1
- {"version":3,"file":"nft.test.d.ts","sourceRoot":"","sources":["../../../src/families/ethereum/nft.test.ts"],"names":[],"mappings":"AAAA,OAAO,oCAAoC,CAAC"}
@@ -1,360 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
- return new (P || (P = Promise))(function (resolve, reject) {
16
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
- step((generator = generator.apply(thisArg, _arguments || [])).next());
20
- });
21
- };
22
- var __generator = (this && this.__generator) || function (thisArg, body) {
23
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
- function verb(n) { return function (v) { return step([n, v]); }; }
26
- function step(op) {
27
- if (f) throw new TypeError("Generator is already executing.");
28
- while (_) try {
29
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
- if (y = 0, t) op = [op[0] & 2, t.value];
31
- switch (op[0]) {
32
- case 0: case 1: t = op; break;
33
- case 4: _.label++; return { value: op[1], done: false };
34
- case 5: _.label++; y = op[1]; op = [0]; continue;
35
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
- default:
37
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
- if (t[2]) _.ops.pop();
42
- _.trys.pop(); continue;
43
- }
44
- op = body.call(thisArg, _);
45
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
- }
48
- };
49
- var __importDefault = (this && this.__importDefault) || function (mod) {
50
- return (mod && mod.__esModule) ? mod : { "default": mod };
51
- };
52
- exports.__esModule = true;
53
- require("../../__tests__/test-helpers/setup");
54
- var bignumber_js_1 = __importDefault(require("bignumber.js"));
55
- var operators_1 = require("rxjs/operators");
56
- var account_1 = require("../../account");
57
- var bridge_1 = require("../../bridge");
58
- var cache_1 = require("../../bridge/cache");
59
- var reconciliation_1 = require("../../reconciliation");
60
- var env_1 = require("../../env");
61
- var jsHelpers_1 = require("../../bridge/jsHelpers");
62
- var nft_1 = require("../../nft");
63
- jest.setTimeout(120000);
64
- var gaspardAccount = {
65
- id: "js:1:ethereum:0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a:",
66
- seedIdentifier: "0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a",
67
- name: "G4sp4rd",
68
- derivationMode: "",
69
- index: 0,
70
- freshAddress: "0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a",
71
- freshAddressPath: "44'/60'/0'/0/0",
72
- freshAddresses: [],
73
- pendingOperations: [],
74
- operations: [],
75
- currencyId: "ethereum",
76
- unitMagnitude: 18,
77
- balance: "",
78
- blockHeight: 0,
79
- lastSyncDate: "",
80
- xpub: ""
81
- };
82
- /*
83
- const gaspardPolygonAccount: AccountRaw = {
84
- id: "js:1:polygon:0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a:",
85
- seedIdentifier: "0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a",
86
- name: "G4sp4rd",
87
- derivationMode: "",
88
- index: 0,
89
- freshAddress: "0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a",
90
- freshAddressPath: "44'/60'/0'/0/0",
91
- freshAddresses: [],
92
- pendingOperations: [],
93
- operations: [],
94
- currencyId: "polygon",
95
- unitMagnitude: 18,
96
- balance: "",
97
- blockHeight: 0,
98
- lastSyncDate: "",
99
- xpub: "",
100
- };
101
- */
102
- var gaspardBscAccount = {
103
- id: "js:1:bsc:0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a:",
104
- seedIdentifier: "0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a",
105
- name: "G4sp4rd",
106
- derivationMode: "",
107
- index: 0,
108
- freshAddress: "0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a",
109
- freshAddressPath: "44'/60'/0'/0/0",
110
- freshAddresses: [],
111
- pendingOperations: [],
112
- operations: [],
113
- currencyId: "bsc",
114
- unitMagnitude: 18,
115
- balance: "",
116
- blockHeight: 0,
117
- lastSyncDate: "",
118
- xpub: ""
119
- };
120
- function sync(account, withNFT) {
121
- if (withNFT === void 0) { withNFT = true; }
122
- return __awaiter(this, void 0, void 0, function () {
123
- var bridge, blacklistedTokenIds, r;
124
- return __generator(this, function (_a) {
125
- switch (_a.label) {
126
- case 0:
127
- bridge = (0, bridge_1.getAccountBridge)(account);
128
- blacklistedTokenIds = [];
129
- (0, env_1.setEnv)("NFT", withNFT);
130
- return [4 /*yield*/, bridge
131
- .sync(account, {
132
- paginationConfig: {},
133
- blacklistedTokenIds: blacklistedTokenIds
134
- })
135
- .pipe((0, operators_1.reduce)(function (a, f) { return f(a); }, account))
136
- .toPromise()];
137
- case 1:
138
- r = _a.sent();
139
- (0, env_1.setEnv)("NFT", false);
140
- return [2 /*return*/, r];
141
- }
142
- });
143
- });
144
- }
145
- var localCache = {};
146
- var cache = (0, cache_1.makeBridgeCacheSystem)({
147
- saveData: function (c, d) {
148
- localCache[c.id] = d;
149
- return Promise.resolve();
150
- },
151
- getData: function (c) {
152
- return Promise.resolve(localCache[c.id]);
153
- }
154
- });
155
- describe("nft merging", function () {
156
- var makeNFT = function (tokenId, contract, amount) { return ({
157
- id: (0, nft_1.encodeNftId)("test", contract, tokenId),
158
- tokenId: tokenId,
159
- amount: new bignumber_js_1["default"](amount),
160
- collection: {
161
- contract: contract,
162
- standard: "erc721"
163
- }
164
- }); };
165
- var oldNfts = [
166
- makeNFT("1", "contract1", 10),
167
- makeNFT("2", "contract1", 1),
168
- makeNFT("3", "contract2", 6),
169
- ];
170
- test("should remove first NFT and return new array with same refs", function () {
171
- var nfts = [makeNFT("2", "contract1", 1), makeNFT("3", "contract2", 6)];
172
- var newNfts = (0, jsHelpers_1.mergeNfts)(oldNfts, nfts);
173
- expect(newNfts.map(account_1.toNFTRaw)).toEqual(nfts.map(account_1.toNFTRaw));
174
- expect(oldNfts[1]).toBe(newNfts[0]);
175
- expect(oldNfts[2]).toBe(newNfts[1]);
176
- });
177
- test("should remove any NFT and return new array with same refs", function () {
178
- var nfts = [makeNFT("1", "contract1", 10), makeNFT("3", "contract2", 6)];
179
- var newNfts = (0, jsHelpers_1.mergeNfts)(oldNfts, nfts);
180
- expect(newNfts.map(account_1.toNFTRaw)).toEqual(nfts.map(account_1.toNFTRaw));
181
- expect(oldNfts[0]).toBe(newNfts[0]);
182
- expect(oldNfts[2]).toBe(newNfts[1]);
183
- });
184
- test("should change NFT amount and return new array with new ref", function () {
185
- var nfts = [
186
- makeNFT("1", "contract1", 10),
187
- makeNFT("2", "contract1", 5),
188
- makeNFT("3", "contract2", 6),
189
- ];
190
- var addToNft1 = (0, jsHelpers_1.mergeNfts)(oldNfts, nfts);
191
- expect(addToNft1.map(account_1.toNFTRaw)).toEqual(nfts.map(account_1.toNFTRaw));
192
- expect(oldNfts[0]).toBe(addToNft1[0]);
193
- expect(oldNfts[1]).not.toBe(addToNft1[1]);
194
- expect(oldNfts[2]).toBe(addToNft1[2]);
195
- });
196
- test("should add NFT and return new array with new ref", function () {
197
- var nfts = [
198
- makeNFT("1", "contract1", 10),
199
- makeNFT("2", "contract1", 1),
200
- makeNFT("3", "contract2", 6),
201
- makeNFT("4", "contract2", 4),
202
- ];
203
- var addToNft1 = (0, jsHelpers_1.mergeNfts)(oldNfts, nfts);
204
- expect(addToNft1.map(account_1.toNFTRaw)).toEqual([
205
- makeNFT("4", "contract2", 4),
206
- makeNFT("1", "contract1", 10),
207
- makeNFT("2", "contract1", 1),
208
- makeNFT("3", "contract2", 6),
209
- ].map(account_1.toNFTRaw));
210
- expect(oldNfts[0]).toBe(addToNft1[1]);
211
- expect(oldNfts[1]).toBe(addToNft1[2]);
212
- expect(oldNfts[2]).toBe(addToNft1[3]);
213
- expect(addToNft1[0]).toBe(nfts[3]);
214
- });
215
- });
216
- describe("gaspard NFT on ethereum", function () {
217
- var account = (0, account_1.fromAccountRaw)(gaspardAccount);
218
- test("first sync & have nfts", function () { return __awaiter(void 0, void 0, void 0, function () {
219
- var _a;
220
- return __generator(this, function (_b) {
221
- switch (_b.label) {
222
- case 0: return [4 /*yield*/, cache.prepareCurrency(account.currency)];
223
- case 1:
224
- _b.sent();
225
- return [4 /*yield*/, sync(account)];
226
- case 2:
227
- account = _b.sent();
228
- expect(((_a = account.nfts) === null || _a === void 0 ? void 0 : _a.length) || 0).not.toBe(0);
229
- return [2 /*return*/];
230
- }
231
- });
232
- }); });
233
- test("remove half NFTs will restore them with operations still here", function () { return __awaiter(void 0, void 0, void 0, function () {
234
- var copy, resync;
235
- var _a, _b;
236
- return __generator(this, function (_c) {
237
- switch (_c.label) {
238
- case 0:
239
- copy = __assign(__assign({}, account), { nfts: (_a = account.nfts) === null || _a === void 0 ? void 0 : _a.slice(Math.ceil((((_b = account.nfts) === null || _b === void 0 ? void 0 : _b.length) || 0) / 2)) });
240
- return [4 /*yield*/, sync(copy)];
241
- case 1:
242
- resync = _c.sent();
243
- expect(resync.nfts).toEqual(account.nfts);
244
- return [2 /*return*/];
245
- }
246
- });
247
- }); });
248
- test("remove half NFTs will restore them with missing operations too", function () { return __awaiter(void 0, void 0, void 0, function () {
249
- var copy, resync;
250
- var _a, _b;
251
- return __generator(this, function (_c) {
252
- switch (_c.label) {
253
- case 0:
254
- copy = __assign(__assign({}, account), { operations: [], nfts: (_a = account.nfts) === null || _a === void 0 ? void 0 : _a.slice(Math.ceil((((_b = account.nfts) === null || _b === void 0 ? void 0 : _b.length) || 0) / 2)) });
255
- return [4 /*yield*/, sync(copy)];
256
- case 1:
257
- resync = _c.sent();
258
- expect(resync.nfts).toEqual(account.nfts);
259
- return [2 /*return*/];
260
- }
261
- });
262
- }); });
263
- test("remove half NFTs will restore them with half operations", function () { return __awaiter(void 0, void 0, void 0, function () {
264
- var halfOps, copy, resync;
265
- var _a, _b;
266
- return __generator(this, function (_c) {
267
- switch (_c.label) {
268
- case 0:
269
- halfOps = Math.ceil(account.operations.length / 2);
270
- copy = __assign(__assign({}, account), { operations: account.operations.slice(halfOps), nfts: (_a = account.nfts) === null || _a === void 0 ? void 0 : _a.slice(Math.ceil((((_b = account.nfts) === null || _b === void 0 ? void 0 : _b.length) || 0) / 2)) });
271
- return [4 /*yield*/, sync(copy)];
272
- case 1:
273
- resync = _c.sent();
274
- expect(resync.nfts).toEqual(account.nfts);
275
- return [2 /*return*/];
276
- }
277
- });
278
- }); });
279
- test("patchAccount restore new NFTs correctly", function () { return __awaiter(void 0, void 0, void 0, function () {
280
- var copy, newAccount;
281
- var _a, _b;
282
- return __generator(this, function (_c) {
283
- copy = __assign(__assign({}, account), { operations: [], nfts: (_a = account.nfts) === null || _a === void 0 ? void 0 : _a.slice(Math.ceil((((_b = account.nfts) === null || _b === void 0 ? void 0 : _b.length) || 0) / 2)) });
284
- newAccount = (0, reconciliation_1.patchAccount)(copy, (0, account_1.toAccountRaw)(account));
285
- expect(newAccount.nfts).toEqual(account.nfts);
286
- return [2 /*return*/];
287
- });
288
- }); });
289
- test("start account with .nfts and disable the NFT flag should make it disappear", function () { return __awaiter(void 0, void 0, void 0, function () {
290
- var resync;
291
- return __generator(this, function (_a) {
292
- switch (_a.label) {
293
- case 0:
294
- expect(account.nfts).not.toBeFalsy();
295
- return [4 /*yield*/, sync(account, false)];
296
- case 1:
297
- resync = _a.sent();
298
- expect(resync.nfts).toBeFalsy();
299
- return [2 /*return*/];
300
- }
301
- });
302
- }); });
303
- test("start account without .nfts and enable the NFT flag should make it appear", function () { return __awaiter(void 0, void 0, void 0, function () {
304
- var first, second;
305
- return __generator(this, function (_a) {
306
- switch (_a.label) {
307
- case 0: return [4 /*yield*/, sync(account, false)];
308
- case 1:
309
- first = _a.sent();
310
- expect(first.nfts).toBeFalsy();
311
- return [4 /*yield*/, sync(first, true)];
312
- case 2:
313
- second = _a.sent();
314
- expect(second.nfts).not.toBeFalsy();
315
- expect(second.nfts).toEqual(account.nfts);
316
- return [2 /*return*/];
317
- }
318
- });
319
- }); });
320
- test("no nft should be on quantity 0 or negative", function () { return __awaiter(void 0, void 0, void 0, function () {
321
- var _a;
322
- return __generator(this, function (_b) {
323
- expect((_a = account.nfts) === null || _a === void 0 ? void 0 : _a.find(function (n) { return !n.amount.gt(0); })).toEqual(undefined);
324
- return [2 /*return*/];
325
- });
326
- }); });
327
- });
328
- /*
329
- // this is never ending here... have to disable this test... (backend issue)
330
- describe("gaspard NFT on polygon", () => {
331
- let account = fromAccountRaw(gaspardPolygonAccount);
332
- test("first sync", async () => {
333
- await cache.prepareCurrency(account.currency);
334
- account = await sync(account);
335
- });
336
- test(".nfts shouldn't be visible", () => {
337
- expect(account.nfts).toBeFalsy();
338
- });
339
- });
340
- */
341
- describe("gaspard NFT on bsc", function () {
342
- var account = (0, account_1.fromAccountRaw)(gaspardBscAccount);
343
- test("first sync", function () { return __awaiter(void 0, void 0, void 0, function () {
344
- return __generator(this, function (_a) {
345
- switch (_a.label) {
346
- case 0: return [4 /*yield*/, cache.prepareCurrency(account.currency)];
347
- case 1:
348
- _a.sent();
349
- return [4 /*yield*/, sync(account)];
350
- case 2:
351
- account = _a.sent();
352
- return [2 /*return*/];
353
- }
354
- });
355
- }); });
356
- test(".nfts shouldn't be visible", function () {
357
- expect(account.nfts).toBeFalsy();
358
- });
359
- });
360
- //# sourceMappingURL=nft.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nft.test.js","sourceRoot":"","sources":["../../../src/families/ethereum/nft.test.ts"],"names":[],"mappings":"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"}
@@ -1,263 +0,0 @@
1
- import "../../__tests__/test-helpers/setup";
2
- import BigNumber from "bignumber.js";
3
- import { reduce } from "rxjs/operators";
4
- import { fromAccountRaw, toAccountRaw, toNFTRaw } from "../../account";
5
- import type { Account, AccountRaw, NFT } from "../../types";
6
- import { getAccountBridge } from "../../bridge";
7
- import { makeBridgeCacheSystem } from "../../bridge/cache";
8
- import { patchAccount } from "../../reconciliation";
9
- import { setEnv } from "../../env";
10
- import { mergeNfts } from "../../bridge/jsHelpers";
11
- import { encodeNftId } from "../../nft";
12
-
13
- jest.setTimeout(120000);
14
-
15
- const gaspardAccount: AccountRaw = {
16
- id: "js:1:ethereum:0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a:",
17
- seedIdentifier: "0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a",
18
- name: "G4sp4rd",
19
- derivationMode: "",
20
- index: 0,
21
- freshAddress: "0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a",
22
- freshAddressPath: "44'/60'/0'/0/0",
23
- freshAddresses: [],
24
- pendingOperations: [],
25
- operations: [],
26
- currencyId: "ethereum",
27
- unitMagnitude: 18,
28
- balance: "",
29
- blockHeight: 0,
30
- lastSyncDate: "",
31
- xpub: "",
32
- };
33
-
34
- /*
35
- const gaspardPolygonAccount: AccountRaw = {
36
- id: "js:1:polygon:0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a:",
37
- seedIdentifier: "0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a",
38
- name: "G4sp4rd",
39
- derivationMode: "",
40
- index: 0,
41
- freshAddress: "0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a",
42
- freshAddressPath: "44'/60'/0'/0/0",
43
- freshAddresses: [],
44
- pendingOperations: [],
45
- operations: [],
46
- currencyId: "polygon",
47
- unitMagnitude: 18,
48
- balance: "",
49
- blockHeight: 0,
50
- lastSyncDate: "",
51
- xpub: "",
52
- };
53
- */
54
-
55
- const gaspardBscAccount: AccountRaw = {
56
- id: "js:1:bsc:0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a:",
57
- seedIdentifier: "0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a",
58
- name: "G4sp4rd",
59
- derivationMode: "",
60
- index: 0,
61
- freshAddress: "0xb98d10d9f6d07ba283bfd21b2dfec050f9ae282a",
62
- freshAddressPath: "44'/60'/0'/0/0",
63
- freshAddresses: [],
64
- pendingOperations: [],
65
- operations: [],
66
- currencyId: "bsc",
67
- unitMagnitude: 18,
68
- balance: "",
69
- blockHeight: 0,
70
- lastSyncDate: "",
71
- xpub: "",
72
- };
73
-
74
- async function sync(account, withNFT = true) {
75
- const bridge = getAccountBridge(account);
76
- const blacklistedTokenIds = [];
77
- setEnv("NFT", withNFT);
78
- const r = await bridge
79
- .sync(account, {
80
- paginationConfig: {},
81
- blacklistedTokenIds,
82
- })
83
- .pipe(reduce((a, f: (arg0: Account) => Account) => f(a), account))
84
- .toPromise();
85
- setEnv("NFT", false);
86
- return r;
87
- }
88
-
89
- const localCache = {};
90
- const cache = makeBridgeCacheSystem({
91
- saveData(c, d) {
92
- localCache[c.id] = d;
93
- return Promise.resolve();
94
- },
95
- getData(c) {
96
- return Promise.resolve(localCache[c.id]);
97
- },
98
- });
99
-
100
- describe("nft merging", () => {
101
- const makeNFT = (tokenId: string, contract: string, amount: number): NFT => ({
102
- id: encodeNftId("test", contract, tokenId),
103
- tokenId,
104
- amount: new BigNumber(amount),
105
- collection: {
106
- contract,
107
- standard: "erc721",
108
- },
109
- });
110
- const oldNfts = [
111
- makeNFT("1", "contract1", 10),
112
- makeNFT("2", "contract1", 1),
113
- makeNFT("3", "contract2", 6),
114
- ];
115
-
116
- test("should remove first NFT and return new array with same refs", () => {
117
- const nfts = [makeNFT("2", "contract1", 1), makeNFT("3", "contract2", 6)];
118
- const newNfts = mergeNfts(oldNfts, nfts);
119
-
120
- expect(newNfts.map(toNFTRaw)).toEqual(nfts.map(toNFTRaw));
121
- expect(oldNfts[1]).toBe(newNfts[0]);
122
- expect(oldNfts[2]).toBe(newNfts[1]);
123
- });
124
-
125
- test("should remove any NFT and return new array with same refs", () => {
126
- const nfts = [makeNFT("1", "contract1", 10), makeNFT("3", "contract2", 6)];
127
- const newNfts = mergeNfts(oldNfts, nfts);
128
-
129
- expect(newNfts.map(toNFTRaw)).toEqual(nfts.map(toNFTRaw));
130
- expect(oldNfts[0]).toBe(newNfts[0]);
131
- expect(oldNfts[2]).toBe(newNfts[1]);
132
- });
133
-
134
- test("should change NFT amount and return new array with new ref", () => {
135
- const nfts = [
136
- makeNFT("1", "contract1", 10),
137
- makeNFT("2", "contract1", 5),
138
- makeNFT("3", "contract2", 6),
139
- ];
140
- const addToNft1 = mergeNfts(oldNfts, nfts);
141
-
142
- expect(addToNft1.map(toNFTRaw)).toEqual(nfts.map(toNFTRaw));
143
- expect(oldNfts[0]).toBe(addToNft1[0]);
144
- expect(oldNfts[1]).not.toBe(addToNft1[1]);
145
- expect(oldNfts[2]).toBe(addToNft1[2]);
146
- });
147
-
148
- test("should add NFT and return new array with new ref", () => {
149
- const nfts = [
150
- makeNFT("1", "contract1", 10),
151
- makeNFT("2", "contract1", 1),
152
- makeNFT("3", "contract2", 6),
153
- makeNFT("4", "contract2", 4),
154
- ];
155
- const addToNft1 = mergeNfts(oldNfts, nfts);
156
-
157
- expect(addToNft1.map(toNFTRaw)).toEqual(
158
- [
159
- makeNFT("4", "contract2", 4),
160
- makeNFT("1", "contract1", 10),
161
- makeNFT("2", "contract1", 1),
162
- makeNFT("3", "contract2", 6),
163
- ].map(toNFTRaw)
164
- );
165
- expect(oldNfts[0]).toBe(addToNft1[1]);
166
- expect(oldNfts[1]).toBe(addToNft1[2]);
167
- expect(oldNfts[2]).toBe(addToNft1[3]);
168
- expect(addToNft1[0]).toBe(nfts[3]);
169
- });
170
- });
171
-
172
- describe("gaspard NFT on ethereum", () => {
173
- let account = fromAccountRaw(gaspardAccount);
174
-
175
- test("first sync & have nfts", async () => {
176
- await cache.prepareCurrency(account.currency);
177
- account = await sync(account);
178
- expect(account.nfts?.length || 0).not.toBe(0);
179
- });
180
-
181
- test("remove half NFTs will restore them with operations still here", async () => {
182
- const copy = {
183
- ...account,
184
- nfts: account.nfts?.slice(Math.ceil((account.nfts?.length || 0) / 2)),
185
- };
186
- const resync = await sync(copy);
187
- expect(resync.nfts).toEqual(account.nfts);
188
- });
189
-
190
- test("remove half NFTs will restore them with missing operations too", async () => {
191
- const copy = {
192
- ...account,
193
- operations: [],
194
- nfts: account.nfts?.slice(Math.ceil((account.nfts?.length || 0) / 2)),
195
- };
196
- const resync = await sync(copy);
197
- expect(resync.nfts).toEqual(account.nfts);
198
- });
199
-
200
- test("remove half NFTs will restore them with half operations", async () => {
201
- const halfOps = Math.ceil(account.operations.length / 2);
202
- const copy = {
203
- ...account,
204
- operations: account.operations.slice(halfOps),
205
- nfts: account.nfts?.slice(Math.ceil((account.nfts?.length || 0) / 2)),
206
- };
207
- const resync = await sync(copy);
208
- expect(resync.nfts).toEqual(account.nfts);
209
- });
210
-
211
- test("patchAccount restore new NFTs correctly", async () => {
212
- const copy = {
213
- ...account,
214
- operations: [],
215
- nfts: account.nfts?.slice(Math.ceil((account.nfts?.length || 0) / 2)),
216
- };
217
- const newAccount = patchAccount(copy, toAccountRaw(account));
218
- expect(newAccount.nfts).toEqual(account.nfts);
219
- });
220
-
221
- test("start account with .nfts and disable the NFT flag should make it disappear", async () => {
222
- expect(account.nfts).not.toBeFalsy();
223
- const resync = await sync(account, false);
224
- expect(resync.nfts).toBeFalsy();
225
- });
226
-
227
- test("start account without .nfts and enable the NFT flag should make it appear", async () => {
228
- const first = await sync(account, false);
229
- expect(first.nfts).toBeFalsy();
230
- const second = await sync(first, true);
231
- expect(second.nfts).not.toBeFalsy();
232
- expect(second.nfts).toEqual(account.nfts);
233
- });
234
-
235
- test("no nft should be on quantity 0 or negative", async () => {
236
- expect(account.nfts?.find((n) => !n.amount.gt(0))).toEqual(undefined);
237
- });
238
- });
239
-
240
- /*
241
- // this is never ending here... have to disable this test... (backend issue)
242
- describe("gaspard NFT on polygon", () => {
243
- let account = fromAccountRaw(gaspardPolygonAccount);
244
- test("first sync", async () => {
245
- await cache.prepareCurrency(account.currency);
246
- account = await sync(account);
247
- });
248
- test(".nfts shouldn't be visible", () => {
249
- expect(account.nfts).toBeFalsy();
250
- });
251
- });
252
- */
253
-
254
- describe("gaspard NFT on bsc", () => {
255
- let account = fromAccountRaw(gaspardBscAccount);
256
- test("first sync", async () => {
257
- await cache.prepareCurrency(account.currency);
258
- account = await sync(account);
259
- });
260
- test(".nfts shouldn't be visible", () => {
261
- expect(account.nfts).toBeFalsy();
262
- });
263
- });