@super-protocol/sdk-js 2.1.4-beta.8 → 2.1.5

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 (147) hide show
  1. package/dist/cjs/TIIGenerator.js +193 -210
  2. package/dist/cjs/analytics/Analytics.d.ts +2 -2
  3. package/dist/cjs/analytics/Analytics.js +15 -22
  4. package/dist/cjs/analytics/AnalyticsError.js +2 -1
  5. package/dist/cjs/analytics/eventProviders/BrowserEventProvider.js +14 -8
  6. package/dist/cjs/analytics/eventProviders/EventProvider.js +13 -2
  7. package/dist/cjs/analytics/eventProviders/NodeEventProvider.js +9 -1
  8. package/dist/cjs/analytics/transports/AxiosTransport.js +24 -36
  9. package/dist/cjs/analytics/transports/FetchTransport.js +23 -34
  10. package/dist/cjs/analytics/types.d.ts +1 -1
  11. package/dist/cjs/connectors/BaseConnector.js +5 -17
  12. package/dist/cjs/connectors/BlockchainConnector.js +164 -181
  13. package/dist/cjs/connectors/BlockchainEventsListener.js +42 -53
  14. package/dist/cjs/contracts/abi.d.ts +33 -107
  15. package/dist/cjs/contracts/abi.js +34 -131
  16. package/dist/cjs/crypto/Crypto.js +54 -73
  17. package/dist/cjs/crypto/nodejs/AES.js +40 -55
  18. package/dist/cjs/crypto/nodejs/ARIA.js +39 -54
  19. package/dist/cjs/crypto/nodejs/ECIES.js +44 -57
  20. package/dist/cjs/crypto/nodejs/NativeCrypto.js +29 -42
  21. package/dist/cjs/crypto/nodejs/RSA-Hybrid.js +26 -27
  22. package/dist/cjs/index.d.ts +1 -0
  23. package/dist/cjs/index.js +2 -1
  24. package/dist/cjs/models/EtlModel.js +34 -46
  25. package/dist/cjs/models/Offer.js +110 -156
  26. package/dist/cjs/models/Order.js +166 -200
  27. package/dist/cjs/models/Provider.js +47 -65
  28. package/dist/cjs/models/TCB.js +32 -55
  29. package/dist/cjs/models/TeeOffer.js +188 -250
  30. package/dist/cjs/polyfills.js +1 -1
  31. package/dist/cjs/proto/Compression.js +4 -5
  32. package/dist/cjs/proto/TRI.js +14 -17
  33. package/dist/cjs/proto/TeeProperties.js +19 -23
  34. package/dist/cjs/providers/storage/ChunksDownloadDecorator.js +38 -70
  35. package/dist/cjs/providers/storage/S3StorageProvider.js +118 -166
  36. package/dist/cjs/providers/storage/StorageAdapter.js +155 -177
  37. package/dist/cjs/providers/storage/StorageContentWriter.js +103 -118
  38. package/dist/cjs/providers/storage/StorageKeyValueAdapter.js +84 -117
  39. package/dist/cjs/providers/storage/StorageMetadataReader.js +38 -49
  40. package/dist/cjs/providers/storage/StorjAdapter.js +28 -48
  41. package/dist/cjs/providers/storage/StorjStorageProvider.d.ts +0 -1
  42. package/dist/cjs/providers/storage/StorjStorageProvider.js +101 -163
  43. package/dist/cjs/providers/storage/getStorageProvider.js +1 -1
  44. package/dist/cjs/staticModels/ActiveOffers.js +14 -29
  45. package/dist/cjs/staticModels/ActiveOrders.js +20 -35
  46. package/dist/cjs/staticModels/Consensus.js +71 -93
  47. package/dist/cjs/staticModels/Deposits.js +20 -39
  48. package/dist/cjs/staticModels/Marks.js +7 -20
  49. package/dist/cjs/staticModels/ModelPackager.js +26 -39
  50. package/dist/cjs/staticModels/Offers.js +33 -51
  51. package/dist/cjs/staticModels/Orders.js +108 -106
  52. package/dist/cjs/staticModels/ProviderRegistry.js +23 -41
  53. package/dist/cjs/staticModels/StaticModel.js +22 -33
  54. package/dist/cjs/staticModels/Superpro.js +2 -1
  55. package/dist/cjs/staticModels/SuperproToken.js +27 -40
  56. package/dist/cjs/staticModels/TeeOffers.js +64 -94
  57. package/dist/cjs/tee/QuoteParser.js +20 -20
  58. package/dist/cjs/tee/QuoteValidator.js +176 -201
  59. package/dist/cjs/tee/helpers.js +2 -1
  60. package/dist/cjs/tee/statuses.js +4 -4
  61. package/dist/cjs/tee/types.d.ts +5 -0
  62. package/dist/cjs/types/Consensus.js +2 -2
  63. package/dist/cjs/types/Marks.js +2 -2
  64. package/dist/cjs/types/Offer.js +3 -3
  65. package/dist/cjs/types/Order.d.ts +2 -14
  66. package/dist/cjs/types/Order.js +3 -46
  67. package/dist/cjs/types/SlotUsage.js +2 -2
  68. package/dist/cjs/types/Superpro.js +2 -2
  69. package/dist/cjs/utils/Monitoring.js +6 -5
  70. package/dist/cjs/utils/NonceTracker.js +31 -43
  71. package/dist/cjs/utils/PubSub.js +2 -4
  72. package/dist/cjs/utils/TxManager.js +110 -120
  73. package/dist/cjs/utils/compressors/GzipCompressor.js +5 -16
  74. package/dist/cjs/utils/compressors/UncompressedCompressor.js +2 -2
  75. package/dist/cjs/utils/helper.js +26 -23
  76. package/dist/cjs/utils/helpers/getStreamChunks.js +29 -68
  77. package/dist/cjs/utils/helpers/tryWithInterval.js +7 -16
  78. package/dist/cjs/utils/resourceLoaders/BaseResourceLoader.js +7 -44
  79. package/dist/cjs/utils/resourceLoaders/StorageProviderLoader.js +18 -27
  80. package/dist/cjs/utils/resourceLoaders/UrlResourceLoader.js +8 -21
  81. package/dist/cjs/utils/resourceLoaders/getResourceLoader.js +1 -1
  82. package/dist/mjs/TIIGenerator.js +1 -1
  83. package/dist/mjs/analytics/Analytics.d.ts +2 -2
  84. package/dist/mjs/analytics/Analytics.js +1 -1
  85. package/dist/mjs/analytics/eventProviders/NodeEventProvider.js +1 -1
  86. package/dist/mjs/analytics/transports/AxiosTransport.js +1 -1
  87. package/dist/mjs/analytics/transports/FetchTransport.js +1 -1
  88. package/dist/mjs/analytics/types.d.ts +1 -1
  89. package/dist/mjs/connectors/BaseConnector.js +1 -1
  90. package/dist/mjs/connectors/BlockchainConnector.js +1 -1
  91. package/dist/mjs/connectors/BlockchainEventsListener.js +1 -1
  92. package/dist/mjs/contracts/abi.d.ts +33 -107
  93. package/dist/mjs/contracts/abi.js +34 -131
  94. package/dist/mjs/crypto/Crypto.js +1 -1
  95. package/dist/mjs/crypto/nodejs/AES.js +1 -1
  96. package/dist/mjs/crypto/nodejs/ARIA.js +1 -1
  97. package/dist/mjs/crypto/nodejs/ECIES.js +1 -1
  98. package/dist/mjs/crypto/nodejs/NativeCrypto.js +1 -1
  99. package/dist/mjs/index.d.ts +1 -0
  100. package/dist/mjs/index.js +2 -1
  101. package/dist/mjs/models/EtlModel.js +1 -1
  102. package/dist/mjs/models/Offer.js +1 -1
  103. package/dist/mjs/models/Order.js +38 -20
  104. package/dist/mjs/models/Provider.js +1 -1
  105. package/dist/mjs/models/TCB.js +1 -1
  106. package/dist/mjs/models/TeeOffer.js +1 -1
  107. package/dist/mjs/polyfills.js +1 -1
  108. package/dist/mjs/proto/Compression.js +1 -1
  109. package/dist/mjs/proto/TRI.js +1 -1
  110. package/dist/mjs/proto/TeeProperties.js +1 -1
  111. package/dist/mjs/providers/storage/ChunksDownloadDecorator.js +4 -4
  112. package/dist/mjs/providers/storage/S3StorageProvider.js +1 -1
  113. package/dist/mjs/providers/storage/StorageAdapter.js +1 -1
  114. package/dist/mjs/providers/storage/StorageContentWriter.js +1 -1
  115. package/dist/mjs/providers/storage/StorageKeyValueAdapter.js +1 -1
  116. package/dist/mjs/providers/storage/StorageMetadataReader.js +1 -1
  117. package/dist/mjs/providers/storage/StorjAdapter.js +1 -1
  118. package/dist/mjs/providers/storage/StorjStorageProvider.d.ts +0 -1
  119. package/dist/mjs/providers/storage/StorjStorageProvider.js +1 -3
  120. package/dist/mjs/providers/storage/getStorageProvider.js +1 -1
  121. package/dist/mjs/staticModels/ActiveOrders.js +1 -1
  122. package/dist/mjs/staticModels/Consensus.js +1 -1
  123. package/dist/mjs/staticModels/Deposits.js +1 -1
  124. package/dist/mjs/staticModels/ModelPackager.js +1 -1
  125. package/dist/mjs/staticModels/Offers.js +1 -1
  126. package/dist/mjs/staticModels/Orders.js +39 -12
  127. package/dist/mjs/staticModels/StaticModel.js +1 -1
  128. package/dist/mjs/staticModels/SuperproToken.js +1 -1
  129. package/dist/mjs/staticModels/TeeOffers.js +1 -1
  130. package/dist/mjs/tee/QuoteParser.js +1 -1
  131. package/dist/mjs/tee/QuoteValidator.js +1 -1
  132. package/dist/mjs/tee/helpers.js +1 -1
  133. package/dist/mjs/tee/types.d.ts +5 -0
  134. package/dist/mjs/types/Order.d.ts +2 -14
  135. package/dist/mjs/types/Order.js +1 -40
  136. package/dist/mjs/utils/Monitoring.js +1 -1
  137. package/dist/mjs/utils/NonceTracker.js +1 -1
  138. package/dist/mjs/utils/PubSub.js +1 -1
  139. package/dist/mjs/utils/TxManager.js +1 -1
  140. package/dist/mjs/utils/helper.js +1 -1
  141. package/dist/mjs/utils/helpers/getStreamChunks.js +1 -1
  142. package/dist/mjs/utils/helpers/tryWithInterval.js +1 -1
  143. package/dist/mjs/utils/resourceLoaders/BaseResourceLoader.js +1 -1
  144. package/dist/mjs/utils/resourceLoaders/StorageProviderLoader.js +1 -1
  145. package/dist/mjs/utils/resourceLoaders/UrlResourceLoader.js +1 -1
  146. package/dist/mjs/utils/resourceLoaders/getResourceLoader.js +1 -1
  147. package/package.json +6 -16
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
4
  };
@@ -27,221 +18,213 @@ const QuoteParser_js_1 = require("./tee/QuoteParser.js");
27
18
  const logger_js_1 = __importDefault(require("./logger.js"));
28
19
  const { gzip, ungzip } = node_gzip_1.default;
29
20
  class TIIGenerator {
30
- static checkQuote(quote, dataBlob, sgxApiUrl) {
31
- return __awaiter(this, void 0, void 0, function* () {
32
- const quoteBuffer = Buffer.from(quote);
33
- const validator = new QuoteValidator_js_1.QuoteValidator(sgxApiUrl);
34
- const quoteStatus = yield validator.validate(quoteBuffer);
35
- if (quoteStatus.quoteValidationStatus !== statuses_js_1.QuoteValidationStatuses.UpToDate) {
36
- if (quoteStatus.quoteValidationStatus === statuses_js_1.QuoteValidationStatuses.Error) {
37
- throw new Error('Quote is invalid');
38
- }
39
- else {
40
- logger_js_1.default.warn(quoteStatus, 'Quote validation status is not UpToDate');
41
- }
42
- }
43
- const userDataCheckResult = yield validator.isQuoteHasUserData(quoteBuffer, Buffer.from(dataBlob));
44
- if (!userDataCheckResult) {
45
- throw new Error('Quote has invalid user data');
21
+ static verifiedTlbHashes = new Map();
22
+ static verifiedTcbs = new Set();
23
+ static async checkQuote(quote, dataBlob, sgxApiUrl) {
24
+ const quoteBuffer = Buffer.from(quote);
25
+ const validator = new QuoteValidator_js_1.QuoteValidator(sgxApiUrl);
26
+ const quoteStatus = await validator.validate(quoteBuffer);
27
+ if (quoteStatus.quoteValidationStatus !== statuses_js_1.QuoteValidationStatuses.UpToDate) {
28
+ if (quoteStatus.quoteValidationStatus === statuses_js_1.QuoteValidationStatuses.Error) {
29
+ throw new Error('Quote is invalid');
46
30
  }
47
- const parser = new QuoteParser_js_1.TeeSgxParser();
48
- const parsedQuote = parser.parseQuote(quote);
49
- const report = parser.parseReport(parsedQuote.report);
50
- if (report.mrSigner.toString('hex') !== config_js_1.config.TEE_LOADER_TRUSTED_MRSIGNER) {
51
- throw new Error('Quote has invalid MR signer');
31
+ else {
32
+ logger_js_1.default.warn(quoteStatus, 'Quote validation status is not UpToDate');
52
33
  }
53
- });
34
+ }
35
+ const userDataCheckResult = await validator.isQuoteHasUserData(quoteBuffer, Buffer.from(dataBlob));
36
+ if (!userDataCheckResult) {
37
+ throw new Error('Quote has invalid user data');
38
+ }
39
+ const parser = new QuoteParser_js_1.TeeSgxParser();
40
+ const parsedQuote = parser.parseQuote(quote);
41
+ const report = parser.parseReport(parsedQuote.report);
42
+ if (report.mrSigner.toString('hex') !== config_js_1.config.TEE_LOADER_TRUSTED_MRSIGNER) {
43
+ throw new Error('Quote has invalid MR signer');
44
+ }
54
45
  }
55
- static verifyTcb(tcb, quoteString, pubKey, sgxApiUrl) {
56
- return __awaiter(this, void 0, void 0, function* () {
57
- // check cache
58
- if (this.verifiedTcbs.has(tcb.tcbId)) {
59
- logger_js_1.default.trace(`Tcb id = ${tcb.tcbId}, already validated`);
60
- return;
61
- }
62
- const quote = Buffer.from(quoteString, 'base64');
63
- const signedTcbData = Object.assign({ checkingTcbId: tcb.tcbId.toString(), pubKey }, (yield tcb.getPublicData()));
64
- const serializer = new tee_lib_1.TLBlockSerializerV1();
65
- const dataBlob = yield serializer.serializeAnyData(signedTcbData);
66
- yield this.checkQuote(quote, dataBlob, sgxApiUrl);
67
- // update cashe
68
- this.verifiedTcbs.add(tcb.tcbId);
69
- if (this.verifiedTcbs.size > config_js_1.config.TLB_CACHE_SIZE) {
70
- const [value] = this.verifiedTcbs.entries().next().value;
71
- this.verifiedTcbs.delete(value);
72
- logger_js_1.default.trace(value, `TCB id = ${value} removed from the cache. Cache size: ${this.verifiedTcbs.size}, cache limit: ${config_js_1.config.TLB_CACHE_SIZE}`);
73
- }
74
- logger_js_1.default.trace(tcb.tcbId, `TCB id = ${tcb.tcbId} added to the cache. Cache size: ${this.verifiedTcbs.size}, cache limit: ${config_js_1.config.TLB_CACHE_SIZE}`);
46
+ static async verifyTcb(tcb, quoteString, pubKey, sgxApiUrl) {
47
+ // check cache
48
+ if (this.verifiedTcbs.has(tcb.tcbId)) {
49
+ logger_js_1.default.trace(`Tcb id = ${tcb.tcbId}, already validated`);
50
+ return;
51
+ }
52
+ const quote = Buffer.from(quoteString, 'base64');
53
+ const signedTcbData = {
54
+ checkingTcbId: tcb.tcbId.toString(),
55
+ pubKey,
56
+ ...(await tcb.getPublicData()),
57
+ };
58
+ const serializer = new tee_lib_1.TLBlockSerializerV1();
59
+ const dataBlob = await serializer.serializeAnyData(signedTcbData);
60
+ await this.checkQuote(quote, dataBlob, sgxApiUrl);
61
+ // update cashe
62
+ this.verifiedTcbs.add(tcb.tcbId);
63
+ if (this.verifiedTcbs.size > config_js_1.config.TLB_CACHE_SIZE) {
64
+ const [value] = this.verifiedTcbs.entries().next().value;
65
+ this.verifiedTcbs.delete(value);
66
+ logger_js_1.default.trace(value, `TCB id = ${value} removed from the cache. Cache size: ${this.verifiedTcbs.size}, cache limit: ${config_js_1.config.TLB_CACHE_SIZE}`);
67
+ }
68
+ logger_js_1.default.trace(tcb.tcbId, `TCB id = ${tcb.tcbId} added to the cache. Cache size: ${this.verifiedTcbs.size}, cache limit: ${config_js_1.config.TLB_CACHE_SIZE}`);
69
+ }
70
+ static async verifyTlb(tlb, tlbString, offerId, sgxApiUrl) {
71
+ const tlbHash = await index_js_1.default.createHash(Buffer.from(tlbString), {
72
+ algo: dto_js_1.HashAlgorithm.SHA256,
73
+ encoding: dto_js_1.Encoding.base64,
75
74
  });
75
+ if (this.verifiedTlbHashes.has(tlbHash.hash)) {
76
+ logger_js_1.default.trace(tlbHash, `TLB hash of offer ${this.verifiedTlbHashes.get(tlbHash.hash)} loaded from the cache. Cache size: ${this.verifiedTlbHashes.size}, cache limit: ${config_js_1.config.TLB_CACHE_SIZE}`);
77
+ return;
78
+ }
79
+ const quoteBuffer = Buffer.from(tlb.quote);
80
+ await this.checkQuote(quoteBuffer, tlb.dataBlob, sgxApiUrl);
81
+ this.verifiedTlbHashes.set(tlbHash.hash, offerId);
82
+ if (this.verifiedTlbHashes.size > config_js_1.config.TLB_CACHE_SIZE) {
83
+ const [key, value] = this.verifiedTlbHashes.entries().next().value;
84
+ this.verifiedTlbHashes.delete(key);
85
+ logger_js_1.default.trace(key, `TLB hash of offer ${value} removed from the cache. Cache size: ${this.verifiedTlbHashes.size}, cache limit: ${config_js_1.config.TLB_CACHE_SIZE}`);
86
+ }
87
+ logger_js_1.default.trace(tlbHash.hash, `TLB hash of offer ${offerId} added to the cache. Cache size: ${this.verifiedTlbHashes.size}, cache limit: ${config_js_1.config.TLB_CACHE_SIZE}`);
76
88
  }
77
- static verifyTlb(tlb, tlbString, offerId, sgxApiUrl) {
78
- return __awaiter(this, void 0, void 0, function* () {
79
- const tlbHash = yield index_js_1.default.createHash(Buffer.from(tlbString), {
80
- algo: dto_js_1.HashAlgorithm.SHA256,
89
+ static async generateByOffer(offerId, solutionHashes, linkageString, resource, args, encryption, sgxApiUrl, verifyByTcb = false) {
90
+ const teeOffer = new index_js_2.TeeOffer(offerId);
91
+ const teeOfferInfo = await teeOffer.getInfo();
92
+ const linkage = linkageString
93
+ ? JSON.parse(linkageString)
94
+ : {
81
95
  encoding: dto_js_1.Encoding.base64,
82
- });
83
- if (this.verifiedTlbHashes.has(tlbHash.hash)) {
84
- logger_js_1.default.trace(tlbHash, `TLB hash of offer ${this.verifiedTlbHashes.get(tlbHash.hash)} loaded from the cache. Cache size: ${this.verifiedTlbHashes.size}, cache limit: ${config_js_1.config.TLB_CACHE_SIZE}`);
85
- return;
86
- }
87
- const quoteBuffer = Buffer.from(tlb.quote);
88
- yield this.checkQuote(quoteBuffer, tlb.dataBlob, sgxApiUrl);
89
- this.verifiedTlbHashes.set(tlbHash.hash, offerId);
90
- if (this.verifiedTlbHashes.size > config_js_1.config.TLB_CACHE_SIZE) {
91
- const [key, value] = this.verifiedTlbHashes.entries().next().value;
92
- this.verifiedTlbHashes.delete(key);
93
- logger_js_1.default.trace(key, `TLB hash of offer ${value} removed from the cache. Cache size: ${this.verifiedTlbHashes.size}, cache limit: ${config_js_1.config.TLB_CACHE_SIZE}`);
94
- }
95
- logger_js_1.default.trace(tlbHash.hash, `TLB hash of offer ${offerId} added to the cache. Cache size: ${this.verifiedTlbHashes.size}, cache limit: ${config_js_1.config.TLB_CACHE_SIZE}`);
96
+ mrenclave: '',
97
+ };
98
+ const serializer = new tee_lib_1.TLBlockSerializerV1();
99
+ let blockEncryption;
100
+ if (verifyByTcb) {
101
+ const tcb = new index_js_2.TCB(await teeOffer.getActualTcbId());
102
+ const { pubKey, quote } = await tcb.getUtilityData();
103
+ await this.verifyTcb(tcb, quote, pubKey, sgxApiUrl);
104
+ // TODO: must be 'blockEncryption = JSON.parse(pubKey);'
105
+ blockEncryption = {
106
+ algo: dto_js_1.CryptoAlgorithm.ECIES,
107
+ key: pubKey,
108
+ encoding: dto_js_1.Encoding.base64,
109
+ };
110
+ }
111
+ else {
112
+ const tlb = serializer.unserializeTlb(Buffer.from(teeOfferInfo.tlb, 'base64'));
113
+ await this.verifyTlb(tlb, teeOfferInfo.tlb, offerId, sgxApiUrl);
114
+ blockEncryption = {
115
+ algo: dto_js_1.CryptoAlgorithm.ECIES,
116
+ key: Buffer.from(tlb.data.teePubKeyData).toString('base64'),
117
+ encoding: dto_js_1.Encoding.base64,
118
+ };
119
+ }
120
+ // TODO: check env with SP-149
121
+ const mac = encryption.authTag || encryption.mac;
122
+ const rawTri = {
123
+ solutionHashes: solutionHashes.map((hash) => ({
124
+ algo: hash.algo,
125
+ hash: Buffer.from(hash.hash, hash.encoding),
126
+ })),
127
+ mrenclave: Buffer.from(linkage.mrenclave, linkage.encoding),
128
+ args: JSON.stringify(args || ''),
129
+ encryption: {
130
+ ...encryption,
131
+ ciphertext: encryption.ciphertext
132
+ ? Buffer.from(encryption.ciphertext, encryption.encoding)
133
+ : undefined,
134
+ key: encryption.key ? Buffer.from(encryption.key, encryption.encoding) : undefined,
135
+ iv: encryption.iv
136
+ ? Buffer.from(encryption.iv, encryption.encoding)
137
+ : undefined,
138
+ mac: mac ? Buffer.from(mac, encryption.encoding) : undefined,
139
+ },
140
+ };
141
+ const tri = TRI_js_1.TRI.encode(rawTri).finish();
142
+ const compressedTri = Compression_js_1.Compression.encode({
143
+ data: await gzip(tri),
144
+ type: Compression_js_1.Compression_TYPE.GZIP,
145
+ }).finish();
146
+ return JSON.stringify({
147
+ encryptedResource: await index_js_1.default.encrypt(JSON.stringify(resource), JSON.parse(teeOfferInfo.argsPublicKey)),
148
+ tri: await index_js_1.default.encrypt(Buffer.from(compressedTri).toString(dto_js_1.Encoding.base64), blockEncryption),
96
149
  });
97
150
  }
98
- static generateByOffer(offerId, solutionHashes, linkageString, resource, args, encryption, sgxApiUrl, verifyByTcb = false) {
99
- return __awaiter(this, void 0, void 0, function* () {
100
- const teeOffer = new index_js_2.TeeOffer(offerId);
101
- const teeOfferInfo = yield teeOffer.getInfo();
102
- const linkage = linkageString
103
- ? JSON.parse(linkageString)
104
- : {
105
- encoding: dto_js_1.Encoding.base64,
106
- mrenclave: '',
107
- };
108
- const serializer = new tee_lib_1.TLBlockSerializerV1();
109
- let blockEncryption;
110
- if (verifyByTcb) {
111
- const tcb = new index_js_2.TCB(yield teeOffer.getActualTcbId());
112
- const { pubKey, quote } = yield tcb.getUtilityData();
113
- yield this.verifyTcb(tcb, quote, pubKey, sgxApiUrl);
114
- // TODO: must be 'blockEncryption = JSON.parse(pubKey);'
115
- blockEncryption = {
116
- algo: dto_js_1.CryptoAlgorithm.ECIES,
117
- key: pubKey,
118
- encoding: dto_js_1.Encoding.base64,
119
- };
151
+ static async generate(orderId, resource, args, encryption, sgxApiUrl, verifyByTcb = false) {
152
+ const order = new index_js_2.Order(orderId);
153
+ const parentOrderId = await order.getParentOrder();
154
+ const parentOrder = new index_js_2.Order(parentOrderId);
155
+ const parentOrderInfo = await parentOrder.getOrderInfo();
156
+ const { hashes, linkage } = await this.getSolutionHashesAndLinkage(parentOrderInfo.args.inputOffers);
157
+ return this.generateByOffer(parentOrderInfo.offerId, hashes, linkage, resource, args, encryption, sgxApiUrl, verifyByTcb);
158
+ }
159
+ static async getSolutionHashesAndLinkage(inputOffers) {
160
+ const solutionHashes = [];
161
+ let solutionLinkage;
162
+ let anyLinkage;
163
+ await Promise.all(inputOffers.map(async (offerId) => {
164
+ const offer = new index_js_2.Offer(offerId);
165
+ const offerInfo = await offer.getInfo();
166
+ if (offerInfo.hash) {
167
+ solutionHashes.push(JSON.parse(offerInfo.hash));
168
+ }
169
+ const restrictions = lodash_1.default.intersection(offerInfo.restrictions.offers, inputOffers).filter((restrictedOfferId) => restrictedOfferId !== offer.id);
170
+ if (restrictions.length) {
171
+ solutionLinkage = offerInfo.linkage;
120
172
  }
121
173
  else {
122
- const tlb = serializer.unserializeTlb(Buffer.from(teeOfferInfo.tlb, 'base64'));
123
- yield this.verifyTlb(tlb, teeOfferInfo.tlb, offerId, sgxApiUrl);
124
- blockEncryption = {
125
- algo: dto_js_1.CryptoAlgorithm.ECIES,
126
- key: Buffer.from(tlb.data.teePubKeyData).toString('base64'),
127
- encoding: dto_js_1.Encoding.base64,
128
- };
174
+ anyLinkage = offerInfo.linkage;
129
175
  }
130
- // TODO: check env with SP-149
131
- const mac = encryption.authTag || encryption.mac;
132
- const rawTri = {
133
- solutionHashes: solutionHashes.map((hash) => ({
134
- algo: hash.algo,
135
- hash: Buffer.from(hash.hash, hash.encoding),
136
- })),
137
- mrenclave: Buffer.from(linkage.mrenclave, linkage.encoding),
138
- args: JSON.stringify(args || ''),
139
- encryption: Object.assign(Object.assign({}, encryption), { ciphertext: encryption.ciphertext
140
- ? Buffer.from(encryption.ciphertext, encryption.encoding)
141
- : undefined, key: encryption.key ? Buffer.from(encryption.key, encryption.encoding) : undefined, iv: encryption.iv
142
- ? Buffer.from(encryption.iv, encryption.encoding)
143
- : undefined, mac: mac ? Buffer.from(mac, encryption.encoding) : undefined }),
144
- };
145
- const tri = TRI_js_1.TRI.encode(rawTri).finish();
146
- const compressedTri = Compression_js_1.Compression.encode({
147
- data: yield gzip(tri),
148
- type: Compression_js_1.Compression_TYPE.GZIP,
149
- }).finish();
150
- return JSON.stringify({
151
- encryptedResource: yield index_js_1.default.encrypt(JSON.stringify(resource), JSON.parse(teeOfferInfo.argsPublicKey)),
152
- tri: yield index_js_1.default.encrypt(Buffer.from(compressedTri).toString(dto_js_1.Encoding.base64), blockEncryption),
153
- });
154
- });
155
- }
156
- static generate(orderId, resource, args, encryption, sgxApiUrl, verifyByTcb = false) {
157
- return __awaiter(this, void 0, void 0, function* () {
158
- const order = new index_js_2.Order(orderId);
159
- const parentOrderId = yield order.getParentOrder();
160
- const parentOrder = new index_js_2.Order(parentOrderId);
161
- const parentOrderInfo = yield parentOrder.getOrderInfo();
162
- const { hashes, linkage } = yield this.getSolutionHashesAndLinkage(parentOrderInfo.args.inputOffers);
163
- return this.generateByOffer(parentOrderInfo.offerId, hashes, linkage, resource, args, encryption, sgxApiUrl, verifyByTcb);
164
- });
176
+ }));
177
+ return {
178
+ hashes: solutionHashes,
179
+ linkage: solutionLinkage || anyLinkage,
180
+ };
165
181
  }
166
- static getSolutionHashesAndLinkage(inputOffers) {
167
- return __awaiter(this, void 0, void 0, function* () {
168
- const solutionHashes = [];
169
- let solutionLinkage;
170
- let anyLinkage;
171
- yield Promise.all(inputOffers.map((offerId) => __awaiter(this, void 0, void 0, function* () {
172
- const offer = new index_js_2.Offer(offerId);
173
- const offerInfo = yield offer.getInfo();
174
- if (offerInfo.hash) {
175
- solutionHashes.push(JSON.parse(offerInfo.hash));
176
- }
177
- const restrictions = lodash_1.default.intersection(offerInfo.restrictions.offers, inputOffers).filter((restrictedOfferId) => restrictedOfferId !== offer.id);
178
- if (restrictions.length) {
179
- solutionLinkage = offerInfo.linkage;
180
- }
181
- else {
182
- anyLinkage = offerInfo.linkage;
183
- }
184
- })));
185
- return {
186
- hashes: solutionHashes,
187
- linkage: solutionLinkage || anyLinkage,
188
- };
189
- });
190
- }
191
- static getTRI(tii, decryptionKey) {
192
- return __awaiter(this, void 0, void 0, function* () {
193
- const tiiObj = JSON.parse(tii);
194
- tiiObj.tri.key = decryptionKey.toString(tiiObj.tri.encoding);
195
- const tri = yield index_js_1.default.decrypt(tiiObj.tri);
196
- const compression = Compression_js_1.Compression.decode(Buffer.from(tri, tiiObj.tri.encoding));
197
- let decompressed;
198
- switch (compression.type) {
199
- case Compression_js_1.Compression_TYPE.GZIP:
200
- decompressed = yield ungzip(compression.data);
201
- break;
202
- default:
203
- throw Error('Unknown compression method');
204
- }
205
- const decoded = TRI_js_1.TRI.decode(decompressed);
206
- return {
207
- solutionHashes: decoded.solutionHashes.map((hash) => ({
208
- hash: Buffer.from(hash.hash).toString(dto_js_1.Encoding.base64),
209
- algo: hash.algo,
210
- encoding: dto_js_1.Encoding.base64,
211
- })),
212
- linkage: {
213
- encoding: dto_js_1.Encoding.base64,
214
- mrenclave: Buffer.from(decoded.mrenclave).toString(dto_js_1.Encoding.base64),
215
- },
216
- args: decoded.args,
217
- encryption: {
218
- algo: decoded.encryption.algo,
219
- cipher: decoded.encryption.cipher,
220
- encoding: dto_js_1.Encoding.base64,
221
- key: Buffer.from(decoded.encryption.key).toString(dto_js_1.Encoding.base64),
222
- iv: decoded.encryption.iv && Buffer.from(decoded.encryption.iv).toString(dto_js_1.Encoding.base64),
223
- mac: decoded.encryption.mac &&
224
- Buffer.from(decoded.encryption.mac).toString(dto_js_1.Encoding.base64),
225
- },
226
- };
227
- });
182
+ static async getTRI(tii, decryptionKey) {
183
+ const tiiObj = JSON.parse(tii);
184
+ tiiObj.tri.key = decryptionKey.toString(tiiObj.tri.encoding);
185
+ const tri = await index_js_1.default.decrypt(tiiObj.tri);
186
+ const compression = Compression_js_1.Compression.decode(Buffer.from(tri, tiiObj.tri.encoding));
187
+ let decompressed;
188
+ switch (compression.type) {
189
+ case Compression_js_1.Compression_TYPE.GZIP:
190
+ decompressed = await ungzip(compression.data);
191
+ break;
192
+ default:
193
+ throw Error('Unknown compression method');
194
+ }
195
+ const decoded = TRI_js_1.TRI.decode(decompressed);
196
+ return {
197
+ solutionHashes: decoded.solutionHashes.map((hash) => ({
198
+ hash: Buffer.from(hash.hash).toString(dto_js_1.Encoding.base64),
199
+ algo: hash.algo,
200
+ encoding: dto_js_1.Encoding.base64,
201
+ })),
202
+ linkage: {
203
+ encoding: dto_js_1.Encoding.base64,
204
+ mrenclave: Buffer.from(decoded.mrenclave).toString(dto_js_1.Encoding.base64),
205
+ },
206
+ args: decoded.args,
207
+ encryption: {
208
+ algo: decoded.encryption.algo,
209
+ cipher: decoded.encryption.cipher,
210
+ encoding: dto_js_1.Encoding.base64,
211
+ key: Buffer.from(decoded.encryption.key).toString(dto_js_1.Encoding.base64),
212
+ iv: decoded.encryption.iv && Buffer.from(decoded.encryption.iv).toString(dto_js_1.Encoding.base64),
213
+ mac: decoded.encryption.mac &&
214
+ Buffer.from(decoded.encryption.mac).toString(dto_js_1.Encoding.base64),
215
+ },
216
+ };
228
217
  }
229
- static getUrl(tii, decryptionKey) {
230
- return __awaiter(this, void 0, void 0, function* () {
231
- const res = yield TIIGenerator.getResource(tii, decryptionKey);
232
- return res.url;
233
- });
218
+ static async getUrl(tii, decryptionKey) {
219
+ const res = await TIIGenerator.getResource(tii, decryptionKey);
220
+ return res.url;
234
221
  }
235
- static getResource(tii, decryptionKey) {
236
- return __awaiter(this, void 0, void 0, function* () {
237
- const encryptedResource = JSON.parse(tii).encryptedResource;
238
- encryptedResource.key = decryptionKey.toString(encryptedResource.encoding);
239
- const resource = yield index_js_1.default.decrypt(encryptedResource);
240
- return JSON.parse(resource);
241
- });
222
+ static async getResource(tii, decryptionKey) {
223
+ const encryptedResource = JSON.parse(tii).encryptedResource;
224
+ encryptedResource.key = decryptionKey.toString(encryptedResource.encoding);
225
+ const resource = await index_js_1.default.decrypt(encryptedResource);
226
+ return JSON.parse(resource);
242
227
  }
243
228
  }
244
- TIIGenerator.verifiedTlbHashes = new Map();
245
- TIIGenerator.verifiedTcbs = new Set();
246
229
  exports.default = TIIGenerator;
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVElJR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1RJSUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLDBEQUFpQztBQUNqQyxvREFBdUI7QUFFdkIsMkNBQXFDO0FBQ3JDLDJEQUF1RTtBQUN2RSwyQ0FBcUM7QUFDckMsaUVBQXVDO0FBQ3ZDLGdEQUFnRTtBQUVoRSxtREFZZ0M7QUFDaEMscURBQTRGO0FBQzVGLCtEQUF5RDtBQUN6RCxtREFBNEQ7QUFDNUQseURBQW9EO0FBQ3BELDREQUFpQztBQUVqQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLG1CQUFRLENBQUM7QUFFbEMsTUFBTSxZQUFZO0lBSVIsTUFBTSxDQUFPLFVBQVUsQ0FDN0IsS0FBaUIsRUFDakIsUUFBb0IsRUFDcEIsU0FBaUI7O1lBRWpCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxrQ0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sV0FBVyxHQUFHLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxRCxJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsS0FBSyxxQ0FBdUIsQ0FBQyxRQUFRLEVBQUU7Z0JBQzFFLElBQUksV0FBVyxDQUFDLHFCQUFxQixLQUFLLHFDQUF1QixDQUFDLEtBQUssRUFBRTtvQkFDdkUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2lCQUNyQztxQkFBTTtvQkFDTCxtQkFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUseUNBQXlDLENBQUMsQ0FBQztpQkFDckU7YUFDRjtZQUVELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxTQUFTLENBQUMsa0JBQWtCLENBQzVELFdBQVcsRUFDWCxNQUFNLENBQUMsSUFB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
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVElJR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1RJSUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBEQUFpQztBQUNqQyxvREFBdUI7QUFFdkIsMkNBQXFDO0FBQ3JDLDJEQUF1RTtBQUN2RSwyQ0FBcUM7QUFDckMsaUVBQXVDO0FBQ3ZDLGdEQUFnRTtBQUVoRSxtREFZZ0M7QUFDaEMscURBQTRGO0FBQzVGLCtEQUF5RDtBQUN6RCxtREFBNEQ7QUFDNUQseURBQW9EO0FBQ3BELDREQUFpQztBQUVqQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLG1CQUFRLENBQUM7QUFFbEMsTUFBTSxZQUFZO0lBQ2hCLE1BQU0sQ0FBQyxpQkFBaUIsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMxRCxNQUFNLENBQUMsWUFBWSxHQUFzQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUM3QixLQUFpQixFQUNqQixRQUFvQixFQUNwQixTQUFpQjtRQUVqQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksa0NBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxNQUFNLFdBQVcsR0FBRyxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUQsSUFBSSxXQUFXLENBQUMscUJBQXFCLEtBQUsscUNBQXVCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0UsSUFBSSxXQUFXLENBQUMscUJBQXFCLEtBQUsscUNBQXVCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN0QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sbUJBQU0sQ0FBQyxJQUFJLENB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
@@ -1,11 +1,11 @@
1
- import { Config, TrackEventsProp, TrackEventProp } from './types.js';
1
+ import { AnalyticsConfig, TrackEventsProp, TrackEventProp } from './types.js';
2
2
  export default class Analytics<TransportResponse> {
3
3
  private readonly transport;
4
4
  private readonly apiUrl;
5
5
  private readonly apiKey;
6
6
  private readonly eventProvider;
7
7
  private readonly logger?;
8
- constructor(config: Config<TransportResponse>);
8
+ constructor(config: AnalyticsConfig<TransportResponse>);
9
9
  private getEvent;
10
10
  private catchEvent;
11
11
  trackEvent(props: TrackEventProp): Promise<TransportResponse>;
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
4
  };
@@ -15,6 +6,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
6
  const AxiosTransport_js_1 = __importDefault(require("./transports/AxiosTransport.js"));
16
7
  const logger_js_1 = __importDefault(require("../logger.js"));
17
8
  class Analytics {
9
+ transport;
10
+ apiUrl;
11
+ apiKey;
12
+ eventProvider;
13
+ logger;
18
14
  constructor(config) {
19
15
  const { apiUrl, apiKey, transport, eventProvider, showLogs } = config || {};
20
16
  this.apiUrl = apiUrl;
@@ -35,18 +31,15 @@ class Analytics {
35
31
  }
36
32
  return this.eventProvider.getEvent(eventName, eventProperties);
37
33
  }
38
- catchEvent(func) {
39
- var _a;
40
- return __awaiter(this, void 0, void 0, function* () {
41
- try {
42
- const result = yield func();
43
- return result;
44
- }
45
- catch (err) {
46
- (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error({ err }, 'Analytics event not sent');
47
- return null;
48
- }
49
- });
34
+ async catchEvent(func) {
35
+ try {
36
+ const result = await func();
37
+ return result;
38
+ }
39
+ catch (err) {
40
+ this.logger?.error({ err }, 'Analytics event not sent');
41
+ return null;
42
+ }
50
43
  }
51
44
  trackEvent(props) {
52
45
  const { eventName, eventProperties } = props;
@@ -71,4 +64,4 @@ class Analytics {
71
64
  }
72
65
  }
73
66
  exports.default = Analytics;
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5hbHl0aWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FuYWx5dGljcy9BbmFseXRpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1RkFBNEQ7QUFHNUQsNkRBQThDO0FBRTlDLE1BQXFCLFNBQVM7SUFPNUIsWUFBWSxNQUFpQztRQUMzQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDNUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLG1CQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLElBQUksSUFBSSwyQkFBYyxFQUFxQixDQUFDO0lBQ3hFLENBQUM7SUFFTyxRQUFRLENBQUMsU0FBaUIsRUFBRSxlQUFpQztRQUNuRSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVhLFVBQVUsQ0FDdEIsSUFBNkM7OztZQUU3QyxJQUFJO2dCQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLDBCQUEwQixDQUFDLENBQUM7Z0JBQ3hELE9BQU8sSUFBSSxDQUFDO2FBQ2I7O0tBQ0Y7SUFFTSxVQUFVLENBQUMsS0FBcUI7UUFDckMsTUFBTSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3RDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBcUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQXNCO1FBQ3ZDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3RDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FDMUM7WUFDRCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEtBQXNCO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztDQUNGO0FBbkVELDRCQW1FQyJ9
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5hbHl0aWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FuYWx5dGljcy9BbmFseXRpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx1RkFBNEQ7QUFHNUQsNkRBQThDO0FBRTlDLE1BQXFCLFNBQVM7SUFDWCxTQUFTLENBQStCO0lBQ3hDLE1BQU0sQ0FBUztJQUNmLE1BQU0sQ0FBUztJQUNmLGFBQWEsQ0FBZ0I7SUFDN0IsTUFBTSxDQUFpQjtJQUV4QyxZQUFZLE1BQTBDO1FBQ3BELE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUM1RSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN4RSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxJQUFJLDJCQUFjLEVBQXFCLENBQUM7SUFDeEUsQ0FBQztJQUVPLFFBQVEsQ0FBQyxTQUFpQixFQUFFLGVBQWlDO1FBQ25FLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVUsQ0FDdEIsSUFBNkM7UUFFN0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUM1QixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztZQUN4RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQXFCO1FBQ3JDLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN0QyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEtBQXFCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFzQjtRQUN2QyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN0QyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQzFDO1lBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxLQUFzQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRjtBQW5FRCw0QkFtRUMifQ==
@@ -2,10 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AnalyticsError = void 0;
4
4
  class AnalyticsError extends Error {
5
+ code;
5
6
  constructor({ code, message }) {
6
7
  super(message);
7
8
  this.code = code;
8
9
  }
9
10
  }
10
11
  exports.AnalyticsError = AnalyticsError;
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5hbHl0aWNzRXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYW5hbHl0aWNzL0FuYWx5dGljc0Vycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQWEsY0FBZSxTQUFRLEtBQUs7SUFFdkMsWUFBWSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQTRDO1FBQ3JFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQU5ELHdDQU1DIn0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5hbHl0aWNzRXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYW5hbHl0aWNzL0FuYWx5dGljc0Vycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQWEsY0FBZSxTQUFRLEtBQUs7SUFDdkIsSUFBSSxDQUFnQjtJQUNwQyxZQUFZLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBNEM7UUFDckUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBTkQsd0NBTUMifQ==