@ledgerhq/live-common 21.17.2 → 21.19.1

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 (119) hide show
  1. package/lib/__tests__/test-helpers/setup.js +1 -0
  2. package/lib/__tests__/test-helpers/setup.js.map +1 -1
  3. package/lib/account/addAccounts.d.ts.map +1 -1
  4. package/lib/account/addAccounts.js +3 -2
  5. package/lib/account/addAccounts.js.map +1 -1
  6. package/lib/account/helpers.d.ts.map +1 -1
  7. package/lib/account/helpers.js +1 -0
  8. package/lib/account/helpers.js.map +1 -1
  9. package/lib/api/Ethereum.d.ts.map +1 -1
  10. package/lib/api/Ethereum.js +2 -1
  11. package/lib/api/Ethereum.js.map +1 -1
  12. package/lib/api/explorerConfig/index.d.ts.map +1 -1
  13. package/lib/api/explorerConfig/index.js +0 -4
  14. package/lib/api/explorerConfig/index.js.map +1 -1
  15. package/lib/bridge/jsHelpers.d.ts.map +1 -1
  16. package/lib/bridge/jsHelpers.js +9 -8
  17. package/lib/bridge/jsHelpers.js.map +1 -1
  18. package/lib/env.d.ts +10 -5
  19. package/lib/env.d.ts.map +1 -1
  20. package/lib/env.js +5 -0
  21. package/lib/env.js.map +1 -1
  22. package/lib/env.react.d.ts +1 -1
  23. package/lib/env.react.d.ts.map +1 -1
  24. package/lib/families/bitcoin/getAccountNetworkInfo.d.ts.map +1 -1
  25. package/lib/families/bitcoin/getAccountNetworkInfo.js +12 -2
  26. package/lib/families/bitcoin/getAccountNetworkInfo.js.map +1 -1
  27. package/lib/families/bitcoin/test-dataset.js +2 -2
  28. package/lib/families/bitcoin/test-dataset.js.map +1 -1
  29. package/lib/families/bitcoin/types.d.ts +1 -0
  30. package/lib/families/bitcoin/types.d.ts.map +1 -1
  31. package/lib/families/bitcoin/types.js.map +1 -1
  32. package/lib/families/bitcoin/wallet-btc/explorer/index.d.ts +1 -0
  33. package/lib/families/bitcoin/wallet-btc/explorer/index.d.ts.map +1 -1
  34. package/lib/families/bitcoin/wallet-btc/explorer/index.js +19 -0
  35. package/lib/families/bitcoin/wallet-btc/explorer/index.js.map +1 -1
  36. package/lib/families/bitcoin/wallet-btc/explorer/types.d.ts +1 -0
  37. package/lib/families/bitcoin/wallet-btc/explorer/types.d.ts.map +1 -1
  38. package/lib/families/ethereum/bridge/js.d.ts.map +1 -1
  39. package/lib/families/ethereum/bridge/js.js +3 -0
  40. package/lib/families/ethereum/bridge/js.js.map +1 -1
  41. package/lib/families/ethereum/cli-transaction.d.ts.map +1 -1
  42. package/lib/families/ethereum/cli-transaction.js +10 -0
  43. package/lib/families/ethereum/cli-transaction.js.map +1 -1
  44. package/lib/families/ethereum/modules/erc1155.d.ts +4 -0
  45. package/lib/families/ethereum/modules/erc1155.d.ts.map +1 -0
  46. package/lib/families/ethereum/modules/erc1155.js +129 -0
  47. package/lib/families/ethereum/modules/erc1155.js.map +1 -0
  48. package/lib/families/ethereum/modules/erc721.d.ts +6 -0
  49. package/lib/families/ethereum/modules/erc721.d.ts.map +1 -0
  50. package/lib/families/ethereum/modules/erc721.js +189 -0
  51. package/lib/families/ethereum/modules/erc721.js.map +1 -0
  52. package/lib/families/ethereum/modules/index.d.ts +8 -1
  53. package/lib/families/ethereum/modules/index.d.ts.map +1 -1
  54. package/lib/families/ethereum/modules/index.js +14 -2
  55. package/lib/families/ethereum/modules/index.js.map +1 -1
  56. package/lib/families/ethereum/nft.test.d.ts +2 -0
  57. package/lib/families/ethereum/nft.test.d.ts.map +1 -0
  58. package/lib/families/ethereum/nft.test.js +353 -0
  59. package/lib/families/ethereum/nft.test.js.map +1 -0
  60. package/lib/families/ethereum/signOperation.d.ts.map +1 -1
  61. package/lib/families/ethereum/signOperation.js +3 -12
  62. package/lib/families/ethereum/signOperation.js.map +1 -1
  63. package/lib/families/ethereum/synchronisation.d.ts.map +1 -1
  64. package/lib/families/ethereum/synchronisation.js +21 -38
  65. package/lib/families/ethereum/synchronisation.js.map +1 -1
  66. package/lib/families/ethereum/synchronisation.test.js.map +1 -1
  67. package/lib/families/ethereum/transaction.d.ts.map +1 -1
  68. package/lib/families/ethereum/transaction.js +25 -8
  69. package/lib/families/ethereum/transaction.js.map +1 -1
  70. package/lib/families/ethereum/types.d.ts +8 -0
  71. package/lib/families/ethereum/types.d.ts.map +1 -1
  72. package/lib/families/ethereum/types.js.map +1 -1
  73. package/lib/hw/uninstallApp.d.ts.map +1 -1
  74. package/lib/hw/uninstallApp.js +1 -1
  75. package/lib/hw/uninstallApp.js.map +1 -1
  76. package/lib/nft/helpers.js +1 -2
  77. package/lib/nft/helpers.js.map +1 -1
  78. package/lib/nft/index.d.ts +1 -0
  79. package/lib/nft/index.d.ts.map +1 -1
  80. package/lib/nft/index.js +1 -0
  81. package/lib/nft/index.js.map +1 -1
  82. package/lib/nft/support.d.ts +4 -0
  83. package/lib/nft/support.d.ts.map +1 -0
  84. package/lib/nft/support.js +16 -0
  85. package/lib/nft/support.js.map +1 -0
  86. package/package.json +4 -4
  87. package/src/.DS_Store +0 -0
  88. package/src/__tests__/.DS_Store +0 -0
  89. package/src/__tests__/__snapshots__/all.libcore.ts.snap +10 -49
  90. package/src/__tests__/test-helpers/setup.ts +1 -0
  91. package/src/account/addAccounts.ts +3 -2
  92. package/src/account/helpers.ts +1 -0
  93. package/src/api/Ethereum.ts +4 -4
  94. package/src/api/explorerConfig/index.ts +0 -4
  95. package/src/bridge/jsHelpers.ts +9 -8
  96. package/src/currencies/{.DS_Store → __snapshots__/.DS_Store} +0 -0
  97. package/src/env.ts +5 -0
  98. package/src/families/bitcoin/getAccountNetworkInfo.ts +8 -1
  99. package/src/families/bitcoin/test-dataset.ts +2 -2
  100. package/src/families/bitcoin/types.ts +1 -0
  101. package/src/families/bitcoin/wallet-btc/explorer/index.ts +7 -0
  102. package/src/families/bitcoin/wallet-btc/explorer/types.ts +1 -0
  103. package/src/families/ethereum/bridge/js.ts +8 -1
  104. package/src/families/ethereum/cli-transaction.ts +10 -0
  105. package/src/families/ethereum/modules/erc1155.ts +157 -0
  106. package/src/families/ethereum/modules/erc721.ts +146 -0
  107. package/src/families/ethereum/modules/index.ts +32 -1
  108. package/src/families/ethereum/nft.test.ts +259 -0
  109. package/src/families/ethereum/signOperation.ts +3 -16
  110. package/src/families/ethereum/synchronisation.test.ts +1 -0
  111. package/src/families/ethereum/synchronisation.ts +104 -113
  112. package/src/families/ethereum/transaction.ts +42 -8
  113. package/src/families/ethereum/types.ts +8 -0
  114. package/src/hw/uninstallApp.ts +13 -8
  115. package/src/nft/helpers.ts +1 -1
  116. package/src/nft/index.ts +1 -0
  117. package/src/nft/support.ts +16 -0
  118. package/src/types/account.ts +1 -1
  119. package/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap +0 -6150
@@ -0,0 +1,189 @@
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 __read = (this && this.__read) || function (o, n) {
50
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
51
+ if (!m) return o;
52
+ var i = m.call(o), r, ar = [], e;
53
+ try {
54
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55
+ }
56
+ catch (error) { e = { error: error }; }
57
+ finally {
58
+ try {
59
+ if (r && !r.done && (m = i["return"])) m.call(i);
60
+ }
61
+ finally { if (e) throw e.error; }
62
+ }
63
+ return ar;
64
+ };
65
+ var __importDefault = (this && this.__importDefault) || function (mod) {
66
+ return (mod && mod.__esModule) ? mod : { "default": mod };
67
+ };
68
+ exports.__esModule = true;
69
+ exports.modes = exports.prepareTransaction = void 0;
70
+ var eip55_1 = __importDefault(require("eip55"));
71
+ var ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
72
+ var invariant_1 = __importDefault(require("invariant"));
73
+ var bignumber_js_1 = __importDefault(require("bignumber.js"));
74
+ var errors_1 = require("@ledgerhq/errors");
75
+ var transaction_1 = require("../transaction");
76
+ var Ethereum_1 = require("../../../api/Ethereum");
77
+ var notOwnedNft = (0, errors_1.createCustomErrorClass)("NotOwnedNft");
78
+ function prepareTransaction(account, transaction) {
79
+ return __awaiter(this, void 0, void 0, function () {
80
+ var t, collection, collectionName, tokenIds, api, _a, _b, status_1, result, collectionName_1;
81
+ return __generator(this, function (_c) {
82
+ switch (_c.label) {
83
+ case 0:
84
+ t = transaction;
85
+ collection = transaction.collection, collectionName = transaction.collectionName, tokenIds = transaction.tokenIds;
86
+ if (!(collection && tokenIds && typeof collectionName === "undefined")) return [3 /*break*/, 2];
87
+ api = (0, Ethereum_1.apiForCurrency)(account.currency);
88
+ return [4 /*yield*/, api.getNFTMetadata([
89
+ {
90
+ contract: collection,
91
+ tokenId: tokenIds[0]
92
+ },
93
+ ])];
94
+ case 1:
95
+ _a = __read.apply(void 0, [_c.sent(), 1]), _b = _a[0], status_1 = _b.status, result = _b.result;
96
+ collectionName_1 = "";
97
+ if (status_1 === 200) {
98
+ collectionName_1 = (result === null || result === void 0 ? void 0 : result.tokenName) || "";
99
+ }
100
+ t = __assign(__assign({}, t), { collectionName: collectionName_1 });
101
+ _c.label = 2;
102
+ case 2: return [2 /*return*/, Promise.resolve(t)];
103
+ }
104
+ });
105
+ });
106
+ }
107
+ exports.prepareTransaction = prepareTransaction;
108
+ var erc721Transfer = {
109
+ /**
110
+ * Tx data is filled during the buildEthereumTx
111
+ */
112
+ fillTransactionData: function (a, t, tx) {
113
+ var data = serializeTransactionData(a, t);
114
+ (0, invariant_1["default"])(data, "serializeTransactionData provided no data");
115
+ tx.data = "0x" + data.toString("hex");
116
+ tx.to = t.collection;
117
+ tx.value = "0x00";
118
+ },
119
+ /**
120
+ * Tx status is filled after the buildEthereumTx
121
+ */
122
+ fillTransactionStatus: function (a, t, result) {
123
+ var _a, _b;
124
+ (0, transaction_1.validateRecipient)(a.currency, t.recipient, result);
125
+ if (!result.errors.recipient) {
126
+ result.totalSpent = result.estimatedFees;
127
+ result.amount = new bignumber_js_1["default"](t.amount);
128
+ if (result.estimatedFees.gt(a.spendableBalance)) {
129
+ result.errors.amount = new errors_1.NotEnoughBalanceInParentAccount();
130
+ }
131
+ if (!((_b = (_a = a.nfts) === null || _a === void 0 ? void 0 : _a.find) === null || _b === void 0 ? void 0 : _b.call(_a, function (n) {
132
+ var _a;
133
+ return n.tokenId === ((_a = t.tokenIds) === null || _a === void 0 ? void 0 : _a[0]) &&
134
+ n.collection.contract === t.collection;
135
+ }))) {
136
+ result.errors.amount = new notOwnedNft();
137
+ }
138
+ }
139
+ },
140
+ prepareTransaction: prepareTransaction,
141
+ /**
142
+ * This will only be used by LLM & LLD, not the HW.
143
+ */
144
+ fillDeviceTransactionConfig: function (input, fields) {
145
+ var _a, _b, _c, _d;
146
+ fields.push({
147
+ type: "text",
148
+ label: "Type",
149
+ value: "NFT Transfer"
150
+ });
151
+ fields.push({
152
+ type: "text",
153
+ label: "To",
154
+ value: (_a = input.transaction.recipient) !== null && _a !== void 0 ? _a : ""
155
+ });
156
+ fields.push({
157
+ type: "text",
158
+ label: "Collection Name",
159
+ value: input.transaction.collectionName || ""
160
+ });
161
+ fields.push({
162
+ type: "address",
163
+ label: "NFT Address",
164
+ address: (_b = input.transaction.collection) !== null && _b !== void 0 ? _b : ""
165
+ });
166
+ fields.push({
167
+ type: "text",
168
+ label: "NFT ID",
169
+ value: (_d = (_c = input.transaction.tokenIds) === null || _c === void 0 ? void 0 : _c[0]) !== null && _d !== void 0 ? _d : ""
170
+ });
171
+ },
172
+ /**
173
+ * Optimistic Operation is filled post signing
174
+ */
175
+ fillOptimisticOperation: function (a, t, op) {
176
+ op.type = "FEES";
177
+ op.extra = __assign(__assign({}, op.extra), { approving: true });
178
+ }
179
+ };
180
+ function serializeTransactionData(account, transaction) {
181
+ var _a;
182
+ var from = eip55_1["default"].encode(account.freshAddress);
183
+ var to = eip55_1["default"].encode(transaction.recipient);
184
+ return ethereumjs_abi_1["default"].simpleEncode("safeTransferFrom(address,address,uint256,bytes)", from, to, (_a = transaction.tokenIds) === null || _a === void 0 ? void 0 : _a[0], "0x00");
185
+ }
186
+ exports.modes = {
187
+ "erc721.transfer": erc721Transfer
188
+ };
189
+ //# sourceMappingURL=erc721.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"erc721.js","sourceRoot":"","sources":["../../../../src/families/ethereum/modules/erc721.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,9 @@ import type { DeviceTransactionField } from "../../../transaction";
5
5
  import type { Modes as CompoundModes } from "./compound";
6
6
  import type { Modes as ERC20Modes } from "./erc20";
7
7
  import type { Modes as SendModes } from "./send";
8
- export declare type TransactionMode = CompoundModes | ERC20Modes | SendModes;
8
+ import type { Modes as ERC721Modes } from "./erc721";
9
+ import type { Modes as ERC1155Modes } from "./erc1155";
10
+ export declare type TransactionMode = CompoundModes | ERC20Modes | SendModes | ERC721Modes | ERC1155Modes;
9
11
  /**
10
12
  * A ModeModule enable a new transaction mode in Ethereum family
11
13
  * for instance --mode send or --mode compound.supply
@@ -44,10 +46,15 @@ export declare type ModeModule = {
44
46
  * NB: the Operation is already filled with the generic part, a mode might typically change the type, add subOperations,...
45
47
  */
46
48
  fillOptimisticOperation: (arg0: Account, arg1: Transaction, arg2: Operation) => void;
49
+ /**
50
+ * hook to resolve a transaction like the prepareTransaction of the bridge
51
+ */
52
+ prepareTransaction?: (account: Account, transaction: Transaction) => Promise<Transaction>;
47
53
  };
48
54
  export declare const modes: Record<TransactionMode, ModeModule>;
49
55
  export declare function preload(currency: CryptoCurrency): Promise<Record<string, any>>;
50
56
  export declare function hydrate(value: unknown, currency: CryptoCurrency): void;
57
+ export declare const prepareTransaction: (account: Account, transaction: Transaction) => Promise<Transaction>;
51
58
  export declare const prepareTokenAccounts: (currency: CryptoCurrency, subAccounts: TokenAccount[], address: string) => Promise<TokenAccount[]>;
52
59
  export declare const digestTokenAccounts: (currency: CryptoCurrency, subAccounts: TokenAccount[], address: string) => Promise<TokenAccount[]>;
53
60
  declare type BufferLike = Buffer | string | number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/families/ethereum/modules/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,WAAW,EACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAKnE,OAAO,KAAK,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAC;AAMjD,oBAAY,eAAe,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC;AAErE;;;;;;;GAOG;AACH,oBAAY,UAAU,GAAG;IACvB;;;;OAIG;IACH,qBAAqB,EAAE,CACrB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,iBAAiB,KACpB,IAAI,CAAC;IAEV;;;;OAIG;IACH,mBAAmB,EAAE,CACnB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,KACT;QACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,GAAG,IAAI,CAAC;IAET;;;OAGG;IACH,2BAA2B,EAAE,CAC3B,KAAK,EAAE;QACL,OAAO,EAAE,WAAW,CAAC;QACrB,aAAa,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;QAC1C,WAAW,EAAE,WAAW,CAAC;QACzB,MAAM,EAAE,iBAAiB,CAAC;KAC3B,EACD,MAAM,EAAE,sBAAsB,EAAE,KAC7B,IAAI,CAAC;IAEV;;;OAGG;IACH,uBAAuB,EAAE,CACvB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,SAAS,KACZ,IAAI,CAAC;CACX,CAAC;AACF,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,UAAU,CAGrD,CAAC;AAeF,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAY9B;AACD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAYtE;AACD,eAAO,MAAM,oBAAoB,aACrB,cAAc,eACX,YAAY,EAAE,WAClB,MAAM,KACd,QAAQ,YAAY,EAAE,CAQpB,CAAC;AACN,eAAO,MAAM,mBAAmB,aACpB,cAAc,eACX,YAAY,EAAE,WAClB,MAAM,KACd,QAAQ,YAAY,EAAE,CAQpB,CAAC;AACN,aAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,UAAU,MAAM;IACd;;OAEG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB;;OAEG;IACH,EAAE,CAAC,EAAE,UAAU,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB;;OAEG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;OAEG;IACH,CAAC,CAAC,EAAE,UAAU,CAAC;IAEf;;OAEG;IACH,CAAC,CAAC,EAAE,UAAU,CAAC;IAEf;;OAEG;IACH,CAAC,CAAC,EAAE,UAAU,CAAC;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/families/ethereum/modules/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,WAAW,EACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAOnE,OAAO,KAAK,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC;AAQvD,oBAAY,eAAe,GACvB,aAAa,GACb,UAAU,GACV,SAAS,GACT,WAAW,GACX,YAAY,CAAC;AAEjB;;;;;;;GAOG;AACH,oBAAY,UAAU,GAAG;IACvB;;;;OAIG;IACH,qBAAqB,EAAE,CACrB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,iBAAiB,KACpB,IAAI,CAAC;IAEV;;;;OAIG;IACH,mBAAmB,EAAE,CACnB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,KACT;QACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,GAAG,IAAI,CAAC;IAET;;;OAGG;IACH,2BAA2B,EAAE,CAC3B,KAAK,EAAE;QACL,OAAO,EAAE,WAAW,CAAC;QACrB,aAAa,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;QAC1C,WAAW,EAAE,WAAW,CAAC;QACzB,MAAM,EAAE,iBAAiB,CAAC;KAC3B,EACD,MAAM,EAAE,sBAAsB,EAAE,KAC7B,IAAI,CAAC;IAEV;;;OAGG;IACH,uBAAuB,EAAE,CACvB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,SAAS,KACZ,IAAI,CAAC;IAEV;;OAEG;IACH,kBAAkB,CAAC,EAAE,CACnB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,KACrB,OAAO,CAAC,WAAW,CAAC,CAAC;CAC3B,CAAC;AACF,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,UAAU,CAGrD,CAAC;AAeF,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAY9B;AACD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAYtE;AACD,eAAO,MAAM,kBAAkB,YACpB,OAAO,eACH,WAAW,KACvB,QAAQ,WAAW,CAQjB,CAAC;AACN,eAAO,MAAM,oBAAoB,aACrB,cAAc,eACX,YAAY,EAAE,WAClB,MAAM,KACd,QAAQ,YAAY,EAAE,CAQpB,CAAC;AACN,eAAO,MAAM,mBAAmB,aACpB,cAAc,eACX,YAAY,EAAE,WAClB,MAAM,KACd,QAAQ,YAAY,EAAE,CAQpB,CAAC;AACN,aAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,UAAU,MAAM;IACd;;OAEG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB;;OAEG;IACH,EAAE,CAAC,EAAE,UAAU,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB;;OAEG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;OAEG;IACH,CAAC,CAAC,EAAE,UAAU,CAAC;IAEf;;OAEG;IACH,CAAC,CAAC,EAAE,UAAU,CAAC;IAEf;;OAEG;IACH,CAAC,CAAC,EAAE,UAAU,CAAC;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB"}
@@ -58,16 +58,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
58
58
  return (mod && mod.__esModule) ? mod : { "default": mod };
59
59
  };
60
60
  exports.__esModule = true;
61
- exports.digestTokenAccounts = exports.prepareTokenAccounts = exports.hydrate = exports.preload = exports.modes = void 0;
61
+ exports.digestTokenAccounts = exports.prepareTokenAccounts = exports.prepareTransaction = exports.hydrate = exports.preload = exports.modes = void 0;
62
62
  var values_1 = __importDefault(require("lodash/values"));
63
63
  // maintained union of all the modules
64
64
  var compound = __importStar(require("./compound"));
65
65
  var erc20 = __importStar(require("./erc20"));
66
66
  var send = __importStar(require("./send"));
67
+ var erc721 = __importStar(require("./erc721"));
68
+ var erc1155 = __importStar(require("./erc1155"));
67
69
  var modules = {
68
70
  erc20: erc20,
69
71
  compound: compound,
70
- send: send
72
+ send: send,
73
+ erc721: erc721,
74
+ erc1155: erc1155
71
75
  };
72
76
  exports.modes = {};
73
77
  function loadModes() {
@@ -126,6 +130,14 @@ function hydrate(value, currency) {
126
130
  }
127
131
  }
128
132
  exports.hydrate = hydrate;
133
+ var prepareTransaction = function (account, transaction) {
134
+ return (0, values_1["default"])(modules)
135
+ // @ts-expect-error some module implement it
136
+ .map(function (m) { return m.prepareTransaction; })
137
+ .filter(Boolean)
138
+ .reduce(function (p, fn) { return p.then(function (t) { return fn(account, t); }); }, Promise.resolve(transaction));
139
+ };
140
+ exports.prepareTransaction = prepareTransaction;
129
141
  var prepareTokenAccounts = function (currency, subAccounts, address) {
130
142
  return (0, values_1["default"])(modules)
131
143
  // @ts-expect-error only exists in compound module. (type guard)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/families/ethereum/modules/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/families/ethereum/modules/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import "../../__tests__/test-helpers/setup";
2
+ //# sourceMappingURL=nft.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nft.test.d.ts","sourceRoot":"","sources":["../../../src/families/ethereum/nft.test.ts"],"names":[],"mappings":"AAAA,OAAO,oCAAoC,CAAC"}
@@ -0,0 +1,353 @@
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
+ });
321
+ /*
322
+ // this is never ending here... have to disable this test... (backend issue)
323
+ describe("gaspard NFT on polygon", () => {
324
+ let account = fromAccountRaw(gaspardPolygonAccount);
325
+ test("first sync", async () => {
326
+ await cache.prepareCurrency(account.currency);
327
+ account = await sync(account);
328
+ });
329
+ test(".nfts shouldn't be visible", () => {
330
+ expect(account.nfts).toBeFalsy();
331
+ });
332
+ });
333
+ */
334
+ describe("gaspard NFT on bsc", function () {
335
+ var account = (0, account_1.fromAccountRaw)(gaspardBscAccount);
336
+ test("first sync", function () { return __awaiter(void 0, void 0, void 0, function () {
337
+ return __generator(this, function (_a) {
338
+ switch (_a.label) {
339
+ case 0: return [4 /*yield*/, cache.prepareCurrency(account.currency)];
340
+ case 1:
341
+ _a.sent();
342
+ return [4 /*yield*/, sync(account)];
343
+ case 2:
344
+ account = _a.sent();
345
+ return [2 /*return*/];
346
+ }
347
+ });
348
+ }); });
349
+ test(".nfts shouldn't be visible", function () {
350
+ expect(account.nfts).toBeFalsy();
351
+ });
352
+ });
353
+ //# sourceMappingURL=nft.test.js.map