Skip to content

Commit a8d1ab6

Browse files
committed
chore: free compute for v5
1 parent bc2b222 commit a8d1ab6

5 files changed

Lines changed: 106 additions & 14 deletions

File tree

src/cli.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ export async function createCLI() {
328328
.description('Displays the compute job status')
329329
.argument('<datasetDid>', 'Dataset DID')
330330
.argument('<jobId>', 'Job ID')
331-
.argument('<agreementId>', 'Agreement ID')
331+
.argument('[agreementId]', 'Agreement ID')
332332
.option('-d, --dataset <datasetDid>', 'Dataset DID')
333333
.option('-j, --job <jobId>', 'Job ID')
334334
.option('-a, --agreement [agreementId]', 'Agreement ID')

src/commands.ts

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import { Signer, ethers, getAddress } from "ethers";
3434
import { interactiveFlow } from "./interactiveFlow.js";
3535
import { publishAsset } from "./publishAsset.js";
3636
import chalk from 'chalk';
37-
import { getPolicyServerOBJ } from "./policyServerhELPER.js";
37+
import { getPolicyServerOBJ, getPolicyServerOBJs } from "./policyServerHelper.js";
3838

3939
export class Commands {
4040
public signer: Signer;
@@ -867,8 +867,10 @@ export class Commands {
867867
return;
868868
}
869869
let providerURI = this.oceanNodeUrl;
870+
const ddoInstance = DDOManager.getDDOClass(ddos[0]);
871+
const { services } = ddoInstance.getDDOFields();
870872
if (ddos.length > 0) {
871-
providerURI = ddos[0].services[0].serviceEndpoint;
873+
providerURI = services[0].serviceEndpoint;
872874
}
873875

874876
const algoDdo = await this.aquarius.waitForIndexer(
@@ -888,7 +890,6 @@ export class Commands {
888890
const computeEnvs = await ProviderInstance.getComputeEnvironments(
889891
this.oceanNodeUrl
890892
);
891-
892893
if (!computeEnvs || computeEnvs.length < 1) {
893894
console.error(
894895
"Error fetching compute environments. No compute environments available."
@@ -904,7 +905,6 @@ export class Commands {
904905
// NO chainId needed anymore (is not part of ComputeEnvironment spec anymore)
905906
// const chainComputeEnvs = computeEnvs[computeEnvID]; // was algoDdo.chainId
906907
let computeEnv = null; // chainComputeEnvs[0];
907-
908908
if (computeEnvID && computeEnvID.length > 1) {
909909
for (const env of computeEnvs) {
910910
if (computeEnvID == env.id && env.free) {
@@ -921,18 +921,33 @@ export class Commands {
921921
);
922922
return;
923923
}
924-
924+
const ddoInstanceAlgo = DDOManager.getDDOClass(algoDdo);
925+
const { services: servicesAlgo, metadata: metadataAlgo, version: versionAlgo } = ddoInstanceAlgo.getDDOFields();
925926
const algo: ComputeAlgorithm = {
926927
documentId: algoDdo.id,
927-
serviceId: algoDdo.services[0].id,
928-
meta: algoDdo.metadata.algorithm,
928+
serviceId: servicesAlgo[0].id,
929+
meta: metadataAlgo.algorithm,
930+
};
931+
932+
const assetAlgo: {
933+
documentId: string;
934+
serviceId: string;
935+
asset: Asset;
936+
version?: string;
937+
} = {
938+
documentId: algoDdo.id,
939+
serviceId: servicesAlgo[0].id,
940+
asset: algoDdo,
941+
version: versionAlgo
929942
};
930943

931944
const assets = [];
932945
for (const dataDdo in ddos) {
946+
const ddoInstanceDdo = DDOManager.getDDOClass(ddos[dataDdo]);
947+
const { services: servicesDdo, version: versionDdo } = ddoInstanceDdo.getDDOFields();
933948
const canStartCompute = isOrderable(
934949
ddos[dataDdo],
935-
ddos[dataDdo].services[0].id,
950+
servicesDdo[0].id,
936951
algo,
937952
algoDdo
938953
);
@@ -944,7 +959,9 @@ export class Commands {
944959
}
945960
assets.push({
946961
documentId: ddos[dataDdo].id,
947-
serviceId: ddos[dataDdo].services[0].id,
962+
serviceId: servicesDdo[0].id,
963+
asset: ddos[dataDdo],
964+
version: versionDdo
948965
});
949966
}
950967

@@ -977,6 +994,7 @@ export class Commands {
977994
metadataUri: await getMetadataURI(),
978995
};
979996

997+
const policiesServer = await getPolicyServerOBJs(assets, assetAlgo, this.signer, this.oceanNodeUrl);
980998
const computeJobs = await ProviderInstance.freeComputeStart(
981999
providerURI,
9821000
this.signer,
@@ -986,7 +1004,8 @@ export class Commands {
9861004
null,
9871005
null,
9881006
null,
989-
output
1007+
output,
1008+
policiesServer
9901009
);
9911010

9921011
console.log("compute jobs: ", computeJobs);

src/helpers.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import fetch from "cross-fetch";
33
import { promises as fs, readFileSync } from "fs";
44
import * as path from "path";
55
import * as sapphire from '@oasisprotocol/sapphire-paratime';
6-
import { Asset, DDO } from '@oceanprotocol/ddo-js';
6+
import { Asset, DDO, DDOManager } from '@oceanprotocol/ddo-js';
77
import {
88
AccesslistFactory,
99
Aquarius,
@@ -257,7 +257,9 @@ export async function isOrderable(
257257
algorithm: ComputeAlgorithm,
258258
algorithmDDO: Asset | DDO
259259
): Promise<boolean> {
260-
const datasetService = asset.services.find((s) => s.id === serviceId);
260+
const ddoInstanceAsset = DDOManager.getDDOClass(asset);
261+
const { services: servicesAsset } = ddoInstanceAsset.getDDOFields();
262+
const datasetService = servicesAsset.find((s) => s.id === serviceId);
261263
if (!datasetService) return false;
262264

263265
if (datasetService.type === "compute") {

src/policyServerHelper.ts

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Asset } from "@oceanprotocol/ddo-js"
2-
import { PolicyServerActions, PolicyServerGetPdAction, PolicyServerInitiateAction, PolicyServerInitiateActionData, PolicyServerPresentationDefinition, SsiVerifiableCredential, SsiWalletDid, SsiWalletSession } from "./policyServerInterfaces"
2+
import { PolicyServerActions, PolicyServerGetPdAction, PolicyServerInitiateAction, PolicyServerInitiateActionData, PolicyServerInitiateComputeActionData, PolicyServerPresentationDefinition, SsiVerifiableCredential, SsiWalletDid, SsiWalletSession } from "./policyServerInterfaces"
33
import axios from "axios"
44
import { Signer } from "ethers"
55

@@ -333,3 +333,67 @@ export async function getPolicyServerOBJ(
333333
}
334334
}
335335

336+
export async function getPolicyServerOBJs(
337+
ddos: {
338+
documentId: string
339+
serviceId: string
340+
asset: Asset
341+
version?: string
342+
}[],
343+
algo: {
344+
documentId: string
345+
serviceId: string
346+
asset: Asset
347+
version?: string
348+
},
349+
signer: Signer,
350+
providerUrl: string
351+
): Promise<PolicyServerInitiateComputeActionData[] | null> {
352+
try {
353+
const results: PolicyServerInitiateComputeActionData[] = []
354+
355+
// --- datasets
356+
for (const ddo of ddos) {
357+
if (!ddo.version || ddo.version < '5.0.0') {
358+
return null
359+
}
360+
const result = await getPolicyServerOBJ(
361+
ddo.asset,
362+
ddo.serviceId,
363+
signer,
364+
providerUrl
365+
)
366+
results.push({
367+
...result,
368+
documentId: ddo.documentId,
369+
serviceId: ddo.serviceId
370+
})
371+
}
372+
373+
// --- algo
374+
if (!algo?.version || algo.version < '5.0.0') {
375+
return null
376+
}
377+
if (algo.serviceId) {
378+
const algoResult = await getPolicyServerOBJ(
379+
algo.asset,
380+
algo.serviceId,
381+
signer,
382+
providerUrl
383+
)
384+
results.push({
385+
...algoResult,
386+
documentId: algo.documentId,
387+
serviceId: algo.serviceId
388+
})
389+
}
390+
391+
return results
392+
} catch (error: any) {
393+
console.error('getPolicyServerOBJs error:', error)
394+
if (error?.message) {
395+
throw new Error(`getPolicyServerOBJs failed: ${error.message}`)
396+
}
397+
throw new Error('getPolicyServerOBJs failed')
398+
}
399+
}

src/policyServerInterfaces.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ export interface PolicyServerInitiateActionData {
4646
presentationDefinitionUri: string
4747
}
4848

49+
export interface PolicyServerInitiateComputeActionData
50+
extends PolicyServerInitiateActionData {
51+
documentId: string
52+
serviceId: string
53+
}
54+
55+
4956
export interface PolicyServerInitiateComputeActionData
5057
extends PolicyServerInitiateActionData {
5158
documentId: string

0 commit comments

Comments
 (0)