@super-protocol/sdk-js 3.14.2 → 3.14.3-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { BlockchainId } from './types/index.js';
|
|
3
|
-
import { Encryption, Resource, RuntimeInputInfo, TeeInputInfo, TeeRunInfo } from '@super-protocol/dto-js';
|
|
3
|
+
import { Encryption, Resource, RuntimeInputInfo, TeeInputInfo, TeeRunInfo, Hash } from '@super-protocol/dto-js';
|
|
4
4
|
import TeeInputGeneratorBase from './TeeInputGeneratorBase.js';
|
|
5
5
|
declare class TIIGenerator extends TeeInputGeneratorBase {
|
|
6
6
|
protected static buildTII(params: Pick<GenerateByOfferParams, 'offerId' | 'sgxApiUrl' | 'resource' | 'runtimeInputInfos' | 'encryption'>): Promise<TeeInputInfo>;
|
|
7
7
|
static generateByOffer(params: GenerateByOfferParams): Promise<string>;
|
|
8
|
-
static generate(orderId: BlockchainId, resource: Resource, args: unknown, encryption: Encryption, sgxApiUrl: string): Promise<string>;
|
|
8
|
+
static generate(orderId: BlockchainId, resource: Resource, args: unknown, encryption: Encryption, sgxApiUrl: string, solutionHash?: Hash): Promise<string>;
|
|
9
9
|
static getTRI(tii: string, decryptionKey: Buffer): Promise<TeeRunInfo>;
|
|
10
10
|
static getUrl(tii: string, decryptionKey: Buffer): Promise<string>;
|
|
11
11
|
static getResource<T>(tii: string, decryptionKey: Buffer): Promise<T>;
|
package/dist/cjs/TIIGenerator.js
CHANGED
|
@@ -25,18 +25,30 @@ class TIIGenerator extends TeeInputGeneratorBase_js_1.default {
|
|
|
25
25
|
const tii = await this.buildTII(params);
|
|
26
26
|
return JSON.stringify(tii);
|
|
27
27
|
}
|
|
28
|
-
static async generate(orderId, resource, args, encryption, sgxApiUrl) {
|
|
28
|
+
static async generate(orderId, resource, args, encryption, sgxApiUrl, solutionHash) {
|
|
29
29
|
const order = new index_js_2.Order(orderId);
|
|
30
30
|
const parentOrderId = await order.getParentOrder();
|
|
31
31
|
const parentOrder = new index_js_2.Order(parentOrderId);
|
|
32
32
|
const parentOrderInfo = await parentOrder.getOrderInfo();
|
|
33
|
+
const runtimeInputInfos = await this.generateRiiByOfferIds(parentOrderInfo.args.inputOffersIds);
|
|
34
|
+
if (solutionHash) {
|
|
35
|
+
if (runtimeInputInfos.find((rii) => rii.type === 'Solution')) {
|
|
36
|
+
throw new Error('Solution RII already exists');
|
|
37
|
+
}
|
|
38
|
+
const solutionRii = {
|
|
39
|
+
args: undefined,
|
|
40
|
+
hash: solutionHash,
|
|
41
|
+
type: 'Solution',
|
|
42
|
+
};
|
|
43
|
+
runtimeInputInfos.push(solutionRii);
|
|
44
|
+
}
|
|
33
45
|
return this.generateByOffer({
|
|
34
46
|
offerId: parentOrderInfo.offerId,
|
|
35
47
|
resource,
|
|
36
48
|
args,
|
|
37
49
|
encryption,
|
|
38
50
|
sgxApiUrl,
|
|
39
|
-
runtimeInputInfos
|
|
51
|
+
runtimeInputInfos,
|
|
40
52
|
});
|
|
41
53
|
}
|
|
42
54
|
static async getTRI(tii, decryptionKey) {
|
|
@@ -57,4 +69,4 @@ class TIIGenerator extends TeeInputGeneratorBase_js_1.default {
|
|
|
57
69
|
}
|
|
58
70
|
}
|
|
59
71
|
exports.default = TIIGenerator;
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVElJR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1RJSUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlFQUF1QztBQUN2QyxnREFBb0Q7QUFXcEQsMEZBQStEO0FBRS9ELE1BQU0sWUFBYSxTQUFRLGtDQUFxQjtJQUNwQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDN0IsTUFHQztRQUVELE1BQU0sYUFBYSxHQUFlLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUNyRSxNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FBQyxTQUFTLENBQ2pCLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBYSxJQUFJLG1CQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELE1BQU0sWUFBWSxHQUFpQixNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1RCxNQUFNLGtCQUFrQixHQUFlLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sR0FBRyxHQUFlO1lBQ3RCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxpQkFBaUI7WUFDM0MsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1NBQzlCLENBQUM7UUFDRixPQUFPO1lBQ0wsaUJBQWlCLEVBQUUsTUFBTSxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxrQkFBa0IsQ0FBQztZQUM1RixZQUFZLEVBQUUsTUFBTSxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsQ0FBQztTQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQTZCO1FBQ3hELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFB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
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { BlockchainId } from './types/index.js';
|
|
3
|
-
import { Encryption, Resource, RuntimeInputInfo, TeeInputInfo, TeeRunInfo } from '@super-protocol/dto-js';
|
|
3
|
+
import { Encryption, Resource, RuntimeInputInfo, TeeInputInfo, TeeRunInfo, Hash } from '@super-protocol/dto-js';
|
|
4
4
|
import TeeInputGeneratorBase from './TeeInputGeneratorBase.js';
|
|
5
5
|
declare class TIIGenerator extends TeeInputGeneratorBase {
|
|
6
6
|
protected static buildTII(params: Pick<GenerateByOfferParams, 'offerId' | 'sgxApiUrl' | 'resource' | 'runtimeInputInfos' | 'encryption'>): Promise<TeeInputInfo>;
|
|
7
7
|
static generateByOffer(params: GenerateByOfferParams): Promise<string>;
|
|
8
|
-
static generate(orderId: BlockchainId, resource: Resource, args: unknown, encryption: Encryption, sgxApiUrl: string): Promise<string>;
|
|
8
|
+
static generate(orderId: BlockchainId, resource: Resource, args: unknown, encryption: Encryption, sgxApiUrl: string, solutionHash?: Hash): Promise<string>;
|
|
9
9
|
static getTRI(tii: string, decryptionKey: Buffer): Promise<TeeRunInfo>;
|
|
10
10
|
static getUrl(tii: string, decryptionKey: Buffer): Promise<string>;
|
|
11
11
|
static getResource<T>(tii: string, decryptionKey: Buffer): Promise<T>;
|
package/dist/mjs/TIIGenerator.js
CHANGED
|
@@ -20,18 +20,30 @@ class TIIGenerator extends TeeInputGeneratorBase {
|
|
|
20
20
|
const tii = await this.buildTII(params);
|
|
21
21
|
return JSON.stringify(tii);
|
|
22
22
|
}
|
|
23
|
-
static async generate(orderId, resource, args, encryption, sgxApiUrl) {
|
|
23
|
+
static async generate(orderId, resource, args, encryption, sgxApiUrl, solutionHash) {
|
|
24
24
|
const order = new Order(orderId);
|
|
25
25
|
const parentOrderId = await order.getParentOrder();
|
|
26
26
|
const parentOrder = new Order(parentOrderId);
|
|
27
27
|
const parentOrderInfo = await parentOrder.getOrderInfo();
|
|
28
|
+
const runtimeInputInfos = await this.generateRiiByOfferIds(parentOrderInfo.args.inputOffersIds);
|
|
29
|
+
if (solutionHash) {
|
|
30
|
+
if (runtimeInputInfos.find((rii) => rii.type === 'Solution')) {
|
|
31
|
+
throw new Error('Solution RII already exists');
|
|
32
|
+
}
|
|
33
|
+
const solutionRii = {
|
|
34
|
+
args: undefined,
|
|
35
|
+
hash: solutionHash,
|
|
36
|
+
type: 'Solution',
|
|
37
|
+
};
|
|
38
|
+
runtimeInputInfos.push(solutionRii);
|
|
39
|
+
}
|
|
28
40
|
return this.generateByOffer({
|
|
29
41
|
offerId: parentOrderInfo.offerId,
|
|
30
42
|
resource,
|
|
31
43
|
args,
|
|
32
44
|
encryption,
|
|
33
45
|
sgxApiUrl,
|
|
34
|
-
runtimeInputInfos
|
|
46
|
+
runtimeInputInfos,
|
|
35
47
|
});
|
|
36
48
|
}
|
|
37
49
|
static async getTRI(tii, decryptionKey) {
|
|
@@ -52,4 +64,4 @@ class TIIGenerator extends TeeInputGeneratorBase {
|
|
|
52
64
|
}
|
|
53
65
|
}
|
|
54
66
|
export default TIIGenerator;
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVElJR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1RJSUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBV3BELE9BQU8scUJBQXFCLE1BQU0sNEJBQTRCLENBQUM7QUFFL0QsTUFBTSxZQUFhLFNBQVEscUJBQXFCO0lBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUM3QixNQUdDO1FBRUQsTUFBTSxhQUFhLEdBQWUsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQ3JFLE1BQU0sQ0FBQyxPQUFPLEVBQ2QsTUFBTSxDQUFDLFNBQVMsQ0FDakIsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxNQUFNLFlBQVksR0FBaUIsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUQsTUFBTSxrQkFBa0IsR0FBZSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RSxNQUFNLEdBQUcsR0FBZTtZQUN0QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1lBQzNDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtTQUM5QixDQUFDO1FBQ0YsT0FBTztZQUNMLGlCQUFpQixFQUFFLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxrQkFBa0IsQ0FBQztZQUM1RixZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxDQUFDO1NBQ3ZFLENBQUM7SUFDSixDQUFDO0lBRUQs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
|