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

more DDO structure updates

This commit is contained in:
Matthias Kretschmann 2019-08-16 16:12:42 +02:00
parent b15022a4c1
commit e253e4c0bb
Signed by: m
GPG Key ID: 606EEEF3C479A91F
17 changed files with 77 additions and 71 deletions

View File

@ -77,9 +77,11 @@ describe('Asset Owners', () => {
)
} catch {}
const accessService = ddo.findServiceByType('access')
await ocean.assets.order(
ddo.id,
ddo.findServiceByType('access').serviceDefinitionId,
accessService.index,
account2
)
// Access granted

View File

@ -68,7 +68,7 @@ describe('Consume Asset', () => {
serviceAgreementSignatureResult = await ocean.agreements.prepare(
ddo.id,
accessService.serviceDefinitionId,
accessService.index,
consumer
)
@ -91,7 +91,7 @@ describe('Consume Asset', () => {
const success = await ocean.agreements.create(
ddo.id,
serviceAgreementSignatureResult.agreementId,
accessService.serviceDefinitionId,
accessService.index,
serviceAgreementSignatureResult.signature,
consumer,
publisher
@ -115,7 +115,7 @@ describe('Consume Asset', () => {
it('should lock the payment by the consumer', async () => {
const paid = await ocean.agreements.conditions.lockReward(
serviceAgreementSignatureResult.agreementId,
ddo.findServiceByType('metadata').metadata.main.price,
ddo.findServiceByType('metadata').attributes.main.price,
consumer
)
@ -162,7 +162,7 @@ describe('Consume Asset', () => {
const path = await ocean.assets.consume(
serviceAgreementSignatureResult.agreementId,
ddo.id,
accessService.serviceDefinitionId,
accessService.index,
consumer,
folder
)
@ -189,7 +189,7 @@ describe('Consume Asset', () => {
const path = await ocean.assets.consume(
serviceAgreementSignatureResult.agreementId,
ddo.id,
accessService.serviceDefinitionId,
accessService.index,
consumer,
folder,
1

View File

@ -61,7 +61,7 @@ describe('Consume Asset (Brizo)', () => {
const steps = []
agreementId = await ocean.assets
.order(ddo.id, accessService.serviceDefinitionId, consumer)
.order(ddo.id, accessService.index, consumer)
.next(step => steps.push(step))
assert.isDefined(agreementId)
@ -75,7 +75,7 @@ describe('Consume Asset (Brizo)', () => {
const path = await ocean.assets.consume(
agreementId,
ddo.id,
accessService.serviceDefinitionId,
accessService.index,
consumer,
folder
)

View File

@ -59,7 +59,7 @@ xdescribe('Consume Asset (Large size)', () => {
agreementId = await ocean.assets.order(
ddo.id,
accessService.serviceDefinitionId,
accessService.index,
consumer
)
@ -73,7 +73,7 @@ xdescribe('Consume Asset (Large size)', () => {
const path = await ocean.assets.consume(
agreementId,
ddo.id,
accessService.serviceDefinitionId,
accessService.index,
consumer,
folder
)

View File

@ -46,7 +46,6 @@ describe('Signature', () => {
const did = `did:op:${'c'.repeat(64)}`
const templateId = `0x${'f'.repeat(40)}`
const agreementId = `0x${'e'.repeat(64)}`
const serviceDefinitionId = '0'
const serviceAgreementTemplate = await templates.escrowAccessSecretStoreTemplate.getServiceAgreementTemplate()
@ -55,15 +54,16 @@ describe('Signature', () => {
service: [
{
type: 'access',
index: 0,
purchaseEndpoint: undefined,
serviceEndpoint: undefined,
serviceDefinitionId,
templateId,
serviceAgreementTemplate
} as any,
{
type: 'metadata',
metadata: {
index: 1,
attributes: {
main: {
price: 10
}
@ -74,7 +74,7 @@ describe('Signature', () => {
const signature = await ocean.utils.agreements.signServiceAgreement(
ddo,
serviceDefinitionId,
0,
agreementId,
[
`0x${'1'.repeat(64)}`,

View File

@ -12,11 +12,13 @@ const metadata: Partial<MetaData> = {
files: [
{
index: 0,
contentType: 'application/json',
url:
'https://raw.githubusercontent.com/oceanprotocol/squid-js/master/package.json'
},
{
index: 1,
contentType: 'text/plain',
url:
'https://raw.githubusercontent.com/oceanprotocol/squid-js/master/README.md'
}

View File

@ -37,7 +37,7 @@ export class Brizo extends Instantiable {
public getComputeEndpoint(
pubKey: string,
serviceId: string,
serviceIndex: number,
_notUsed: string,
container: string
) {
@ -47,14 +47,14 @@ export class Brizo extends Instantiable {
public async initializeServiceAgreement(
did: string,
serviceAgreementId: string,
serviceDefinitionId: string,
serviceIndex: number,
signature: string,
consumerAddress: string
): Promise<any> {
const args = {
did,
serviceAgreementId,
serviceDefinitionId,
serviceIndex,
signature,
consumerAddress
}

View File

@ -63,19 +63,19 @@ export class DDO {
}
/**
* Finds a service of a DDO by ID.
* @param {string} serviceDefinitionId Service ID.
* Finds a service of a DDO by index.
* @param {number} Service index.
* @return {Service} Service.
*/
public findServiceById<T extends ServiceType>(
serviceDefinitionId: string
index: number
): Service<T> {
if (!serviceDefinitionId) {
throw new Error('serviceDefinitionId not set')
if (!index) {
throw new Error('index is not set')
}
const service = this.service.find(
s => s.serviceDefinitionId === serviceDefinitionId
s => s.index === index
)
return service as Service<T>
@ -101,8 +101,8 @@ export class DDO {
* @return {string[]} DDO checksum.
*/
public getChecksum(): string {
const { metadata } = this.findServiceByType('metadata')
const { files, name, author, license } = metadata.main
const { attributes } = this.findServiceByType('metadata')
const { files, name, author, license } = attributes.main
const values = [
...(files || []).map(({ checksum }) => checksum).filter(_ => !!_),
@ -150,11 +150,11 @@ export class DDO {
*/
public addChecksum(): void {
const metadataService = this.findServiceByType('metadata')
if (metadataService.metadata.main.checksum) {
if (metadataService.attributes.main.checksum) {
LoggerInstance.log('Checksum already exists')
return
}
metadataService.metadata.main.checksum = this.getChecksum()
metadataService.attributes.main.checksum = this.getChecksum()
}
/**

View File

@ -12,7 +12,7 @@ export type ServiceType =
export interface ServiceCommon {
type: ServiceType
serviceDefinitionId?: string
index: number
serviceEndpoint?: string
}
@ -23,7 +23,7 @@ export interface ServiceAuthorization extends ServiceCommon {
export interface ServiceMetadata extends ServiceCommon {
type: 'metadata'
metadata: MetaData
attributes: MetaData
}
export interface ServiceAccess extends ServiceCommon {

View File

@ -59,7 +59,7 @@ export class EscrowAccessSecretStoreTemplate extends AgreementTemplate {
) {
return !!(await this.createFullAgreement(
ddo.shortId(),
ddo.findServiceByType('metadata').metadata.main.price,
ddo.findServiceByType('metadata').attributes.main.price,
consumer,
from,
agreementId
@ -79,7 +79,7 @@ export class EscrowAccessSecretStoreTemplate extends AgreementTemplate {
} = await this.createFullAgreementData(
agreementId,
ddo.shortId(),
ddo.findServiceByType('metadata').metadata.main.price,
ddo.findServiceByType('metadata').attributes.main.price,
consumer
)
return [

View File

@ -42,13 +42,13 @@ export class OceanAgreements extends Instantiable {
/**
* Creates a consumer signature for the specified asset service.
* @param {string} did Decentralized ID.
* @param {string} serviceDefinitionId Service definition ID.
* @param {number} index Service index.
* @param {Account} consumer Consumer account.
* @return {Promise<AgreementPrepareResult>} Agreement ID and signaturee.
*/
public async prepare(
did: string,
serviceDefinitionId: string,
index: number,
consumer: Account
): Promise<AgreementPrepareResult> {
const d: DID = DID.parse(did as string)
@ -68,7 +68,7 @@ export class OceanAgreements extends Instantiable {
const signature = await this.ocean.utils.agreements.signServiceAgreement(
ddo,
serviceDefinitionId,
index,
agreementId,
agreementConditionsIds,
consumer
@ -80,21 +80,21 @@ export class OceanAgreements extends Instantiable {
/**
* Submit a service agreement to the publisher to create the agreement on-chain.
* @param {string} did Decentralized ID.
* @param {string} serviceDefinitionId Service definition ID.
* @param {number} index Service index.
* @param {Account} consumer Consumer account.
* @return {Promise<void>}
*/
public async send(
did: string,
agreementId: string,
serviceDefinitionId: string,
index: number,
signature: string,
consumer: Account
): Promise<void> {
const result = await this.ocean.brizo.initializeServiceAgreement(
didPrefixed(did),
zeroX(agreementId),
serviceDefinitionId,
index,
zeroX(signature),
consumer.getId()
)
@ -112,7 +112,7 @@ export class OceanAgreements extends Instantiable {
* in this method before submitting on-chain.
* @param {string} did Decentralized ID.
* @param {string} agreementId Service agreement ID.
* @param {string} serviceDefinitionId Service definition ID.
* @param {number} index Service index.
* @param {string} signature Service agreement signature.
* @param {Account} consumer Consumer account.
* @param {Account} publisher Publisher account.
@ -121,7 +121,7 @@ export class OceanAgreements extends Instantiable {
public async create(
did: string,
agreementId: string,
serviceDefinitionId: string,
index: number,
signature: string,
consumer: Account,
publisher: Account
@ -129,7 +129,7 @@ export class OceanAgreements extends Instantiable {
const d: DID = DID.parse(did)
const ddo = await this.ocean.aquarius.retrieveDDO(d)
const templateName = ddo.findServiceById<'access'>(serviceDefinitionId)
const templateName = ddo.findServiceById<'access'>(index)
.serviceAgreementTemplate.contractName
await this.ocean.keeper
.getTemplateByName(templateName)
@ -145,9 +145,7 @@ export class OceanAgreements extends Instantiable {
/**
* Get the status of a service agreement.
* @param {string} did Decentralized ID.
* @param {string} agreementId Service agreement ID.
* @param {string} serviceDefinitionId Service definition ID.
* @param {boolean} extended Returns a complete status with dependencies.
* @return {Promise<any>}
*/

View File

@ -91,7 +91,7 @@ export class OceanAssets extends Instantiable {
const serviceEndpoint = this.ocean.aquarius.getServiceEndpoint(did)
let serviceDefinitionIdCount = 0
let indexCount = 0
// create ddo itself
const ddo: DDO = new DDO({
id: did.getDid(),
@ -126,7 +126,7 @@ export class OceanAssets extends Instantiable {
{
type: 'metadata',
serviceEndpoint,
metadata: {
attributes: {
// Default values
curation: {
rating: 0,
@ -158,10 +158,10 @@ export class OceanAssets extends Instantiable {
list.findIndex(({ type: t }) => t === type) === i
)
.reverse()
// Adding ID
// Adding index
.map(_ => ({
..._,
serviceDefinitionId: String(serviceDefinitionIdCount++)
index: indexCount++
})) as Service[]
})
@ -206,7 +206,7 @@ export class OceanAssets extends Instantiable {
public async consume(
agreementId: string,
did: string,
serviceDefinitionId: string,
serviceIndex: number,
consumerAccount: Account,
resultPath: string,
index?: number,
@ -216,7 +216,7 @@ export class OceanAssets extends Instantiable {
public async consume(
agreementId: string,
did: string,
serviceDefinitionId: string,
serviceIndex: number,
consumerAccount: Account,
resultPath?: undefined | null,
index?: number,
@ -226,18 +226,18 @@ export class OceanAssets extends Instantiable {
public async consume(
agreementId: string,
did: string,
serviceDefinitionId: string,
serviceIndex: number,
consumerAccount: Account,
resultPath?: string,
index: number = -1,
useSecretStore?: boolean
): Promise<string | true> {
const ddo = await this.resolve(did)
const { metadata } = ddo.findServiceByType('metadata')
const { attributes } = ddo.findServiceByType('metadata')
const accessService = ddo.findServiceById(serviceDefinitionId)
const accessService = ddo.findServiceById(serviceIndex)
const { files } = metadata.main
const { files } = attributes.main
const { serviceEndpoint } = accessService
@ -250,7 +250,7 @@ export class OceanAssets extends Instantiable {
this.logger.log('Consuming files')
resultPath = resultPath
? `${resultPath}/datafile.${ddo.shortId()}.${serviceDefinitionId}/`
? `${resultPath}/datafile.${ddo.shortId()}.${serviceIndex}/`
: undefined
if (!useSecretStore) {
@ -265,7 +265,7 @@ export class OceanAssets extends Instantiable {
} else {
const files = await this.ocean.secretStore.decrypt(
did,
ddo.findServiceByType('metadata').metadata.main.encryptedFiles,
ddo.findServiceByType('metadata').attributes.main.encryptedFiles,
consumerAccount,
ddo.findServiceByType('authorization').serviceEndpoint
)
@ -288,13 +288,13 @@ export class OceanAssets extends Instantiable {
* Start the purchase/order of an asset's service. Starts by signing the service agreement
* then sends the request to the publisher via the service endpoint (Brizo http service).
* @param {string} did Decentralized ID.
* @param {string} serviceDefinitionId Service definition ID.
* @param {number} index Service index.
* @param {Account} consumer Consumer account.
* @return {Promise<string>} Returns Agreement ID
*/
public order(
did: string,
serviceDefinitionId: string,
index: number,
consumer: Account
): SubscribablePromise<OrderProgressStep, string> {
return new SubscribablePromise(async observer => {
@ -316,7 +316,7 @@ export class OceanAssets extends Instantiable {
this.logger.log('Agreement initialized')
observer.next(OrderProgressStep.AgreementInitialized)
const { metadata } = ddo.findServiceByType('metadata')
const { attributes } = ddo.findServiceByType('metadata')
this.logger.log('Locking payment')
@ -327,7 +327,7 @@ export class OceanAssets extends Instantiable {
observer.next(OrderProgressStep.LockingPayment)
const paid = await oceanAgreements.conditions.lockReward(
agreementId,
metadata.main.price,
attributes.main.price,
consumer
)
observer.next(OrderProgressStep.LockedPayment)
@ -352,7 +352,7 @@ export class OceanAssets extends Instantiable {
await oceanAgreements.create(
did,
agreementId,
serviceDefinitionId,
index,
undefined,
consumer,
consumer

View File

@ -13,12 +13,12 @@ export class ServiceAgreement extends Instantiable {
public async signServiceAgreement(
ddo: DDO,
serviceDefinitionId: string,
index: number,
serviceAgreementId: string,
agreementConditionsIds: string[],
consumer: Account
): Promise<string> {
const service = ddo.findServiceById<'access'>(serviceDefinitionId)
const service = ddo.findServiceById<'access'>(index)
const timelockValues: number[] = this.getTimeValuesFromService(
service,
'timelock'

View File

@ -13,7 +13,7 @@ function fillParameterWithDDO(
case 'amount':
case 'price':
return String(
ddo.findServiceByType('metadata').metadata.main.price
ddo.findServiceByType('metadata').attributes.main.price
)
case 'assetId':
case 'documentId':

View File

@ -88,9 +88,10 @@ describe('DDO', () => {
},
{
type: 'metadata',
index: 0,
serviceEndpoint:
'http://myaquarius.org/api/v1/provider/assets/metadata/{did}',
metadata: {
attributes: {
main: {
name: 'UK Weather information 2011',
type: 'dataset',
@ -104,16 +105,19 @@ describe('DDO', () => {
index: 0,
checksum: 'efb2c764274b745f5fc37f97c6b0e761',
contentLength: 4535431,
contentType: 'application/json',
resourceId:
'access-log2018-02-13-15-17-29-18386C502CAEA932'
},
{
index: 1,
checksum: '085340abffh21495345af97c6b0e761',
contentLength: 12324
contentLength: 12324,
contentType: 'application/json'
},
{
index: 2
index: 2,
contentType: ''
}
],
checksum: ''

View File

@ -4,7 +4,7 @@ export default class BrizoMock extends Brizo {
public async initializeServiceAgreement(
did: string,
serviceAgreementId: string,
serviceDefinitionId: string,
index: number,
signature: string,
consumerPublicKey: string
): Promise<any> {

View File

@ -40,7 +40,7 @@
"service": [
{
"type": "access",
"serviceDefinitionId": "0",
"index": 0,
"serviceEndpoint": "http://mybrizo.org/api/v1/brizo/services/consume?pubKey=${pubKey}&serviceId={serviceId}&url={url}",
"purchaseEndpoint": "http://mybrizo.org/api/v1/brizo/services/access/purchase?",
"templateId": "044852b2a670ade5407e78fb2863c51000000000000000000000000000000000",
@ -145,16 +145,16 @@
},
{
"type": "compute",
"serviceDefinitionId": "1",
"index": 1,
"serviceEndpoint": "http://mybrizo.org/api/v1/brizo/services/compute?pubKey=${pubKey}&serviceId={serviceId}&algo={algo}&container={container}",
"templateId": "044852b2a670ade5407e78fb2863c51000000000000000000000000000000002"
},
{
"type": "metadata",
"serviceDefinitionId": "2",
"index": 2,
"serviceEndpoint": "http://myaquarius.org/api/v1/provider/assets/metadata/{did}",
"metadata": {
"base": {
"attributes": {
"main": {
"name": "UK Weather information 2011",
"type": "dataset",
"dateCreated": "2012-10-10T17:00:000Z",