From 9b04e9e413a6d7f0c7912e064995a9073a30c83a Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Mar 2020 14:56:57 +0300 Subject: [PATCH 01/10] Add MetaData Edit & Retire (delete) --- src/aquarius/Aquarius.ts | 91 ++++++++++++++++++++++++++ src/ddo/MetaData.ts | 12 ++++ src/ocean/OceanAssets.ts | 41 +++++++++++- src/ocean/utils/WebServiceConnector.ts | 26 ++++++-- 4 files changed, 162 insertions(+), 8 deletions(-) diff --git a/src/aquarius/Aquarius.ts b/src/aquarius/Aquarius.ts index e082394..151dc85 100644 --- a/src/aquarius/Aquarius.ts +++ b/src/aquarius/Aquarius.ts @@ -1,8 +1,10 @@ import { URL } from 'whatwg-url' import { DDO } from '../ddo/DDO' import DID from '../ocean/DID' +import { EditableMetaData } from '../ddo/MetaData' import { Logger } from '../utils' import { WebServiceConnector } from '../ocean/utils/WebServiceConnector' +import { escrowAccessServiceAgreementTemplate } from '../keeper/contracts/templates/EscrowAccess.serviceAgreementTemplate' const apiPath = '/api/v1/aquarius/assets/ddo' @@ -260,6 +262,95 @@ export class Aquarius { return result } + + public async editMetadata( + did: DID | string, + newMetadata: EditableMetaData, + updated: string, + signature: string + ): Promise { + did = did && DID.parse(did) + const fullUrl = `${this.url}${apiPath}/metadata/update/${did.getDid()}` + let data = Object() + if (newMetadata.description != null) + data.description = newMetadata.description + if (newMetadata.title != null) + data.title = newMetadata.title + if (newMetadata.servicePrices != null) + data.servicePrices = newMetadata.servicePrices + if (newMetadata.links != null) { + data.links = [] + for (const [name, url] of Object.entries(newMetadata.links)) { + let asample = Object() + asample.name = name + asample.url = url + asample.type = 'sample' + data.links.push(asample) + } + } + data.updated = updated + data.signature = signature + const result = await this.fetch + .put( + fullUrl, + JSON.stringify(data) + ) + .then((response: any) => { + if (response.ok) { + return response.text + } + this.logger.log( + 'transferownership failed:', + response.status, + response.statusText + ) + return null + }) + + .catch(error => { + this.logger.error('Error transfering ownership metadata: ', error) + return null + }) + + return result + } + + public async retire( + did: DID | string, + updated: string, + signature: string + ): Promise { + did = did && DID.parse(did) + const fullUrl = `${this.url}${apiPath}/${did.getDid()}` + const result = await this.fetch + .delete( + fullUrl, + JSON.stringify({ + signature: signature, + updated: updated + }) + ) + .then((response: any) => { + if (response.ok) { + return response.text + } + this.logger.log( + 'transferownership failed:', + response.status, + response.statusText + ) + return null + }) + + .catch(error => { + this.logger.error('Error transfering ownership metadata: ', error) + return null + }) + + return result + } + + public getServiceEndpoint(did: DID) { return `${this.url}/api/v1/aquarius/assets/ddo/did:op:${did.getId()}` } diff --git a/src/ddo/MetaData.ts b/src/ddo/MetaData.ts index 34aceb7..01aa38e 100644 --- a/src/ddo/MetaData.ts +++ b/src/ddo/MetaData.ts @@ -276,3 +276,15 @@ export interface MetaData { additionalInformation?: AdditionalInformation curation?: Curation } + +export interface ServicePrices{ + serviceIndex: number, + price: string +} + +export interface EditableMetaData{ + description?: string, + title?: string, + links?: { [name: string]: string }[], + servicePrices?: ServicePrices[] +} diff --git a/src/ocean/OceanAssets.ts b/src/ocean/OceanAssets.ts index 719d362..0a52d84 100644 --- a/src/ocean/OceanAssets.ts +++ b/src/ocean/OceanAssets.ts @@ -1,7 +1,7 @@ import { TransactionReceipt } from 'web3-core' import { SearchQuery } from '../aquarius/Aquarius' import { DDO } from '../ddo/DDO' -import { MetaData } from '../ddo/MetaData' +import { MetaData, EditableMetaData } from '../ddo/MetaData' import { Service, ServiceAccess } from '../ddo/Service' import Account from './Account' import DID from './DID' @@ -384,6 +384,45 @@ export class OceanAssets extends Instantiable { return txReceipt } + public async editMetadata( + did: string, + newMetadata: EditableMetaData, + account: Account + ): Promise { + const oldDdo = await this.ocean.aquarius.retrieveDDO(did) + // get a signature + const signature = await this.ocean.utils.signature.signForAquarius( + oldDdo.updated, + account + ) + let result=null + if (signature != null) + result=await this.ocean.aquarius.editMetadata( + did, + newMetadata, + oldDdo.updated, + signature + ) + + return result + } + + public async retire( + did: string, + account: Account + ): Promise { + const oldDdo = await this.ocean.aquarius.retrieveDDO(did) + // get a signature + const signature = await this.ocean.utils.signature.signForAquarius( + oldDdo.updated, + account + ) + let result=null + if (signature != null) + result = await this.ocean.aquarius.retire(did, oldDdo.updated, signature) + return result + } + /** * Returns the assets of a consumer. * @param {string} consumer Consumer address. diff --git a/src/ocean/utils/WebServiceConnector.ts b/src/ocean/utils/WebServiceConnector.ts index d34e6fe..89cc4d3 100644 --- a/src/ocean/utils/WebServiceConnector.ts +++ b/src/ocean/utils/WebServiceConnector.ts @@ -43,13 +43,25 @@ export class WebServiceConnector { }) } - public delete(url: string): Promise { - return this.fetch(url, { - method: 'DELETE', - headers: { - 'Content-type': 'application/json' - } - }) + public delete(url: string, payload?: BodyInit): Promise { + if (payload != null) { + return this.fetch(url, { + method: 'DELETE', + body: payload, + headers: { + 'Content-type': 'application/json' + } + }) + } + else { + return this.fetch(url, { + method: 'DELETE', + headers: { + 'Content-type': 'application/json' + } + }) + } + } public async downloadFile( From e04ecaf968c65b10e64c4d432399f2197fee879d Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Mar 2020 14:57:14 +0300 Subject: [PATCH 02/10] add tests --- test/integration/ocean/AssetOwners.test.ts | 29 +++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/test/integration/ocean/AssetOwners.test.ts b/test/integration/ocean/AssetOwners.test.ts index e20d739..7e616d0 100644 --- a/test/integration/ocean/AssetOwners.test.ts +++ b/test/integration/ocean/AssetOwners.test.ts @@ -1,7 +1,7 @@ import { assert } from 'chai' import { config } from '../config' import { getMetadata } from '../utils' -import { Ocean, Account } from '../../../src' // @oceanprotocol/squid +import { Ocean, Account, EditableMetaData } from '../../../src' // @oceanprotocol/squid describe('Asset Owners', () => { let ocean: Ocean @@ -80,8 +80,8 @@ describe('Asset Owners', () => { const { length: finalLength1 } = await ocean.assets.consumerAssets( account2.getId() ) + assert.equal(finalLength1 - initialLength, 0) - // Granting access try { await account2.requestTokens( @@ -92,7 +92,7 @@ describe('Asset Owners', () => { ).toString() ) ) - } catch {} + } catch { } await ocean.assets.order(ddo.id, account2) // Access granted const { length: finalLength2 } = await ocean.assets.consumerAssets( @@ -111,4 +111,27 @@ describe('Asset Owners', () => { const aquariusOwner = await ocean.assets.owner(id) assert.equal(aquariusOwner, account2.getId()) }) + + it('should be able to update metadata', async () => { + const { id } = await ocean.assets.create(metadata as any, account1) + + let newMetaData = {title: "New title", description: "New description"}; + await ocean.assets.editMetadata(id,newMetaData,account1) + + const newDDO = await ocean.assets.resolve(id) + + assert.equal(newDDO['service'][0]['attributes']['main']['name'], "New title") + assert.equal(newDDO['service'][0]['attributes']['additionalInformation']['description'], "New description") + }) + + it('should be able to retire metadata', async () => { + const { id } = await ocean.assets.create(metadata as any, account1) + + await ocean.assets.retire(id,account1) + + const newDDO = await ocean.assets.resolve(id) + + assert.equal(newDDO, null) + + }) }) From 5289443cde6541535301bf6340944c789f70e017 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Mar 2020 15:03:32 +0300 Subject: [PATCH 03/10] remove unused line --- src/aquarius/Aquarius.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aquarius/Aquarius.ts b/src/aquarius/Aquarius.ts index 151dc85..c8cc63a 100644 --- a/src/aquarius/Aquarius.ts +++ b/src/aquarius/Aquarius.ts @@ -4,7 +4,7 @@ import DID from '../ocean/DID' import { EditableMetaData } from '../ddo/MetaData' import { Logger } from '../utils' import { WebServiceConnector } from '../ocean/utils/WebServiceConnector' -import { escrowAccessServiceAgreementTemplate } from '../keeper/contracts/templates/EscrowAccess.serviceAgreementTemplate' + const apiPath = '/api/v1/aquarius/assets/ddo' From 8bfa7ba5930cf6ba7c6923f9c4a739a9d86adefa Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Mon, 30 Mar 2020 15:09:23 +0300 Subject: [PATCH 04/10] lint --- src/aquarius/Aquarius.ts | 18 ++++--------- src/ddo/MetaData.ts | 12 ++++----- src/ocean/OceanAssets.ts | 11 +++----- src/ocean/utils/WebServiceConnector.ts | 4 +-- test/integration/ocean/AssetOwners.test.ts | 30 ++++++++++++---------- 5 files changed, 32 insertions(+), 43 deletions(-) diff --git a/src/aquarius/Aquarius.ts b/src/aquarius/Aquarius.ts index c8cc63a..fd619a2 100644 --- a/src/aquarius/Aquarius.ts +++ b/src/aquarius/Aquarius.ts @@ -5,7 +5,6 @@ import { EditableMetaData } from '../ddo/MetaData' import { Logger } from '../utils' import { WebServiceConnector } from '../ocean/utils/WebServiceConnector' - const apiPath = '/api/v1/aquarius/assets/ddo' export interface QueryResult { @@ -262,7 +261,6 @@ export class Aquarius { return result } - public async editMetadata( did: DID | string, newMetadata: EditableMetaData, @@ -271,17 +269,15 @@ export class Aquarius { ): Promise { did = did && DID.parse(did) const fullUrl = `${this.url}${apiPath}/metadata/update/${did.getDid()}` - let data = Object() - if (newMetadata.description != null) - data.description = newMetadata.description - if (newMetadata.title != null) - data.title = newMetadata.title + const data = Object() + if (newMetadata.description != null) data.description = newMetadata.description + if (newMetadata.title != null) data.title = newMetadata.title if (newMetadata.servicePrices != null) data.servicePrices = newMetadata.servicePrices if (newMetadata.links != null) { data.links = [] for (const [name, url] of Object.entries(newMetadata.links)) { - let asample = Object() + const asample = Object() asample.name = name asample.url = url asample.type = 'sample' @@ -291,10 +287,7 @@ export class Aquarius { data.updated = updated data.signature = signature const result = await this.fetch - .put( - fullUrl, - JSON.stringify(data) - ) + .put(fullUrl, JSON.stringify(data)) .then((response: any) => { if (response.ok) { return response.text @@ -350,7 +343,6 @@ export class Aquarius { return result } - public getServiceEndpoint(did: DID) { return `${this.url}/api/v1/aquarius/assets/ddo/did:op:${did.getId()}` } diff --git a/src/ddo/MetaData.ts b/src/ddo/MetaData.ts index 01aa38e..6654eae 100644 --- a/src/ddo/MetaData.ts +++ b/src/ddo/MetaData.ts @@ -277,14 +277,14 @@ export interface MetaData { curation?: Curation } -export interface ServicePrices{ - serviceIndex: number, +export interface ServicePrices { + serviceIndex: number price: string } -export interface EditableMetaData{ - description?: string, - title?: string, - links?: { [name: string]: string }[], +export interface EditableMetaData { + description?: string + title?: string + links?: { [name: string]: string }[] servicePrices?: ServicePrices[] } diff --git a/src/ocean/OceanAssets.ts b/src/ocean/OceanAssets.ts index 0a52d84..477ab0c 100644 --- a/src/ocean/OceanAssets.ts +++ b/src/ocean/OceanAssets.ts @@ -395,9 +395,9 @@ export class OceanAssets extends Instantiable { oldDdo.updated, account ) - let result=null + let result = null if (signature != null) - result=await this.ocean.aquarius.editMetadata( + result = await this.ocean.aquarius.editMetadata( did, newMetadata, oldDdo.updated, @@ -407,17 +407,14 @@ export class OceanAssets extends Instantiable { return result } - public async retire( - did: string, - account: Account - ): Promise { + public async retire(did: string, account: Account): Promise { const oldDdo = await this.ocean.aquarius.retrieveDDO(did) // get a signature const signature = await this.ocean.utils.signature.signForAquarius( oldDdo.updated, account ) - let result=null + let result = null if (signature != null) result = await this.ocean.aquarius.retire(did, oldDdo.updated, signature) return result diff --git a/src/ocean/utils/WebServiceConnector.ts b/src/ocean/utils/WebServiceConnector.ts index 89cc4d3..49d9137 100644 --- a/src/ocean/utils/WebServiceConnector.ts +++ b/src/ocean/utils/WebServiceConnector.ts @@ -52,8 +52,7 @@ export class WebServiceConnector { 'Content-type': 'application/json' } }) - } - else { + } else { return this.fetch(url, { method: 'DELETE', headers: { @@ -61,7 +60,6 @@ export class WebServiceConnector { } }) } - } public async downloadFile( diff --git a/test/integration/ocean/AssetOwners.test.ts b/test/integration/ocean/AssetOwners.test.ts index 7e616d0..2a9eda3 100644 --- a/test/integration/ocean/AssetOwners.test.ts +++ b/test/integration/ocean/AssetOwners.test.ts @@ -80,7 +80,7 @@ describe('Asset Owners', () => { const { length: finalLength1 } = await ocean.assets.consumerAssets( account2.getId() ) - + assert.equal(finalLength1 - initialLength, 0) // Granting access try { @@ -92,7 +92,7 @@ describe('Asset Owners', () => { ).toString() ) ) - } catch { } + } catch {} await ocean.assets.order(ddo.id, account2) // Access granted const { length: finalLength2 } = await ocean.assets.consumerAssets( @@ -114,24 +114,26 @@ describe('Asset Owners', () => { it('should be able to update metadata', async () => { const { id } = await ocean.assets.create(metadata as any, account1) - - let newMetaData = {title: "New title", description: "New description"}; - await ocean.assets.editMetadata(id,newMetaData,account1) - + + const newMetaData = { title: 'New title', description: 'New description' } + await ocean.assets.editMetadata(id, newMetaData, account1) + const newDDO = await ocean.assets.resolve(id) - - assert.equal(newDDO['service'][0]['attributes']['main']['name'], "New title") - assert.equal(newDDO['service'][0]['attributes']['additionalInformation']['description'], "New description") + + assert.equal(newDDO.service[0].attributes.main.name, 'New title') + assert.equal( + newDDO.service[0].attributes.additionalInformation.description, + 'New description' + ) }) it('should be able to retire metadata', async () => { const { id } = await ocean.assets.create(metadata as any, account1) - - await ocean.assets.retire(id,account1) - + + await ocean.assets.retire(id, account1) + const newDDO = await ocean.assets.resolve(id) - + assert.equal(newDDO, null) - }) }) From b76577bda5b283c6898ca751c44c2d85e9dc9293 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Mon, 30 Mar 2020 17:53:36 +0300 Subject: [PATCH 05/10] refactor & enhance tests --- src/aquarius/Aquarius.ts | 19 ++------- src/ddo/MetaData.ts | 8 +++- test/integration/ocean/AssetOwners.test.ts | 47 +++++++++++++++++++++- 3 files changed, 56 insertions(+), 18 deletions(-) diff --git a/src/aquarius/Aquarius.ts b/src/aquarius/Aquarius.ts index fd619a2..1af11e8 100644 --- a/src/aquarius/Aquarius.ts +++ b/src/aquarius/Aquarius.ts @@ -274,16 +274,7 @@ export class Aquarius { if (newMetadata.title != null) data.title = newMetadata.title if (newMetadata.servicePrices != null) data.servicePrices = newMetadata.servicePrices - if (newMetadata.links != null) { - data.links = [] - for (const [name, url] of Object.entries(newMetadata.links)) { - const asample = Object() - asample.name = name - asample.url = url - asample.type = 'sample' - data.links.push(asample) - } - } + if (newMetadata.links != null) data.links = newMetadata.links data.updated = updated data.signature = signature const result = await this.fetch @@ -293,7 +284,7 @@ export class Aquarius { return response.text } this.logger.log( - 'transferownership failed:', + 'editMetaData failed:', response.status, response.statusText ) @@ -327,11 +318,7 @@ export class Aquarius { if (response.ok) { return response.text } - this.logger.log( - 'transferownership failed:', - response.status, - response.statusText - ) + this.logger.log('retire failed:', response.status, response.statusText) return null }) diff --git a/src/ddo/MetaData.ts b/src/ddo/MetaData.ts index 6654eae..228ebbb 100644 --- a/src/ddo/MetaData.ts +++ b/src/ddo/MetaData.ts @@ -282,9 +282,15 @@ export interface ServicePrices { price: string } +export interface EditableMetaDataLinks { + name: string + url: string + type: string +} + export interface EditableMetaData { description?: string title?: string - links?: { [name: string]: string }[] + links?: EditableMetaDataLinks[] servicePrices?: ServicePrices[] } diff --git a/test/integration/ocean/AssetOwners.test.ts b/test/integration/ocean/AssetOwners.test.ts index 2a9eda3..23b9398 100644 --- a/test/integration/ocean/AssetOwners.test.ts +++ b/test/integration/ocean/AssetOwners.test.ts @@ -114,8 +114,35 @@ describe('Asset Owners', () => { it('should be able to update metadata', async () => { const { id } = await ocean.assets.create(metadata as any, account1) + const links = [ + { + name: 'Sample1', + url: 'http://www.example.com', + type: 'sample' + }, + { + name: 'Sample2', + url: 'http://www.example.net', + type: 'sample' + } + ] + const newPrices = [ + { + serviceIndex: 0, + price: '31000000000000000000' + }, + { + serviceIndex: 2, + price: '31000000000000000000' + } + ] - const newMetaData = { title: 'New title', description: 'New description' } + const newMetaData = { + title: 'New title', + description: 'New description', + links: links, + servicePrices: newPrices + } await ocean.assets.editMetadata(id, newMetaData, account1) const newDDO = await ocean.assets.resolve(id) @@ -125,6 +152,24 @@ describe('Asset Owners', () => { newDDO.service[0].attributes.additionalInformation.description, 'New description' ) + assert.equal(newDDO.service[0].attributes.main.price, '31000000000000000000') + assert.equal(newDDO.service[2].attributes.main.price, '31000000000000000000') + assert.equal( + newDDO.service[0].attributes.additionalInformation.links[0].name, + 'Sample1' + ) + assert.equal( + newDDO.service[0].attributes.additionalInformation.links[0].url, + 'http://www.example.com' + ) + assert.equal( + newDDO.service[0].attributes.additionalInformation.links[1].name, + 'Sample2' + ) + assert.equal( + newDDO.service[0].attributes.additionalInformation.links[1].url, + 'http://www.example.net' + ) }) it('should be able to retire metadata', async () => { From 091df0f9d4966f11784d1cc3383f14859372762a Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Tue, 31 Mar 2020 11:58:12 +0300 Subject: [PATCH 06/10] added function docs --- src/ocean/OceanAssets.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/ocean/OceanAssets.ts b/src/ocean/OceanAssets.ts index 477ab0c..e9e0a42 100644 --- a/src/ocean/OceanAssets.ts +++ b/src/ocean/OceanAssets.ts @@ -384,6 +384,13 @@ export class OceanAssets extends Instantiable { return txReceipt } + /** + * Edit Metadata for a DDO. + * @param {did} string DID. + * @param {newMetadata} EditableMetaData Metadata fields & new values. + * @param {Account} account Ethereum account of owner to sign and prove the ownership. + * @return {Promise} + */ public async editMetadata( did: string, newMetadata: EditableMetaData, @@ -407,6 +414,12 @@ export class OceanAssets extends Instantiable { return result } + /** + * Retire a DDO (Delete) + * @param {did} string DID. + * @param {Account} account Ethereum account of owner to sign and prove the ownership. + * @return {Promise} + */ public async retire(did: string, account: Account): Promise { const oldDdo = await this.ocean.aquarius.retrieveDDO(did) // get a signature From 06e5e6bf6ce6250c0080a4f49625216830165757 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Tue, 31 Mar 2020 12:01:00 +0300 Subject: [PATCH 07/10] added function docs --- src/aquarius/Aquarius.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/aquarius/Aquarius.ts b/src/aquarius/Aquarius.ts index 1af11e8..0f89517 100644 --- a/src/aquarius/Aquarius.ts +++ b/src/aquarius/Aquarius.ts @@ -261,6 +261,14 @@ export class Aquarius { return result } + /** + * Edit Metadata for a DDO. + * @param {did} string DID. + * @param {newMetadata} EditableMetaData Metadata fields & new values. + * @param {String} updated Updated field of the DDO + * @param {String} signature Signature using updated field to verify that the consumer has rights + * @return {Promise} Result. + */ public async editMetadata( did: DID | string, newMetadata: EditableMetaData, @@ -299,6 +307,13 @@ export class Aquarius { return result } + /** + * Retire a DDO (Delete) + * @param {DID | string} did DID of the asset to update. + * @param {String} updated Updated field of the DDO + * @param {String} signature Signature using updated field to verify that the consumer has rights + * @return {Promise} Result. + */ public async retire( did: DID | string, updated: string, From a3d46cb19b1da06752d9e3866b7c2e5695e39337 Mon Sep 17 00:00:00 2001 From: Alex Coseru Date: Wed, 8 Apr 2020 16:49:22 +0300 Subject: [PATCH 08/10] fix endpoint changed in aqua will retrigger test when aqua it's ready --- src/aquarius/Aquarius.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aquarius/Aquarius.ts b/src/aquarius/Aquarius.ts index 0f89517..d69b046 100644 --- a/src/aquarius/Aquarius.ts +++ b/src/aquarius/Aquarius.ts @@ -276,7 +276,7 @@ export class Aquarius { signature: string ): Promise { did = did && DID.parse(did) - const fullUrl = `${this.url}${apiPath}/metadata/update/${did.getDid()}` + const fullUrl = `${this.url}${apiPath}/metadata/${did.getDid()}` const data = Object() if (newMetadata.description != null) data.description = newMetadata.description if (newMetadata.title != null) data.title = newMetadata.title From e2c437c1eae49e35f5b81b113cd353303aafe08b Mon Sep 17 00:00:00 2001 From: Alex Coseru Date: Thu, 9 Apr 2020 16:30:36 +0300 Subject: [PATCH 09/10] added extra description @kremalicious - might need some help to make it more clear --- src/ddo/MetaData.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ddo/MetaData.ts b/src/ddo/MetaData.ts index 228ebbb..f2690d8 100644 --- a/src/ddo/MetaData.ts +++ b/src/ddo/MetaData.ts @@ -276,7 +276,14 @@ export interface MetaData { additionalInformation?: AdditionalInformation curation?: Curation } - +/** Warning. serviceIndex is the index of a services in Services array, and not service.index attribute. +Let's assume that you have the following services array: +[ + {"index":1,"type":"access","main":{"price":3}}, + {"index":0,"type":"compute","main":{"price":1}} +] +then calling update with { serviceIndex:1,price:2} will update the 'compute' service, and not the access one +**/ export interface ServicePrices { serviceIndex: number price: string From c0629db7c19d6c487910b64599413b72b84116c0 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 9 Apr 2020 16:48:22 +0300 Subject: [PATCH 10/10] fix lint due to merge --- test/integration/ocean/AssetOwners.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/ocean/AssetOwners.test.ts b/test/integration/ocean/AssetOwners.test.ts index cb0f23a..3f1af67 100644 --- a/test/integration/ocean/AssetOwners.test.ts +++ b/test/integration/ocean/AssetOwners.test.ts @@ -185,7 +185,7 @@ describe('Asset Owners', () => { assert.equal(newDDO, null) }) - + it('should add and remove correctly an address to/from FreeWhiteList on an asset', async () => { const ddo = await ocean.assets.create(metadata as any, account1) await ocean.assets.addConsumerToFreeWhiteList(ddo.id, consumer1.getId(), account1)