@super-protocol/sdk-js 3.6.2 → 3.7.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 (31) hide show
  1. package/dist/cjs/index.d.ts +1 -0
  2. package/dist/cjs/index.js +2 -1
  3. package/dist/cjs/utils/order/index.d.ts +1 -1
  4. package/dist/cjs/utils/order/index.js +2 -2
  5. package/dist/cjs/utils/order/process-order.d.ts +5 -0
  6. package/dist/cjs/utils/order/process-order.js +100 -0
  7. package/dist/cjs/utils/order/types.d.ts +5 -4
  8. package/dist/cjs/utils/rent-calculator/index.d.ts +2 -0
  9. package/dist/cjs/utils/rent-calculator/index.js +19 -0
  10. package/dist/cjs/utils/rent-calculator/rent-calculator.d.ts +15 -0
  11. package/dist/cjs/utils/rent-calculator/rent-calculator.js +120 -0
  12. package/dist/cjs/utils/rent-calculator/types.d.ts +15 -0
  13. package/dist/cjs/utils/rent-calculator/types.js +3 -0
  14. package/dist/mjs/index.d.ts +1 -0
  15. package/dist/mjs/index.js +2 -1
  16. package/dist/mjs/utils/order/index.d.ts +1 -1
  17. package/dist/mjs/utils/order/index.js +2 -2
  18. package/dist/mjs/utils/order/process-order.d.ts +5 -0
  19. package/dist/mjs/utils/order/process-order.js +92 -0
  20. package/dist/mjs/utils/order/types.d.ts +5 -4
  21. package/dist/mjs/utils/rent-calculator/index.d.ts +2 -0
  22. package/dist/mjs/utils/rent-calculator/index.js +3 -0
  23. package/dist/mjs/utils/rent-calculator/rent-calculator.d.ts +15 -0
  24. package/dist/mjs/utils/rent-calculator/rent-calculator.js +116 -0
  25. package/dist/mjs/utils/rent-calculator/types.d.ts +15 -0
  26. package/dist/mjs/utils/rent-calculator/types.js +2 -0
  27. package/package.json +1 -1
  28. package/dist/cjs/utils/order/complete-order.d.ts +0 -3
  29. package/dist/cjs/utils/order/complete-order.js +0 -71
  30. package/dist/mjs/utils/order/complete-order.d.ts +0 -3
  31. package/dist/mjs/utils/order/complete-order.js +0 -64
@@ -90,6 +90,7 @@ export { default as AxiosTransport } from './analytics/transports/AxiosTransport
90
90
  export { default as FetchTransport } from './analytics/transports/FetchTransport.js';
91
91
  export * from './utils/cache/index.js';
92
92
  export * from './utils/order/index.js';
93
+ export * from './utils/rent-calculator/index.js';
93
94
  export * from './utils/tokens/index.js';
94
95
  export * from './errors/index.js';
95
96
  export * from './utils/schema-utils/index.js';
package/dist/cjs/index.js CHANGED
@@ -169,10 +169,11 @@ var FetchTransport_js_1 = require("./analytics/transports/FetchTransport.js");
169
169
  Object.defineProperty(exports, "FetchTransport", { enumerable: true, get: function () { return __importDefault(FetchTransport_js_1).default; } });
170
170
  __exportStar(require("./utils/cache/index.js"), exports);
171
171
  __exportStar(require("./utils/order/index.js"), exports);
172
+ __exportStar(require("./utils/rent-calculator/index.js"), exports);
172
173
  __exportStar(require("./utils/tokens/index.js"), exports);
173
174
  __exportStar(require("./errors/index.js"), exports);
174
175
  __exportStar(require("./utils/schema-utils/index.js"), exports);
175
176
  exports.ResourceLoaderUtils = __importStar(require("./utils/resourceLoaders/index.js"));
176
177
  var TeeSignatureVerifier_js_1 = require("./tee/TeeSignatureVerifier.js");
177
178
  Object.defineProperty(exports, "TeeSignatureVerifier", { enumerable: true, get: function () { return TeeSignatureVerifier_js_1.TeeSignatureVerifier; } });
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOEVBQXFGO0FBQTVFLDhJQUFBLE9BQU8sT0FBdUI7QUFFdkMsc0VBQW9EO0FBSXBELHdGQUErRjtBQUF0Rix3SkFBQSxPQUFPLE9BQTRCO0FBRTVDLDhDQUFzRDtBQUE3QyxtSEFBQSxPQUFPLE9BQVU7QUFDMUIsb0RBQWtDO0FBRWxDLDBEQUF3QztBQUV4QyxxREFBNEQ7QUFBbkQsZ0lBQUEsT0FBTyxPQUFnQjtBQUNoQyxvREFBa0M7QUFFbEMsbURBQTBEO0FBQWpELDhIQUFBLE9BQU8sT0FBZTtBQUMvQixvREFBa0M7QUFFbEMsNERBQW1FO0FBQTFELDBIQUFBLE9BQU8sT0FBYTtBQUM3Qiw4REFBNEM7QUFFNUMsc0RBQTZEO0FBQXBELG9IQUFBLE9BQU8sT0FBVTtBQUMxQiwyREFBeUM7QUFFekMsa0VBQXlFO0FBQWhFLGdJQUFBLE9BQU8sT0FBZ0I7QUFDaEMsaUVBQStDO0FBRS9DLGtFQUF5RTtBQUFoRSxnSUFBQSxPQUFPLE9BQWdCO0FBQ2hDLGlFQUErQztBQUUvQyxzREFBNkQ7QUFBcEQsb0hBQUEsT0FBTyxPQUFVO0FBQzFCLDJEQUF5QztBQUV6Qyw0REFBbUU7QUFBMUQsMEhBQUEsT0FBTyxPQUFhO0FBQzdCLDhEQUE0QztBQUU1QywwRUFBaUY7QUFBeEUsd0lBQUEsT0FBTyxPQUFvQjtBQUNwQyxxRUFBbUQ7QUFFbkQsb0VBQTJFO0FBQWxFLGtJQUFBLE9BQU8sT0FBaUI7QUFDakMsa0VBQWdEO0FBRWhELDBEQUFpRTtBQUF4RCx3SEFBQSxPQUFPLE9BQVk7QUFDNUIsNkRBQTJDO0FBRTNDLG9EQUEyRDtBQUFsRCxrSEFBQSxPQUFPLE9BQVM7QUFDekIsMERBQXdDO0FBRXhDLDBEQUFpRTtBQUF4RCx3SEFBQSxPQUFPLE9BQVk7QUFD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
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOEVBQXFGO0FBQTVFLDhJQUFBLE9BQU8sT0FBdUI7QUFFdkMsc0VBQW9EO0FBSXBELHdGQUErRjtBQUF0Rix3SkFBQSxPQUFPLE9BQTRCO0FBRTVDLDhDQUFzRDtBQUE3QyxtSEFBQSxPQUFPLE9BQVU7QUFDMUIsb0RBQWtDO0FBRWxDLDBEQUF3QztBQUV4QyxxREFBNEQ7QUFBbkQsZ0lBQUEsT0FBTyxPQUFnQjtBQUNoQyxvREFBa0M7QUFFbEMsbURBQTBEO0FBQWpELDhIQUFBLE9BQU8sT0FBZTtBQUMvQixvREFBa0M7QUFFbEMsNERBQW1FO0FBQTFELDBIQUFBLE9BQU8sT0FBYTtBQUM3Qiw4REFBNEM7QUFFNUMsc0RBQTZEO0FBQXBELG9IQUFBLE9BQU8sT0FBVTtBQUMxQiwyREFBeUM7QUFFekMsa0VBQXlFO0FBQWhFLGdJQUFBLE9BQU8sT0FBZ0I7QUFDaEMsaUVBQStDO0FBRS9DLGtFQUF5RTtBQUFoRSxnSUFBQSxPQUFPLE9BQWdCO0FBQ2hDLGlFQUErQztBQUUvQyxzREFBNkQ7QUFBcEQsb0hBQUEsT0FBTyxPQUFVO0FBQzFCLDJEQUF5QztBQUV6Qyw0REFBbUU7QUFBMUQsMEhBQUEsT0FBTyxPQUFhO0FBQzdCLDhEQUE0QztBQUU1QywwRUFBaUY7QUFBeEUsd0lBQUEsT0FBTyxPQUFvQjtBQUNwQyxxRUFBbUQ7QUFFbkQsb0VBQTJFO0FBQWxFLGtJQUFBLE9BQU8sT0FBaUI7QUFDakMsa0VBQWdEO0FBRWhELDBEQUFpRTtBQUF4RCx3SEFBQSxPQUFPLE9BQVk7QUFDNUIsNkRBQTJDO0FBRTNDLG9EQUEyRDtBQUFsRCxrSEFBQSxPQUFPLE9BQVM7QUFDekIsMERBQXdDO0FBRXhDLDBEQUFpRTtBQUF4RCx3SEFBQSxPQUFPLE9BQVk7QUFDNUIsNkRBQTJDO0FBRTNDLHNFQUE2RTtBQUFwRSxvSUFBQSxPQUFPLE9BQWtCO0FBQ2xDLG1FQUFpRDtBQUVqRCxvR0FBMkc7QUFBbEcsa0tBQUEsT0FBTyxPQUFpQztBQUNqRCxrRkFBZ0U7QUFFaEUsc0VBQTZFO0FBQXBFLG9JQUFBLE9BQU8sT0FBa0I7QUFDbEMsbUVBQWlEO0FBRWpELHNGQUE2RjtBQUFwRixvSkFBQSxPQUFPLE9BQTBCO0FBQzFDLDJFQUF5RDtBQUV6RCxvRkFBMkY7QUFBbEYsa0pBQUEsT0FBTyxPQUF5QjtBQUN6QywwRUFBd0Q7QUFFeEQsc0VBQTZFO0FBQXBFLG9JQUFBLE9BQU8sT0FBa0I7QUFDbEMsbUVBQWlEO0FBRWpELDhDQUFxRDtBQUE1QyxrSEFBQSxPQUFPLE9BQVM7QUFDekIsb0RBQWtDO0FBRWxDLG9EQUEyRDtBQUFsRCx3SEFBQSxPQUFPLE9BQVk7QUFDNUIsdURBQXFDO0FBRXJDLG9EQUEyRDtBQUFsRCx3SEFBQSxPQUFPLE9BQVk7QUFDNUIsdURBQXFDO0FBRXJDLDhDQUFxRDtBQUE1QyxrSEFBQSxPQUFPLE9BQVM7QUFDekIsb0RBQWtDO0FBRWxDLDBDQUFpRDtBQUF4Qyw4R0FBQSxPQUFPLE9BQU87QUFDdkIsa0RBQWdDO0FBRWhDLG1EQUFpQztBQUVqQyx5R0FBeUY7QUFDekYsdUVBQTJGO0FBQWxGLGdJQUFBLE9BQU8sT0FBZ0I7QUFDaEMseUZBR3NEO0FBRnBELGtKQUFBLE9BQU8sT0FBeUI7QUFHbEMsMkZBQWtHO0FBQXpGLG9KQUFBLE9BQU8sT0FBMEI7QUFFMUMsMkVBSStDO0FBSDdDLG9JQUFBLE9BQU8sT0FBa0I7QUFDekIsZ0hBQUEsV0FBVyxPQUFBO0FBR2IsdUZBSXFEO0FBSG5ELGdKQUFBLE9BQU8sT0FBd0I7QUFFL0IsNEhBQUEsaUJBQWlCLE9BQUE7QUFNbkIsbUZBQTBGO0FBQWpGLDRJQUFBLE9BQU8sT0FBc0I7QUFFdEMsNkZBQXlGO0FBQWhGLHFJQUFBLHVCQUF1QixPQUFBO0FBQ2hDLDZGQUd3RDtBQUZ0RCxvSUFBQSxzQkFBc0IsT0FBQTtBQUN0QixxSUFBQSx1QkFBdUIsT0FBQTtBQUd6QixtRUFBaUQ7QUFDakQsb0VBQW9EO0FBQ3BELDREQUE0QztBQUU1QyxxREFBeUU7QUFBaEUsaUlBQUEsaUNBQWlDLE9BQUE7QUFFMUMsMEJBQXdCO0FBRXhCLGtEQUFnQztBQUNoQywyQ0FBMkM7QUFBbEMscUdBQUEsU0FBUyxPQUFBO0FBQ2xCLHVEQUE2RTtBQUFwRSw4R0FBQSxZQUFZLE9BQUE7QUFBRSw4R0FBQSxZQUFZLE9BQUE7QUFBRSwyR0FBQSxTQUFTLE9BQUE7QUFDOUMsNkRBQXlEO0FBQWhELG1IQUFBLGNBQWMsT0FBQTtBQUN2QixvREFBa0M7QUFDbEMsaUVBQTZEO0FBQXBELHVIQUFBLGdCQUFnQixPQUFBO0FBQ3pCLDJFQUF1RTtBQUE5RCxpSUFBQSxxQkFBcUIsT0FBQTtBQUM5QixxRUFBaUU7QUFBeEQsMkhBQUEsa0JBQWtCLE9BQUE7QUFFM0IsMkRBQXlDO0FBRXpDLHVEQUFxQztBQUNyQyx5REFBZ0U7QUFBdkQsMEhBQUEsT0FBTyxPQUFhO0FBQzdCLHdGQUErRjtBQUF0RiwwSUFBQSxPQUFPLE9BQXFCO0FBQ3JDLDhGQUFxRztBQUE1RixnSkFBQSxPQUFPLE9BQXdCO0FBQ3hDLDhFQUFxRjtBQUE1RSxvSUFBQSxPQUFPLE9BQWtCO0FBQ2xDLDhFQUFxRjtBQUE1RSxvSUFBQSxPQUFPLE9BQWtCO0FBQ2xDLHlEQUF1QztBQUN2Qyx5REFBdUM7QUFDdkMsbUVBQWlEO0FBQ2pELDBEQUF3QztBQUN4QyxvREFBa0M7QUFDbEMsZ0VBQThDO0FBQzlDLHdGQUF3RTtBQUN4RSx5RUFBcUU7QUFBNUQsK0hBQUEsb0JBQW9CLE9BQUEifQ==
@@ -1,4 +1,4 @@
1
- export * from './complete-order.js';
1
+ export * from './process-order.js';
2
2
  export * from './types.js';
3
3
  export * from './validate-order.js';
4
4
  export * from './versify.js';
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./complete-order.js"), exports);
17
+ __exportStar(require("./process-order.js"), exports);
18
18
  __exportStar(require("./types.js"), exports);
19
19
  __exportStar(require("./validate-order.js"), exports);
20
20
  __exportStar(require("./versify.js"), exports);
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvb3JkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUFvQztBQUNwQyw2Q0FBMkI7QUFDM0Isc0RBQW9DO0FBQ3BDLCtDQUE2QiJ9
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvb3JkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFEQUFtQztBQUNuQyw2Q0FBMkI7QUFDM0Isc0RBQW9DO0FBQ3BDLCtDQUE2QiJ9
@@ -0,0 +1,5 @@
1
+ import { OrderStatus } from '../../types/Order.js';
2
+ import { TransactionOptions } from '../../types/index.js';
3
+ import { ProcessOrderParams } from './types.js';
4
+ export declare const stringifyError: (error: Error) => string;
5
+ export declare const processOrder: (params: ProcessOrderParams, transactionOptions?: TransactionOptions) => Promise<OrderStatus>;
@@ -0,0 +1,100 @@
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.processOrder = exports.stringifyError = void 0;
7
+ const TIIGenerator_js_1 = __importDefault(require("../../TIIGenerator.js"));
8
+ const index_js_1 = __importDefault(require("../../crypto/index.js"));
9
+ const Order_js_1 = __importDefault(require("../../models/Order.js"));
10
+ const Offer_js_1 = require("../../types/Offer.js");
11
+ const Order_js_2 = require("../../types/Order.js");
12
+ const index_js_2 = require("../../types/index.js");
13
+ const supportedOfferTypes = [Offer_js_1.OfferType.Data, Offer_js_1.OfferType.Solution];
14
+ const supportedOrderStatusesToComplete = [
15
+ Order_js_2.OrderStatus.New,
16
+ Order_js_2.OrderStatus.Processing,
17
+ Order_js_2.OrderStatus.Canceling,
18
+ ];
19
+ const getResultPublicKeyFromOrderInfo = (orderInfo) => {
20
+ const { publicKey } = orderInfo.resultInfo;
21
+ if (!publicKey.trim()) {
22
+ throw new Error('Public key cannot be empty');
23
+ }
24
+ try {
25
+ return JSON.parse(publicKey);
26
+ }
27
+ catch (err) {
28
+ throw new Error('Could not parse result public key');
29
+ }
30
+ };
31
+ const buildResourceResult = async (params) => {
32
+ const { orderId, orderInfo, resource, resourceEncryption, parentOrder, pccsApiUrl } = params;
33
+ if (parentOrder?.offerType === Offer_js_1.OfferType.TeeOffer) {
34
+ return await TIIGenerator_js_1.default.generate(orderId, resource, orderInfo.args, resourceEncryption, pccsApiUrl);
35
+ }
36
+ const publicKey = getResultPublicKeyFromOrderInfo(orderInfo);
37
+ const content = {
38
+ resource: resource,
39
+ encryption: resourceEncryption,
40
+ };
41
+ const encryptedContent = await index_js_1.default.encrypt(JSON.stringify(content), publicKey);
42
+ return JSON.stringify(encryptedContent);
43
+ };
44
+ const stringifyError = (error) => {
45
+ return JSON.stringify(error, Object.getOwnPropertyNames(error));
46
+ };
47
+ exports.stringifyError = stringifyError;
48
+ const buildOrderResult = async (params) => {
49
+ if (params.orderResult === undefined) {
50
+ return params.orderResult;
51
+ }
52
+ if (typeof params.orderResult === 'string') {
53
+ return params.orderResult;
54
+ }
55
+ if (params.orderResult instanceof Error) {
56
+ return (0, exports.stringifyError)(params.orderResult);
57
+ }
58
+ return await buildResourceResult({
59
+ orderId: params.order.orderId,
60
+ orderInfo: params.order.orderInfo,
61
+ resource: params.orderResult.resource,
62
+ resourceEncryption: params.orderResult.resourceEncryption,
63
+ parentOrder: params.parentOrder,
64
+ pccsApiUrl: params.pccsApiUrl,
65
+ });
66
+ };
67
+ const processOrder = async (params, transactionOptions) => {
68
+ const { orderId, orderInfo, offerType, priceType } = params.order;
69
+ if (!supportedOfferTypes.includes(offerType)) {
70
+ throw new Error(`Cannot process order with offer type '${offerType}'`);
71
+ }
72
+ if (!supportedOrderStatusesToComplete.includes(orderInfo.status)) {
73
+ throw new Error(`Cannot process order with order status '${orderInfo.status}'`);
74
+ }
75
+ if (params.status === Order_js_2.OrderStatus.Canceled && orderInfo.status !== Order_js_2.OrderStatus.Canceling) {
76
+ throw Error(`Order cancellation is possible only from "canceling" status`);
77
+ }
78
+ const result = await buildOrderResult(params);
79
+ const order = new Order_js_1.default(orderId);
80
+ if (orderInfo.status === Order_js_2.OrderStatus.New) {
81
+ await order.updateStatus(Order_js_2.OrderStatus.Processing, transactionOptions);
82
+ }
83
+ if (params.orderResult instanceof Error) {
84
+ const status = Order_js_2.OrderStatus.Error;
85
+ await order.complete(status, result, transactionOptions);
86
+ return status;
87
+ }
88
+ if (priceType === index_js_2.PriceType.Fixed || params.status) {
89
+ const status = params.status ?? Order_js_2.OrderStatus.Done;
90
+ await order.complete(status, result, transactionOptions);
91
+ return status;
92
+ }
93
+ if (priceType === index_js_2.PriceType.PerHour) {
94
+ await order.updateOrderResult(result, transactionOptions);
95
+ return Order_js_2.OrderStatus.Processing;
96
+ }
97
+ throw new Error(`Unsupported price type: ${priceType}`);
98
+ };
99
+ exports.processOrder = processOrder;
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1vcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9vcmRlci9wcm9jZXNzLW9yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDRFQUFpRDtBQUNqRCxxRUFBMkM7QUFDM0MscUVBQTBDO0FBQzFDLG1EQUE0RDtBQUM1RCxtREFBOEQ7QUFDOUQsbURBQXFFO0FBR3JFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxvQkFBUyxDQUFDLElBQUksRUFBRSxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sZ0NBQWdDLEdBQUc7SUFDdkMsc0JBQVcsQ0FBQyxHQUFHO0lBQ2Ysc0JBQVcsQ0FBQyxVQUFVO0lBQ3RCLHNCQUFXLENBQUMsU0FBUztDQUN0QixDQUFDO0FBVUYsTUFBTSwrQkFBK0IsR0FBRyxDQUN0QyxTQUF3QyxFQUN6QixFQUFFO0lBQ2pCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO0lBRTNDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQWtCLENBQUM7SUFDaEQsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUFFLE1BQXdCLEVBQW1CLEVBQUU7SUFDOUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFF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
@@ -1,5 +1,5 @@
1
1
  import { Encryption, StorageProviderResource } from '@super-protocol/dto-js';
2
- import { BlockchainId, OfferInfo, OfferType, OrderArgs, OrderInfo, OrderStatus, VersionedOfferId } from '../../types/index.js';
2
+ import { BlockchainId, OfferInfo, OfferType, OrderArgs, OrderInfo, OrderStatus, PriceType, VersionedOfferId } from '../../types/index.js';
3
3
  export type SolutionOfferProperties = {
4
4
  portForwarding?: number;
5
5
  groupingOffers?: boolean;
@@ -22,20 +22,21 @@ export type ValidateOrderOptions = {
22
22
  isRestrictionsPermitThatOffer: (offerId: BlockchainId, otherOfferId: VersionedOfferId) => Promise<boolean>;
23
23
  };
24
24
  type TerminatedOrderStatus = OrderStatus.Done | OrderStatus.Canceled | OrderStatus.Error;
25
- export type CompleteOrderParams = {
25
+ export type ProcessOrderParams = {
26
26
  order: {
27
27
  orderId: BlockchainId;
28
28
  orderInfo: Pick<OrderInfo, 'status' | 'args' | 'resultInfo'>;
29
29
  offerType: OfferType;
30
+ priceType: PriceType;
30
31
  };
31
32
  parentOrder?: {
32
33
  offerType: OfferType;
33
34
  };
34
- orderResult: string | {
35
+ orderResult?: string | Error | {
35
36
  resource: StorageProviderResource;
36
37
  resourceEncryption: Encryption;
37
38
  };
38
39
  pccsApiUrl: string;
39
- status: TerminatedOrderStatus;
40
+ status?: TerminatedOrderStatus;
40
41
  };
41
42
  export {};
@@ -0,0 +1,2 @@
1
+ export * from './rent-calculator.js';
2
+ export * from './types.js';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./rent-calculator.js"), exports);
18
+ __exportStar(require("./types.js"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcmVudC1jYWxjdWxhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1REFBcUM7QUFDckMsNkNBQTJCIn0=
@@ -0,0 +1,15 @@
1
+ import { OrderRentInfo, OrderThreshold, RentConfig } from './types.js';
2
+ export declare class RentCalculator {
3
+ private readonly order;
4
+ private readonly rentConfig;
5
+ private readonly minimalRentPeriod;
6
+ private optionsTotalFixedPrice;
7
+ private optionsTotalPricePerHour;
8
+ constructor(order: OrderRentInfo, rentConfig: RentConfig);
9
+ calculateOptionsDepositSpent(): bigint;
10
+ calculateThreshold(orderPrice: string): OrderThreshold;
11
+ isAwaitingPayment(orderPrice: string): boolean;
12
+ calculateAwaitingPaymentDate(orderPrice: string): Date | null;
13
+ private calculateOrderMinimalRentPrice;
14
+ private getWorkingTimeMinutes;
15
+ }
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RentCalculator = void 0;
4
+ const index_js_1 = require("../../types/index.js");
5
+ class RentCalculator {
6
+ order;
7
+ rentConfig;
8
+ minimalRentPeriod;
9
+ optionsTotalFixedPrice = BigInt(0);
10
+ optionsTotalPricePerHour = BigInt(0);
11
+ constructor(order, rentConfig) {
12
+ this.order = order;
13
+ this.rentConfig = rentConfig;
14
+ const optionUsage = this.order.selectedUsage?.optionUsage || [];
15
+ const slotMinTimeMinutes = this.order.selectedUsage?.slotUsage?.minTimeMinutes || 0;
16
+ this.minimalRentPeriod =
17
+ Math.max(...optionUsage.map((usage) => usage.minTimeMinutes), slotMinTimeMinutes) ||
18
+ this.rentConfig.orderMinimumRentTimeMinutes;
19
+ optionUsage.forEach((usage, index) => {
20
+ const optionsCount = this.order.selectedUsage?.optionsCount[index] || 0;
21
+ const optionPrice = BigInt(usage.price) * BigInt(optionsCount);
22
+ if (usage.priceType === index_js_1.PriceType.Fixed) {
23
+ this.optionsTotalFixedPrice += BigInt(optionPrice);
24
+ }
25
+ else if (usage.priceType === index_js_1.PriceType.PerHour) {
26
+ this.optionsTotalPricePerHour += BigInt(optionPrice);
27
+ }
28
+ });
29
+ }
30
+ calculateOptionsDepositSpent() {
31
+ const workingTimeMinutes = this.getWorkingTimeMinutes();
32
+ const workingTime = Math.max(workingTimeMinutes, this.minimalRentPeriod);
33
+ const optionsDepositSpent = this.optionsTotalFixedPrice + (this.optionsTotalPricePerHour * BigInt(workingTime)) / 60n;
34
+ return optionsDepositSpent;
35
+ }
36
+ calculateThreshold(orderPrice) {
37
+ const deposit = BigInt(this.order.deposit || 0);
38
+ const outputReserve = BigInt(this.order.outputReserve || 0);
39
+ const depositLeft = deposit - outputReserve - BigInt(orderPrice);
40
+ const orderMinimalRentPrice = this.calculateOrderMinimalRentPrice();
41
+ if (orderMinimalRentPrice === 0n) {
42
+ // free order with PerHour type price or order with Fixed price type
43
+ return { orderCurrentThresholdPercent: Infinity, orderRemainTimeMinutes: Infinity };
44
+ }
45
+ const workingTimeMinutes = this.getWorkingTimeMinutes();
46
+ const firstMinWorkingTimePeriodRemainMinutes = this.minimalRentPeriod - workingTimeMinutes;
47
+ const firstMinWorkingTimePeriodThresholdPercent = (firstMinWorkingTimePeriodRemainMinutes * 100) / this.minimalRentPeriod;
48
+ const orderCurrentThresholdPercent = Math.max(firstMinWorkingTimePeriodThresholdPercent, 0) +
49
+ Number((depositLeft * 100n) / orderMinimalRentPrice);
50
+ const orderRemainTimeMinutes = (this.minimalRentPeriod * orderCurrentThresholdPercent) / 100;
51
+ return { orderCurrentThresholdPercent, orderRemainTimeMinutes };
52
+ }
53
+ isAwaitingPayment(orderPrice) {
54
+ const { orderCurrentThresholdPercent, orderRemainTimeMinutes } = this.calculateThreshold(orderPrice);
55
+ return (orderCurrentThresholdPercent < this.rentConfig.orderMaximumThresholdPercent ||
56
+ orderRemainTimeMinutes < this.rentConfig.orderMinimumRentTimeMinutes);
57
+ }
58
+ calculateAwaitingPaymentDate(orderPrice) {
59
+ const now = Date.now();
60
+ const { orderRemainTimeMinutes, orderCurrentThresholdPercent } = this.calculateThreshold(orderPrice);
61
+ const isInfThreshold = !isFinite(orderCurrentThresholdPercent);
62
+ const isInfTime = !isFinite(orderRemainTimeMinutes);
63
+ // If both are infinite (e.g., free order), no check needed soon
64
+ if (isInfThreshold && isInfTime) {
65
+ return null;
66
+ }
67
+ // Estimate time until minimal rent time violation
68
+ let timeToMinRentViolationMs = Infinity;
69
+ if (!isInfTime && orderRemainTimeMinutes >= this.rentConfig.orderMinimumRentTimeMinutes) {
70
+ const minutesAboveMinRent = orderRemainTimeMinutes - this.rentConfig.orderMinimumRentTimeMinutes;
71
+ timeToMinRentViolationMs = minutesAboveMinRent * 60 * 1000;
72
+ }
73
+ else if (!isInfTime) {
74
+ timeToMinRentViolationMs = 0;
75
+ }
76
+ // Estimate time until maximum threshold percentage violation
77
+ let timeToMaxThresholdViolationMs = Infinity;
78
+ const targetPercent = this.rentConfig.orderMaximumThresholdPercent;
79
+ if (!isInfThreshold &&
80
+ orderCurrentThresholdPercent > targetPercent &&
81
+ this.minimalRentPeriod > 0) {
82
+ const percentToDrop = orderCurrentThresholdPercent - targetPercent;
83
+ const minutesToDrop = (this.minimalRentPeriod / 100) * percentToDrop;
84
+ timeToMaxThresholdViolationMs = minutesToDrop * 60 * 1000;
85
+ }
86
+ else if (!isInfThreshold && orderCurrentThresholdPercent <= targetPercent) {
87
+ timeToMaxThresholdViolationMs = 0;
88
+ }
89
+ timeToMinRentViolationMs = Math.max(0, timeToMinRentViolationMs);
90
+ timeToMaxThresholdViolationMs = Math.max(0, timeToMaxThresholdViolationMs);
91
+ // Calculate the earliest violation time
92
+ const minTimeToViolationMs = Math.min(timeToMinRentViolationMs, timeToMaxThresholdViolationMs);
93
+ if (!isFinite(minTimeToViolationMs)) {
94
+ return null;
95
+ }
96
+ const targetViolationTimestamp = now + minTimeToViolationMs;
97
+ const finalCheckTimestamp = minTimeToViolationMs === 0 ? now : targetViolationTimestamp;
98
+ return new Date(finalCheckTimestamp);
99
+ }
100
+ calculateOrderMinimalRentPrice() {
101
+ if (!this.order.selectedUsage) {
102
+ throw new Error(`Rent Calculator: selectedUsage is empty`);
103
+ }
104
+ const slotUsage = this.order.selectedUsage.slotUsage;
105
+ const slotCount = this.order.selectedUsage.slotCount;
106
+ let orderPricePerHour = 0n;
107
+ if (slotUsage?.priceType === index_js_1.PriceType.PerHour) {
108
+ const slotCountMultiplier = BigInt(slotCount) || 1n; // slotCount is '0' for value orders
109
+ orderPricePerHour = BigInt(slotUsage.price) * slotCountMultiplier;
110
+ }
111
+ return (((orderPricePerHour + this.optionsTotalPricePerHour) * BigInt(this.minimalRentPeriod)) / 60n);
112
+ }
113
+ getWorkingTimeMinutes() {
114
+ // Math.abs - a little math trick for tests with manipulating time
115
+ //in integration tests startDate is bigger then Date.now()
116
+ return Math.floor(Math.abs(Date.now() - this.order.startDate * 1000) / (60 * 1000));
117
+ }
118
+ }
119
+ exports.RentCalculator = RentCalculator;
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVudC1jYWxjdWxhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3JlbnQtY2FsY3VsYXRvci9yZW50LWNhbGN1bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWlEO0FBR2pELE1BQWEsY0FBYztJQU1OO0lBQ0E7SUFORixpQkFBaUIsQ0FBUztJQUNuQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsd0JBQXdCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdDLFlBQ21CLEtBQW9CLEVBQ3BCLFVBQXNCO1FBRHRCLFVBQUssR0FBTCxLQUFLLENBQWU7UUFDcEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUV2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO1FBQ2hFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLGNBQWMsSUFBSSxDQUFDLENBQUM7UUFFcEYsSUFBSSxDQUFDLGlCQUFpQjtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDO2dCQUNqRixJQUFJLENBQUMsVUFBVSxDQUFDLDJCQUEyQixDQUFDO1FBRTlDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxH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
@@ -0,0 +1,15 @@
1
+ import { OrderUsage, TokenAmount } from '../../types/index.js';
2
+ export type OrderThreshold = {
3
+ orderCurrentThresholdPercent: number;
4
+ orderRemainTimeMinutes: number;
5
+ };
6
+ export type RentConfig = {
7
+ orderMinimumRentTimeMinutes: number;
8
+ orderMaximumThresholdPercent: number;
9
+ };
10
+ export type OrderRentInfo = {
11
+ selectedUsage: OrderUsage;
12
+ outputReserve: TokenAmount;
13
+ deposit: TokenAmount;
14
+ startDate: number;
15
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcmVudC1jYWxjdWxhdG9yL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -90,6 +90,7 @@ export { default as AxiosTransport } from './analytics/transports/AxiosTransport
90
90
  export { default as FetchTransport } from './analytics/transports/FetchTransport.js';
91
91
  export * from './utils/cache/index.js';
92
92
  export * from './utils/order/index.js';
93
+ export * from './utils/rent-calculator/index.js';
93
94
  export * from './utils/tokens/index.js';
94
95
  export * from './errors/index.js';
95
96
  export * from './utils/schema-utils/index.js';
package/dist/mjs/index.js CHANGED
@@ -84,9 +84,10 @@ export { default as AxiosTransport } from './analytics/transports/AxiosTransport
84
84
  export { default as FetchTransport } from './analytics/transports/FetchTransport.js';
85
85
  export * from './utils/cache/index.js';
86
86
  export * from './utils/order/index.js';
87
+ export * from './utils/rent-calculator/index.js';
87
88
  export * from './utils/tokens/index.js';
88
89
  export * from './errors/index.js';
89
90
  export * from './utils/schema-utils/index.js';
90
91
  export * as ResourceLoaderUtils from './utils/resourceLoaders/index.js';
91
92
  export { TeeSignatureVerifier } from './tee/TeeSignatureVerifier.js';
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXJGLGNBQWMscUNBQXFDLENBQUM7QUFJcEQsT0FBTyxFQUFFLE9BQU8sSUFBSSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRS9GLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLE9BQU8sRUFBRSxPQUFPLElBQUksWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsT0FBTyxJQUFJLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLGNBQWMsZ0NBQWdDLENBQUM7QUFFL0MsT0FBTyxFQUFFLE9BQU8sSUFBSSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsT0FBTyxJQUFJLFNBQVMsRUFB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
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXJGLGNBQWMscUNBQXFDLENBQUM7QUFJcEQsT0FBTyxFQUFFLE9BQU8sSUFBSSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRS9GLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLE9BQU8sRUFBRSxPQUFPLElBQUksWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsT0FBTyxJQUFJLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLGNBQWMsZ0NBQWdDLENBQUM7QUFFL0MsT0FBTyxFQUFFLE9BQU8sSUFBSSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsT0FBTyxJQUFJLFNBQVMsRUFB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
@@ -1,4 +1,4 @@
1
- export * from './complete-order.js';
1
+ export * from './process-order.js';
2
2
  export * from './types.js';
3
3
  export * from './validate-order.js';
4
4
  export * from './versify.js';
@@ -1,5 +1,5 @@
1
- export * from './complete-order.js';
1
+ export * from './process-order.js';
2
2
  export * from './types.js';
3
3
  export * from './validate-order.js';
4
4
  export * from './versify.js';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvb3JkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsY0FBYyxDQUFDIn0=
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvb3JkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsY0FBYyxDQUFDIn0=
@@ -0,0 +1,5 @@
1
+ import { OrderStatus } from '../../types/Order.js';
2
+ import { TransactionOptions } from '../../types/index.js';
3
+ import { ProcessOrderParams } from './types.js';
4
+ export declare const stringifyError: (error: Error) => string;
5
+ export declare const processOrder: (params: ProcessOrderParams, transactionOptions?: TransactionOptions) => Promise<OrderStatus>;
@@ -0,0 +1,92 @@
1
+ import TIIGenerator from '../../TIIGenerator.js';
2
+ import Crypto from '../../crypto/index.js';
3
+ import Order from '../../models/Order.js';
4
+ import { OfferType } from '../../types/Offer.js';
5
+ import { OrderStatus } from '../../types/Order.js';
6
+ import { PriceType } from '../../types/index.js';
7
+ const supportedOfferTypes = [OfferType.Data, OfferType.Solution];
8
+ const supportedOrderStatusesToComplete = [
9
+ OrderStatus.New,
10
+ OrderStatus.Processing,
11
+ OrderStatus.Canceling,
12
+ ];
13
+ const getResultPublicKeyFromOrderInfo = (orderInfo) => {
14
+ const { publicKey } = orderInfo.resultInfo;
15
+ if (!publicKey.trim()) {
16
+ throw new Error('Public key cannot be empty');
17
+ }
18
+ try {
19
+ return JSON.parse(publicKey);
20
+ }
21
+ catch (err) {
22
+ throw new Error('Could not parse result public key');
23
+ }
24
+ };
25
+ const buildResourceResult = async (params) => {
26
+ const { orderId, orderInfo, resource, resourceEncryption, parentOrder, pccsApiUrl } = params;
27
+ if (parentOrder?.offerType === OfferType.TeeOffer) {
28
+ return await TIIGenerator.generate(orderId, resource, orderInfo.args, resourceEncryption, pccsApiUrl);
29
+ }
30
+ const publicKey = getResultPublicKeyFromOrderInfo(orderInfo);
31
+ const content = {
32
+ resource: resource,
33
+ encryption: resourceEncryption,
34
+ };
35
+ const encryptedContent = await Crypto.encrypt(JSON.stringify(content), publicKey);
36
+ return JSON.stringify(encryptedContent);
37
+ };
38
+ export const stringifyError = (error) => {
39
+ return JSON.stringify(error, Object.getOwnPropertyNames(error));
40
+ };
41
+ const buildOrderResult = async (params) => {
42
+ if (params.orderResult === undefined) {
43
+ return params.orderResult;
44
+ }
45
+ if (typeof params.orderResult === 'string') {
46
+ return params.orderResult;
47
+ }
48
+ if (params.orderResult instanceof Error) {
49
+ return stringifyError(params.orderResult);
50
+ }
51
+ return await buildResourceResult({
52
+ orderId: params.order.orderId,
53
+ orderInfo: params.order.orderInfo,
54
+ resource: params.orderResult.resource,
55
+ resourceEncryption: params.orderResult.resourceEncryption,
56
+ parentOrder: params.parentOrder,
57
+ pccsApiUrl: params.pccsApiUrl,
58
+ });
59
+ };
60
+ export const processOrder = async (params, transactionOptions) => {
61
+ const { orderId, orderInfo, offerType, priceType } = params.order;
62
+ if (!supportedOfferTypes.includes(offerType)) {
63
+ throw new Error(`Cannot process order with offer type '${offerType}'`);
64
+ }
65
+ if (!supportedOrderStatusesToComplete.includes(orderInfo.status)) {
66
+ throw new Error(`Cannot process order with order status '${orderInfo.status}'`);
67
+ }
68
+ if (params.status === OrderStatus.Canceled && orderInfo.status !== OrderStatus.Canceling) {
69
+ throw Error(`Order cancellation is possible only from "canceling" status`);
70
+ }
71
+ const result = await buildOrderResult(params);
72
+ const order = new Order(orderId);
73
+ if (orderInfo.status === OrderStatus.New) {
74
+ await order.updateStatus(OrderStatus.Processing, transactionOptions);
75
+ }
76
+ if (params.orderResult instanceof Error) {
77
+ const status = OrderStatus.Error;
78
+ await order.complete(status, result, transactionOptions);
79
+ return status;
80
+ }
81
+ if (priceType === PriceType.Fixed || params.status) {
82
+ const status = params.status ?? OrderStatus.Done;
83
+ await order.complete(status, result, transactionOptions);
84
+ return status;
85
+ }
86
+ if (priceType === PriceType.PerHour) {
87
+ await order.updateOrderResult(result, transactionOptions);
88
+ return OrderStatus.Processing;
89
+ }
90
+ throw new Error(`Unsupported price type: ${priceType}`);
91
+ };
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1vcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9vcmRlci9wcm9jZXNzLW9yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sWUFBWSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sTUFBTSxNQUFNLHVCQUF1QixDQUFDO0FBQzNDLE9BQU8sS0FBSyxNQUFNLHVCQUF1QixDQUFDO0FBQzFDLE9BQU8sRUFBYSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEVBQWEsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBTSxzQkFBc0IsQ0FBQztBQUdyRSxNQUFNLG1CQUFtQixHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakUsTUFBTSxnQ0FBZ0MsR0FBRztJQUN2QyxXQUFXLENBQUMsR0FBRztJQUNmLFdBQVcsQ0FBQyxVQUFVO0lBQ3RCLFdBQVcsQ0FBQyxTQUFTO0NBQ3RCLENBQUM7QUFVRixNQUFNLCtCQUErQixHQUFHLENBQ3RDLFNBQXdDLEVBQ3pCLEVBQUU7SUFDakIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7SUFFM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBa0IsQ0FBQztJQUNoRCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUN2RCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYs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
@@ -1,5 +1,5 @@
1
1
  import { Encryption, StorageProviderResource } from '@super-protocol/dto-js';
2
- import { BlockchainId, OfferInfo, OfferType, OrderArgs, OrderInfo, OrderStatus, VersionedOfferId } from '../../types/index.js';
2
+ import { BlockchainId, OfferInfo, OfferType, OrderArgs, OrderInfo, OrderStatus, PriceType, VersionedOfferId } from '../../types/index.js';
3
3
  export type SolutionOfferProperties = {
4
4
  portForwarding?: number;
5
5
  groupingOffers?: boolean;
@@ -22,20 +22,21 @@ export type ValidateOrderOptions = {
22
22
  isRestrictionsPermitThatOffer: (offerId: BlockchainId, otherOfferId: VersionedOfferId) => Promise<boolean>;
23
23
  };
24
24
  type TerminatedOrderStatus = OrderStatus.Done | OrderStatus.Canceled | OrderStatus.Error;
25
- export type CompleteOrderParams = {
25
+ export type ProcessOrderParams = {
26
26
  order: {
27
27
  orderId: BlockchainId;
28
28
  orderInfo: Pick<OrderInfo, 'status' | 'args' | 'resultInfo'>;
29
29
  offerType: OfferType;
30
+ priceType: PriceType;
30
31
  };
31
32
  parentOrder?: {
32
33
  offerType: OfferType;
33
34
  };
34
- orderResult: string | {
35
+ orderResult?: string | Error | {
35
36
  resource: StorageProviderResource;
36
37
  resourceEncryption: Encryption;
37
38
  };
38
39
  pccsApiUrl: string;
39
- status: TerminatedOrderStatus;
40
+ status?: TerminatedOrderStatus;
40
41
  };
41
42
  export {};
@@ -0,0 +1,2 @@
1
+ export * from './rent-calculator.js';
2
+ export * from './types.js';
@@ -0,0 +1,3 @@
1
+ export * from './rent-calculator.js';
2
+ export * from './types.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcmVudC1jYWxjdWxhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxZQUFZLENBQUMifQ==
@@ -0,0 +1,15 @@
1
+ import { OrderRentInfo, OrderThreshold, RentConfig } from './types.js';
2
+ export declare class RentCalculator {
3
+ private readonly order;
4
+ private readonly rentConfig;
5
+ private readonly minimalRentPeriod;
6
+ private optionsTotalFixedPrice;
7
+ private optionsTotalPricePerHour;
8
+ constructor(order: OrderRentInfo, rentConfig: RentConfig);
9
+ calculateOptionsDepositSpent(): bigint;
10
+ calculateThreshold(orderPrice: string): OrderThreshold;
11
+ isAwaitingPayment(orderPrice: string): boolean;
12
+ calculateAwaitingPaymentDate(orderPrice: string): Date | null;
13
+ private calculateOrderMinimalRentPrice;
14
+ private getWorkingTimeMinutes;
15
+ }
@@ -0,0 +1,116 @@
1
+ import { PriceType } from '../../types/index.js';
2
+ export class RentCalculator {
3
+ order;
4
+ rentConfig;
5
+ minimalRentPeriod;
6
+ optionsTotalFixedPrice = BigInt(0);
7
+ optionsTotalPricePerHour = BigInt(0);
8
+ constructor(order, rentConfig) {
9
+ this.order = order;
10
+ this.rentConfig = rentConfig;
11
+ const optionUsage = this.order.selectedUsage?.optionUsage || [];
12
+ const slotMinTimeMinutes = this.order.selectedUsage?.slotUsage?.minTimeMinutes || 0;
13
+ this.minimalRentPeriod =
14
+ Math.max(...optionUsage.map((usage) => usage.minTimeMinutes), slotMinTimeMinutes) ||
15
+ this.rentConfig.orderMinimumRentTimeMinutes;
16
+ optionUsage.forEach((usage, index) => {
17
+ const optionsCount = this.order.selectedUsage?.optionsCount[index] || 0;
18
+ const optionPrice = BigInt(usage.price) * BigInt(optionsCount);
19
+ if (usage.priceType === PriceType.Fixed) {
20
+ this.optionsTotalFixedPrice += BigInt(optionPrice);
21
+ }
22
+ else if (usage.priceType === PriceType.PerHour) {
23
+ this.optionsTotalPricePerHour += BigInt(optionPrice);
24
+ }
25
+ });
26
+ }
27
+ calculateOptionsDepositSpent() {
28
+ const workingTimeMinutes = this.getWorkingTimeMinutes();
29
+ const workingTime = Math.max(workingTimeMinutes, this.minimalRentPeriod);
30
+ const optionsDepositSpent = this.optionsTotalFixedPrice + (this.optionsTotalPricePerHour * BigInt(workingTime)) / 60n;
31
+ return optionsDepositSpent;
32
+ }
33
+ calculateThreshold(orderPrice) {
34
+ const deposit = BigInt(this.order.deposit || 0);
35
+ const outputReserve = BigInt(this.order.outputReserve || 0);
36
+ const depositLeft = deposit - outputReserve - BigInt(orderPrice);
37
+ const orderMinimalRentPrice = this.calculateOrderMinimalRentPrice();
38
+ if (orderMinimalRentPrice === 0n) {
39
+ // free order with PerHour type price or order with Fixed price type
40
+ return { orderCurrentThresholdPercent: Infinity, orderRemainTimeMinutes: Infinity };
41
+ }
42
+ const workingTimeMinutes = this.getWorkingTimeMinutes();
43
+ const firstMinWorkingTimePeriodRemainMinutes = this.minimalRentPeriod - workingTimeMinutes;
44
+ const firstMinWorkingTimePeriodThresholdPercent = (firstMinWorkingTimePeriodRemainMinutes * 100) / this.minimalRentPeriod;
45
+ const orderCurrentThresholdPercent = Math.max(firstMinWorkingTimePeriodThresholdPercent, 0) +
46
+ Number((depositLeft * 100n) / orderMinimalRentPrice);
47
+ const orderRemainTimeMinutes = (this.minimalRentPeriod * orderCurrentThresholdPercent) / 100;
48
+ return { orderCurrentThresholdPercent, orderRemainTimeMinutes };
49
+ }
50
+ isAwaitingPayment(orderPrice) {
51
+ const { orderCurrentThresholdPercent, orderRemainTimeMinutes } = this.calculateThreshold(orderPrice);
52
+ return (orderCurrentThresholdPercent < this.rentConfig.orderMaximumThresholdPercent ||
53
+ orderRemainTimeMinutes < this.rentConfig.orderMinimumRentTimeMinutes);
54
+ }
55
+ calculateAwaitingPaymentDate(orderPrice) {
56
+ const now = Date.now();
57
+ const { orderRemainTimeMinutes, orderCurrentThresholdPercent } = this.calculateThreshold(orderPrice);
58
+ const isInfThreshold = !isFinite(orderCurrentThresholdPercent);
59
+ const isInfTime = !isFinite(orderRemainTimeMinutes);
60
+ // If both are infinite (e.g., free order), no check needed soon
61
+ if (isInfThreshold && isInfTime) {
62
+ return null;
63
+ }
64
+ // Estimate time until minimal rent time violation
65
+ let timeToMinRentViolationMs = Infinity;
66
+ if (!isInfTime && orderRemainTimeMinutes >= this.rentConfig.orderMinimumRentTimeMinutes) {
67
+ const minutesAboveMinRent = orderRemainTimeMinutes - this.rentConfig.orderMinimumRentTimeMinutes;
68
+ timeToMinRentViolationMs = minutesAboveMinRent * 60 * 1000;
69
+ }
70
+ else if (!isInfTime) {
71
+ timeToMinRentViolationMs = 0;
72
+ }
73
+ // Estimate time until maximum threshold percentage violation
74
+ let timeToMaxThresholdViolationMs = Infinity;
75
+ const targetPercent = this.rentConfig.orderMaximumThresholdPercent;
76
+ if (!isInfThreshold &&
77
+ orderCurrentThresholdPercent > targetPercent &&
78
+ this.minimalRentPeriod > 0) {
79
+ const percentToDrop = orderCurrentThresholdPercent - targetPercent;
80
+ const minutesToDrop = (this.minimalRentPeriod / 100) * percentToDrop;
81
+ timeToMaxThresholdViolationMs = minutesToDrop * 60 * 1000;
82
+ }
83
+ else if (!isInfThreshold && orderCurrentThresholdPercent <= targetPercent) {
84
+ timeToMaxThresholdViolationMs = 0;
85
+ }
86
+ timeToMinRentViolationMs = Math.max(0, timeToMinRentViolationMs);
87
+ timeToMaxThresholdViolationMs = Math.max(0, timeToMaxThresholdViolationMs);
88
+ // Calculate the earliest violation time
89
+ const minTimeToViolationMs = Math.min(timeToMinRentViolationMs, timeToMaxThresholdViolationMs);
90
+ if (!isFinite(minTimeToViolationMs)) {
91
+ return null;
92
+ }
93
+ const targetViolationTimestamp = now + minTimeToViolationMs;
94
+ const finalCheckTimestamp = minTimeToViolationMs === 0 ? now : targetViolationTimestamp;
95
+ return new Date(finalCheckTimestamp);
96
+ }
97
+ calculateOrderMinimalRentPrice() {
98
+ if (!this.order.selectedUsage) {
99
+ throw new Error(`Rent Calculator: selectedUsage is empty`);
100
+ }
101
+ const slotUsage = this.order.selectedUsage.slotUsage;
102
+ const slotCount = this.order.selectedUsage.slotCount;
103
+ let orderPricePerHour = 0n;
104
+ if (slotUsage?.priceType === PriceType.PerHour) {
105
+ const slotCountMultiplier = BigInt(slotCount) || 1n; // slotCount is '0' for value orders
106
+ orderPricePerHour = BigInt(slotUsage.price) * slotCountMultiplier;
107
+ }
108
+ return (((orderPricePerHour + this.optionsTotalPricePerHour) * BigInt(this.minimalRentPeriod)) / 60n);
109
+ }
110
+ getWorkingTimeMinutes() {
111
+ // Math.abs - a little math trick for tests with manipulating time
112
+ //in integration tests startDate is bigger then Date.now()
113
+ return Math.floor(Math.abs(Date.now() - this.order.startDate * 1000) / (60 * 1000));
114
+ }
115
+ }
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVudC1jYWxjdWxhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3JlbnQtY2FsY3VsYXRvci9yZW50LWNhbGN1bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2pELE1BQU0sT0FBTyxjQUFjO0lBTU47SUFDQTtJQU5GLGlCQUFpQixDQUFTO0lBQ25DLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyx3QkFBd0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0MsWUFDbUIsS0FBb0IsRUFDcEIsVUFBc0I7UUFEdEIsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUNwQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRXZDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDaEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsY0FBYyxJQUFJLENBQUMsQ0FBQztRQUVwRixJQUFJLENBQUMsaUJBQWlCO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsa0JBQWtCLENBQUM7Z0JBQ2pGLElBQUksQ0FBQyxVQUFVLENBQUMsMkJBQTJCLENBQUM7UUFFOUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNuQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRS9ELElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckQsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsd0JBQXdCLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUV4RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXpFLE1BQU0sbUJBQW1CLEdBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFFNUYsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBa0I7UUFDbkMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU1RCxNQUFNLFdBQVcsR0FBRyxPQUFPLEdBQUcsYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRSxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBQ3BFLElBQUkscUJBQXFCLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDakMsb0VBQW9FO1lBQ3BFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDdEYsQ0FBQztRQUVELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDeEQsTUFBTSxzQ0FBc0MsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsa0JBQWtCLENBQUM7UUFDM0YsTUFBTSx5Q0FBeUMsR0FDN0MsQ0FBQyxzQ0FBc0MsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFFMUUsTUFBTSw0QkFBNEIsR0FDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5Q0FBeUMsRUFBRSxDQUFDLENBQUM7WUFDdEQsTUFBTSxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUM7UUFFdkQsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUU3RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsVUFBa0I7UUFDbEMsTUFBTSxFQUFFLDRCQUE0QixFQUFFLHNCQUFzQixFQUFFLEdBQzVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV0QyxPQUFPLENBQ0wsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyw0QkFBNEI7WUFDM0Usc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FDckUsQ0FBQztJQUNKLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxVQUFrQjtRQUM3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLEdBQzVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV0QyxNQUFNLGNBQWMsR0FBRyxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFcEQsZ0VBQWdFO1FBQ2hFLElBQUksY0FBYyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELGtEQUFrRDtRQUNsRCxJQUFJLHdCQUF3QixHQUFHLFFBQVEsQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxJQUFJLHNCQUFzQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztZQUN4RixNQUFNLG1CQUFtQixHQUN2QixzQkFBc0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDJCQUEyQixDQUFDO1lBQ3ZFLHdCQUF3QixHQUFHLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDN0QsQ0FBQzthQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0Qix3QkFBd0IsR0FBRyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUVELDZEQUE2RDtRQUM3RCxJQUFJLDZCQUE2QixHQUFHLFFBQVEsQ0FBQztRQUM3QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDRCQUE0QixDQUFDO1FBRW5FLElBQ0UsQ0FBQyxjQUFjO1lBQ2YsNEJBQTRCLEdBQUcsYUFBYTtZQUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUMxQixDQUFDO1lBQ0QsTUFBTSxhQUFhLEdBQUcsNEJBQTRCLEdBQUcsYUFBYSxDQUFDO1lBQ25FLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQztZQUNyRSw2QkFBNkIsR0FBRyxhQUFhLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUM1RCxDQUFDO2FBQU0sSUFBSSxDQUFDLGNBQWMsSUFBSSw0QkFBNEIsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUM1RSw2QkFBNkIsR0FBRyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELHdCQUF3QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFDakUsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztRQUUzRSx3Q0FBd0M7UUFDeEMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFFL0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLEdBQUcsb0JBQW9CLENBQUM7UUFDNUQsTUFBTSxtQkFBbUIsR0FBRyxvQkFBb0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUM7UUFFeEYsT0FBTyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyw4QkFBOEI7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDckQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBRXJELElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksU0FBUyxFQUFFLFNBQVMsS0FBSyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0MsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsb0NBQW9DO1lBQ3pGLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7UUFDcEUsQ0FBQztRQUVELE9BQU8sQ0FDTCxDQUFDLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUM3RixDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixrRUFBa0U7UUFDbEUsMERBQTBEO1FBQzFELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7Q0FDRiJ9
@@ -0,0 +1,15 @@
1
+ import { OrderUsage, TokenAmount } from '../../types/index.js';
2
+ export type OrderThreshold = {
3
+ orderCurrentThresholdPercent: number;
4
+ orderRemainTimeMinutes: number;
5
+ };
6
+ export type RentConfig = {
7
+ orderMinimumRentTimeMinutes: number;
8
+ orderMaximumThresholdPercent: number;
9
+ };
10
+ export type OrderRentInfo = {
11
+ selectedUsage: OrderUsage;
12
+ outputReserve: TokenAmount;
13
+ deposit: TokenAmount;
14
+ startDate: number;
15
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcmVudC1jYWxjdWxhdG9yL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@super-protocol/sdk-js",
3
- "version": "3.6.2",
3
+ "version": "3.7.0",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/mjs/index.js",
6
6
  "exports": {
@@ -1,3 +0,0 @@
1
- import { TransactionOptions } from '../../types/index.js';
2
- import { CompleteOrderParams } from './types.js';
3
- export declare const completeOrder: (params: CompleteOrderParams, transactionOptions?: TransactionOptions) => Promise<void>;
@@ -1,71 +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.completeOrder = void 0;
7
- const TIIGenerator_js_1 = __importDefault(require("../../TIIGenerator.js"));
8
- const index_js_1 = __importDefault(require("../../crypto/index.js"));
9
- const Order_js_1 = __importDefault(require("../../models/Order.js"));
10
- const Offer_js_1 = require("../../types/Offer.js");
11
- const Order_js_2 = require("../../types/Order.js");
12
- const supportedOfferTypes = [Offer_js_1.OfferType.Data, Offer_js_1.OfferType.Solution];
13
- const supportedOrderStatusesToComplete = [
14
- Order_js_2.OrderStatus.New,
15
- Order_js_2.OrderStatus.Processing,
16
- Order_js_2.OrderStatus.Canceling,
17
- ];
18
- const getResultPublicKeyFromOrderInfo = (orderInfo) => {
19
- const { publicKey } = orderInfo.resultInfo;
20
- if (!publicKey.trim()) {
21
- throw new Error('Public key cannot be empty');
22
- }
23
- try {
24
- return JSON.parse(publicKey);
25
- }
26
- catch (err) {
27
- throw new Error('Could not parse result public key');
28
- }
29
- };
30
- const buildOrderResult = async (params) => {
31
- const { orderId, orderInfo, resource, resourceEncryption, parentOrder, pccsApiUrl } = params;
32
- if (parentOrder?.offerType === Offer_js_1.OfferType.TeeOffer) {
33
- return await TIIGenerator_js_1.default.generate(orderId, resource, orderInfo.args, resourceEncryption, pccsApiUrl);
34
- }
35
- const publicKey = getResultPublicKeyFromOrderInfo(orderInfo);
36
- const content = {
37
- resource: resource,
38
- encryption: resourceEncryption,
39
- };
40
- const encryptedContent = await index_js_1.default.encrypt(JSON.stringify(content), publicKey);
41
- return JSON.stringify(encryptedContent);
42
- };
43
- const completeOrder = async (params, transactionOptions) => {
44
- const { orderId, orderInfo, offerType } = params.order;
45
- if (!supportedOfferTypes.includes(offerType)) {
46
- throw new Error(`Cannot complete order with offer type '${offerType}'`);
47
- }
48
- if (!supportedOrderStatusesToComplete.includes(orderInfo.status)) {
49
- throw new Error(`Cannot complete order with order status '${orderInfo.status}'`);
50
- }
51
- if (params.status === Order_js_2.OrderStatus.Canceled && orderInfo.status !== Order_js_2.OrderStatus.Canceling) {
52
- throw Error(`Order cancellation is possible only from "canceling" status`);
53
- }
54
- const encryptedResult = typeof params.orderResult === 'string'
55
- ? params.orderResult
56
- : await buildOrderResult({
57
- orderId,
58
- orderInfo,
59
- resource: params.orderResult.resource,
60
- resourceEncryption: params.orderResult.resourceEncryption,
61
- parentOrder: params.parentOrder,
62
- pccsApiUrl: params.pccsApiUrl,
63
- });
64
- const order = new Order_js_1.default(orderId);
65
- if (orderInfo.status === Order_js_2.OrderStatus.New) {
66
- await order.updateStatus(Order_js_2.OrderStatus.Processing, transactionOptions);
67
- }
68
- await order.complete(params.status, encryptedResult, transactionOptions);
69
- };
70
- exports.completeOrder = completeOrder;
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGUtb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvb3JkZXIvY29tcGxldGUtb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsNEVBQWlEO0FBQ2pELHFFQUEyQztBQUMzQyxxRUFBMEM7QUFDMUMsbURBQTREO0FBQzVELG1EQUE4RDtBQUk5RCxNQUFNLG1CQUFtQixHQUFHLENBQUMsb0JBQVMsQ0FBQyxJQUFJLEVBQUUsb0JBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqRSxNQUFNLGdDQUFnQyxHQUFHO0lBQ3ZDLHNCQUFXLENBQUMsR0FBRztJQUNmLHNCQUFXLENBQUMsVUFBVTtJQUN0QixzQkFBVyxDQUFDLFNBQVM7Q0FDdEIsQ0FBQztBQVVGLE1BQU0sK0JBQStCLEdBQUcsQ0FDdEMsU0FBd0MsRUFDekIsRUFBRTtJQUNqQixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUUzQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFrQixDQUFDO0lBQ2hELENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLEtBQUssRUFBRSxNQUF3QixFQUFtQixFQUFFO0lBQzNFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRTdGLElBQUksV0FB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
@@ -1,3 +0,0 @@
1
- import { TransactionOptions } from '../../types/index.js';
2
- import { CompleteOrderParams } from './types.js';
3
- export declare const completeOrder: (params: CompleteOrderParams, transactionOptions?: TransactionOptions) => Promise<void>;
@@ -1,64 +0,0 @@
1
- import TIIGenerator from '../../TIIGenerator.js';
2
- import Crypto from '../../crypto/index.js';
3
- import Order from '../../models/Order.js';
4
- import { OfferType } from '../../types/Offer.js';
5
- import { OrderStatus } from '../../types/Order.js';
6
- const supportedOfferTypes = [OfferType.Data, OfferType.Solution];
7
- const supportedOrderStatusesToComplete = [
8
- OrderStatus.New,
9
- OrderStatus.Processing,
10
- OrderStatus.Canceling,
11
- ];
12
- const getResultPublicKeyFromOrderInfo = (orderInfo) => {
13
- const { publicKey } = orderInfo.resultInfo;
14
- if (!publicKey.trim()) {
15
- throw new Error('Public key cannot be empty');
16
- }
17
- try {
18
- return JSON.parse(publicKey);
19
- }
20
- catch (err) {
21
- throw new Error('Could not parse result public key');
22
- }
23
- };
24
- const buildOrderResult = async (params) => {
25
- const { orderId, orderInfo, resource, resourceEncryption, parentOrder, pccsApiUrl } = params;
26
- if (parentOrder?.offerType === OfferType.TeeOffer) {
27
- return await TIIGenerator.generate(orderId, resource, orderInfo.args, resourceEncryption, pccsApiUrl);
28
- }
29
- const publicKey = getResultPublicKeyFromOrderInfo(orderInfo);
30
- const content = {
31
- resource: resource,
32
- encryption: resourceEncryption,
33
- };
34
- const encryptedContent = await Crypto.encrypt(JSON.stringify(content), publicKey);
35
- return JSON.stringify(encryptedContent);
36
- };
37
- export const completeOrder = async (params, transactionOptions) => {
38
- const { orderId, orderInfo, offerType } = params.order;
39
- if (!supportedOfferTypes.includes(offerType)) {
40
- throw new Error(`Cannot complete order with offer type '${offerType}'`);
41
- }
42
- if (!supportedOrderStatusesToComplete.includes(orderInfo.status)) {
43
- throw new Error(`Cannot complete order with order status '${orderInfo.status}'`);
44
- }
45
- if (params.status === OrderStatus.Canceled && orderInfo.status !== OrderStatus.Canceling) {
46
- throw Error(`Order cancellation is possible only from "canceling" status`);
47
- }
48
- const encryptedResult = typeof params.orderResult === 'string'
49
- ? params.orderResult
50
- : await buildOrderResult({
51
- orderId,
52
- orderInfo,
53
- resource: params.orderResult.resource,
54
- resourceEncryption: params.orderResult.resourceEncryption,
55
- parentOrder: params.parentOrder,
56
- pccsApiUrl: params.pccsApiUrl,
57
- });
58
- const order = new Order(orderId);
59
- if (orderInfo.status === OrderStatus.New) {
60
- await order.updateStatus(OrderStatus.Processing, transactionOptions);
61
- }
62
- await order.complete(params.status, encryptedResult, transactionOptions);
63
- };
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGUtb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvb3JkZXIvY29tcGxldGUtb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxZQUFZLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxNQUFNLE1BQU0sdUJBQXVCLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sdUJBQXVCLENBQUM7QUFDMUMsT0FBTyxFQUFhLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBYSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUk5RCxNQUFNLG1CQUFtQixHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakUsTUFBTSxnQ0FBZ0MsR0FBRztJQUN2QyxXQUFXLENBQUMsR0FBRztJQUNmLFdBQVcsQ0FBQyxVQUFVO0lBQ3RCLFdBQVcsQ0FBQyxTQUFTO0NBQ3RCLENBQUM7QUFVRixNQUFNLCtCQUErQixHQUFHLENBQ3RDLFNBQXdDLEVBQ3pCLEVBQUU7SUFDakIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7SUFFM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBa0IsQ0FBQztJQUNoRCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUN2RCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsTUFBd0IsRUFBbUIsRUFB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