mirror of
https://github.com/oceanprotocol/ocean.js.git
synced 2024-11-26 20:39:05 +01:00
added AssetResolverHelper
This commit is contained in:
parent
c9c983aaed
commit
c88680f100
2
package-lock.json
generated
2
package-lock.json
generated
@ -20,7 +20,7 @@
|
|||||||
"node-abort-controller": "^2.0.0",
|
"node-abort-controller": "^2.0.0",
|
||||||
"save-file": "^2.3.1",
|
"save-file": "^2.3.1",
|
||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
"web3": "^1.3.6",
|
"web3": "^1.3.5",
|
||||||
"web3-eth-contract": "^1.3.6"
|
"web3-eth-contract": "^1.3.6"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -5,7 +5,7 @@ import { Service, ServiceAccess } from '../ddo/interfaces/Service'
|
|||||||
import { EditableMetadata } from '../ddo/interfaces/EditableMetadata'
|
import { EditableMetadata } from '../ddo/interfaces/EditableMetadata'
|
||||||
import Account from './Account'
|
import Account from './Account'
|
||||||
import DID from './DID'
|
import DID from './DID'
|
||||||
import { SubscribablePromise, didNoZeroX, didPrefixed } from '../utils'
|
import { SubscribablePromise, didNoZeroX, didPrefixed, assetResolve } from '../utils'
|
||||||
import { Instantiable, InstantiableConfig } from '../Instantiable.abstract'
|
import { Instantiable, InstantiableConfig } from '../Instantiable.abstract'
|
||||||
import { WebServiceConnector } from './utils/WebServiceConnector'
|
import { WebServiceConnector } from './utils/WebServiceConnector'
|
||||||
import BigNumber from 'bignumber.js'
|
import BigNumber from 'bignumber.js'
|
||||||
@ -46,10 +46,6 @@ export interface Order {
|
|||||||
serviceType?: string
|
serviceType?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
function isDdo(arg: any): arg is DDO {
|
|
||||||
return arg.id !== undefined
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assets submodule of Ocean Protocol.
|
* Assets submodule of Ocean Protocol.
|
||||||
*/
|
*/
|
||||||
@ -414,14 +410,14 @@ export class Assets extends Instantiable {
|
|||||||
* @return {Promise<string>} Returns eth address
|
* @return {Promise<string>} Returns eth address
|
||||||
*/
|
*/
|
||||||
public async creator(asset: DDO | string): Promise<string> {
|
public async creator(asset: DDO | string): Promise<string> {
|
||||||
const ddo = isDdo(asset) ? asset : await this.ocean.assets.resolve(asset)
|
const { did, ddo } = await assetResolve(asset)
|
||||||
const checksum = ddo.getChecksum()
|
const checksum = ddo.getChecksum()
|
||||||
const { creator, signatureValue } = ddo.proof
|
const { creator, signatureValue } = ddo.proof
|
||||||
const signer = await this.ocean.utils.signature.verifyText(checksum, signatureValue)
|
const signer = await this.ocean.utils.signature.verifyText(checksum, signatureValue)
|
||||||
|
|
||||||
if (signer.toLowerCase() !== creator.toLowerCase()) {
|
if (signer.toLowerCase() !== creator.toLowerCase()) {
|
||||||
this.logger.warn(
|
this.logger.warn(
|
||||||
`Owner of ${ddo.id} doesn't match. Expected ${creator} instead of ${signer}.`
|
`Owner of ${did} doesn't match. Expected ${creator} instead of ${signer}.`
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -461,7 +457,7 @@ export class Assets extends Instantiable {
|
|||||||
asset: DDO | string,
|
asset: DDO | string,
|
||||||
serviceType: string
|
serviceType: string
|
||||||
): Promise<Service> {
|
): Promise<Service> {
|
||||||
const ddo = isDdo(asset) ? asset : await this.ocean.assets.resolve(asset)
|
const { ddo } = await assetResolve(asset)
|
||||||
let service: Service
|
let service: Service
|
||||||
const services: Service[] = ddo.service
|
const services: Service[] = ddo.service
|
||||||
|
|
||||||
@ -477,7 +473,7 @@ export class Assets extends Instantiable {
|
|||||||
asset: DDO | string,
|
asset: DDO | string,
|
||||||
serviceIndex: number
|
serviceIndex: number
|
||||||
): Promise<Service> {
|
): Promise<Service> {
|
||||||
const ddo = isDdo(asset) ? asset : await this.ocean.assets.resolve(asset)
|
const { ddo } = await assetResolve(asset)
|
||||||
let service: Service
|
let service: Service
|
||||||
const services: Service[] = ddo.service
|
const services: Service[] = ddo.service
|
||||||
|
|
||||||
@ -570,18 +566,11 @@ export class Assets extends Instantiable {
|
|||||||
searchPreviousOrders = true
|
searchPreviousOrders = true
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let service: Service
|
let service: Service
|
||||||
<<<<<<< HEAD
|
const { ddo } = await assetResolve(asset)
|
||||||
const ddo = isDdo(asset) ? asset : await this.ocean.assets.resolve(asset)
|
|
||||||
const consumable = await this.isConsumable(ddo)
|
|
||||||
if (consumable.status > 0) return null
|
|
||||||
=======
|
|
||||||
|
|
||||||
const ddo = await this.resolve(did)
|
|
||||||
const consumable = await this.isConsumable(ddo, consumerAddress)
|
const consumable = await this.isConsumable(ddo, consumerAddress)
|
||||||
if (consumable.status > 0) {
|
if (consumable.status > 0) {
|
||||||
throw new Error(`Order asset failed, ` + consumable.message)
|
throw new Error(`Order asset failed, ` + consumable.message)
|
||||||
}
|
}
|
||||||
>>>>>>> main
|
|
||||||
|
|
||||||
if (!consumerAddress) consumerAddress = payerAddress
|
if (!consumerAddress) consumerAddress = payerAddress
|
||||||
if (serviceIndex === -1) {
|
if (serviceIndex === -1) {
|
||||||
@ -654,7 +643,7 @@ export class Assets extends Instantiable {
|
|||||||
consumerAccount: Account,
|
consumerAccount: Account,
|
||||||
destination: string
|
destination: string
|
||||||
): Promise<string | true> {
|
): Promise<string | true> {
|
||||||
const ddo = isDdo(asset) ? asset : await this.ocean.assets.resolve(asset)
|
const { did, ddo } = await assetResolve(asset)
|
||||||
const { attributes } = ddo.findServiceByType('metadata')
|
const { attributes } = ddo.findServiceByType('metadata')
|
||||||
const service = ddo.findServiceByType('access')
|
const service = ddo.findServiceByType('access')
|
||||||
const { files } = attributes.main
|
const { files } = attributes.main
|
||||||
@ -674,7 +663,7 @@ export class Assets extends Instantiable {
|
|||||||
const provider = await Provider.getInstance(this.instanceConfig)
|
const provider = await Provider.getInstance(this.instanceConfig)
|
||||||
await provider.setBaseUrl(serviceEndpoint)
|
await provider.setBaseUrl(serviceEndpoint)
|
||||||
await provider.download(
|
await provider.download(
|
||||||
ddo.id,
|
did,
|
||||||
txId,
|
txId,
|
||||||
tokenAddress,
|
tokenAddress,
|
||||||
service.type,
|
service.type,
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { DDO } from '../ddo/DDO'
|
import { DDO } from '../ddo/DDO'
|
||||||
import { MetadataAlgorithm } from '../ddo/interfaces/MetadataAlgorithm'
|
|
||||||
import {
|
import {
|
||||||
Service,
|
Service,
|
||||||
ServiceComputePrivacy,
|
ServiceComputePrivacy,
|
||||||
@ -7,7 +6,7 @@ import {
|
|||||||
publisherTrustedAlgorithm
|
publisherTrustedAlgorithm
|
||||||
} from '../ddo/interfaces/Service'
|
} from '../ddo/interfaces/Service'
|
||||||
import Account from './Account'
|
import Account from './Account'
|
||||||
import { SubscribablePromise } from '../utils'
|
import { SubscribablePromise, assetResolve, AssetResolver } from '../utils'
|
||||||
import { Instantiable, InstantiableConfig } from '../Instantiable.abstract'
|
import { Instantiable, InstantiableConfig } from '../Instantiable.abstract'
|
||||||
import {
|
import {
|
||||||
ComputeOutput,
|
ComputeOutput,
|
||||||
@ -59,10 +58,6 @@ export const ComputeJobStatus = Object.freeze({
|
|||||||
Deleted: 90
|
Deleted: 90
|
||||||
})
|
})
|
||||||
|
|
||||||
function isDdo(arg: any): arg is DDO {
|
|
||||||
return arg.id !== undefined
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compute submodule of Ocean Protocol.
|
* Compute submodule of Ocean Protocol.
|
||||||
*/
|
*/
|
||||||
@ -123,14 +118,14 @@ export class Compute extends Instantiable {
|
|||||||
additionalInputs?: ComputeInput[]
|
additionalInputs?: ComputeInput[]
|
||||||
): Promise<ComputeJob> {
|
): Promise<ComputeJob> {
|
||||||
output = this.checkOutput(consumerAccount, output)
|
output = this.checkOutput(consumerAccount, output)
|
||||||
const ddo = isDdo(asset) ? asset : await this.ocean.assets.resolve(asset)
|
const { did, ddo } = await assetResolve(asset)
|
||||||
const service = ddo.findServiceByType('compute')
|
const service = ddo.findServiceByType('compute')
|
||||||
const { serviceEndpoint } = service
|
const { serviceEndpoint } = service
|
||||||
if (ddo.id && txId) {
|
if (did && txId) {
|
||||||
const provider = await Provider.getInstance(this.instanceConfig)
|
const provider = await Provider.getInstance(this.instanceConfig)
|
||||||
await provider.setBaseUrl(serviceEndpoint)
|
await provider.setBaseUrl(serviceEndpoint)
|
||||||
const computeJobsList = await provider.computeStart(
|
const computeJobsList = await provider.computeStart(
|
||||||
ddo.id,
|
did,
|
||||||
consumerAccount,
|
consumerAccount,
|
||||||
algorithm,
|
algorithm,
|
||||||
output,
|
output,
|
||||||
@ -158,12 +153,12 @@ export class Compute extends Instantiable {
|
|||||||
asset: DDO | string,
|
asset: DDO | string,
|
||||||
jobId: string
|
jobId: string
|
||||||
): Promise<ComputeJob> {
|
): Promise<ComputeJob> {
|
||||||
const ddo = isDdo(asset) ? asset : await this.ocean.assets.resolve(asset)
|
const { did, ddo } = await assetResolve(asset)
|
||||||
const service = ddo.findServiceByType('compute')
|
const service = ddo.findServiceByType('compute')
|
||||||
const { serviceEndpoint } = service
|
const { serviceEndpoint } = service
|
||||||
const provider = await Provider.getInstance(this.instanceConfig)
|
const provider = await Provider.getInstance(this.instanceConfig)
|
||||||
await provider.setBaseUrl(serviceEndpoint)
|
await provider.setBaseUrl(serviceEndpoint)
|
||||||
const computeJobsList = await provider.computeStop(ddo.id, consumerAccount, jobId)
|
const computeJobsList = await provider.computeStop(did, consumerAccount, jobId)
|
||||||
if (computeJobsList) return computeJobsList[0] as ComputeJob
|
if (computeJobsList) return computeJobsList[0] as ComputeJob
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@ -181,12 +176,12 @@ export class Compute extends Instantiable {
|
|||||||
asset: DDO | string,
|
asset: DDO | string,
|
||||||
jobId: string
|
jobId: string
|
||||||
): Promise<ComputeJob> {
|
): Promise<ComputeJob> {
|
||||||
const ddo = isDdo(asset) ? asset : await this.ocean.assets.resolve(asset)
|
const { did, ddo } = await assetResolve(asset)
|
||||||
const service = ddo.findServiceByType('compute')
|
const service = ddo.findServiceByType('compute')
|
||||||
const { serviceEndpoint } = service
|
const { serviceEndpoint } = service
|
||||||
const provider = await Provider.getInstance(this.instanceConfig)
|
const provider = await Provider.getInstance(this.instanceConfig)
|
||||||
await provider.setBaseUrl(serviceEndpoint)
|
await provider.setBaseUrl(serviceEndpoint)
|
||||||
const computeJobsList = await provider.computeDelete(ddo.id, consumerAccount, jobId)
|
const computeJobsList = await provider.computeDelete(did, consumerAccount, jobId)
|
||||||
if (computeJobsList) return computeJobsList[0] as ComputeJob
|
if (computeJobsList) return computeJobsList[0] as ComputeJob
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@ -255,13 +250,13 @@ export class Compute extends Instantiable {
|
|||||||
asset: DDO | string,
|
asset: DDO | string,
|
||||||
jobId: string
|
jobId: string
|
||||||
): Promise<ComputeJob> {
|
): Promise<ComputeJob> {
|
||||||
const ddo = isDdo(asset) ? asset : await this.ocean.assets.resolve(asset)
|
const { did, ddo } = await assetResolve(asset)
|
||||||
const service = ddo.findServiceByType('compute')
|
const service = ddo.findServiceByType('compute')
|
||||||
const { serviceEndpoint } = service
|
const { serviceEndpoint } = service
|
||||||
const provider = await Provider.getInstance(this.instanceConfig)
|
const provider = await Provider.getInstance(this.instanceConfig)
|
||||||
await provider.setBaseUrl(serviceEndpoint)
|
await provider.setBaseUrl(serviceEndpoint)
|
||||||
const computeJobsList = await provider.computeStatus(
|
const computeJobsList = await provider.computeStatus(
|
||||||
ddo.id,
|
did,
|
||||||
consumerAccount,
|
consumerAccount,
|
||||||
jobId,
|
jobId,
|
||||||
undefined,
|
undefined,
|
||||||
@ -418,8 +413,8 @@ export class Compute extends Instantiable {
|
|||||||
algorithm: ComputeAlgorithm,
|
algorithm: ComputeAlgorithm,
|
||||||
algorithmDDO?: DDO
|
algorithmDDO?: DDO
|
||||||
): Promise<boolean> {
|
): Promise<boolean> {
|
||||||
const datasetDdo = isDdo(dataset) ? dataset : await this.ocean.assets.resolve(dataset)
|
const datasetResolved: AssetResolver = await assetResolve(dataset)
|
||||||
const service: Service = datasetDdo.findServiceById(serviceIndex)
|
const service: Service = datasetResolved.ddo.findServiceById(serviceIndex)
|
||||||
if (!service) return false
|
if (!service) return false
|
||||||
if (service.type === 'compute') {
|
if (service.type === 'compute') {
|
||||||
if (algorithm.meta) {
|
if (algorithm.meta) {
|
||||||
@ -472,7 +467,7 @@ export class Compute extends Instantiable {
|
|||||||
) {
|
) {
|
||||||
this.logger.error(
|
this.logger.error(
|
||||||
'ERROR: Algorithm container section was altered since it was added as trusted by ' +
|
'ERROR: Algorithm container section was altered since it was added as trusted by ' +
|
||||||
datasetDdo.id
|
datasetResolved.did
|
||||||
)
|
)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -482,7 +477,7 @@ export class Compute extends Instantiable {
|
|||||||
) {
|
) {
|
||||||
this.logger.error(
|
this.logger.error(
|
||||||
'ERROR: Algorithm files section was altered since it was added as trusted by ' +
|
'ERROR: Algorithm files section was altered since it was added as trusted by ' +
|
||||||
datasetDdo.id
|
datasetResolved.ddo
|
||||||
)
|
)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -492,7 +487,10 @@ export class Compute extends Instantiable {
|
|||||||
}
|
}
|
||||||
// algorithmDid was not found
|
// algorithmDid was not found
|
||||||
this.logger.error(
|
this.logger.error(
|
||||||
'ERROR: Algorithm ' + algorithm.did + ' is not allowed by ' + datasetDdo.id
|
'ERROR: Algorithm ' +
|
||||||
|
algorithm.did +
|
||||||
|
' is not allowed by ' +
|
||||||
|
datasetResolved.did
|
||||||
)
|
)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -526,22 +524,20 @@ export class Compute extends Instantiable {
|
|||||||
searchPreviousOrders = true
|
searchPreviousOrders = true
|
||||||
): SubscribablePromise<OrderProgressStep, string> {
|
): SubscribablePromise<OrderProgressStep, string> {
|
||||||
return new SubscribablePromise(async (observer) => {
|
return new SubscribablePromise(async (observer) => {
|
||||||
const datasetDdo = isDdo(dataset)
|
const { ddo } = await assetResolve(dataset)
|
||||||
? dataset
|
|
||||||
: await this.ocean.assets.resolve(dataset)
|
|
||||||
// first check if we can order this
|
// first check if we can order this
|
||||||
const allowed = await this.isOrderable(datasetDdo, serviceIndex, algorithm)
|
const allowed = await this.isOrderable(ddo, serviceIndex, algorithm)
|
||||||
if (!allowed)
|
if (!allowed)
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Dataset order failed, dataset is not orderable with the specified algorithm`
|
`Dataset order failed, dataset is not orderable with the specified algorithm`
|
||||||
)
|
)
|
||||||
// const service: Service = ddo.findServiceByType('compute')
|
// const service: Service = ddo.findServiceByType('compute')
|
||||||
const service: Service = datasetDdo.findServiceById(serviceIndex)
|
const service: Service = ddo.findServiceById(serviceIndex)
|
||||||
if (!service)
|
if (!service)
|
||||||
throw new Error(`Dataset order failed, Could not find service for the DDO`)
|
throw new Error(`Dataset order failed, Could not find service for the DDO`)
|
||||||
try {
|
try {
|
||||||
const order = await this.ocean.assets.order(
|
const order = await this.ocean.assets.order(
|
||||||
datasetDdo,
|
ddo,
|
||||||
service.type,
|
service.type,
|
||||||
consumerAccount,
|
consumerAccount,
|
||||||
-1,
|
-1,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import Account from '../ocean/Account'
|
import Account from '../ocean/Account'
|
||||||
import { noZeroX } from '../utils'
|
import { noZeroX, assetResolve, AssetResolver } from '../utils'
|
||||||
import { Instantiable, InstantiableConfig } from '../Instantiable.abstract'
|
import { Instantiable, InstantiableConfig } from '../Instantiable.abstract'
|
||||||
import { File } from '../ddo/interfaces/File'
|
import { File } from '../ddo/interfaces/File'
|
||||||
import {
|
import {
|
||||||
@ -8,8 +8,6 @@ import {
|
|||||||
ComputeOutput,
|
ComputeOutput,
|
||||||
ComputeAlgorithm
|
ComputeAlgorithm
|
||||||
} from '../ocean/interfaces/Compute'
|
} from '../ocean/interfaces/Compute'
|
||||||
import { MetadataAlgorithm } from '../ddo/interfaces/MetadataAlgorithm'
|
|
||||||
import { Versions } from '../ocean/Versions'
|
|
||||||
import { DDO } from '../ddo/DDO'
|
import { DDO } from '../ddo/DDO'
|
||||||
import DID from '../ocean/DID'
|
import DID from '../ocean/DID'
|
||||||
import { Service } from '../ddo/interfaces'
|
import { Service } from '../ddo/interfaces'
|
||||||
@ -19,9 +17,7 @@ export interface ServiceEndpoint {
|
|||||||
method: string
|
method: string
|
||||||
urlPath: string
|
urlPath: string
|
||||||
}
|
}
|
||||||
function isDdo(arg: any): arg is DDO {
|
|
||||||
return arg.id !== undefined
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Provides an interface for provider service.
|
* Provides an interface for provider service.
|
||||||
* Provider service is the technical component executed
|
* Provider service is the technical component executed
|
||||||
@ -194,12 +190,12 @@ export class Provider extends Instantiable {
|
|||||||
serviceType: string,
|
serviceType: string,
|
||||||
consumerAddress: string
|
consumerAddress: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const ddo = isDdo(asset) ? asset : await this.ocean.assets.resolve(asset)
|
const { did, ddo } = await assetResolve(asset)
|
||||||
let initializeUrl = this.getInitializeEndpoint()
|
let initializeUrl = this.getInitializeEndpoint()
|
||||||
? this.getInitializeEndpoint().urlPath
|
? this.getInitializeEndpoint().urlPath
|
||||||
: null
|
: null
|
||||||
if (!initializeUrl) return null
|
if (!initializeUrl) return null
|
||||||
initializeUrl += `?documentId=${ddo.id}`
|
initializeUrl += `?documentId=${did}`
|
||||||
initializeUrl += `&serviceId=${serviceIndex}`
|
initializeUrl += `&serviceId=${serviceIndex}`
|
||||||
initializeUrl += `&serviceType=${serviceType}`
|
initializeUrl += `&serviceType=${serviceType}`
|
||||||
initializeUrl += `&dataToken=${ddo.dataToken}`
|
initializeUrl += `&dataToken=${ddo.dataToken}`
|
||||||
|
@ -5,3 +5,4 @@ export * from './GeneratorHelpers'
|
|||||||
export * from './SubscribablePromise'
|
export * from './SubscribablePromise'
|
||||||
export * from './SubscribableObserver'
|
export * from './SubscribableObserver'
|
||||||
export * from './GasUtils'
|
export * from './GasUtils'
|
||||||
|
export * from './AssetResolverHelper'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user