@super-protocol/sdk-js 0.16.0-beta.2 → 1.0.0-beta.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 (104) hide show
  1. package/build/TIIGenerator.d.ts +3 -3
  2. package/build/connectors/BaseConnector.d.ts +7 -8
  3. package/build/connectors/BaseConnector.js +2 -4
  4. package/build/connectors/BlockchainConnector.d.ts +6 -8
  5. package/build/connectors/BlockchainConnector.js +97 -102
  6. package/build/connectors/BlockchainEventsListener.d.ts +2 -2
  7. package/build/connectors/BlockchainEventsListener.js +36 -11
  8. package/build/connectors/index.d.ts +2 -0
  9. package/build/connectors/index.js +11 -0
  10. package/build/constants.d.ts +2 -2
  11. package/build/constants.js +3 -3
  12. package/build/contracts/abi.d.ts +9769 -0
  13. package/build/contracts/abi.js +6 -0
  14. package/build/crypto/Crypto.js +4 -4
  15. package/build/crypto/nodejs/AES.d.ts +1 -1
  16. package/build/crypto/nodejs/AES.js +11 -13
  17. package/build/crypto/nodejs/ARIA.d.ts +1 -1
  18. package/build/crypto/nodejs/ARIA.js +11 -13
  19. package/build/models/EtlModel.d.ts +1 -1
  20. package/build/models/EtlModel.js +2 -4
  21. package/build/models/Offer.d.ts +5 -15
  22. package/build/models/Offer.js +60 -105
  23. package/build/models/Order.d.ts +15 -25
  24. package/build/models/Order.js +92 -173
  25. package/build/models/Provider.d.ts +9 -13
  26. package/build/models/Provider.js +16 -43
  27. package/build/models/TCB.d.ts +6 -8
  28. package/build/models/TCB.js +22 -34
  29. package/build/models/TeeOffer.d.ts +9 -22
  30. package/build/models/TeeOffer.js +97 -169
  31. package/build/models/index.d.ts +5 -0
  32. package/build/models/index.js +17 -0
  33. package/build/providers/storage/StorjStorageProvider.js +3 -3
  34. package/build/staticModels/ActiveOffers.d.ts +3 -12
  35. package/build/staticModels/ActiveOffers.js +11 -29
  36. package/build/staticModels/ActiveOrders.d.ts +4 -6
  37. package/build/staticModels/ActiveOrders.js +19 -21
  38. package/build/staticModels/Consensus.d.ts +3 -5
  39. package/build/staticModels/Consensus.js +57 -87
  40. package/build/staticModels/Deposits.d.ts +8 -9
  41. package/build/staticModels/Deposits.js +42 -60
  42. package/build/staticModels/Marks.d.ts +4 -4
  43. package/build/staticModels/Marks.js +8 -12
  44. package/build/staticModels/Offers.d.ts +14 -14
  45. package/build/staticModels/Offers.js +81 -88
  46. package/build/staticModels/Orders.d.ts +30 -35
  47. package/build/staticModels/Orders.js +98 -144
  48. package/build/staticModels/ProviderRegistry.d.ts +6 -12
  49. package/build/staticModels/ProviderRegistry.js +45 -75
  50. package/build/staticModels/Superpro.d.ts +4 -4
  51. package/build/staticModels/Superpro.js +7 -25
  52. package/build/staticModels/SuperproToken.d.ts +7 -7
  53. package/build/staticModels/SuperproToken.js +34 -38
  54. package/build/staticModels/TeeOffers.d.ts +19 -21
  55. package/build/staticModels/TeeOffers.js +119 -126
  56. package/build/store.d.ts +2 -2
  57. package/build/tee/QuoteValidator.d.ts +2 -1
  58. package/build/tee/QuoteValidator.js +7 -6
  59. package/build/types/Consensus.d.ts +6 -57
  60. package/build/types/Consensus.js +2 -38
  61. package/build/types/DepositInfo.d.ts +0 -5
  62. package/build/types/DepositInfo.js +1 -8
  63. package/build/types/HardwareInfo.d.ts +0 -12
  64. package/build/types/HardwareInfo.js +1 -9
  65. package/build/types/Offer.d.ts +1 -25
  66. package/build/types/Offer.js +2 -25
  67. package/build/types/OptionInfo.d.ts +0 -5
  68. package/build/types/OptionInfo.js +1 -8
  69. package/build/types/Order.d.ts +8 -84
  70. package/build/types/Order.js +2 -42
  71. package/build/types/Origins.d.ts +0 -6
  72. package/build/types/Origins.js +1 -9
  73. package/build/types/Provider.d.ts +0 -19
  74. package/build/types/Provider.js +1 -19
  75. package/build/types/SlotInfo.d.ts +0 -5
  76. package/build/types/SlotInfo.js +1 -8
  77. package/build/types/SlotUsage.d.ts +0 -6
  78. package/build/types/SlotUsage.js +2 -9
  79. package/build/types/TeeOfferInfo.d.ts +0 -20
  80. package/build/types/TeeOfferInfo.js +1 -13
  81. package/build/types/TeeOfferOption.d.ts +0 -14
  82. package/build/types/TeeOfferOption.js +1 -10
  83. package/build/types/TeeOfferSlot.d.ts +0 -14
  84. package/build/types/TeeOfferSlot.js +1 -10
  85. package/build/types/ValueOfferSlot.d.ts +0 -19
  86. package/build/types/ValueOfferSlot.js +1 -12
  87. package/build/types/Web3.d.ts +25 -13
  88. package/build/types/blockchainConnector/StorageAccess.d.ts +2 -2
  89. package/build/types/index.d.ts +21 -0
  90. package/build/types/index.js +38 -0
  91. package/build/utils/Monitoring.js +5 -2
  92. package/build/utils/NonceTracker.d.ts +2 -2
  93. package/build/utils/NonceTracker.js +9 -11
  94. package/build/utils/TxManager.d.ts +6 -12
  95. package/build/utils/TxManager.js +16 -25
  96. package/build/{utils.d.ts → utils/helper.d.ts} +12 -17
  97. package/build/utils/helper.js +159 -0
  98. package/build/utils/helpers/tryWithInterval.js +11 -12
  99. package/package.json +9 -6
  100. package/readme.md +7 -8
  101. package/build/contracts/app.json +0 -12758
  102. package/build/staticModels/BaseStaticModel.d.ts +0 -4
  103. package/build/staticModels/BaseStaticModel.js +0 -20
  104. package/build/utils.js +0 -196
@@ -1,4 +0,0 @@
1
- import { Filter } from 'web3-eth-contract';
2
- export declare abstract class StaticModel {
3
- static getPastEvents(eventName: string, filter: Filter, fromBlock?: number | string, toBlock?: number | string): Promise<import("web3-eth-contract").EventData[]>;
4
- }
@@ -1,20 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.StaticModel = void 0;
7
- const BlockchainConnector_1 = __importDefault(require("../connectors/BlockchainConnector"));
8
- class StaticModel {
9
- static getPastEvents(eventName, filter, fromBlock, toBlock) {
10
- const contract = BlockchainConnector_1.default.getInstance().getContract();
11
- const options = { filter };
12
- if (fromBlock)
13
- options.fromBlock = fromBlock;
14
- if (toBlock)
15
- options.toBlock = toBlock;
16
- return contract.getPastEvents(eventName, options);
17
- }
18
- }
19
- exports.StaticModel = StaticModel;
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVN0YXRpY01vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YXRpY01vZGVscy9CYXNlU3RhdGljTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsNEZBQW9FO0FBRXBFLE1BQXNCLFdBQVc7SUFDN0IsTUFBTSxDQUFDLGFBQWEsQ0FDaEIsU0FBaUIsRUFDakIsTUFBYyxFQUNkLFNBQTJCLEVBQzNCLE9BQXlCO1FBRXpCLE1BQU0sUUFBUSxHQUFHLDZCQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pFLE1BQU0sT0FBTyxHQUFxQixFQUFFLE1BQU0sRUFBRSxDQUFDO1FBRTdDLElBQUksU0FBUztZQUFFLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzdDLElBQUksT0FBTztZQUFFLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXZDLE9BQU8sUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUNKO0FBZkQsa0NBZUMifQ==
package/build/utils.js DELETED
@@ -1,196 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.packSlotInfo = exports.unpackSlotInfo = exports.unpackDeviceId = exports.packDevicId = exports.incrementMethodCall = exports.objectToTuple = exports.tupleToObjectsArray = exports.tupleToObject = exports.isNodeJS = exports.createTransactionOptions = exports.getGasPrice = exports.checkForUsingExternalTxManager = exports.checkIfActionAccountInitialized = void 0;
16
- const store_1 = __importDefault(require("./store"));
17
- const lodash_1 = require("lodash");
18
- const Monitoring_1 = require("./utils/Monitoring");
19
- /**
20
- * Function for checking if provider action account initialized (required for set methods)
21
- * Used in all set methods
22
- */
23
- const checkIfActionAccountInitialized = (transactionOptions) => {
24
- if (!store_1.default.actionAccount && !(transactionOptions === null || transactionOptions === void 0 ? void 0 : transactionOptions.web3))
25
- throw new Error("Provider action account is not initialized, needs to run 'BlockchainConnector.getInstance().initializeActionAccount(SECRET_KEY)' first");
26
- };
27
- exports.checkIfActionAccountInitialized = checkIfActionAccountInitialized;
28
- /**
29
- * Function for checking if current configuration supposed to use external transaction manager like MetaMask and etc.
30
- */
31
- const checkForUsingExternalTxManager = (transactionOptions) => {
32
- // TODO: Agree on more proper way of signaling, that we use an external transaction manager, than just passing a web3 instance.
33
- return !!(transactionOptions === null || transactionOptions === void 0 ? void 0 : transactionOptions.web3);
34
- };
35
- exports.checkForUsingExternalTxManager = checkForUsingExternalTxManager;
36
- /**
37
- * Updates gas price determined by the last few blocks median
38
- */
39
- const getGasPrice = (web3) => __awaiter(void 0, void 0, void 0, function* () {
40
- return web3.eth.getGasPrice();
41
- });
42
- exports.getGasPrice = getGasPrice;
43
- /**
44
- * Merge transaction options from arguments and from store
45
- * Used in all set methods
46
- */
47
- const createTransactionOptions = (options) => __awaiter(void 0, void 0, void 0, function* () {
48
- if (!options)
49
- options = {};
50
- if (!options.from)
51
- options.from = store_1.default.actionAccount;
52
- if (!options.gas)
53
- options.gas = store_1.default.gasLimit;
54
- if (!options.gasPriceMultiplier)
55
- options.gasPriceMultiplier = store_1.default.gasPriceMultiplier;
56
- if (!options.gasPrice) {
57
- const web3 = options.web3 || store_1.default.web3Https;
58
- if (web3) {
59
- try {
60
- options.gasPrice = yield (0, exports.getGasPrice)(web3);
61
- }
62
- catch (e) {
63
- options.gasPrice = store_1.default.gasPrice;
64
- }
65
- }
66
- else {
67
- throw Error('web3 is undefined, define it in transaction options or initialize BlockchainConnector with web3 instance.');
68
- }
69
- }
70
- delete options.web3;
71
- return options;
72
- });
73
- exports.createTransactionOptions = createTransactionOptions;
74
- const isNodeJS = () => {
75
- // @ts-ignore
76
- return typeof window === 'undefined';
77
- };
78
- exports.isNodeJS = isNodeJS;
79
- const tupleToObject = (data, format) => {
80
- const processItem = (dataItem, formatItem) => {
81
- if (formatItem === null || formatItem === void 0 ? void 0 : formatItem.$obj) {
82
- return formatItem.$obj(dataItem);
83
- }
84
- else if (typeof formatItem === 'function') {
85
- if (formatItem.name === 'Number') {
86
- const value = formatItem(dataItem);
87
- return value < Number.MAX_SAFE_INTEGER ? value : Number.MAX_SAFE_INTEGER;
88
- }
89
- return formatItem(dataItem);
90
- }
91
- else if (typeof formatItem === 'object' && typeof dataItem === 'object') {
92
- return (0, exports.tupleToObject)(dataItem, formatItem);
93
- }
94
- else {
95
- return dataItem;
96
- }
97
- };
98
- if ((0, lodash_1.isArray)(format)) {
99
- const result = data.map((dataItem, index) => {
100
- const formatItem = index < format.length ? format[index] : format[format.length - 1];
101
- return processItem(dataItem, formatItem);
102
- });
103
- return result;
104
- }
105
- else {
106
- const result = {};
107
- Object.keys(format).forEach((key, index) => {
108
- const formatItem = format[key];
109
- const dataItem = data[index];
110
- result[key] = processItem(dataItem, formatItem);
111
- });
112
- return result;
113
- }
114
- };
115
- exports.tupleToObject = tupleToObject;
116
- const tupleToObjectsArray = (data, format) => {
117
- return data.map((item) => (0, exports.tupleToObject)(item, format));
118
- };
119
- exports.tupleToObjectsArray = tupleToObjectsArray;
120
- const objectToTuple = (data, format) => {
121
- const processItem = (dataItem, formatItem) => {
122
- if (formatItem === null || formatItem === void 0 ? void 0 : formatItem.$tuple) {
123
- return formatItem.$tuple(dataItem);
124
- }
125
- else if (typeof formatItem === 'object' && typeof dataItem === 'object') {
126
- return (0, exports.objectToTuple)(dataItem, formatItem);
127
- }
128
- else {
129
- return dataItem;
130
- }
131
- };
132
- if ((0, lodash_1.isArray)(format)) {
133
- return data.map((dataItem, index) => {
134
- const formatItem = index < format.length ? format[index] : format[format.length - 1];
135
- return processItem(dataItem, formatItem);
136
- });
137
- }
138
- else {
139
- return Object.keys(format).map((key) => {
140
- const dataItem = data[key];
141
- const formatItem = format[key];
142
- return processItem(dataItem, formatItem);
143
- });
144
- }
145
- };
146
- exports.objectToTuple = objectToTuple;
147
- function incrementMethodCall() {
148
- return function (_target, propertyName, propertyDescriptor) {
149
- const monitoring = Monitoring_1.Monitoring.getInstance();
150
- const method = propertyDescriptor.value;
151
- propertyDescriptor.value = function (...args) {
152
- return __awaiter(this, void 0, void 0, function* () {
153
- monitoring.incrementCall(propertyName);
154
- return method.apply(this, args);
155
- });
156
- };
157
- return propertyDescriptor;
158
- };
159
- }
160
- exports.incrementMethodCall = incrementMethodCall;
161
- const hexRegex = /^[0-9a-fA-F]+$/;
162
- function packDevicId(hexedDeviceId) {
163
- if (hexedDeviceId.length !== 64) {
164
- throw new Error('DeviceId must be equal 64 hex symbols');
165
- }
166
- if (!hexRegex.test(hexedDeviceId)) {
167
- throw new Error('DeviceId must be a hexedecimal');
168
- }
169
- return '0x' + hexedDeviceId;
170
- }
171
- exports.packDevicId = packDevicId;
172
- function unpackDeviceId(bytes32) {
173
- if (bytes32.length !== 66) {
174
- throw new Error('DeviceId bytes must be equal 66 symbols');
175
- }
176
- // removes '0x'
177
- return bytes32.slice(2, 66);
178
- }
179
- exports.unpackDeviceId = unpackDeviceId;
180
- function unpackSlotInfo(slotInfo, cpuDenominator) {
181
- return {
182
- cpuCores: slotInfo.cpuCores / cpuDenominator,
183
- ram: slotInfo.ram,
184
- diskUsage: slotInfo.diskUsage,
185
- };
186
- }
187
- exports.unpackSlotInfo = unpackSlotInfo;
188
- function packSlotInfo(slotInfo, cpuDenominator) {
189
- return {
190
- cpuCores: slotInfo.cpuCores * cpuDenominator,
191
- ram: slotInfo.ram,
192
- diskUsage: slotInfo.diskUsage,
193
- };
194
- }
195
- exports.packSlotInfo = packSlotInfo;
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLG1DQUFpQztBQUVqQyxtREFBZ0Q7QUFHaEQ7OztHQUdHO0FBQ0ksTUFBTSwrQkFBK0IsR0FBRyxDQUFDLGtCQUF1QyxFQUFFLEVBQUU7SUFDdkYsSUFBSSxDQUFDLGVBQUssQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFBLGtCQUFrQixhQUFsQixrQkFBa0IsdUJBQWxCLGtCQUFrQixDQUFFLElBQUksQ0FBQTtRQUNqRCxNQUFNLElBQUksS0FBSyxDQUNYLHdJQUF3SSxDQUMzSSxDQUFDO0FBQ1YsQ0FBQyxDQUFDO0FBTFcsUUFBQSwrQkFBK0IsbUNBSzFDO0FBRUY7O0dBRUc7QUFDSSxNQUFNLDhCQUE4QixHQUFHLENBQzFDLGtCQUF1QyxFQUNoQyxFQUFFO0lBQ1QsK0hBQStIO0lBQy9ILE9BQU8sQ0FBQyxDQUFDLENBQUEsa0JBQWtCLGFBQWxCLGtCQUFrQix1QkFBbEIsa0JBQWtCLENBQUUsSUFBSSxDQUFBLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBTFcsUUFBQSw4QkFBOEIsa0NBS3pDO0FBRUY7O0dBRUc7QUFDSSxNQUFNLFdBQVcsR0FBRyxDQUFPLElBQVUsRUFBbUIsRUFBRTtJQUM3RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbEMsQ0FBQyxDQUFBLENBQUM7QUFGVyxRQUFBLFdBQVcsZUFFdEI7QUFFRjs7O0dBR0c7QUFDSSxNQUFNLHdCQUF3QixHQUFHLENBQ3BDLE9BQTRCLEVBQ0QsRUFBRTtJQUM3QixJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO1FBQUUsT0FBTyxDQUFDLElBQUksR0FBRyxlQUFLLENBQUMsYUFBYSxDQUFDO0lBQ3RE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