From ba9cd6a6dab02a52fe97ec072b2e45cf502808e6 Mon Sep 17 00:00:00 2001 From: Bogdan Fazakas Date: Fri, 10 Dec 2021 09:47:03 +0200 Subject: [PATCH] added compute delete method --- src/provider/Provider.ts | 67 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/src/provider/Provider.ts b/src/provider/Provider.ts index e183a7e7..0f9d537d 100644 --- a/src/provider/Provider.ts +++ b/src/provider/Provider.ts @@ -500,13 +500,13 @@ export class Provider { signatureMessage += nonce const signature = await this.createHashSignature(web3, accountId, signatureMessage) - if (!computeResultUrl) return null let consumeUrl = computeResultUrl consumeUrl += `?consumerAddress=${accountId}` consumeUrl += `&jobId=${jobId}` consumeUrl += `&index=${String(index)}` consumeUrl += (signature && `&signature=${signature}`) || '' + if (!computeResultUrl) return null try { !destination ? await fetchMethod.downloadFileBrowser(consumeUrl) @@ -519,6 +519,71 @@ export class Provider { return destination } + /** Instruct the provider to stop & delete all resources for a compute job + */ + public async computeDelete( + did: string, + consumerAddress: string, + jobId: string, + providerUri: string, + web3: Web3, + fetchMethod: any + ): Promise { + const providerEndpoints = await this.getEndpoints(providerUri, fetchMethod) + const serviceEndpoints = await this.getServiceEndpoints( + providerUri, + providerEndpoints + ) + const computeDeleteUrl = this.getEndpointURL(serviceEndpoints, 'computeDelete') + ? this.getEndpointURL(serviceEndpoints, 'computeDelete').urlPath + : null + + const nonce = await this.getNonce( + providerUri, + consumerAddress, + fetchMethod, + providerEndpoints, + serviceEndpoints + ) + + let signatureMessage = consumerAddress + signatureMessage += jobId || '' + signatureMessage += (did && `${noZeroX(did)}`) || '' + signatureMessage += nonce + const signature = await this.createHashSignature( + web3, + consumerAddress, + signatureMessage + ) + + const payload = Object() + payload.documentId = noZeroX(did) + payload.consumerAddress = consumerAddress + payload.jobId = jobId + if (signature) payload.signature = signature + + if (!computeDeleteUrl) return null + try { + const response = await fetchMethod(computeDeleteUrl, JSON.stringify(payload)) + if (response?.ok) { + const params = await response.json() + return params + } + LoggerInstance.error( + 'Delete compute job failed:', + response.status, + response.statusText + ) + LoggerInstance.error('Payload was:', payload) + return null + } catch (e) { + LoggerInstance.error('Delete compute job failed:') + LoggerInstance.error(e) + LoggerInstance.error('Payload was:', payload) + return null + } + } + /** Check for a valid provider at URL * @param {String} url provider uri address * @param {String} fetchMethod fetch client instance