From 3c0cc8191043a98d325d805a1673eb0f35e974ab Mon Sep 17 00:00:00 2001 From: Bogdan Fazakas Date: Fri, 18 Nov 2022 12:15:02 +0200 Subject: [PATCH] more fixes in provider class --- package.json | 4 +- src/services/Provider.ts | 308 +++++++++++++++++++------------------ src/utils/ErrorHandling.ts | 5 +- src/utils/index.ts | 1 + 4 files changed, 163 insertions(+), 155 deletions(-) diff --git a/package.json b/package.json index 0cafca25..242e73db 100644 --- a/package.json +++ b/package.json @@ -54,9 +54,9 @@ "cross-fetch": "^3.1.5", "crypto-js": "^4.1.1", "decimal.js": "^10.4.1", + "web3": "^1.8.0", "web3-core": "^1.8.0", - "web3-eth-contract": "^1.8.0", - "web3": "^1.8.0" + "web3-eth-contract": "^1.8.0" }, "devDependencies": { "@truffle/hdwallet-provider": "^2.0.14", diff --git a/src/services/Provider.ts b/src/services/Provider.ts index 85c0c876..2f28a91f 100644 --- a/src/services/Provider.ts +++ b/src/services/Provider.ts @@ -174,32 +174,34 @@ export class Provider { ? this.getEndpointURL(serviceEndpoints, 'fileinfo').urlPath : null if (!path) return null + let response try { - const response = await fetch(path, { + response = await fetch(path, { method: 'POST', body: JSON.stringify(args), headers: { 'Content-Type': 'application/json' }, signal }) - if (response?.ok) { - const results: FileInfo[] = await response.json() - for (const result of results) { - files.push(result) - } - return files - } - const resolvedResponse = await response.json() - LoggerInstance.error( - 'File info call failed: ', - response.status, - response.statusText, - resolvedResponse - ) - throw new Error(`File info call failed: ${resolvedResponse}`) } catch (e) { + LoggerInstance.error('File info call failed: ') LoggerInstance.error(e) - throw new Error('HTTP request failed calling Provider') + throw new Error(e) } + if (response?.ok) { + const results: FileInfo[] = await response.json() + for (const result of results) { + files.push(result) + } + return files + } + const resolvedResponse = await response.json() + LoggerInstance.error( + 'File info call failed: ', + response.status, + response.statusText, + resolvedResponse + ) + throw new Error(resolvedResponse) } /** Get URL details (if possible) @@ -224,32 +226,34 @@ export class Provider { ? this.getEndpointURL(serviceEndpoints, 'fileinfo').urlPath : null if (!path) return null + let response try { - const response = await fetch(path, { + response = await fetch(path, { method: 'POST', body: JSON.stringify(args), headers: { 'Content-Type': 'application/json' }, signal }) - if (response?.ok) { - const results: FileInfo[] = await response.json() - for (const result of results) { - files.push(result) - } - return files - } - const resolvedResponse = await response.json() - LoggerInstance.error( - 'File info call failed: ', - response.status, - response.statusText, - resolvedResponse - ) - throw new Error(`File info call failed: ${resolvedResponse}`) } catch (e) { + LoggerInstance.error('File info call failed: ') LoggerInstance.error(e) - throw new Error('HTTP request failed calling Provider') + throw new Error(e) } + if (response?.ok) { + const results: FileInfo[] = await response.json() + for (const result of results) { + files.push(result) + } + return files + } + const resolvedResponse = await response.json() + LoggerInstance.error( + 'File info call failed: ', + response.status, + response.statusText, + resolvedResponse + ) + throw new Error(resolvedResponse) } /** Get Compute Environments @@ -266,28 +270,30 @@ export class Provider { ) const path = this.getEndpointURL(serviceEndpoints, 'computeEnvironments')?.urlPath if (!path) return null + let response try { - const response = await fetch(path, { + response = await fetch(path, { method: 'GET', headers: { 'Content-Type': 'application/json' }, signal }) - if (response?.ok) { - const envs: ComputeEnvironment[] = await response.json() - return envs - } - const resolvedResponse = await response.json() - LoggerInstance.error( - 'Fetch compute env failed: ', - response.status, - response.statusText, - resolvedResponse - ) - throw new Error(`Fetch compute env failed: ${resolvedResponse}`) } catch (e) { + LoggerInstance.error('Fetch compute env failed: ') LoggerInstance.error(e) - throw new Error('HTTP request failed calling Provider') + throw new Error(e) } + if (response?.ok) { + const envs: ComputeEnvironment[] = await response.json() + return envs + } + const resolvedResponse = await response.json() + LoggerInstance.error( + 'Fetch compute env failed: ', + response.status, + response.statusText, + resolvedResponse + ) + throw new Error(resolvedResponse) } /** Initialize a service request. @@ -329,29 +335,30 @@ export class Provider { initializeUrl += '&userdata=' + encodeURI(JSON.stringify(userCustomParameters)) if (computeEnv) initializeUrl += '&environment=' + encodeURI(computeEnv) if (validUntil) initializeUrl += '&validUntil=' + validUntil + let response try { - const response = await fetch(initializeUrl, { + response = await fetch(initializeUrl, { method: 'GET', headers: { 'Content-Type': 'application/json' }, signal }) - - if (response?.ok) { - const results: ProviderInitialize = await response.json() - return results - } - const resolvedResponse = await response.json() - LoggerInstance.error( - 'Provider initialized failed: ', - response.status, - response.statusText, - resolvedResponse - ) - throw new Error(`Provider initialized failed: ${resolvedResponse}`) } catch (e) { + LoggerInstance.error('Provider initialized failed: ') LoggerInstance.error(e) throw new Error('Asset URL not found or not available.') } + if (response?.ok) { + const results: ProviderInitialize = await response.json() + return results + } + const resolvedResponse = await response.json() + LoggerInstance.error( + 'Provider initialized failed: ', + response.status, + response.statusText, + resolvedResponse + ) + throw new Error(resolvedResponse) } /** Initialize a compute request. @@ -388,30 +395,32 @@ export class Provider { ? this.getEndpointURL(serviceEndpoints, 'initializeCompute').urlPath : null if (!initializeUrl) return null + let response try { - const response = await fetch(initializeUrl, { + response = await fetch(initializeUrl, { method: 'POST', body: JSON.stringify(providerData), headers: { 'Content-Type': 'application/json' }, signal }) - if (response?.ok) { - const params = await response.json() - return params - } - const resolvedResponse = await response.json() - LoggerInstance.error( - 'Compute start failed: ', - response.status, - response.statusText, - resolvedResponse - ) - LoggerInstance.error('Payload was:', providerData) - throw new Error(`Compute initialized failed: ${resolvedResponse}`) } catch (e) { + LoggerInstance.error('Initialize compute failed: ') LoggerInstance.error(e) - throw new Error('ComputeJob cannot be initialized') + throw new Error(e) } + if (response?.ok) { + const params = await response.json() + return params + } + const resolvedResponse = await response.json() + LoggerInstance.error( + 'Initialize compute failed: ', + response.status, + response.statusText, + resolvedResponse + ) + LoggerInstance.error('Payload was:', providerData) + throw new Error(resolvedResponse) } /** Gets fully signed URL for download @@ -508,33 +517,33 @@ export class Provider { if (payload.additionalDatasets) payload.additionalDatasets = additionalDatasets if (output) payload.output = output if (!computeStartUrl) return null + let response try { - const response = await fetch(computeStartUrl, { + response = await fetch(computeStartUrl, { method: 'POST', body: JSON.stringify(payload), headers: { 'Content-Type': 'application/json' }, signal }) - - if (response?.ok) { - const params = await response.json() - return params - } - const resolvedResponse = await response.json() - LoggerInstance.error( - 'Compute start failed: ', - response.status, - response.statusText, - resolvedResponse - ) - LoggerInstance.error('Payload was:', payload) - throw new Error(`Compute start failed: ${resolvedResponse}`) } catch (e) { LoggerInstance.error('Compute start failed:') LoggerInstance.error(e) LoggerInstance.error('Payload was:', payload) - throw new Error('HTTP request failed calling Provider') + throw new Error(e) } + if (response?.ok) { + const params = await response.json() + return params + } + const resolvedResponse = await response.json() + LoggerInstance.error( + 'Compute start failed: ', + response.status, + response.statusText, + resolvedResponse + ) + LoggerInstance.error('Payload was:', payload) + throw new Error(resolvedResponse) } /** Instruct the provider to Stop the execution of a to stop a compute job. @@ -587,40 +596,33 @@ export class Provider { if (jobId) payload.jobId = jobId if (!computeStopUrl) return null + let response try { - const response = await fetch(computeStopUrl, { + response = await fetch(computeStopUrl, { method: 'PUT', body: JSON.stringify(payload), headers: { 'Content-Type': 'application/json' }, signal }) - - if (response?.ok) { - const params = await response.json() - return params - } - LoggerInstance.error('Compute stop failed:', response.status, response.statusText) - LoggerInstance.error('Payload was:', payload) - - if (response?.ok) { - const params = await response.json() - return params - } - const resolvedResponse = await response.json() - LoggerInstance.error( - 'Compute start failed: ', - response.status, - response.statusText, - resolvedResponse - ) - LoggerInstance.error('Payload was:', payload) - throw new Error(`Compute stop failed: ${resolvedResponse}`) } catch (e) { LoggerInstance.error('Compute stop failed:') LoggerInstance.error(e) LoggerInstance.error('Payload was:', payload) - throw new Error('HTTP request failed calling Provider') + throw new Error(e) } + if (response?.ok) { + const params = await response.json() + return params + } + const resolvedResponse = await response.json() + LoggerInstance.error( + 'Compute stop failed: ', + response.status, + response.statusText, + resolvedResponse + ) + LoggerInstance.error('Payload was:', payload) + throw new Error(resolvedResponse) } /** Get compute status for a specific jobId/documentId/owner. @@ -652,29 +654,30 @@ export class Provider { url += (jobId && `&jobId=${jobId}`) || '' if (!computeStatusUrl) return null + let response try { - const response = await fetch(computeStatusUrl + url, { + response = await fetch(computeStatusUrl + url, { method: 'GET', headers: { 'Content-Type': 'application/json' }, signal }) - if (response?.ok) { - const params = await response.json() - return params - } - const resolvedResponse = await response.json() - LoggerInstance.error( - 'Get compute status failed:', - response.status, - response.statusText, - resolvedResponse - ) - throw new Error(`Compute status call failed: ${resolvedResponse}`) } catch (e) { LoggerInstance.error('Get compute status failed') LoggerInstance.error(e) - throw new Error('HTTP request failed calling Provider') + throw new Error(e) } + if (response?.ok) { + const params = await response.json() + return params + } + const resolvedResponse = await response.json() + LoggerInstance.error( + 'Get compute status failed:', + response.status, + response.statusText, + resolvedResponse + ) + throw new Error(resolvedResponse) } /** Get compute result url @@ -771,33 +774,33 @@ export class Provider { if (signature) payload.signature = signature if (!computeDeleteUrl) return null + let response try { - const response = await fetch(computeDeleteUrl, { + response = await fetch(computeDeleteUrl, { method: 'DELETE', body: JSON.stringify(payload), headers: { 'Content-Type': 'application/json' }, signal }) - - if (response?.ok) { - const params = await response.json() - return params - } - const resolvedResponse = await response.json() - LoggerInstance.error( - 'Delete compute job failed:', - response.status, - response.statusText, - resolvedResponse - ) - LoggerInstance.error('Payload was:', payload) - throw new Error(`Delete compute job failed: ${resolvedResponse}`) } catch (e) { LoggerInstance.error('Delete compute job failed:') LoggerInstance.error(e) LoggerInstance.error('Payload was:', payload) - throw new Error('HTTP request failed calling Provider') + throw new Error(e) } + if (response?.ok) { + const params = await response.json() + return params + } + const resolvedResponse = await response.json() + LoggerInstance.error( + 'Delete compute job failed:', + response.status, + response.statusText, + resolvedResponse + ) + LoggerInstance.error('Payload was:', payload) + throw new Error(resolvedResponse) } /** Check for a valid provider at URL @@ -806,21 +809,22 @@ export class Provider { * @return {Promise} string */ public async isValidProvider(url: string, signal?: AbortSignal): Promise { + let response try { - const response = await fetch(url, { + response = await fetch(url, { method: 'GET', headers: { 'Content-Type': 'application/json' }, signal }) - if (response?.ok) { - const params = await response.json() - if (params && params.providerAddress) return true - } - return false } catch (error) { LoggerInstance.error(`Error validating provider: ${error.message}`) return false } + if (response?.ok) { + const params = await response.json() + if (params && params.providerAddress) return true + } + return false } private noZeroX(input: string): string { diff --git a/src/utils/ErrorHandling.ts b/src/utils/ErrorHandling.ts index c8af85c9..b22e4f88 100644 --- a/src/utils/ErrorHandling.ts +++ b/src/utils/ErrorHandling.ts @@ -1,3 +1,6 @@ -export function getErrorMessage(resource: string, message: string): string { +export function getErrorMessage(error: string): string { + const errorOnj = error.split('_') + const resource = errorOnj?.[0] + const message = errorOnj?.at(-1) return `${message} has failed for the following component: ${resource}` } diff --git a/src/utils/index.ts b/src/utils/index.ts index 1af259d3..e884cbc5 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -8,3 +8,4 @@ export * from './Logger' export * from './minAbi' export * from './SignatureUtils' export * from './TokenUtils' +export * from './ErrorHandling'