diff --git a/src/common/ArIO.ts b/src/common/ArIO.ts index f988f673..a7aa9404 100644 --- a/src/common/ArIO.ts +++ b/src/common/ArIO.ts @@ -14,13 +14,12 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ -import { ContractStateProvider, HTTPServiceInterface } from '../types.js'; -import { AxiosHTTPService } from './http.js'; +import { ContractStateProvider, HTTPClient } from '../types.js'; import { DefaultLogger } from './logger.js'; export class ArIO implements ContractStateProvider { private contractStateProvider: ContractStateProvider; - http: HTTPServiceInterface; + http: HTTPClient; logger: DefaultLogger; constructor({ @@ -35,7 +34,6 @@ export class ArIO implements ContractStateProvider { }) { this.contractStateProvider = contractStateProvider; this.logger = logger; - this.http = new AxiosHTTPService({ url: '', logger }); // empty url allows for full url to be passed in get and post requests instead of the endpoint } /** diff --git a/src/common/ContractStateProviders/ArNSRemoteCache.ts b/src/common/ContractStateProviders/ArNSRemoteCache.ts index ac7a7863..ece2b8ca 100644 --- a/src/common/ContractStateProviders/ArNSRemoteCache.ts +++ b/src/common/ContractStateProviders/ArNSRemoteCache.ts @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ -import { ContractStateProvider, HTTPServiceInterface } from '../../types.js'; +import { ContractStateProvider, HTTPClient } from '../../types.js'; import { validateArweaveId } from '../../utils/index.js'; import { BadRequest } from '../error.js'; import { AxiosHTTPService } from '../http.js'; @@ -22,24 +22,22 @@ import { DefaultLogger } from '../logger.js'; export class ArNSRemoteCache implements ContractStateProvider { protected logger: DefaultLogger; - http: HTTPServiceInterface; + http: HTTPClient; constructor({ - url = 'api.arns.app', - protocol = 'https', + url = 'https://api.arns.app', logger = new DefaultLogger({ level: 'debug', logFormat: 'simple', }), version = 'v1', }: { - protocol?: 'http' | 'https' | 'ws'; url?: string; logger?: DefaultLogger; version?: string; }) { this.logger = logger; this.http = new AxiosHTTPService({ - url: `${protocol}://${url}/${version}`, + url: `${url}/${version}`, logger, }); } @@ -54,24 +52,10 @@ export class ArNSRemoteCache implements ContractStateProvider { } this.logger.debug(`Fetching contract state`); - const response = await this.http - .get({ endpoint: `/contract/${contractTxId}` }) - .catch((error) => { - this.logger.debug(`Failed to fetch contract state: ${error}`); - return error; - }); - - if (!response) { - throw new BadRequest( - `Failed to fetch contract state. ${response?.status} ${response?.statusText()}`, - ); - } - const result = await response.json(); - - this.logger.debug( - `Fetched contract state. Size: ${response?.headers?.get('content-length')} bytes.`, - ); + const state = await this.http.get({ + endpoint: `/contract/${contractTxId}`, + }); - return result; + return state; } } diff --git a/src/common/http.ts b/src/common/http.ts index 927ac5f4..fbb56cf5 100644 --- a/src/common/http.ts +++ b/src/common/http.ts @@ -18,22 +18,21 @@ import { AxiosInstance } from 'axios'; import { Readable } from 'stream'; import { ReadableStream } from 'stream/web'; -import { HTTPServiceInterface, Logger } from '../types.js'; +import { HTTPClient, Logger } from '../types.js'; import { createAxiosInstance } from '../utils/httpClient.js'; import { FailedRequestError } from './error.js'; -export class AxiosHTTPService implements HTTPServiceInterface { +export class AxiosHTTPService implements HTTPClient { protected axios: AxiosInstance; protected logger: Logger; // TODO: re-implement axios-retry. Currently that package is broken for nodenext. constructor({ url, - // retryConfig, logger, }: { url: string; - // retryConfig?: IAxiosRetryConfig; + logger: Logger; }) { this.logger = logger; @@ -52,8 +51,6 @@ export class AxiosHTTPService implements HTTPServiceInterface { } }, }, - // retryConfig, - // logger: this.logger, }); } async get({ diff --git a/src/common/logger.ts b/src/common/logger.ts index af085173..b757d065 100644 --- a/src/common/logger.ts +++ b/src/common/logger.ts @@ -20,7 +20,7 @@ import { Logger } from '../types.js'; import { version } from '../version.js'; export class DefaultLogger implements Logger { - logger: winston.Logger; + private logger: winston.Logger; constructor({ level = 'info', logFormat = 'simple', diff --git a/src/types.ts b/src/types.ts index 2f9834eb..ef09a2e8 100644 --- a/src/types.ts +++ b/src/types.ts @@ -34,7 +34,7 @@ export interface Logger { } /* eslint-enable @typescript-eslint/no-explicit-any */ -export interface HTTPServiceInterface { +export interface HTTPClient { get({ endpoint, signal, diff --git a/src/utils/httpClient.ts b/src/utils/httpClient.ts index cb9c9cc6..7b7155cb 100644 --- a/src/utils/httpClient.ts +++ b/src/utils/httpClient.ts @@ -16,34 +16,13 @@ */ import axios, { AxiosInstance, AxiosRequestConfig } from 'axios'; -// import { DefaultLogger } from '../common/logger.js'; -// import { Logger } from '../types.js'; - -// import { version } from '../version.js'; - // TODO: re-implement axios-retry. Currently latest version of axios-retry is broken for node-next builds on v4.0.0 export interface AxiosInstanceParameters { axiosConfig?: Omit; - // retryConfig?: Record; - // logger?: Logger; } export const createAxiosInstance = ({ - //logger = new DefaultLogger(), axiosConfig = {}, - // retryConfig = { - // retryDelay: axiosRetry.exponentialDelay, - // retries: 3, - // retryCondition: (error) => { - // return ( - // !(error instanceof CanceledError) && - // axiosRetry.isNetworkOrIdempotentRequestError(error) - // ); - // }, - // onRetry: (retryCount, error) => { - // logger.debug(`Request failed, ${error}. Retry attempt #${retryCount}...`); - // }, - // }, }: AxiosInstanceParameters = {}): AxiosInstance => { const axiosInstance = axios.create({ ...axiosConfig, @@ -53,9 +32,5 @@ export const createAxiosInstance = ({ validateStatus: () => true, // don't throw on non-200 status codes }); - // eslint-disable-next-line - // if (retryConfig.retries && retryConfig.retries > 0) { - // axiosRetry(axiosInstance, retryConfig); - // } return axiosInstance; }; diff --git a/tsconfig.json b/tsconfig.json index 2d7d0657..0140d12c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2021", + "target": "esnext", "allowSyntheticDefaultImports": true, "lib": ["esnext", "dom"], "outDir": "./lib/esm",