@ledgerhq/live-common 21.13.2 → 21.16.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 (221) hide show
  1. package/lib/__tests__/derivation.js +1 -1
  2. package/lib/__tests__/derivation.js.map +1 -1
  3. package/lib/__tests__/families/bitcoin/wallet-btc/wallet.integration.test.js +2 -2
  4. package/lib/account/groupOperations.js +1 -1
  5. package/lib/account/groupOperations.js.map +1 -1
  6. package/lib/account/pending.d.ts +1 -0
  7. package/lib/account/pending.d.ts.map +1 -1
  8. package/lib/account/serialization.d.ts +6 -4
  9. package/lib/account/serialization.d.ts.map +1 -1
  10. package/lib/account/serialization.js +47 -9
  11. package/lib/account/serialization.js.map +1 -1
  12. package/lib/api/Ethereum.d.ts +22 -1
  13. package/lib/api/Ethereum.d.ts.map +1 -1
  14. package/lib/api/Ethereum.js +21 -1
  15. package/lib/api/Ethereum.js.map +1 -1
  16. package/lib/apps/polyfill.d.ts.map +1 -1
  17. package/lib/apps/polyfill.js +1 -0
  18. package/lib/apps/polyfill.js.map +1 -1
  19. package/lib/bridge/jsHelpers.d.ts +2 -1
  20. package/lib/bridge/jsHelpers.d.ts.map +1 -1
  21. package/lib/bridge/jsHelpers.js +27 -1
  22. package/lib/bridge/jsHelpers.js.map +1 -1
  23. package/lib/csvExport.d.ts.map +1 -1
  24. package/lib/csvExport.js +3 -1
  25. package/lib/csvExport.js.map +1 -1
  26. package/lib/currencies/sortByMarketcap.d.ts.map +1 -1
  27. package/lib/currencies/sortByMarketcap.js +8 -1
  28. package/lib/currencies/sortByMarketcap.js.map +1 -1
  29. package/lib/derivation.js +1 -1
  30. package/lib/derivation.js.map +1 -1
  31. package/lib/env.d.ts +15 -5
  32. package/lib/env.d.ts.map +1 -1
  33. package/lib/env.js +12 -1
  34. package/lib/env.js.map +1 -1
  35. package/lib/env.react.d.ts +1 -1
  36. package/lib/env.react.d.ts.map +1 -1
  37. package/lib/families/bitcoin/cache.d.ts +1 -0
  38. package/lib/families/bitcoin/cache.d.ts.map +1 -1
  39. package/lib/families/bitcoin/cache.js +7 -1
  40. package/lib/families/bitcoin/cache.js.map +1 -1
  41. package/lib/families/bitcoin/errors.d.ts +4 -0
  42. package/lib/families/bitcoin/errors.d.ts.map +1 -0
  43. package/lib/families/bitcoin/errors.js +6 -0
  44. package/lib/families/bitcoin/errors.js.map +1 -0
  45. package/lib/families/bitcoin/js-getTransactionStatus.d.ts.map +1 -1
  46. package/lib/families/bitcoin/js-getTransactionStatus.js +24 -11
  47. package/lib/families/bitcoin/js-getTransactionStatus.js.map +1 -1
  48. package/lib/families/bitcoin/js-synchronisation.d.ts.map +1 -1
  49. package/lib/families/bitcoin/js-synchronisation.js +8 -19
  50. package/lib/families/bitcoin/js-synchronisation.js.map +1 -1
  51. package/lib/families/bitcoin/logic.d.ts +1 -1
  52. package/lib/families/bitcoin/logic.d.ts.map +1 -1
  53. package/lib/families/bitcoin/logic.js +6 -0
  54. package/lib/families/bitcoin/logic.js.map +1 -1
  55. package/lib/families/bitcoin/specs.d.ts.map +1 -1
  56. package/lib/families/bitcoin/specs.js +2 -1
  57. package/lib/families/bitcoin/specs.js.map +1 -1
  58. package/lib/families/bitcoin/test-dataset.js +2 -2
  59. package/lib/families/bitcoin/test-dataset.js.map +1 -1
  60. package/lib/families/bitcoin/wallet-btc/crypto/base.d.ts +4 -0
  61. package/lib/families/bitcoin/wallet-btc/crypto/base.d.ts.map +1 -1
  62. package/lib/families/bitcoin/wallet-btc/crypto/base.js +36 -5
  63. package/lib/families/bitcoin/wallet-btc/crypto/base.js.map +1 -1
  64. package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.d.ts +1 -0
  65. package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.d.ts.map +1 -1
  66. package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.js +19 -1
  67. package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.js.map +1 -1
  68. package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.d.ts +1 -0
  69. package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.d.ts.map +1 -1
  70. package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.js +4 -0
  71. package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.js.map +1 -1
  72. package/lib/families/bitcoin/wallet-btc/crypto/types.d.ts +1 -0
  73. package/lib/families/bitcoin/wallet-btc/crypto/types.d.ts.map +1 -1
  74. package/lib/families/bitcoin/wallet-btc/crypto/zec.d.ts +1 -0
  75. package/lib/families/bitcoin/wallet-btc/crypto/zec.d.ts.map +1 -1
  76. package/lib/families/bitcoin/wallet-btc/crypto/zec.js +4 -0
  77. package/lib/families/bitcoin/wallet-btc/crypto/zec.js.map +1 -1
  78. package/lib/families/bitcoin/wallet-btc/crypto/zen.d.ts +1 -0
  79. package/lib/families/bitcoin/wallet-btc/crypto/zen.d.ts.map +1 -1
  80. package/lib/families/bitcoin/wallet-btc/crypto/zen.js +4 -0
  81. package/lib/families/bitcoin/wallet-btc/crypto/zen.js.map +1 -1
  82. package/lib/families/bitcoin/wallet-btc/explorer/index.d.ts.map +1 -1
  83. package/lib/families/bitcoin/wallet-btc/explorer/index.js +0 -3
  84. package/lib/families/bitcoin/wallet-btc/explorer/index.js.map +1 -1
  85. package/lib/families/bitcoin/wallet-btc/index.d.ts +2 -2
  86. package/lib/families/bitcoin/wallet-btc/index.d.ts.map +1 -1
  87. package/lib/families/bitcoin/wallet-btc/index.js +4 -5
  88. package/lib/families/bitcoin/wallet-btc/index.js.map +1 -1
  89. package/lib/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.js +3 -3
  90. package/lib/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.js +5 -5
  91. package/lib/families/bitcoin/wallet-btc/pickingstrategies/Merge.js +5 -5
  92. package/lib/families/bitcoin/wallet-btc/utils.d.ts +3 -1
  93. package/lib/families/bitcoin/wallet-btc/utils.d.ts.map +1 -1
  94. package/lib/families/bitcoin/wallet-btc/utils.js +30 -10
  95. package/lib/families/bitcoin/wallet-btc/utils.js.map +1 -1
  96. package/lib/families/bitcoin/wallet-btc/wallet.d.ts.map +1 -1
  97. package/lib/families/bitcoin/wallet-btc/wallet.js +5 -3
  98. package/lib/families/bitcoin/wallet-btc/wallet.js.map +1 -1
  99. package/lib/families/bitcoin/wallet-btc/xpub.d.ts +2 -6
  100. package/lib/families/bitcoin/wallet-btc/xpub.d.ts.map +1 -1
  101. package/lib/families/bitcoin/wallet-btc/xpub.js +62 -52
  102. package/lib/families/bitcoin/wallet-btc/xpub.js.map +1 -1
  103. package/lib/families/elrond/js-getTransactionStatus.d.ts.map +1 -1
  104. package/lib/families/elrond/js-getTransactionStatus.js +3 -0
  105. package/lib/families/elrond/js-getTransactionStatus.js.map +1 -1
  106. package/lib/families/elrond/js-signOperation.d.ts.map +1 -1
  107. package/lib/families/elrond/js-signOperation.js +3 -1
  108. package/lib/families/elrond/js-signOperation.js.map +1 -1
  109. package/lib/families/ethereum/signOperation.d.ts.map +1 -1
  110. package/lib/families/ethereum/signOperation.js +7 -0
  111. package/lib/families/ethereum/signOperation.js.map +1 -1
  112. package/lib/families/ethereum/specs.d.ts +1 -0
  113. package/lib/families/ethereum/specs.d.ts.map +1 -1
  114. package/lib/families/ethereum/specs.js +41 -0
  115. package/lib/families/ethereum/specs.js.map +1 -1
  116. package/lib/families/ethereum/synchronisation.d.ts.map +1 -1
  117. package/lib/families/ethereum/synchronisation.js +175 -15
  118. package/lib/families/ethereum/synchronisation.js.map +1 -1
  119. package/lib/families/ethereum/versions.d.ts +2 -0
  120. package/lib/families/ethereum/versions.d.ts.map +1 -0
  121. package/lib/families/ethereum/versions.js +5 -0
  122. package/lib/families/ethereum/versions.js.map +1 -0
  123. package/lib/generated/specs.d.ts +1 -0
  124. package/lib/generated/specs.d.ts.map +1 -1
  125. package/lib/nft/NftMetadataProvider/index.d.ts +10 -0
  126. package/lib/nft/NftMetadataProvider/index.d.ts.map +1 -0
  127. package/lib/nft/NftMetadataProvider/index.js +244 -0
  128. package/lib/nft/NftMetadataProvider/index.js.map +1 -0
  129. package/lib/nft/NftMetadataProvider/logic.d.ts +3 -0
  130. package/lib/nft/NftMetadataProvider/logic.d.ts.map +1 -0
  131. package/lib/nft/NftMetadataProvider/logic.js +22 -0
  132. package/lib/nft/NftMetadataProvider/logic.js.map +1 -0
  133. package/lib/nft/NftMetadataProvider/types.d.ts +44 -0
  134. package/lib/nft/NftMetadataProvider/types.d.ts.map +1 -0
  135. package/lib/nft/NftMetadataProvider/types.js +3 -0
  136. package/lib/nft/NftMetadataProvider/types.js.map +1 -0
  137. package/lib/nft/helpers.d.ts +10 -0
  138. package/lib/nft/helpers.d.ts.map +1 -0
  139. package/lib/nft/helpers.js +85 -0
  140. package/lib/nft/helpers.js.map +1 -0
  141. package/lib/nft/index.d.ts +4 -0
  142. package/lib/nft/index.d.ts.map +1 -0
  143. package/lib/nft/index.js +16 -0
  144. package/lib/nft/index.js.map +1 -0
  145. package/lib/nft/nftId.d.ts +3 -0
  146. package/lib/nft/nftId.d.ts.map +1 -0
  147. package/lib/nft/nftId.js +33 -0
  148. package/lib/nft/nftId.js.map +1 -0
  149. package/lib/operation.d.ts +1 -1
  150. package/lib/operation.d.ts.map +1 -1
  151. package/lib/operation.js +19 -5
  152. package/lib/operation.js.map +1 -1
  153. package/lib/reconciliation.d.ts.map +1 -1
  154. package/lib/reconciliation.js +6 -0
  155. package/lib/reconciliation.js.map +1 -1
  156. package/lib/types/account.d.ts +3 -0
  157. package/lib/types/account.d.ts.map +1 -1
  158. package/lib/types/index.d.ts +1 -0
  159. package/lib/types/index.d.ts.map +1 -1
  160. package/lib/types/index.js +1 -0
  161. package/lib/types/index.js.map +1 -1
  162. package/lib/types/nft.d.ts +29 -0
  163. package/lib/types/nft.d.ts.map +1 -0
  164. package/lib/types/nft.js +3 -0
  165. package/lib/types/nft.js.map +1 -0
  166. package/lib/types/operation.d.ts +12 -1
  167. package/lib/types/operation.d.ts.map +1 -1
  168. package/package.json +13 -13
  169. package/src/__tests__/__snapshots__/all.libcore.ts.snap +64428 -57815
  170. package/src/__tests__/derivation.ts +1 -1
  171. package/src/__tests__/families/bitcoin/wallet-btc/wallet.integration.test.ts +2 -2
  172. package/src/account/groupOperations.ts +2 -2
  173. package/src/account/serialization.ts +52 -0
  174. package/src/api/Ethereum.ts +40 -2
  175. package/src/apps/polyfill.ts +1 -0
  176. package/src/bridge/jsHelpers.ts +35 -0
  177. package/src/csvExport.ts +3 -2
  178. package/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap +1361 -1
  179. package/src/currencies/sortByMarketcap.ts +9 -1
  180. package/src/derivation.ts +1 -1
  181. package/src/env.ts +12 -1
  182. package/src/families/bitcoin/cache.ts +12 -0
  183. package/src/families/bitcoin/errors.ts +5 -0
  184. package/src/families/bitcoin/js-getTransactionStatus.ts +15 -1
  185. package/src/families/bitcoin/js-synchronisation.ts +11 -25
  186. package/src/families/bitcoin/logic.ts +7 -2
  187. package/src/families/bitcoin/specs.ts +6 -1
  188. package/src/families/bitcoin/test-dataset.ts +2 -2
  189. package/src/families/bitcoin/wallet-btc/crypto/base.ts +40 -5
  190. package/src/families/bitcoin/wallet-btc/crypto/bitcoin.ts +21 -1
  191. package/src/families/bitcoin/wallet-btc/crypto/bitcoincash.ts +5 -0
  192. package/src/families/bitcoin/wallet-btc/crypto/types.ts +1 -0
  193. package/src/families/bitcoin/wallet-btc/crypto/zec.ts +5 -0
  194. package/src/families/bitcoin/wallet-btc/crypto/zen.ts +5 -0
  195. package/src/families/bitcoin/wallet-btc/explorer/index.ts +0 -5
  196. package/src/families/bitcoin/wallet-btc/index.ts +4 -4
  197. package/src/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.ts +3 -3
  198. package/src/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.ts +5 -5
  199. package/src/families/bitcoin/wallet-btc/pickingstrategies/Merge.ts +5 -5
  200. package/src/families/bitcoin/wallet-btc/utils.ts +34 -9
  201. package/src/families/bitcoin/wallet-btc/wallet.ts +4 -2
  202. package/src/families/bitcoin/wallet-btc/xpub.ts +37 -53
  203. package/src/families/elrond/js-getTransactionStatus.ts +4 -0
  204. package/src/families/elrond/js-signOperation.ts +3 -1
  205. package/src/families/ethereum/modules/__snapshots__/compound.resilience.test.ts.snap +2876 -0
  206. package/src/families/ethereum/signOperation.ts +8 -0
  207. package/src/families/ethereum/specs.ts +47 -0
  208. package/src/families/ethereum/synchronisation.ts +185 -6
  209. package/src/families/ethereum/versions.ts +1 -0
  210. package/src/nft/NftMetadataProvider/index.tsx +205 -0
  211. package/src/nft/NftMetadataProvider/logic.ts +20 -0
  212. package/src/nft/NftMetadataProvider/types.ts +60 -0
  213. package/src/nft/helpers.ts +78 -0
  214. package/src/nft/index.ts +3 -0
  215. package/src/nft/nftId.ts +17 -0
  216. package/src/operation.ts +22 -3
  217. package/src/reconciliation.ts +7 -0
  218. package/src/types/account.ts +4 -0
  219. package/src/types/index.ts +1 -0
  220. package/src/types/nft.ts +38 -0
  221. package/src/types/operation.ts +23 -1
@@ -0,0 +1,244 @@
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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || function (mod) {
26
+ if (mod && mod.__esModule) return mod;
27
+ var result = {};
28
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29
+ __setModuleDefault(result, mod);
30
+ return result;
31
+ };
32
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
33
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
34
+ return new (P || (P = Promise))(function (resolve, reject) {
35
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
36
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
37
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
38
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
39
+ });
40
+ };
41
+ var __generator = (this && this.__generator) || function (thisArg, body) {
42
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
43
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
44
+ function verb(n) { return function (v) { return step([n, v]); }; }
45
+ function step(op) {
46
+ if (f) throw new TypeError("Generator is already executing.");
47
+ while (_) try {
48
+ 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;
49
+ if (y = 0, t) op = [op[0] & 2, t.value];
50
+ switch (op[0]) {
51
+ case 0: case 1: t = op; break;
52
+ case 4: _.label++; return { value: op[1], done: false };
53
+ case 5: _.label++; y = op[1]; op = [0]; continue;
54
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
55
+ default:
56
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
57
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
58
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
59
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
60
+ if (t[2]) _.ops.pop();
61
+ _.trys.pop(); continue;
62
+ }
63
+ op = body.call(thisArg, _);
64
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
65
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
66
+ }
67
+ };
68
+ var __read = (this && this.__read) || function (o, n) {
69
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
70
+ if (!m) return o;
71
+ var i = m.call(o), r, ar = [], e;
72
+ try {
73
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
74
+ }
75
+ catch (error) { e = { error: error }; }
76
+ finally {
77
+ try {
78
+ if (r && !r.done && (m = i["return"])) m.call(i);
79
+ }
80
+ finally { if (e) throw e.error; }
81
+ }
82
+ return ar;
83
+ };
84
+ exports.__esModule = true;
85
+ exports.NftMetadataProvider = exports.useNftAPI = exports.useNftMetadata = void 0;
86
+ var react_1 = __importStar(require("react"));
87
+ var cryptoassets_1 = require("@ledgerhq/cryptoassets");
88
+ var Ethereum_1 = require("../../api/Ethereum");
89
+ var helpers_1 = require("../helpers");
90
+ var logic_1 = require("./logic");
91
+ var currency = (0, cryptoassets_1.findCryptoCurrencyById)("ethereum");
92
+ var ethApi = (0, Ethereum_1.apiForCurrency)(currency);
93
+ var NftMetadataContext = (0, react_1.createContext)({
94
+ cache: {},
95
+ loadNFTMetadata: function () { return Promise.resolve(); },
96
+ clearCache: function () { }
97
+ });
98
+ var metadataCallBatcher = (function () {
99
+ var batch = [];
100
+ var debounce;
101
+ var timeoutBatchCall = function () {
102
+ // Clear the previous scheduled call if it was existing
103
+ clearTimeout(debounce);
104
+ // Schedule a new call with the whole batch
105
+ debounce = setTimeout(function () {
106
+ // Seperate each batch element properties into arrays by type and index
107
+ var _a = batch.reduce(function (acc, _a) {
108
+ var couple = _a.couple, resolve = _a.resolve, reject = _a.reject;
109
+ acc.couples.push(couple);
110
+ acc.resolvers.push(resolve);
111
+ acc.rejecters.push(reject);
112
+ return acc;
113
+ }, { couples: [], resolvers: [], rejecters: [] }), couples = _a.couples, resolvers = _a.resolvers, rejecters = _a.rejecters;
114
+ // Empty the batch
115
+ batch.length = 0;
116
+ // Make the call with all the couples of contract and tokenId at once
117
+ ethApi
118
+ .getNFTMetadata(couples)
119
+ .then(function (res) {
120
+ // Resolve each batch element with its own resolver and only its response
121
+ res.forEach(function (metadata, index) { return resolvers[index](metadata); });
122
+ })["catch"](function (err) {
123
+ // Reject all batch element with the error
124
+ rejecters.forEach(function (reject) { return reject(err); });
125
+ });
126
+ });
127
+ };
128
+ return {
129
+ // Load the metadata for a given couple contract + tokenId
130
+ load: function (_a) {
131
+ var contract = _a.contract, tokenId = _a.tokenId;
132
+ return new Promise(function (resolve, reject) {
133
+ batch.push({ couple: { contract: contract, tokenId: tokenId }, resolve: resolve, reject: reject });
134
+ timeoutBatchCall();
135
+ });
136
+ }
137
+ };
138
+ })();
139
+ function useNftMetadata(contract, tokenId) {
140
+ var _a = (0, react_1.useContext)(NftMetadataContext), cache = _a.cache, loadNFTMetadata = _a.loadNFTMetadata;
141
+ var key = (0, helpers_1.getNftKey)(contract, tokenId);
142
+ var cachedData = cache[key];
143
+ (0, react_1.useEffect)(function () {
144
+ if (!cachedData || (0, logic_1.isOutdated)(cachedData)) {
145
+ loadNFTMetadata(contract, tokenId);
146
+ }
147
+ }, [contract, tokenId, cachedData, loadNFTMetadata]);
148
+ if (cachedData) {
149
+ return cachedData;
150
+ }
151
+ else {
152
+ return {
153
+ status: "queued"
154
+ };
155
+ }
156
+ }
157
+ exports.useNftMetadata = useNftMetadata;
158
+ function useNftAPI() {
159
+ var _a = (0, react_1.useContext)(NftMetadataContext), clearCache = _a.clearCache, loadNFTMetadata = _a.loadNFTMetadata;
160
+ return {
161
+ clearCache: clearCache,
162
+ loadNFTMetadata: loadNFTMetadata
163
+ };
164
+ }
165
+ exports.useNftAPI = useNftAPI;
166
+ function NftMetadataProvider(_a) {
167
+ var _this = this;
168
+ var children = _a.children;
169
+ var _b = __read((0, react_1.useState)({
170
+ cache: {}
171
+ }), 2), state = _b[0], setState = _b[1];
172
+ var api = (0, react_1.useMemo)(function () { return ({
173
+ loadNFTMetadata: function (contract, tokenId) { return __awaiter(_this, void 0, void 0, function () {
174
+ var key, _a, status_1, result_1, error_1;
175
+ return __generator(this, function (_b) {
176
+ switch (_b.label) {
177
+ case 0:
178
+ key = (0, helpers_1.getNftKey)(contract, tokenId);
179
+ setState(function (oldState) {
180
+ var _a;
181
+ return (__assign(__assign({}, oldState), { cache: __assign(__assign({}, oldState.cache), (_a = {}, _a[key] = {
182
+ status: "loading"
183
+ }, _a)) }));
184
+ });
185
+ _b.label = 1;
186
+ case 1:
187
+ _b.trys.push([1, 3, , 4]);
188
+ return [4 /*yield*/, metadataCallBatcher.load({
189
+ contract: contract,
190
+ tokenId: tokenId
191
+ })];
192
+ case 2:
193
+ _a = _b.sent(), status_1 = _a.status, result_1 = _a.result;
194
+ switch (status_1) {
195
+ case 500:
196
+ throw new Error("NFT Metadata Provider failed");
197
+ case 404:
198
+ setState(function (oldState) {
199
+ var _a;
200
+ return (__assign(__assign({}, oldState), { cache: __assign(__assign({}, oldState.cache), (_a = {}, _a[key] = {
201
+ status: "nodata",
202
+ metadata: null,
203
+ updatedAt: Date.now()
204
+ }, _a)) }));
205
+ });
206
+ break;
207
+ case 200:
208
+ setState(function (oldState) {
209
+ var _a;
210
+ return (__assign(__assign({}, oldState), { cache: __assign(__assign({}, oldState.cache), (_a = {}, _a[key] = {
211
+ status: "loaded",
212
+ metadata: result_1 || {},
213
+ updatedAt: Date.now()
214
+ }, _a)) }));
215
+ });
216
+ break;
217
+ default:
218
+ break;
219
+ }
220
+ return [3 /*break*/, 4];
221
+ case 3:
222
+ error_1 = _b.sent();
223
+ setState(function (oldState) {
224
+ var _a;
225
+ return (__assign(__assign({}, oldState), { cache: __assign(__assign({}, oldState.cache), (_a = {}, _a[key] = {
226
+ status: "error",
227
+ error: error_1,
228
+ updatedAt: Date.now()
229
+ }, _a)) }));
230
+ });
231
+ return [3 /*break*/, 4];
232
+ case 4: return [2 /*return*/];
233
+ }
234
+ });
235
+ }); },
236
+ clearCache: function () {
237
+ setState(function (oldState) { return (__assign(__assign({}, oldState), { cache: {} })); });
238
+ }
239
+ }); }, []);
240
+ var value = __assign(__assign({}, state), api);
241
+ return (react_1["default"].createElement(NftMetadataContext.Provider, { value: value }, children));
242
+ }
243
+ exports.NftMetadataProvider = NftMetadataProvider;
244
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nft/NftMetadataProvider/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { NFTResource } from "./types";
2
+ export declare function isOutdated(resource: NFTResource): boolean;
3
+ //# sourceMappingURL=logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../../../src/nft/NftMetadataProvider/logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAItC,wBAAgB,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAezD"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.isOutdated = void 0;
4
+ // Handle lifecycle of cached data.
5
+ // Expiration date depend on the resource's status.
6
+ function isOutdated(resource) {
7
+ var now = Date.now();
8
+ switch (resource.status) {
9
+ case "loaded": {
10
+ return now - resource.updatedAt > 14 * 24 * 60 * 60 * 1 * 1000; // 14 days
11
+ }
12
+ case "error": {
13
+ return now - resource.updatedAt > 1 * 1000; // 1 second
14
+ }
15
+ case "nodata": {
16
+ return now - resource.updatedAt > 24 * 60 * 60 * 1 * 1000; // 1 day
17
+ }
18
+ }
19
+ return false;
20
+ }
21
+ exports.isOutdated = isOutdated;
22
+ //# sourceMappingURL=logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logic.js","sourceRoot":"","sources":["../../../src/nft/NftMetadataProvider/logic.ts"],"names":[],"mappings":";;;AAEA,mCAAmC;AACnC,mDAAmD;AACnD,SAAgB,UAAU,CAAC,QAAqB;IAC9C,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,QAAQ,QAAQ,CAAC,MAAM,EAAE;QACvB,KAAK,QAAQ,CAAC,CAAC;YACb,OAAO,GAAG,GAAG,QAAQ,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU;SAC3E;QACD,KAAK,OAAO,CAAC,CAAC;YACZ,OAAO,GAAG,GAAG,QAAQ,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW;SACxD;QACD,KAAK,QAAQ,CAAC,CAAC;YACb,OAAO,GAAG,GAAG,QAAQ,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ;SACpE;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAfD,gCAeC"}
@@ -0,0 +1,44 @@
1
+ import { NFTMetadataResponse } from "../../types";
2
+ export declare type NFTResourceQueued = {
3
+ status: "queued";
4
+ };
5
+ export declare type NFTResourceLoading = {
6
+ status: "loading";
7
+ };
8
+ export declare type NFTResourceLoaded = {
9
+ status: "loaded";
10
+ metadata: Pick<NFTMetadataResponse, "result">;
11
+ updatedAt: number;
12
+ };
13
+ export declare type NFTResourceError = {
14
+ status: "error";
15
+ error: any;
16
+ updatedAt: number;
17
+ };
18
+ export declare type NFTResourceNoData = {
19
+ status: "nodata";
20
+ updatedAt: number;
21
+ };
22
+ export declare type NFTResource = NFTResourceQueued | NFTResourceLoading | NFTResourceLoaded | NFTResourceError | NFTResourceNoData;
23
+ export declare type NFTMetadataContextState = {
24
+ cache: Record<string, NFTResource>;
25
+ };
26
+ export declare type NFTMetadataContextAPI = {
27
+ loadNFTMetadata: (contract: string, tokenId: string) => Promise<void>;
28
+ clearCache: () => void;
29
+ };
30
+ export declare type NFTMetadataContextType = NFTMetadataContextState & NFTMetadataContextAPI;
31
+ export declare type BatchElement = {
32
+ couple: {
33
+ contract: string;
34
+ tokenId: string;
35
+ };
36
+ resolve: (value: NFTMetadataResponse) => void;
37
+ reject: (reason?: Error) => void;
38
+ };
39
+ export declare type Batch = {
40
+ couples: Array<BatchElement["couple"]>;
41
+ resolvers: Array<BatchElement["resolve"]>;
42
+ rejecters: Array<BatchElement["reject"]>;
43
+ };
44
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/nft/NftMetadataProvider/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,oBAAY,iBAAiB,GAAG;IAC9B,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,oBAAY,kBAAkB,GAAG;IAC/B,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,oBAAY,iBAAiB,GAAG;IAC9B,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,gBAAgB,GAAG;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,iBAAiB,GAAG;IAC9B,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,WAAW,GACnB,iBAAiB,GACjB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,iBAAiB,CAAC;AAEtB,oBAAY,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACpC,CAAC;AAEF,oBAAY,qBAAqB,GAAG;IAClC,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF,oBAAY,sBAAsB,GAAG,uBAAuB,GAC1D,qBAAqB,CAAC;AAExB,oBAAY,YAAY,GAAG;IACzB,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC9C,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC,CAAC;AAEF,oBAAY,KAAK,GAAG;IAClB,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1C,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC1C,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/nft/NftMetadataProvider/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { NFT, Operation } from "../types";
2
+ declare type Collection = NFT["collection"];
3
+ export declare type CollectionWithNFT = Collection & {
4
+ nfts: Array<Omit<NFT, "collection">>;
5
+ };
6
+ export declare const nftsFromOperations: (ops: Operation[]) => NFT[];
7
+ export declare const nftsByCollections: (nfts?: NFT[], collectionAddress?: string | undefined) => CollectionWithNFT[];
8
+ export declare const getNftKey: (contract: string, tokenId: string) => string;
9
+ export {};
10
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/nft/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,aAAK,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;AAIpC,oBAAY,iBAAiB,GAAG,UAAU,GAAG;IAC3C,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAS,SAAS,EAAE,KAAG,GAAG,EAoCxD,CAAC;AAEF,eAAO,MAAM,iBAAiB,UACtB,GAAG,EAAE,6CAEV,iBAAiB,EAoBnB,CAAC;AAEF,eAAO,MAAM,SAAS,aAAc,MAAM,WAAW,MAAM,KAAG,MAE7D,CAAC"}
@@ -0,0 +1,85 @@
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 __rest = (this && this.__rest) || function (s, e) {
14
+ var t = {};
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
+ t[p] = s[p];
17
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
+ t[p[i]] = s[p[i]];
21
+ }
22
+ return t;
23
+ };
24
+ var __importDefault = (this && this.__importDefault) || function (mod) {
25
+ return (mod && mod.__esModule) ? mod : { "default": mod };
26
+ };
27
+ exports.__esModule = true;
28
+ exports.getNftKey = exports.nftsByCollections = exports.nftsFromOperations = void 0;
29
+ var eip55_1 = __importDefault(require("eip55"));
30
+ var bignumber_js_1 = __importDefault(require("bignumber.js"));
31
+ var nftsFromOperations = function (ops) {
32
+ var nftsMap = ops
33
+ // if ops are Operations get the prop nftOperations, else ops are considered nftOperations already
34
+ .flatMap(function (op) { var _a; return (((_a = op === null || op === void 0 ? void 0 : op.nftOperations) === null || _a === void 0 ? void 0 : _a.length) ? op.nftOperations : op); })
35
+ .reduce(function (acc, nftOp) {
36
+ var _a;
37
+ if (!(nftOp === null || nftOp === void 0 ? void 0 : nftOp.contract)) {
38
+ return acc;
39
+ }
40
+ // Creating a "token for a contract" unique key
41
+ var contract = eip55_1["default"].encode(nftOp.contract);
42
+ var nftKey = contract + nftOp.tokenId;
43
+ var tokenId = nftOp.tokenId, standard = nftOp.standard, id = nftOp.id;
44
+ var nft = ((_a = acc[nftKey]) !== null && _a !== void 0 ? _a : {
45
+ id: id,
46
+ tokenId: tokenId,
47
+ amount: new bignumber_js_1["default"](0),
48
+ collection: {
49
+ contract: contract,
50
+ standard: standard
51
+ }
52
+ });
53
+ if (nftOp.type === "NFT_IN") {
54
+ nft.amount = nft.amount.plus(nftOp.value);
55
+ }
56
+ else if (nftOp.type === "NFT_OUT") {
57
+ nft.amount = nft.amount.minus(nftOp.value);
58
+ }
59
+ acc[nftKey] = nft;
60
+ return acc;
61
+ }, {});
62
+ return Object.values(nftsMap);
63
+ };
64
+ exports.nftsFromOperations = nftsFromOperations;
65
+ var nftsByCollections = function (nfts, collectionAddress) {
66
+ if (nfts === void 0) { nfts = []; }
67
+ var filteredNfts = collectionAddress
68
+ ? nfts.filter(function (n) { return n.collection.contract === collectionAddress; })
69
+ : nfts;
70
+ var collectionMap = filteredNfts.reduce(function (acc, nft) {
71
+ var collection = nft.collection, nftWithoutCollection = __rest(nft, ["collection"]);
72
+ if (!acc[collection.contract]) {
73
+ acc[collection.contract] = __assign(__assign({}, collection), { nfts: [] });
74
+ }
75
+ acc[collection.contract].nfts.push(nftWithoutCollection);
76
+ return acc;
77
+ }, {});
78
+ return Object.values(collectionMap);
79
+ };
80
+ exports.nftsByCollections = nftsByCollections;
81
+ var getNftKey = function (contract, tokenId) {
82
+ return contract + "-" + tokenId;
83
+ };
84
+ exports.getNftKey = getNftKey;
85
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/nft/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./nftId";
2
+ export * from "./helpers";
3
+ export * from "./NftMetadataProvider";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nft/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ exports.__esModule = true;
13
+ __exportStar(require("./nftId"), exports);
14
+ __exportStar(require("./helpers"), exports);
15
+ __exportStar(require("./NftMetadataProvider"), exports);
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nft/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAAwB;AACxB,4CAA0B;AAC1B,wDAAsC"}
@@ -0,0 +1,3 @@
1
+ export declare const encodeNftId: (accountId: string, contract: string, tokenId: string) => string;
2
+ export declare const decodeNftId: (id: string) => unknown;
3
+ //# sourceMappingURL=nftId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nftId.d.ts","sourceRoot":"","sources":["../../src/nft/nftId.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,cACX,MAAM,YACP,MAAM,WACP,MAAM,KACd,MAEF,CAAC;AAEF,eAAO,MAAM,WAAW,OAAQ,MAAM,KAAG,OAQxC,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ exports.__esModule = true;
19
+ exports.decodeNftId = exports.encodeNftId = void 0;
20
+ var encodeNftId = function (accountId, contract, tokenId) {
21
+ return accountId + "+" + contract + "+" + tokenId.toString();
22
+ };
23
+ exports.encodeNftId = encodeNftId;
24
+ var decodeNftId = function (id) {
25
+ var _a = __read(id.split("+"), 3), accountId = _a[0], contract = _a[1], tokenId = _a[2];
26
+ return {
27
+ accountId: accountId,
28
+ contract: contract,
29
+ tokenId: tokenId
30
+ };
31
+ };
32
+ exports.decodeNftId = decodeNftId;
33
+ //# sourceMappingURL=nftId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nftId.js","sourceRoot":"","sources":["../../src/nft/nftId.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAO,IAAM,WAAW,GAAG,UACzB,SAAiB,EACjB,QAAgB,EAChB,OAAe;IAEf,OAAU,SAAS,SAAI,QAAQ,SAAI,OAAO,CAAC,QAAQ,EAAI,CAAC;AAC1D,CAAC,CAAC;AANW,QAAA,WAAW,eAMtB;AAEK,IAAM,WAAW,GAAG,UAAC,EAAU;IAC9B,IAAA,KAAA,OAAiC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAA,EAA7C,SAAS,QAAA,EAAE,QAAQ,QAAA,EAAE,OAAO,QAAiB,CAAC;IAErD,OAAO;QACL,SAAS,WAAA;QACT,QAAQ,UAAA;QACR,OAAO,SAAA;KACR,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,WAAW,eAQtB"}
@@ -8,7 +8,7 @@ export declare function decodeOperationId(id: string): {
8
8
  type: string;
9
9
  };
10
10
  export declare function patchOperationWithHash(operation: Operation, hash: string): Operation;
11
- export declare function flattenOperationWithInternals(op: Operation): Operation[];
11
+ export declare function flattenOperationWithInternalsAndNfts(op: Operation): Operation[];
12
12
  export declare function getOperationAmountNumber(op: Operation): BigNumber;
13
13
  export declare function getOperationAmountNumberWithInternals(op: Operation): BigNumber;
14
14
  export declare const getOperationConfirmationNumber: (operation: Operation, account: Account) => number;
@@ -1 +1 @@
1
- {"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE/D,wBAAgB,sBAAsB,CACpC,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,WAAW,EAC9C,WAAW,EAAE,MAAM,GAClB,SAAS,GAAG,IAAI,GAAG,SAAS,CAqB9B;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,CAER;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAOA;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,GACX,SAAS,CAaX;AAED,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,EAAE,CAcxE;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAmCjE;AAED,wBAAgB,qCAAqC,CACnD,EAAE,EAAE,SAAS,GACZ,SAAS,CAKX;AAED,eAAO,MAAM,8BAA8B,cAC9B,SAAS,WACX,OAAO,KACf,MAC0E,CAAC;AAE9E,eAAO,MAAM,yCAAyC,cACzC,SAAS,WACX,OAAO,KACf,MAGK,CAAC;AAET,eAAO,MAAM,oBAAoB,cACpB,SAAS,WACX,OAAO,mBACC,MAAM,KACtB,OAGQ,CAAC"}
1
+ {"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE/D,wBAAgB,sBAAsB,CACpC,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,WAAW,EAC9C,WAAW,EAAE,MAAM,GAClB,SAAS,GAAG,IAAI,GAAG,SAAS,CA+B9B;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,CAER;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAOA;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,GACX,SAAS,CAaX;AAED,wBAAgB,oCAAoC,CAClD,EAAE,EAAE,SAAS,GACZ,SAAS,EAAE,CAmBb;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAqCjE;AAED,wBAAgB,qCAAqC,CACnD,EAAE,EAAE,SAAS,GACZ,SAAS,CAKX;AAED,eAAO,MAAM,8BAA8B,cAC9B,SAAS,WACX,OAAO,KACf,MAC0E,CAAC;AAE9E,eAAO,MAAM,yCAAyC,cACzC,SAAS,WACX,OAAO,KACf,MAGK,CAAC;AAET,eAAO,MAAM,oBAAoB,cACpB,SAAS,WACX,OAAO,mBACC,MAAM,KACtB,OAGQ,CAAC"}
package/lib/operation.js CHANGED
@@ -27,7 +27,7 @@ var __read = (this && this.__read) || function (o, n) {
27
27
  return ar;
28
28
  };
29
29
  exports.__esModule = true;
30
- exports.isConfirmedOperation = exports.getOperationConfirmationDisplayableNumber = exports.getOperationConfirmationNumber = exports.getOperationAmountNumberWithInternals = exports.getOperationAmountNumber = exports.flattenOperationWithInternals = exports.patchOperationWithHash = exports.decodeOperationId = exports.encodeOperationId = exports.findOperationInAccount = void 0;
30
+ exports.isConfirmedOperation = exports.getOperationConfirmationDisplayableNumber = exports.getOperationConfirmationNumber = exports.getOperationAmountNumberWithInternals = exports.getOperationAmountNumber = exports.flattenOperationWithInternalsAndNfts = exports.patchOperationWithHash = exports.decodeOperationId = exports.encodeOperationId = exports.findOperationInAccount = void 0;
31
31
  var bignumber_js_1 = require("bignumber.js");
32
32
  function findOperationInAccount(_a, operationId) {
33
33
  var operations = _a.operations, pendingOperations = _a.pendingOperations;
@@ -43,6 +43,14 @@ function findOperationInAccount(_a, operationId) {
43
43
  return internalOp;
44
44
  }
45
45
  }
46
+ if (op.nftOperations) {
47
+ var nftOps = op.nftOperations;
48
+ for (var j = 0; j < nftOps.length; j++) {
49
+ var nftOp = nftOps[j];
50
+ if (nftOp.id === operationId)
51
+ return nftOp;
52
+ }
53
+ }
46
54
  }
47
55
  for (var i = 0; i < pendingOperations.length; i++) {
48
56
  var op = pendingOperations[i];
@@ -70,7 +78,7 @@ function patchOperationWithHash(operation, hash) {
70
78
  operation.subOperations.map(function (op) { return (__assign(__assign({}, op), { hash: hash, id: encodeOperationId(op.accountId, hash, op.type) })); }) });
71
79
  }
72
80
  exports.patchOperationWithHash = patchOperationWithHash;
73
- function flattenOperationWithInternals(op) {
81
+ function flattenOperationWithInternalsAndNfts(op) {
74
82
  var ops = [];
75
83
  // ops of type NONE does not appear in lists
76
84
  if (op.type !== "NONE") {
@@ -80,15 +88,20 @@ function flattenOperationWithInternals(op) {
80
88
  if (op.internalOperations) {
81
89
  ops = ops.concat(op.internalOperations);
82
90
  }
91
+ // all nfts operations are expanded after the main op
92
+ if (op.nftOperations) {
93
+ ops = ops.concat(op.nftOperations);
94
+ }
83
95
  return ops;
84
96
  }
85
- exports.flattenOperationWithInternals = flattenOperationWithInternals;
97
+ exports.flattenOperationWithInternalsAndNfts = flattenOperationWithInternalsAndNfts;
86
98
  function getOperationAmountNumber(op) {
87
99
  switch (op.type) {
88
100
  case "IN":
89
101
  case "REWARD":
90
102
  case "REWARD_PAYOUT":
91
103
  case "SUPPLY":
104
+ case "NFT_IN":
92
105
  return op.value;
93
106
  case "OUT":
94
107
  case "REVEAL":
@@ -101,6 +114,7 @@ function getOperationAmountNumber(op) {
101
114
  case "OPT_OUT":
102
115
  case "REDEEM":
103
116
  case "SLASH":
117
+ case "NFT_OUT":
104
118
  return op.value.negated();
105
119
  case "FREEZE":
106
120
  case "UNFREEZE":
@@ -118,7 +132,7 @@ function getOperationAmountNumber(op) {
118
132
  }
119
133
  exports.getOperationAmountNumber = getOperationAmountNumber;
120
134
  function getOperationAmountNumberWithInternals(op) {
121
- return flattenOperationWithInternals(op).reduce(function (amount, op) { return amount.plus(getOperationAmountNumber(op)); }, new bignumber_js_1.BigNumber(0));
135
+ return flattenOperationWithInternalsAndNfts(op).reduce(function (amount, op) { return amount.plus(getOperationAmountNumber(op)); }, new bignumber_js_1.BigNumber(0));
122
136
  }
123
137
  exports.getOperationAmountNumberWithInternals = getOperationAmountNumberWithInternals;
124
138
  var getOperationConfirmationNumber = function (operation, account) {
@@ -133,7 +147,7 @@ var getOperationConfirmationDisplayableNumber = function (operation, account) {
133
147
  exports.getOperationConfirmationDisplayableNumber = getOperationConfirmationDisplayableNumber;
134
148
  var isConfirmedOperation = function (operation, account, confirmationsNb) {
135
149
  return operation.blockHeight
136
- ? account.blockHeight - operation.blockHeight > confirmationsNb
150
+ ? account.blockHeight - operation.blockHeight + 1 > confirmationsNb
137
151
  : false;
138
152
  };
139
153
  exports.isConfirmedOperation = isConfirmedOperation;