@super-protocol/sdk-js 3.6.1 → 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.
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/utils/order/index.d.ts +1 -1
- package/dist/cjs/utils/order/index.js +2 -2
- package/dist/cjs/utils/order/process-order.d.ts +5 -0
- package/dist/cjs/utils/order/process-order.js +100 -0
- package/dist/cjs/utils/order/types.d.ts +5 -4
- package/dist/cjs/utils/rent-calculator/index.d.ts +2 -0
- package/dist/cjs/utils/rent-calculator/index.js +19 -0
- package/dist/cjs/utils/rent-calculator/rent-calculator.d.ts +15 -0
- package/dist/cjs/utils/rent-calculator/rent-calculator.js +120 -0
- package/dist/cjs/utils/rent-calculator/types.d.ts +15 -0
- package/dist/cjs/utils/rent-calculator/types.js +3 -0
- package/dist/mjs/index.d.ts +2 -0
- package/dist/mjs/index.js +3 -1
- package/dist/mjs/utils/order/index.d.ts +1 -1
- package/dist/mjs/utils/order/index.js +2 -2
- package/dist/mjs/utils/order/process-order.d.ts +5 -0
- package/dist/mjs/utils/order/process-order.js +92 -0
- package/dist/mjs/utils/order/types.d.ts +5 -4
- package/dist/mjs/utils/rent-calculator/index.d.ts +2 -0
- package/dist/mjs/utils/rent-calculator/index.js +3 -0
- package/dist/mjs/utils/rent-calculator/rent-calculator.d.ts +15 -0
- package/dist/mjs/utils/rent-calculator/rent-calculator.js +116 -0
- package/dist/mjs/utils/rent-calculator/types.d.ts +15 -0
- package/dist/mjs/utils/rent-calculator/types.js +2 -0
- package/package.json +1 -1
- package/dist/cjs/utils/order/complete-order.d.ts +0 -3
- package/dist/cjs/utils/order/complete-order.js +0 -71
- package/dist/mjs/utils/order/complete-order.d.ts +0 -3
- package/dist/mjs/utils/order/complete-order.js +0 -64
package/dist/cjs/index.d.ts
CHANGED
|
@@ -81,6 +81,7 @@ export * from './tee/statuses.js';
|
|
|
81
81
|
export { TeeBlockVerifier } from './tee/TeeBlockVerifier.js';
|
|
82
82
|
export { TeeCertificateService } from './tee/TeeCertificateService.js';
|
|
83
83
|
export { OrderReportService } from './tee/OrderReportService.js';
|
|
84
|
+
export * from './proto/TeeDeviceInfo.js';
|
|
84
85
|
export * from './analytics/types.js';
|
|
85
86
|
export { default as Analytics } from './analytics/Analytics.js';
|
|
86
87
|
export { default as NodeEventProvider } from './analytics/eventProviders/NodeEventProvider.js';
|
|
@@ -89,6 +90,7 @@ export { default as AxiosTransport } from './analytics/transports/AxiosTransport
|
|
|
89
90
|
export { default as FetchTransport } from './analytics/transports/FetchTransport.js';
|
|
90
91
|
export * from './utils/cache/index.js';
|
|
91
92
|
export * from './utils/order/index.js';
|
|
93
|
+
export * from './utils/rent-calculator/index.js';
|
|
92
94
|
export * from './utils/tokens/index.js';
|
|
93
95
|
export * from './errors/index.js';
|
|
94
96
|
export * from './utils/schema-utils/index.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -155,6 +155,7 @@ var TeeCertificateService_js_1 = require("./tee/TeeCertificateService.js");
|
|
|
155
155
|
Object.defineProperty(exports, "TeeCertificateService", { enumerable: true, get: function () { return TeeCertificateService_js_1.TeeCertificateService; } });
|
|
156
156
|
var OrderReportService_js_1 = require("./tee/OrderReportService.js");
|
|
157
157
|
Object.defineProperty(exports, "OrderReportService", { enumerable: true, get: function () { return OrderReportService_js_1.OrderReportService; } });
|
|
158
|
+
__exportStar(require("./proto/TeeDeviceInfo.js"), exports);
|
|
158
159
|
__exportStar(require("./analytics/types.js"), exports);
|
|
159
160
|
var Analytics_js_1 = require("./analytics/Analytics.js");
|
|
160
161
|
Object.defineProperty(exports, "Analytics", { enumerable: true, get: function () { return __importDefault(Analytics_js_1).default; } });
|
|
@@ -168,10 +169,11 @@ var FetchTransport_js_1 = require("./analytics/transports/FetchTransport.js");
|
|
|
168
169
|
Object.defineProperty(exports, "FetchTransport", { enumerable: true, get: function () { return __importDefault(FetchTransport_js_1).default; } });
|
|
169
170
|
__exportStar(require("./utils/cache/index.js"), exports);
|
|
170
171
|
__exportStar(require("./utils/order/index.js"), exports);
|
|
172
|
+
__exportStar(require("./utils/rent-calculator/index.js"), exports);
|
|
171
173
|
__exportStar(require("./utils/tokens/index.js"), exports);
|
|
172
174
|
__exportStar(require("./errors/index.js"), exports);
|
|
173
175
|
__exportStar(require("./utils/schema-utils/index.js"), exports);
|
|
174
176
|
exports.ResourceLoaderUtils = __importStar(require("./utils/resourceLoaders/index.js"));
|
|
175
177
|
var TeeSignatureVerifier_js_1 = require("./tee/TeeSignatureVerifier.js");
|
|
176
178
|
Object.defineProperty(exports, "TeeSignatureVerifier", { enumerable: true, get: function () { return TeeSignatureVerifier_js_1.TeeSignatureVerifier; } });
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOEVBQXFGO0FBQTVFLDhJQUFBLE9BQU8sT0FBdUI7QUFFdkMsc0VBQW9EO0FBSXBELHdGQUErRjtBQUF0Rix3SkFBQSxPQUFPLE9BQTRCO0FBRTVDLDhDQUFzRDtBQUE3QyxtSEFBQSxPQUFPLE9BQVU7QUFDMUIsb0RBQWtDO0FBRWxDLDBEQUF3QztBQUV4QyxxREFBNEQ7QUFBbkQsZ0lBQUEsT0FBTyxPQUFnQjtBQUNoQyxvREFBa0M7QUFFbEMsbURBQTBEO0FBQWpELDhIQUFBLE9BQU8sT0FBZTtBQUMvQixvREFBa0M7QUFFbEMsNERBQW1FO0FBQTFELDBIQUFBLE9BQU8sT0FBYTtBQUM3Qiw4REFBNEM7QUFFNUMsc0RBQTZEO0FBQXBELG9IQUFBLE9BQU8sT0FBVTtBQUMxQiwyREFBeUM7QUFFekMsa0VBQXlFO0FBQWhFLGdJQUFBLE9BQU8sT0FBZ0I7QUFDaEMsaUVBQStDO0FBRS9DLGtFQUF5RTtBQUFoRSxnSUFBQSxPQUFPLE9BQWdCO0FBQ2hDLGlFQUErQztBQUUvQyxzREFBNkQ7QUFBcEQsb0hBQUEsT0FBTyxPQUFVO0FBQzFCLDJEQUF5QztBQUV6Qyw0REFBbUU7QUFBMUQsMEhBQUEsT0FBTyxPQUFhO0FBQzdCLDhEQUE0QztBQUU1QywwRUFBaUY7QUFBeEUsd0lBQUEsT0FBTyxPQUFvQjtBQUNwQyxxRUFBbUQ7QUFFbkQsb0VBQTJFO0FBQWxFLGtJQUFBLE9BQU8sT0FBaUI7QUFDakMsa0VBQWdEO0FBRWhELDBEQUFpRTtBQUF4RCx3SEFBQSxPQUFPLE9BQVk7QUFDNUIsNkRBQTJDO0FBRTNDLG9EQUEyRDtBQUFsRCxrSEFBQSxPQUFPLE9BQVM7QUFDekIsMERBQXdDO0FBRXhDLDBEQUFpRTtBQUF4RCx3SEFBQSxPQUFPLE9BQVk7QUFD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
|
|
@@ -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("./
|
|
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,
|
|
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
|
|
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
|
|
35
|
+
orderResult?: string | Error | {
|
|
35
36
|
resource: StorageProviderResource;
|
|
36
37
|
resourceEncryption: Encryption;
|
|
37
38
|
};
|
|
38
39
|
pccsApiUrl: string;
|
|
39
|
-
status
|
|
40
|
+
status?: TerminatedOrderStatus;
|
|
40
41
|
};
|
|
41
42
|
export {};
|
|
@@ -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==
|
package/dist/mjs/index.d.ts
CHANGED
|
@@ -81,6 +81,7 @@ export * from './tee/statuses.js';
|
|
|
81
81
|
export { TeeBlockVerifier } from './tee/TeeBlockVerifier.js';
|
|
82
82
|
export { TeeCertificateService } from './tee/TeeCertificateService.js';
|
|
83
83
|
export { OrderReportService } from './tee/OrderReportService.js';
|
|
84
|
+
export * from './proto/TeeDeviceInfo.js';
|
|
84
85
|
export * from './analytics/types.js';
|
|
85
86
|
export { default as Analytics } from './analytics/Analytics.js';
|
|
86
87
|
export { default as NodeEventProvider } from './analytics/eventProviders/NodeEventProvider.js';
|
|
@@ -89,6 +90,7 @@ export { default as AxiosTransport } from './analytics/transports/AxiosTransport
|
|
|
89
90
|
export { default as FetchTransport } from './analytics/transports/FetchTransport.js';
|
|
90
91
|
export * from './utils/cache/index.js';
|
|
91
92
|
export * from './utils/order/index.js';
|
|
93
|
+
export * from './utils/rent-calculator/index.js';
|
|
92
94
|
export * from './utils/tokens/index.js';
|
|
93
95
|
export * from './errors/index.js';
|
|
94
96
|
export * from './utils/schema-utils/index.js';
|
package/dist/mjs/index.js
CHANGED
|
@@ -75,6 +75,7 @@ export * from './tee/statuses.js';
|
|
|
75
75
|
export { TeeBlockVerifier } from './tee/TeeBlockVerifier.js';
|
|
76
76
|
export { TeeCertificateService } from './tee/TeeCertificateService.js';
|
|
77
77
|
export { OrderReportService } from './tee/OrderReportService.js';
|
|
78
|
+
export * from './proto/TeeDeviceInfo.js';
|
|
78
79
|
export * from './analytics/types.js';
|
|
79
80
|
export { default as Analytics } from './analytics/Analytics.js';
|
|
80
81
|
export { default as NodeEventProvider } from './analytics/eventProviders/NodeEventProvider.js';
|
|
@@ -83,9 +84,10 @@ export { default as AxiosTransport } from './analytics/transports/AxiosTransport
|
|
|
83
84
|
export { default as FetchTransport } from './analytics/transports/FetchTransport.js';
|
|
84
85
|
export * from './utils/cache/index.js';
|
|
85
86
|
export * from './utils/order/index.js';
|
|
87
|
+
export * from './utils/rent-calculator/index.js';
|
|
86
88
|
export * from './utils/tokens/index.js';
|
|
87
89
|
export * from './errors/index.js';
|
|
88
90
|
export * from './utils/schema-utils/index.js';
|
|
89
91
|
export * as ResourceLoaderUtils from './utils/resourceLoaders/index.js';
|
|
90
92
|
export { TeeSignatureVerifier } from './tee/TeeSignatureVerifier.js';
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXJGLGNBQWMscUNBQXFDLENBQUM7QUFJcEQsT0FBTyxFQUFFLE9BQU8sSUFBSSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRS9GLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLE9BQU8sRUFBRSxPQUFPLElBQUksWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsT0FBTyxJQUFJLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLGNBQWMsZ0NBQWdDLENBQUM7QUFFL0MsT0FBTyxFQUFFLE9BQU8sSUFBSSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsT0FBTyxJQUFJLFNBQVMsRUFB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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './
|
|
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,
|
|
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
|
|
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
|
|
35
|
+
orderResult?: string | Error | {
|
|
35
36
|
resource: StorageProviderResource;
|
|
36
37
|
resourceEncryption: Encryption;
|
|
37
38
|
};
|
|
38
39
|
pccsApiUrl: string;
|
|
39
|
-
status
|
|
40
|
+
status?: TerminatedOrderStatus;
|
|
40
41
|
};
|
|
41
42
|
export {};
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVudC1jYWxjdWxhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3JlbnQtY2FsY3VsYXRvci9yZW50LWNhbGN1bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2pELE1BQU0sT0FBTyxjQUFjO0lBTU47SUFDQTtJQU5GLGlCQUFpQixDQUFTO0lBQ25DLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyx3QkFBd0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0MsWUFDbUIsS0FBb0IsRUFDcEIsVUFBc0I7UUFEdEIsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUNwQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRXZDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDaEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsY0FBYyxJQUFJLENBQUMsQ0FBQztRQUVwRixJQUFJLENBQUMsaUJBQWlCO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsa0JBQWtCLENBQUM7Z0JBQ2pGLElBQUksQ0FBQyxVQUFVLENBQUMsMkJBQTJCLENBQUM7UUFFOUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNuQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sV0FBVyxHQUFH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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
|
+
};
|
package/package.json
CHANGED
|
@@ -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,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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
|