@super-protocol/sdk-js 3.14.2 → 3.14.3-beta.1
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
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const index_js_1 = __importDefault(require("./crypto/index.js"));
|
|
7
7
|
const index_js_2 = require("./models/index.js");
|
|
8
8
|
const TeeInputGeneratorBase_js_1 = __importDefault(require("./TeeInputGeneratorBase.js"));
|
|
9
|
+
const constants_js_1 = require("./constants.js");
|
|
9
10
|
class TIIGenerator extends TeeInputGeneratorBase_js_1.default {
|
|
10
11
|
static async buildTII(params) {
|
|
11
12
|
const triEncryption = await this.getVerifiedBlockEncryption(params.offerId, params.sgxApiUrl);
|
|
@@ -25,18 +26,36 @@ class TIIGenerator extends TeeInputGeneratorBase_js_1.default {
|
|
|
25
26
|
const tii = await this.buildTII(params);
|
|
26
27
|
return JSON.stringify(tii);
|
|
27
28
|
}
|
|
28
|
-
static async generate(orderId, resource, args, encryption, sgxApiUrl) {
|
|
29
|
+
static async generate(orderId, resource, args, encryption, sgxApiUrl, solutionHash) {
|
|
29
30
|
const order = new index_js_2.Order(orderId);
|
|
30
31
|
const parentOrderId = await order.getParentOrder();
|
|
31
32
|
const parentOrder = new index_js_2.Order(parentOrderId);
|
|
32
33
|
const parentOrderInfo = await parentOrder.getOrderInfo();
|
|
34
|
+
const runtimeInputInfos = await this.generateRiiByOfferIds(parentOrderInfo.args.inputOffersIds);
|
|
35
|
+
if (solutionHash) {
|
|
36
|
+
const solutionRii = {
|
|
37
|
+
args: undefined,
|
|
38
|
+
hash: solutionHash,
|
|
39
|
+
type: 'Image',
|
|
40
|
+
};
|
|
41
|
+
const generatedSolutionRiiIndex = runtimeInputInfos.findIndex((rii) => rii.type === solutionRii.type);
|
|
42
|
+
if (generatedSolutionRiiIndex !== -1) {
|
|
43
|
+
if (runtimeInputInfos[generatedSolutionRiiIndex].hash.hash !== constants_js_1.ZERO_HASH.hash) {
|
|
44
|
+
throw new Error('Workflow was created with a different solution');
|
|
45
|
+
}
|
|
46
|
+
runtimeInputInfos[generatedSolutionRiiIndex] = solutionRii;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
runtimeInputInfos.push(solutionRii);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
33
52
|
return this.generateByOffer({
|
|
34
53
|
offerId: parentOrderInfo.offerId,
|
|
35
54
|
resource,
|
|
36
55
|
args,
|
|
37
56
|
encryption,
|
|
38
57
|
sgxApiUrl,
|
|
39
|
-
runtimeInputInfos
|
|
58
|
+
runtimeInputInfos,
|
|
40
59
|
});
|
|
41
60
|
}
|
|
42
61
|
static async getTRI(tii, decryptionKey) {
|
|
@@ -57,4 +76,4 @@ class TIIGenerator extends TeeInputGeneratorBase_js_1.default {
|
|
|
57
76
|
}
|
|
58
77
|
}
|
|
59
78
|
exports.default = TIIGenerator;
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVElJR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1RJSUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlFQUF1QztBQUN2QyxnREFBb0Q7QUFXcEQsMEZBQStEO0FBQy9ELGlEQUEyQztBQUUzQyxNQUFNLFlBQWEsU0FBUSxrQ0FBcUI7SUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzdCLE1BR0M7UUFFRCxNQUFNLGFBQWEsR0FBZSxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FDckUsTUFBTSxDQUFDLE9BQU8sRUFDZCxNQUFNLENBQUMsU0FBUyxDQUNqQixDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQWEsSUFBSSxtQkFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxNQUFNLFlBQVksR0FBaUIsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUQsTUFBTSxrQkFBa0IsR0FBZSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RSxNQUFNLEdBQUcsR0FBZTtZQUN0QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1lBQzNDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtTQUM5QixDQUFDO1FBQ0YsT0FBTztZQUNMLGlCQUFpQixFQUFFLE1BQU0sa0JBQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsa0JBQWtCLENBQUM7WUFDNUYsWUFBWSxFQUFFLE1BQU0sa0JBQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLENBQUM7U0FDdkUsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUE2QjtRQUN4RCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFeEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDMUIsT0FBcUIsRUFDckIsUUFBa0IsRUFDbEIsSUFBYSxFQUNiLFVBQXNCLEVBQ3RCLFNBQWlCLEVBQ2pCLFlBQW1CO1FBRW5CLE1BQU0sS0FBSyxHQUFVLElBQUksZ0JBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4QyxNQUFNLGFBQWEsR0FBRyxNQUFNLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBVSxJQUFJLGdCQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsTUFBTSxlQUFlLEdBQWMsTUFBTSxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEUsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWhHLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxXQUFXLEdBQXFCO2dCQUNwQyxJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsSUFBSSxFQUFFLE9BQU87YUFDZCxDQUFDO1lBQ0YsTUFBTSx5QkFBeUIsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RHLElBQUkseUJBQXlCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssd0JBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDOUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO2dCQUNELGlCQUFpQixDQUFDLHlCQUF5QixDQUFDLEdBQUcsV0FBVyxDQUFDO1lBQzdELENBQUM7aUJBQU0sQ0FBQztnQkFDTixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDMUIsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPO1lBQ2hDLFFBQVE7WUFDUixJQUFJO1lBQ0osVUFBVTtZQUNWLFNBQVM7WUFDVCxpQkFBaUI7U0FDbEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQVcsRUFBRSxhQUFxQjtRQUMzRCxNQUFNLE1BQU0sR0FBaUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0UsTUFBTSxTQUFTLEdBQVcsTUFBTSxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFcEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFXLEVBQUUsYUFBcUI7UUFDcEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFjLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUU1RSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFJLEdBQVcsRUFBRSxhQUFxQjtRQUM1RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsaUJBQStCLENBQUM7UUFDMUUsaUJBQWlCLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0UsTUFBTSxRQUFRLEdBQVcsTUFBTSxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWpFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQU0sQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFXRCxrQkFBZSxZQUFZLENBQUMifQ==
|
|
@@ -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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Crypto from './crypto/index.js';
|
|
2
2
|
import { Order, TeeOffer } from './models/index.js';
|
|
3
3
|
import TeeInputGeneratorBase from './TeeInputGeneratorBase.js';
|
|
4
|
+
import { ZERO_HASH } from './constants.js';
|
|
4
5
|
class TIIGenerator extends TeeInputGeneratorBase {
|
|
5
6
|
static async buildTII(params) {
|
|
6
7
|
const triEncryption = await this.getVerifiedBlockEncryption(params.offerId, params.sgxApiUrl);
|
|
@@ -20,18 +21,36 @@ class TIIGenerator extends TeeInputGeneratorBase {
|
|
|
20
21
|
const tii = await this.buildTII(params);
|
|
21
22
|
return JSON.stringify(tii);
|
|
22
23
|
}
|
|
23
|
-
static async generate(orderId, resource, args, encryption, sgxApiUrl) {
|
|
24
|
+
static async generate(orderId, resource, args, encryption, sgxApiUrl, solutionHash) {
|
|
24
25
|
const order = new Order(orderId);
|
|
25
26
|
const parentOrderId = await order.getParentOrder();
|
|
26
27
|
const parentOrder = new Order(parentOrderId);
|
|
27
28
|
const parentOrderInfo = await parentOrder.getOrderInfo();
|
|
29
|
+
const runtimeInputInfos = await this.generateRiiByOfferIds(parentOrderInfo.args.inputOffersIds);
|
|
30
|
+
if (solutionHash) {
|
|
31
|
+
const solutionRii = {
|
|
32
|
+
args: undefined,
|
|
33
|
+
hash: solutionHash,
|
|
34
|
+
type: 'Image',
|
|
35
|
+
};
|
|
36
|
+
const generatedSolutionRiiIndex = runtimeInputInfos.findIndex((rii) => rii.type === solutionRii.type);
|
|
37
|
+
if (generatedSolutionRiiIndex !== -1) {
|
|
38
|
+
if (runtimeInputInfos[generatedSolutionRiiIndex].hash.hash !== ZERO_HASH.hash) {
|
|
39
|
+
throw new Error('Workflow was created with a different solution');
|
|
40
|
+
}
|
|
41
|
+
runtimeInputInfos[generatedSolutionRiiIndex] = solutionRii;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
runtimeInputInfos.push(solutionRii);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
28
47
|
return this.generateByOffer({
|
|
29
48
|
offerId: parentOrderInfo.offerId,
|
|
30
49
|
resource,
|
|
31
50
|
args,
|
|
32
51
|
encryption,
|
|
33
52
|
sgxApiUrl,
|
|
34
|
-
runtimeInputInfos
|
|
53
|
+
runtimeInputInfos,
|
|
35
54
|
});
|
|
36
55
|
}
|
|
37
56
|
static async getTRI(tii, decryptionKey) {
|
|
@@ -52,4 +71,4 @@ class TIIGenerator extends TeeInputGeneratorBase {
|
|
|
52
71
|
}
|
|
53
72
|
}
|
|
54
73
|
export default TIIGenerator;
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVElJR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1RJSUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBV3BELE9BQU8scUJBQXFCLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE1BQU0sWUFBYSxTQUFRLHFCQUFxQjtJQUNwQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDN0IsTUFHQztRQUVELE1BQU0sYUFBYSxHQUFlLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUNyRSxNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FBQyxTQUFTLENBQ2pCLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBYSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsTUFBTSxZQUFZLEdBQWlCLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVELE1BQU0sa0JBQWtCLEdBQWUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUUsTUFBTSxHQUFHLEdBQWU7WUFDdEIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjtZQUMzQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7U0FDOUIsQ0FBQztRQUNGLE9BQU87WUFDTCxpQkFBaUIsRUFBRSxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsa0JBQWtCLENBQUM7WUFDNUYsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FB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
|