diff --git a/src/ocean/OceanAssets.ts b/src/ocean/OceanAssets.ts index dd94884..11f9e62 100644 --- a/src/ocean/OceanAssets.ts +++ b/src/ocean/OceanAssets.ts @@ -2,12 +2,13 @@ import { TransactionReceipt } from 'web3-core' import { SearchQuery } from '../aquarius/Aquarius' import { DDO } from '../ddo/DDO' import { MetaData } from '../ddo/MetaData' -import { Service } from '../ddo/Service' +import { Service, ServiceAccess } from '../ddo/Service' import Account from './Account' import DID from './DID' import { fillConditionsWithDDO, SubscribablePromise } from '../utils' import { Instantiable, InstantiableConfig } from '../Instantiable.abstract' import { OrderProgressStep } from './utils/ServiceUtils' +import { access } from 'fs' export enum CreateProgressStep { EncryptingFiles, @@ -76,6 +77,16 @@ export class OceanAssets extends Instantiable { this.logger.log('Files encrypted') observer.next(CreateProgressStep.FilesEncrypted) + // makr sure that access service is defined if services is empty + if (services.length === 0) { + const accessService = await this.createAccessServiceAttributes( + publisher, + metadata.main.price, + metadata.main.datePublished + ) + services.push(accessService) + } + const serviceAgreementTemplate = await templates.escrowAccessSecretStoreTemplate.getServiceAgreementTemplate() const serviceEndpoint = this.ocean.aquarius.getServiceEndpoint(did) @@ -98,21 +109,6 @@ export class OceanAssets extends Instantiable { } ], service: [ - { - type: 'access', - serviceEndpoint: this.ocean.brizo.getConsumeEndpoint(), - templateId: templates.escrowAccessSecretStoreTemplate.getId(), - attributes: { - main: { - creator: publisher.getId(), - datePublished: metadata.main.datePublished, - name: 'dataAssetAccessServiceAgreement', - price: metadata.main.price, - timeout: 3600 - }, - serviceAgreementTemplate - } - }, { type: 'authorization', service: 'SecretStore', @@ -396,4 +392,30 @@ export class OceanAssets extends Instantiable { } } as SearchQuery) } + + public async createAccessServiceAttributes( + consumerAccount: Account, + price: string, + datePublished: string + ): Promise { + const { templates } = this.ocean.keeper + const serviceAgreementTemplate = await templates.escrowAccessSecretStoreTemplate.getServiceAgreementTemplate() + const name = 'dataAssetComputingServiceAgreement' + return { + type: 'access', + index: 2, + serviceEndpoint: this.ocean.brizo.getConsumeEndpoint(), + templateId: templates.escrowAccessSecretStoreTemplate.getId(), + attributes: { + main: { + creator: consumerAccount.getId(), + datePublished, + price, + timeout: 3600, + name: 'dataAssetAccessServiceAgreement' + }, + serviceAgreementTemplate + } + } + } } diff --git a/src/ocean/OceanCompute.ts b/src/ocean/OceanCompute.ts index e096715..262fabb 100644 --- a/src/ocean/OceanCompute.ts +++ b/src/ocean/OceanCompute.ts @@ -5,7 +5,7 @@ import { DDO } from '../ddo/DDO' import { SubscribablePromise } from '../utils' import { OrderProgressStep } from './utils/ServiceUtils' import { DID } from '../squid' -import {ServiceCompute} from '../ddo/Service' +import { ServiceCompute } from '../ddo/Service' export const ComputeJobStatus = Object.freeze({ Started: 10, @@ -262,30 +262,30 @@ export class OceanCompute extends Instantiable { return computeJobsList[0] as ComputeJob } - - public async create_compute_service_attributes( + + public async createComputeServiceAttributes( consumerAccount: Account, price: string, datePublished: string ): Promise { - const { templates } = this.ocean.keeper - const serviceAgreementTemplate = await templates.escrowComputeExecutionTemplate.getServiceAgreementTemplate() - const name = 'dataAssetComputingServiceAgreement' - return { - type: 'compute', - index: 3, - serviceEndpoint: this.ocean.brizo.getComputeEndpoint(), - templateId: templates.escrowComputeExecutionTemplate.getId(), - attributes: { - main: { - creator: consumerAccount.getId(), - datePublished, - price, - timeout: 3600, - name - }, - serviceAgreementTemplate - } - } + const { templates } = this.ocean.keeper + const serviceAgreementTemplate = await templates.escrowComputeExecutionTemplate.getServiceAgreementTemplate() + const name = 'dataAssetComputingServiceAgreement' + return { + type: 'compute', + index: 3, + serviceEndpoint: this.ocean.brizo.getComputeEndpoint(), + templateId: templates.escrowComputeExecutionTemplate.getId(), + attributes: { + main: { + creator: consumerAccount.getId(), + datePublished, + price, + timeout: 3600, + name + }, + serviceAgreementTemplate + } + } } } diff --git a/test/integration/ocean/Compute.test.ts b/test/integration/ocean/Compute.test.ts index d920778..cdb561c 100644 --- a/test/integration/ocean/Compute.test.ts +++ b/test/integration/ocean/Compute.test.ts @@ -2,10 +2,9 @@ import { assert } from 'chai' import { config } from '../config' import { Ocean, Account, DDO, MetaData, ComputeJobStatus, Config } from '../../../src' -import { getMetadata} from '../utils' +import { getMetadata } from '../utils' import { ServiceCompute } from '../../../src/ddo/Service' - const metadataAsset = getMetadata() const metadataAlgorithm = getMetadata(0, 'algorithm') @@ -30,7 +29,6 @@ describe('Compute', () => { before(async () => { ocean = await Ocean.getInstance(customConfig) ;[account] = await ocean.accounts.list() - }) it('should authenticate the consumer account', async () => { @@ -39,7 +37,11 @@ describe('Compute', () => { it('should publish a dataset with a compute service object', async () => { const stepsAsset = [] - computeService= await ocean.compute.create_compute_service_attributes(account,"1000",metadataAsset.main.datePublished) + computeService = await ocean.compute.createComputeServiceAttributes( + account, + '1000', + metadataAsset.main.datePublished + ) dataset = await ocean.assets .create(metadataAsset as MetaData, account, [computeService]) .next(step => stepsAsset.push(step))