private async retrieveJSONOrError(response: Response) { if (!response.ok) { return Promise.reject(response.statusText) } else { return await response.json() } }
function parseJSON(resp: Response): any { const contentType = resp.headers.get('Content-Type'); if (contentType && contentType.indexOf('application/json') !== -1) { return resp.json(); } else { return resp; } }
async readAuthTimestamp(bucketAddress: string): Promise<number> { const authTimestampDir = this.getAuthTimestampFileDir(bucketAddress) let fetchResponse: Response try { const authNumberFileUrl = `${this.readUrlPrefix}${authTimestampDir}/${AUTH_TIMESTAMP_FILE_NAME}` fetchResponse = await fetch(authNumberFileUrl, { redirect: 'manual', headers: { 'Cache-Control': 'no-cache' } }) } catch (err) { // Catch any errors that may occur from network issues during `fetch` async operation. const errMsg = (err instanceof Error) ? err.message : err throw new errors.ValidationError(`Error trying to fetch bucket authentication revocation timestamp: ${errMsg}`) } if (fetchResponse.ok) { try { const authNumberText = await fetchResponse.text() const authNumber = parseInt(authNumberText) if (Number.isFinite(authNumber)) { return authNumber } else { throw new errors.ValidationError(`Bucket contained an invalid authentication revocation timestamp: ${authNumberText}`) } } catch (err) { // Catch any errors that may occur from network issues during `.text()` async operation. const errMsg = (err instanceof Error) ? err.message : err throw new errors.ValidationError(`Error trying to read fetch stream of bucket authentication revocation timestamp: ${errMsg}`) } } else if (fetchResponse.status === 404) { // 404 incidates no revocation file has been created. return 0 } else { throw new errors.ValidationError(`Error trying to fetch bucket authentication revocation timestamp: server returned ${fetchResponse.status} - ${fetchResponse.statusText}`) } }
private async handleResponse( response: Response, options: any, operationName: OperationName ): Promise<OperationResponse> { if (options.write) { if (response.status >= 400) { return {[operationName]: {success: false}, peek: false} } return {[operationName]: {success: true}, peek: false} } else { const {data} = await response.json() return {peek: data, [operationName]: {success: true}} } }
function checkStatus(resp: Response): any { if (resp.status >= 200 && resp.status < 300) { return resp; } else { const contentType = resp.headers.get('Content-Type'); if (contentType && contentType.indexOf('application/json') !== -1) { return resp.json().then((data) => { if (data.message) { throw new KevoreeRegistryClientError(resp, ` - ${data.message}`); } else if (data.error_description) { throw new KevoreeRegistryClientError(resp, ` - ${data.error_description}`); } else { throw new KevoreeRegistryClientError(resp); } }); } else { throw new KevoreeRegistryClientError(resp, ` - ${resp.url}`); } } }