1
0
mirror of https://github.com/oceanprotocol-archive/squid-js.git synced 2024-02-02 15:31:51 +01:00

Add MetaData Edit & Retire (delete)

This commit is contained in:
Alex 2020-03-30 14:56:57 +03:00
parent d0d7ee71cc
commit 9b04e9e413
4 changed files with 162 additions and 8 deletions

View File

@ -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<string> {
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<string> {
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()}`
}

View File

@ -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[]
}

View File

@ -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<string> {
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<string> {
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.

View File

@ -43,13 +43,25 @@ export class WebServiceConnector {
})
}
public delete(url: string): Promise<Response> {
return this.fetch(url, {
method: 'DELETE',
headers: {
'Content-type': 'application/json'
}
})
public delete(url: string, payload?: BodyInit): Promise<Response> {
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(