@super-protocol/sdk-js 0.6.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 (132) hide show
  1. package/build/BlockchainConnector.d.ts +48 -0
  2. package/build/BlockchainConnector.js +259 -0
  3. package/build/TIIGenerator.d.ts +21 -0
  4. package/build/TIIGenerator.js +251 -0
  5. package/build/constants.d.ts +7 -0
  6. package/build/constants.js +10 -0
  7. package/build/contracts/ActiveOffersList.json +131 -0
  8. package/build/contracts/ActiveOrdersList.json +74 -0
  9. package/build/contracts/Marks.json +79 -0
  10. package/build/contracts/Offers.json +999 -0
  11. package/build/contracts/Orders.json +984 -0
  12. package/build/contracts/Providers.json +440 -0
  13. package/build/contracts/ProvidersOffers.json +254 -0
  14. package/build/contracts/Staking.json +323 -0
  15. package/build/contracts/Superpro.json +197 -0
  16. package/build/contracts/SuperproToken.json +356 -0
  17. package/build/crypto/Crypto.d.ts +37 -0
  18. package/build/crypto/Crypto.js +181 -0
  19. package/build/crypto/index.d.ts +2 -0
  20. package/build/crypto/index.js +7 -0
  21. package/build/crypto/nodejs/AES.d.ts +24 -0
  22. package/build/crypto/nodejs/AES.js +152 -0
  23. package/build/crypto/nodejs/ARIA.d.ts +24 -0
  24. package/build/crypto/nodejs/ARIA.js +151 -0
  25. package/build/crypto/nodejs/ECIES.d.ts +6 -0
  26. package/build/crypto/nodejs/ECIES.js +94 -0
  27. package/build/crypto/nodejs/NativeCrypto.d.ts +54 -0
  28. package/build/crypto/nodejs/NativeCrypto.js +214 -0
  29. package/build/crypto/nodejs/RSA-Hybrid.d.ts +15 -0
  30. package/build/crypto/nodejs/RSA-Hybrid.js +153 -0
  31. package/build/index.d.ts +65 -0
  32. package/build/index.js +117 -0
  33. package/build/logger.d.ts +4 -0
  34. package/build/logger.js +8 -0
  35. package/build/models/Ballot.d.ts +13 -0
  36. package/build/models/Ballot.js +76 -0
  37. package/build/models/Offer.d.ts +70 -0
  38. package/build/models/Offer.js +273 -0
  39. package/build/models/Order.d.ts +125 -0
  40. package/build/models/Order.js +540 -0
  41. package/build/models/Provider.d.ts +40 -0
  42. package/build/models/Provider.js +167 -0
  43. package/build/models/TCB.d.ts +80 -0
  44. package/build/models/TCB.js +315 -0
  45. package/build/models/TeeOffer.d.ts +118 -0
  46. package/build/models/TeeOffer.js +436 -0
  47. package/build/proto/Compression.d.ts +33 -0
  48. package/build/proto/Compression.js +146 -0
  49. package/build/proto/TRI.d.ts +122 -0
  50. package/build/proto/TRI.js +316 -0
  51. package/build/providers/storage/ChunksDownloadDecorator.d.ts +38 -0
  52. package/build/providers/storage/ChunksDownloadDecorator.js +284 -0
  53. package/build/providers/storage/IStorageProvider.d.ts +17 -0
  54. package/build/providers/storage/IStorageProvider.js +2 -0
  55. package/build/providers/storage/StorjStorageProvider.d.ts +26 -0
  56. package/build/providers/storage/StorjStorageProvider.js +389 -0
  57. package/build/providers/storage/getStorageProvider.d.ts +4 -0
  58. package/build/providers/storage/getStorageProvider.js +16 -0
  59. package/build/staticModels/ActiveOffers.d.ts +29 -0
  60. package/build/staticModels/ActiveOffers.js +144 -0
  61. package/build/staticModels/ActiveOrders.d.ts +21 -0
  62. package/build/staticModels/ActiveOrders.js +120 -0
  63. package/build/staticModels/Consensus.d.ts +63 -0
  64. package/build/staticModels/Consensus.js +373 -0
  65. package/build/staticModels/Epochs.d.ts +23 -0
  66. package/build/staticModels/Epochs.js +97 -0
  67. package/build/staticModels/LastBlocks.d.ts +25 -0
  68. package/build/staticModels/LastBlocks.js +96 -0
  69. package/build/staticModels/Marks.d.ts +13 -0
  70. package/build/staticModels/Marks.js +113 -0
  71. package/build/staticModels/OffersFactory.d.ts +37 -0
  72. package/build/staticModels/OffersFactory.js +227 -0
  73. package/build/staticModels/OrdersFactory.d.ts +137 -0
  74. package/build/staticModels/OrdersFactory.js +539 -0
  75. package/build/staticModels/ProviderRegistry.d.ts +81 -0
  76. package/build/staticModels/ProviderRegistry.js +311 -0
  77. package/build/staticModels/Staking.d.ts +26 -0
  78. package/build/staticModels/Staking.js +132 -0
  79. package/build/staticModels/Superpro.d.ts +20 -0
  80. package/build/staticModels/Superpro.js +99 -0
  81. package/build/staticModels/SuperproToken.d.ts +30 -0
  82. package/build/staticModels/SuperproToken.js +125 -0
  83. package/build/staticModels/Suspicious.d.ts +26 -0
  84. package/build/staticModels/Suspicious.js +99 -0
  85. package/build/staticModels/TeeOffersFactory.d.ts +36 -0
  86. package/build/staticModels/TeeOffersFactory.js +206 -0
  87. package/build/staticModels/Voting.d.ts +35 -0
  88. package/build/staticModels/Voting.js +111 -0
  89. package/build/store.d.ts +12 -0
  90. package/build/store.js +13 -0
  91. package/build/types/Ballot.d.ts +75 -0
  92. package/build/types/Ballot.js +49 -0
  93. package/build/types/Epoch.d.ts +21 -0
  94. package/build/types/Epoch.js +18 -0
  95. package/build/types/Events.d.ts +18 -0
  96. package/build/types/Events.js +2 -0
  97. package/build/types/Marks.d.ts +5 -0
  98. package/build/types/Marks.js +9 -0
  99. package/build/types/Offer.d.ts +63 -0
  100. package/build/types/Offer.js +41 -0
  101. package/build/types/Order.d.ts +61 -0
  102. package/build/types/Order.js +36 -0
  103. package/build/types/Origins.d.ts +12 -0
  104. package/build/types/Origins.js +10 -0
  105. package/build/types/Provider.d.ts +25 -0
  106. package/build/types/Provider.js +19 -0
  107. package/build/types/Staking.d.ts +27 -0
  108. package/build/types/Staking.js +22 -0
  109. package/build/types/Superpro.d.ts +24 -0
  110. package/build/types/Superpro.js +29 -0
  111. package/build/types/TcbData.d.ts +26 -0
  112. package/build/types/TcbData.js +21 -0
  113. package/build/types/TeeOffer.d.ts +22 -0
  114. package/build/types/TeeOffer.js +15 -0
  115. package/build/types/Web3.d.ts +26 -0
  116. package/build/types/Web3.js +2 -0
  117. package/build/types/blockchainConnector/StorageAccess.d.ts +8 -0
  118. package/build/types/blockchainConnector/StorageAccess.js +2 -0
  119. package/build/types/storage/StorageAccess.d.ts +6 -0
  120. package/build/types/storage/StorageAccess.js +2 -0
  121. package/build/types/storage/StorageFileAccess.d.ts +5 -0
  122. package/build/types/storage/StorageFileAccess.js +2 -0
  123. package/build/types/storage/StorageObject.d.ts +8 -0
  124. package/build/types/storage/StorageObject.js +2 -0
  125. package/build/utils/NonceTracker.d.ts +12 -0
  126. package/build/utils/NonceTracker.js +84 -0
  127. package/build/utils/TxManager.d.ts +21 -0
  128. package/build/utils/TxManager.js +159 -0
  129. package/build/utils.d.ts +38 -0
  130. package/build/utils.js +195 -0
  131. package/package.json +68 -0
  132. package/readme.md +40 -0
@@ -0,0 +1,48 @@
1
+ import { TransactionOptions } from "./types/Web3";
2
+ import BlockchainTransaction from "./types/blockchainConnector/StorageAccess";
3
+ import { TransactionReceipt } from "web3-core";
4
+ declare class BlockchainConnector {
5
+ private static logger;
6
+ private static provider?;
7
+ static defaultActionAccount?: string;
8
+ /**
9
+ * Function for connecting to blockchain
10
+ * Used to setting up settings for blockchain connector
11
+ * Needs to run this function before using blockchain connector
12
+ */
13
+ static init(config: Config): Promise<void>;
14
+ /**
15
+ * Function for connecting provider action account
16
+ * Needs to run this function before using any set methods in blockchain connector
17
+ */
18
+ static initActionAccount(actionAccountKey: string, manageNonce?: boolean): Promise<string>;
19
+ /**
20
+ * Returns balance of blockchain platform tokens in wei
21
+ */
22
+ static getBalance(address: string): Promise<string>;
23
+ /**
24
+ * Returns balance of blockchain platform tokens in wei
25
+ */
26
+ static transfer(to: string, amount: string, transactionOptions?: TransactionOptions): Promise<TransactionReceipt>;
27
+ /**
28
+ * Fetch transactions for specific addresses starting with specific block until last block
29
+ * @param addresses - array of addresses to fetch transactions (from these addresses and to these addresses)
30
+ * @param startBlock - number of block to start fetching transactions (if empty fetch only for last block)
31
+ * @param lastBlock - number of block to last fetching transactions (if empty fetch only for last block)
32
+ * @param batchSize - block size for asynchronous transaction loading
33
+ * @returns {Promise<{
34
+ * transactionsByAddress, - found transactions sorted by addresses
35
+ * lastBlock, - number of last fetched block (can be used to start fetching from this block next time)
36
+ * }>}
37
+ */
38
+ static getTransactions(addresses: string[], startBlock?: number, lastBlock?: number, batchSize?: number): Promise<BlockchainTransaction>;
39
+ static disconnect(): void;
40
+ }
41
+ export declare type Config = {
42
+ contractAddress: string;
43
+ blockchainUrl?: string;
44
+ gasPrice?: string;
45
+ gasLimit?: number;
46
+ gasLimitMultiplier?: number;
47
+ };
48
+ export default BlockchainConnector;
@@ -0,0 +1,259 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ var logger_1 = __importDefault(require("./logger"));
54
+ var web3_1 = __importDefault(require("web3"));
55
+ var store_1 = __importDefault(require("./store"));
56
+ var constants_1 = require("./constants");
57
+ var utils_1 = require("./utils");
58
+ var Superpro_1 = __importDefault(require("./staticModels/Superpro"));
59
+ var SuperproToken_1 = __importDefault(require("./staticModels/SuperproToken"));
60
+ var TxManager_1 = __importDefault(require("./utils/TxManager"));
61
+ var BlockchainConnector = /** @class */ (function () {
62
+ function BlockchainConnector() {
63
+ }
64
+ /**
65
+ * Function for connecting to blockchain
66
+ * Used to setting up settings for blockchain connector
67
+ * Needs to run this function before using blockchain connector
68
+ */
69
+ BlockchainConnector.init = function (config) {
70
+ return __awaiter(this, void 0, void 0, function () {
71
+ var url, _a;
72
+ return __generator(this, function (_b) {
73
+ switch (_b.label) {
74
+ case 0:
75
+ if (store_1.default.isInitialized)
76
+ return [2 /*return*/];
77
+ url = (config === null || config === void 0 ? void 0 : config.blockchainUrl) || constants_1.defaultBlockchainUrl;
78
+ if (/^(ws)|(wss)/.test(url)) {
79
+ this.provider = new web3_1.default.providers.WebsocketProvider(url, {
80
+ reconnect: {
81
+ auto: true,
82
+ delay: 5000,
83
+ maxAttempts: 5,
84
+ onTimeout: false,
85
+ },
86
+ });
87
+ store_1.default.web3 = new web3_1.default(this.provider);
88
+ }
89
+ else {
90
+ this.provider = new web3_1.default.providers.HttpProvider(url);
91
+ store_1.default.web3 = new web3_1.default(this.provider);
92
+ }
93
+ if (config === null || config === void 0 ? void 0 : config.gasPrice)
94
+ store_1.default.gasPrice = config.gasPrice;
95
+ if (config === null || config === void 0 ? void 0 : config.gasLimit)
96
+ store_1.default.gasLimit = config.gasLimit;
97
+ if (config === null || config === void 0 ? void 0 : config.gasLimitMultiplier)
98
+ store_1.default.gasLimitMultiplier = config.gasLimitMultiplier;
99
+ Superpro_1.default.address = config.contractAddress;
100
+ _a = SuperproToken_1.default;
101
+ return [4 /*yield*/, Superpro_1.default.getTokenAddress()];
102
+ case 1:
103
+ _a.address = _b.sent();
104
+ TxManager_1.default.init(store_1.default.web3);
105
+ store_1.default.isInitialized = true;
106
+ return [2 /*return*/];
107
+ }
108
+ });
109
+ });
110
+ };
111
+ /**
112
+ * Function for connecting provider action account
113
+ * Needs to run this function before using any set methods in blockchain connector
114
+ */
115
+ BlockchainConnector.initActionAccount = function (actionAccountKey, manageNonce) {
116
+ if (manageNonce === void 0) { manageNonce = true; }
117
+ return __awaiter(this, void 0, void 0, function () {
118
+ var actionAccount;
119
+ return __generator(this, function (_a) {
120
+ switch (_a.label) {
121
+ case 0:
122
+ (0, utils_1.checkIfInitialized)();
123
+ actionAccount = store_1.default.web3.eth.accounts.wallet.add(actionAccountKey).address;
124
+ if (!store_1.default.actionAccount)
125
+ store_1.default.actionAccount = actionAccount;
126
+ if (!store_1.default.keys[actionAccount])
127
+ store_1.default.keys[actionAccount] = actionAccountKey;
128
+ if (!this.defaultActionAccount)
129
+ this.defaultActionAccount = actionAccount;
130
+ if (!manageNonce) return [3 /*break*/, 2];
131
+ return [4 /*yield*/, TxManager_1.default.initAccount(actionAccount)];
132
+ case 1:
133
+ _a.sent();
134
+ _a.label = 2;
135
+ case 2: return [2 /*return*/, actionAccount];
136
+ }
137
+ });
138
+ });
139
+ };
140
+ /**
141
+ * Returns balance of blockchain platform tokens in wei
142
+ */
143
+ BlockchainConnector.getBalance = function (address) {
144
+ return __awaiter(this, void 0, void 0, function () {
145
+ return __generator(this, function (_a) {
146
+ (0, utils_1.checkIfInitialized)();
147
+ return [2 /*return*/, store_1.default.web3.eth.getBalance(address)];
148
+ });
149
+ });
150
+ };
151
+ /**
152
+ * Returns balance of blockchain platform tokens in wei
153
+ */
154
+ BlockchainConnector.transfer = function (to, amount, transactionOptions) {
155
+ return __awaiter(this, void 0, void 0, function () {
156
+ var transaction;
157
+ return __generator(this, function (_a) {
158
+ (0, utils_1.checkIfInitialized)();
159
+ (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
160
+ transaction = {
161
+ to: to,
162
+ value: amount,
163
+ };
164
+ return [2 /*return*/, TxManager_1.default.publishTransaction(transaction, transactionOptions)];
165
+ });
166
+ });
167
+ };
168
+ /**
169
+ * Fetch transactions for specific addresses starting with specific block until last block
170
+ * @param addresses - array of addresses to fetch transactions (from these addresses and to these addresses)
171
+ * @param startBlock - number of block to start fetching transactions (if empty fetch only for last block)
172
+ * @param lastBlock - number of block to last fetching transactions (if empty fetch only for last block)
173
+ * @param batchSize - block size for asynchronous transaction loading
174
+ * @returns {Promise<{
175
+ * transactionsByAddress, - found transactions sorted by addresses
176
+ * lastBlock, - number of last fetched block (can be used to start fetching from this block next time)
177
+ * }>}
178
+ */
179
+ BlockchainConnector.getTransactions = function (addresses, startBlock, lastBlock, batchSize) {
180
+ if (batchSize === void 0) { batchSize = constants_1.BLOCK_SIZE_TO_FETCH_TRANSACTION; }
181
+ return __awaiter(this, void 0, void 0, function () {
182
+ var endBlock, _a, blocksNumbersToFetch, activeStep, i, transactionsByAddress, i;
183
+ var _this = this;
184
+ return __generator(this, function (_b) {
185
+ switch (_b.label) {
186
+ case 0:
187
+ if (!lastBlock) return [3 /*break*/, 1];
188
+ _a = lastBlock;
189
+ return [3 /*break*/, 3];
190
+ case 1: return [4 /*yield*/, store_1.default.web3.eth.getBlockNumber()];
191
+ case 2:
192
+ _a = _b.sent();
193
+ _b.label = 3;
194
+ case 3:
195
+ endBlock = _a;
196
+ if (!startBlock)
197
+ startBlock = Math.max(endBlock - 1000, 0);
198
+ blocksNumbersToFetch = [[]];
199
+ activeStep = blocksNumbersToFetch[0];
200
+ for (i = startBlock; i <= endBlock; i++) {
201
+ activeStep.push(i);
202
+ if (activeStep.length >= batchSize) {
203
+ blocksNumbersToFetch.push([]);
204
+ activeStep = blocksNumbersToFetch[blocksNumbersToFetch.length - 1];
205
+ }
206
+ }
207
+ transactionsByAddress = {};
208
+ addresses.forEach(function (address) { return (transactionsByAddress[address] = []); });
209
+ i = 0;
210
+ _b.label = 4;
211
+ case 4:
212
+ if (!(i < blocksNumbersToFetch.length)) return [3 /*break*/, 7];
213
+ return [4 /*yield*/, Promise.all(blocksNumbersToFetch[i].map(function (blockNumber) { return __awaiter(_this, void 0, void 0, function () {
214
+ var block;
215
+ return __generator(this, function (_a) {
216
+ switch (_a.label) {
217
+ case 0: return [4 /*yield*/, store_1.default.web3.eth.getBlock(blockNumber, true)];
218
+ case 1:
219
+ block = _a.sent();
220
+ if (block && block.transactions) {
221
+ block.transactions.forEach(function (transaction) {
222
+ var address = null;
223
+ if (addresses.includes(transaction.from))
224
+ address = transaction.from;
225
+ else if (transaction.to && addresses.includes(transaction.to))
226
+ address = transaction.to;
227
+ if (address) {
228
+ transactionsByAddress[address].push(__assign(__assign({}, transaction), { timestamp: +block.timestamp * 1000, input: transaction.input }));
229
+ }
230
+ });
231
+ }
232
+ return [2 /*return*/];
233
+ }
234
+ });
235
+ }); }))];
236
+ case 5:
237
+ _b.sent();
238
+ _b.label = 6;
239
+ case 6:
240
+ i++;
241
+ return [3 /*break*/, 4];
242
+ case 7: return [2 /*return*/, {
243
+ transactionsByAddress: transactionsByAddress,
244
+ lastBlock: endBlock,
245
+ }];
246
+ }
247
+ });
248
+ });
249
+ };
250
+ BlockchainConnector.disconnect = function () {
251
+ var _a;
252
+ (_a = this.provider) === null || _a === void 0 ? void 0 : _a.disconnect(0, "");
253
+ store_1.default.isInitialized = false;
254
+ store_1.default.web3 = undefined;
255
+ };
256
+ BlockchainConnector.logger = logger_1.default.child({ className: "BlockchainConnector" });
257
+ return BlockchainConnector;
258
+ }());
259
+ exports.default = BlockchainConnector;
@@ -0,0 +1,21 @@
1
+ /// <reference types="node" />
2
+ import { TRI } from './proto/TRI';
3
+ import { Encryption, Hash, Linkage, Resource } from "@super-protocol/dto-js";
4
+ declare class TIIGenerator {
5
+ static generateByOffer(offerId: string, solutionHashes: Hash[], linkageString: string | undefined, resource: Resource, args: any, encryption: Encryption): Promise<string>;
6
+ static generate(orderId: string, resource: Resource, args: any, encryption: Encryption): Promise<string>;
7
+ static getSolutionHashesAndLinkage(inputOffers: string[]): Promise<{
8
+ hashes: Hash[];
9
+ linkage?: string;
10
+ }>;
11
+ static getTRI(tii: string, decryptionKey: Buffer): Promise<TRI>;
12
+ static getUrl(tii: string, decryptionKey: Buffer): Promise<string>;
13
+ static getResource<T>(tii: string, decryptionKey: Buffer): Promise<T>;
14
+ }
15
+ export declare type TeeRunInfo = {
16
+ solutionHashes: Hash[];
17
+ linkage: Linkage;
18
+ args: any;
19
+ encryption: Encryption;
20
+ };
21
+ export default TIIGenerator;
@@ -0,0 +1,251 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ var node_gzip_1 = require("node-gzip");
54
+ var lodash_1 = __importDefault(require("lodash"));
55
+ var Compression_1 = require("./proto/Compression");
56
+ var TRI_1 = require("./proto/TRI");
57
+ var crypto_1 = __importDefault(require("./crypto"));
58
+ var Offer_1 = __importDefault(require("./models/Offer"));
59
+ var Order_1 = __importDefault(require("./models/Order"));
60
+ var TeeOffer_1 = __importDefault(require("./models/TeeOffer"));
61
+ var dto_js_1 = require("@super-protocol/dto-js");
62
+ var tee_lib_1 = require("@super-protocol/tee-lib");
63
+ var TIIGenerator = /** @class */ (function () {
64
+ function TIIGenerator() {
65
+ }
66
+ TIIGenerator.generateByOffer = function (offerId, solutionHashes, linkageString, resource, args, encryption) {
67
+ return __awaiter(this, void 0, void 0, function () {
68
+ var teeOffer, teeOfferInfo, linkage, tlb, mac, rawTri, tri, compressedTri, _a, _b, _c, _d;
69
+ var _e, _f;
70
+ return __generator(this, function (_g) {
71
+ switch (_g.label) {
72
+ case 0:
73
+ teeOffer = new TeeOffer_1.default(offerId);
74
+ return [4 /*yield*/, teeOffer.getInfo()];
75
+ case 1:
76
+ teeOfferInfo = _g.sent();
77
+ linkage = linkageString ? JSON.parse(linkageString) : {
78
+ encoding: dto_js_1.Encoding.base64,
79
+ mrenclave: '',
80
+ };
81
+ tlb = new tee_lib_1.TLBlockSerializerV1().unserializeTlb(Buffer.from(teeOfferInfo.tlb, "base64"));
82
+ mac = encryption.authTag || encryption.mac;
83
+ rawTri = {
84
+ solutionHashes: solutionHashes.map(function (hash) { return ({
85
+ type: hash.algo,
86
+ hash: Buffer.from(hash.hash, hash.encoding),
87
+ }); }),
88
+ mrenclave: Buffer.from(linkage.mrenclave, linkage.encoding),
89
+ args: JSON.stringify(args || ''),
90
+ encryption: __assign(__assign({}, encryption), { ciphertext: encryption.ciphertext ? Buffer.from(encryption.ciphertext, encryption.encoding) : undefined, key: encryption.key ? Buffer.from(encryption.key, encryption.encoding) : undefined, iv: encryption.iv ? Buffer.from(encryption.iv, encryption.encoding) : undefined, mac: mac ? Buffer.from(mac, encryption.encoding) : undefined }),
91
+ };
92
+ tri = TRI_1.TRI.encode(rawTri).finish();
93
+ _b = (_a = Compression_1.Compression).encode;
94
+ _e = {};
95
+ return [4 /*yield*/, (0, node_gzip_1.gzip)(tri)];
96
+ case 2:
97
+ compressedTri = _b.apply(_a, [(_e.data = _g.sent(),
98
+ _e.type = Compression_1.Compression_TYPE.GZIP,
99
+ _e)]).finish();
100
+ _d = (_c = JSON).stringify;
101
+ _f = {};
102
+ return [4 /*yield*/, crypto_1.default.encrypt(JSON.stringify(resource), JSON.parse(teeOfferInfo.argsPublicKey))];
103
+ case 3:
104
+ _f.encryptedResource = _g.sent();
105
+ return [4 /*yield*/, crypto_1.default.encrypt(Buffer.from(compressedTri).toString(dto_js_1.Encoding.base64), {
106
+ algo: dto_js_1.CryptoAlgorithm.ECIES,
107
+ key: Buffer.from(tlb.data.teePubKeyData).toString("base64"),
108
+ encoding: dto_js_1.Encoding.base64,
109
+ })];
110
+ case 4: return [2 /*return*/, _d.apply(_c, [(_f.tri = _g.sent(),
111
+ _f)])];
112
+ }
113
+ });
114
+ });
115
+ };
116
+ TIIGenerator.generate = function (orderId, resource, args, encryption) {
117
+ return __awaiter(this, void 0, void 0, function () {
118
+ var order, parentOrderAddress, parentOrder, parentOrderInfo, _a, hashes, linkage;
119
+ return __generator(this, function (_b) {
120
+ switch (_b.label) {
121
+ case 0:
122
+ order = new Order_1.default(orderId);
123
+ return [4 /*yield*/, order.getParentOrder()];
124
+ case 1:
125
+ parentOrderAddress = _b.sent();
126
+ parentOrder = new Order_1.default(parentOrderAddress);
127
+ return [4 /*yield*/, parentOrder.getOrderInfo()];
128
+ case 2:
129
+ parentOrderInfo = _b.sent();
130
+ return [4 /*yield*/, this.getSolutionHashesAndLinkage(parentOrderInfo.args.inputOffers)];
131
+ case 3:
132
+ _a = _b.sent(), hashes = _a.hashes, linkage = _a.linkage;
133
+ return [2 /*return*/, this.generateByOffer(parentOrderInfo.offer, hashes, linkage, resource, args, encryption)];
134
+ }
135
+ });
136
+ });
137
+ };
138
+ TIIGenerator.getSolutionHashesAndLinkage = function (inputOffers) {
139
+ return __awaiter(this, void 0, void 0, function () {
140
+ var solutionHashes, solutionLinkage, anyLinkage;
141
+ var _this = this;
142
+ return __generator(this, function (_a) {
143
+ switch (_a.label) {
144
+ case 0:
145
+ solutionHashes = [];
146
+ return [4 /*yield*/, Promise.all(inputOffers.map(function (offerAddress) { return __awaiter(_this, void 0, void 0, function () {
147
+ var offer, offerInfo, restrictions;
148
+ return __generator(this, function (_a) {
149
+ switch (_a.label) {
150
+ case 0:
151
+ offer = new Offer_1.default(offerAddress);
152
+ return [4 /*yield*/, offer.getInfo()];
153
+ case 1:
154
+ offerInfo = _a.sent();
155
+ if (offerInfo.hash) {
156
+ solutionHashes.push(JSON.parse(offerInfo.hash));
157
+ }
158
+ restrictions = lodash_1.default
159
+ .intersection(offerInfo.restrictions.offers, inputOffers)
160
+ .filter(function (restrictedOfferAddress) { return restrictedOfferAddress !== offer.id; });
161
+ if (restrictions.length) {
162
+ solutionLinkage = offerInfo.linkage;
163
+ }
164
+ else {
165
+ anyLinkage = offerInfo.linkage;
166
+ }
167
+ return [2 /*return*/];
168
+ }
169
+ });
170
+ }); }))];
171
+ case 1:
172
+ _a.sent();
173
+ return [2 /*return*/, {
174
+ hashes: solutionHashes,
175
+ linkage: solutionLinkage || anyLinkage,
176
+ }];
177
+ }
178
+ });
179
+ });
180
+ };
181
+ TIIGenerator.getTRI = function (tii, decryptionKey) {
182
+ var _a, _b, _c;
183
+ return __awaiter(this, void 0, void 0, function () {
184
+ var tiiObj, tri, compression, decompressed, _d, decoded;
185
+ return __generator(this, function (_e) {
186
+ switch (_e.label) {
187
+ case 0:
188
+ tiiObj = JSON.parse(tii);
189
+ tiiObj.tri.key = decryptionKey.toString(tiiObj.tri.encoding);
190
+ return [4 /*yield*/, crypto_1.default.decrypt(tiiObj.tri)];
191
+ case 1:
192
+ tri = _e.sent();
193
+ compression = Compression_1.Compression.decode(Buffer.from(tri, tiiObj.tri.encoding));
194
+ _d = compression.type;
195
+ switch (_d) {
196
+ case Compression_1.Compression_TYPE.GZIP: return [3 /*break*/, 2];
197
+ }
198
+ return [3 /*break*/, 4];
199
+ case 2: return [4 /*yield*/, (0, node_gzip_1.ungzip)(compression.data)];
200
+ case 3:
201
+ decompressed = _e.sent();
202
+ return [3 /*break*/, 5];
203
+ case 4: throw Error('Unknown compression method');
204
+ case 5:
205
+ decoded = TRI_1.TRI.decode(decompressed);
206
+ if ((_a = decoded.encryption) === null || _a === void 0 ? void 0 : _a.iv) {
207
+ decoded.encryption.iv = Buffer.from(decoded.encryption.iv).toString(tiiObj.tri.encoding);
208
+ }
209
+ if ((_b = decoded.encryption) === null || _b === void 0 ? void 0 : _b.key) {
210
+ decoded.encryption.key = Buffer.from(decoded.encryption.key).toString(tiiObj.tri.encoding);
211
+ }
212
+ if ((_c = decoded.encryption) === null || _c === void 0 ? void 0 : _c.mac) {
213
+ decoded.encryption.mac = Buffer.from(decoded.encryption.mac).toString(tiiObj.tri.encoding);
214
+ }
215
+ return [2 /*return*/, decoded];
216
+ }
217
+ });
218
+ });
219
+ };
220
+ TIIGenerator.getUrl = function (tii, decryptionKey) {
221
+ return __awaiter(this, void 0, void 0, function () {
222
+ var res;
223
+ return __generator(this, function (_a) {
224
+ switch (_a.label) {
225
+ case 0: return [4 /*yield*/, TIIGenerator.getResource(tii, decryptionKey)];
226
+ case 1:
227
+ res = _a.sent();
228
+ return [2 /*return*/, res.url];
229
+ }
230
+ });
231
+ });
232
+ };
233
+ TIIGenerator.getResource = function (tii, decryptionKey) {
234
+ return __awaiter(this, void 0, void 0, function () {
235
+ var encryptedResource, resource;
236
+ return __generator(this, function (_a) {
237
+ switch (_a.label) {
238
+ case 0:
239
+ encryptedResource = JSON.parse(tii).encryptedResource;
240
+ encryptedResource.key = decryptionKey.toString(encryptedResource.encoding);
241
+ return [4 /*yield*/, crypto_1.default.decrypt(encryptedResource)];
242
+ case 1:
243
+ resource = _a.sent();
244
+ return [2 /*return*/, JSON.parse(resource)];
245
+ }
246
+ });
247
+ });
248
+ };
249
+ return TIIGenerator;
250
+ }());
251
+ exports.default = TIIGenerator;
@@ -0,0 +1,7 @@
1
+ export declare const defaultBlockchainUrl = "ws://127.0.0.1:8545";
2
+ export declare const defaultGasLimit = 7000000;
3
+ export declare const defaultGasPrice = "30000000000";
4
+ export declare const defaultGasLimitMultiplier = 1.2;
5
+ export declare const zeroAddress = "0";
6
+ export declare const ONE_DAY: number;
7
+ export declare const BLOCK_SIZE_TO_FETCH_TRANSACTION = 500;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BLOCK_SIZE_TO_FETCH_TRANSACTION = exports.ONE_DAY = exports.zeroAddress = exports.defaultGasLimitMultiplier = exports.defaultGasPrice = exports.defaultGasLimit = exports.defaultBlockchainUrl = void 0;
4
+ exports.defaultBlockchainUrl = "ws://127.0.0.1:8545";
5
+ exports.defaultGasLimit = 7000000;
6
+ exports.defaultGasPrice = "30000000000";
7
+ exports.defaultGasLimitMultiplier = 1.2;
8
+ exports.zeroAddress = "0";
9
+ exports.ONE_DAY = 24 * 60 * 60;
10
+ exports.BLOCK_SIZE_TO_FETCH_TRANSACTION = 500;