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