From 11b58cb8c0c20b1e5bea3fce7bbb483ecc612232 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Sat, 19 Sep 2020 00:14:02 -0700 Subject: [PATCH] more customProvider code --- src/ocean/Assets.ts | 43 +++++++++++++++++++++++----------------- src/ocean/Compute.ts | 6 ++++++ src/provider/Provider.ts | 10 ++++++++-- 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/ocean/Assets.ts b/src/ocean/Assets.ts index c37820ea..03f0c560 100644 --- a/src/ocean/Assets.ts +++ b/src/ocean/Assets.ts @@ -16,6 +16,7 @@ import { Instantiable, InstantiableConfig } from '../Instantiable.abstract' import { WebServiceConnector } from './utils/WebServiceConnector' import { DataTokens } from '../lib' import BigNumber from 'bignumber.js' +import { Provider } from '../provider/Provider' export enum CreateProgressStep { CreatingDataToken, @@ -56,6 +57,7 @@ export class Assets extends Instantiable { * @param {String} cap Maximum cap (Number) - will be converted to wei * @param {String} name Token name * @param {String} symbol Token symbol + * @param {String} customProviderURL * @return {Promise} */ public create( @@ -65,7 +67,8 @@ export class Assets extends Instantiable { dtAddress?: string, cap?: string, name?: string, - symbol?: string + symbol?: string, + customProviderURL?: string ): SubscribablePromise { this.logger.log('Creating asset') return new SubscribablePromise(async (observer) => { @@ -93,7 +96,12 @@ export class Assets extends Instantiable { this.logger.log('Encrypting files') observer.next(CreateProgressStep.EncryptingFiles) - const encryptedFiles = await this.ocean.provider.encrypt( + let provider + if (customProviderURL) { + provider = new Provider(this.instanceConfig) + provider.setBaseUrl(customProviderURL) + } else provider = this.ocean.provider + const encryptedFiles = await provider.encrypt( did.getId(), metadata.main.files, publisher @@ -386,9 +394,7 @@ export class Assets extends Instantiable { return { type: 'access', index: 2, - serviceEndpoint: customProvider - ? customProvider + this.ocean.provider.getConsumeEndpointShort() - : this.ocean.provider.getConsumeEndpoint(), + serviceEndpoint: customProvider || this.ocean.provider.url, attributes: { main: { creator: creator.getId(), @@ -416,14 +422,12 @@ export class Assets extends Instantiable { did: string, serviceType: string, consumerAddress: string, - serviceIndex = -1 + serviceIndex = -1, + serviceEndpoint: string ): Promise { - const res = await this.ocean.provider.initialize( - did, - serviceIndex, - serviceType, - consumerAddress - ) + const provider = new Provider(this.instanceConfig) + provider.setBaseUrl(serviceEndpoint) + const res = await provider.initialize(did, serviceIndex, serviceType, consumerAddress) if (res === null) return null const providerData = JSON.parse(res) return providerData @@ -445,11 +449,12 @@ export class Assets extends Instantiable { serviceIndex = -1, mpAddress?: string ): Promise { + let service if (serviceIndex === -1) { - const service = await this.getServiceByType(did, serviceType) + service = await this.getServiceByType(did, serviceType) serviceIndex = service.index } else { - const service = await this.getServiceByIndex(did, serviceIndex) + service = await this.getServiceByIndex(did, serviceIndex) serviceType = service.type } const { datatokens } = this.ocean @@ -458,10 +463,11 @@ export class Assets extends Instantiable { did, serviceType, consumerAddress, - serviceIndex + serviceIndex, + service.serviceEndpoint ) if (!providerData) return null - const service = await this.getServiceByIndex(did, serviceIndex) + service = await this.getServiceByIndex(did, serviceIndex) const previousOrder = await datatokens.getPreviousValidOrders( providerData.dataToken, providerData.numTokens, @@ -526,8 +532,9 @@ export class Assets extends Instantiable { destination = destination ? `${destination}/datafile.${ddo.shortId()}.${service.index}/` : undefined - - await this.ocean.provider.download( + const provider = new Provider(this.instanceConfig) + provider.setBaseUrl(serviceEndpoint) + await provider.download( did, txId, tokenAddress, diff --git a/src/ocean/Compute.ts b/src/ocean/Compute.ts index 7515a557..5f6eebbc 100644 --- a/src/ocean/Compute.ts +++ b/src/ocean/Compute.ts @@ -6,6 +6,7 @@ import { SubscribablePromise } from '../utils' import { Instantiable, InstantiableConfig } from '../Instantiable.abstract' import { Output } from './interfaces/ComputeOutput' import { ComputeJob } from './interfaces/ComputeJob' +import { Provider } from '../provider/Provider' export enum OrderProgressStep { TransferDataToken @@ -87,7 +88,12 @@ export class Compute extends Instantiable { algorithmDataToken?: string ): Promise { output = this.checkOutput(consumerAccount, output) + const ddo = await this.ocean.assets.resolve(did) + const service = ddo.findServiceByType('access') + const { serviceEndpoint } = service if (did && txId) { + const provider = new Provider(this.instanceConfig) + provider.setBaseUrl(serviceEndpoint) const computeJobsList = await this.ocean.provider.compute( 'post', did, diff --git a/src/provider/Provider.ts b/src/provider/Provider.ts index 8489b9bb..430f3a75 100644 --- a/src/provider/Provider.ts +++ b/src/provider/Provider.ts @@ -18,16 +18,22 @@ const apiPath = '/api/v1/services' */ export class Provider extends Instantiable { public nonce: string - private get url() { - return this.config.providerUri + private baseUrl: string + public get url() { + return this.baseUrl } constructor(config: InstantiableConfig) { super() this.setInstanceConfig(config) + this.baseUrl = this.config.providerUri this.nonce = '0' } + public setBaseUrl(url: string): void { + this.baseUrl = url + } + public async createSignature(account: Account, agreementId: string): Promise { const signature = await this.ocean.utils.signature.signText( noZeroX(agreementId),