UNPKG

@commercelayer/sdk

Version:
1 lines 12.5 kB
{"version":3,"sources":["../src/error.ts","../src/fetch.ts"],"names":["ErrorType","debug_default"],"mappings":"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","file":"chunk-IKHD5UQP.cjs","sourcesContent":["import { FetchError } from './fetch'\n\n\nenum ErrorType {\n\tCLIENT = 'client',\t\t \t\t\t\t// Generic Client error\n\tREQUEST = 'request',\t\t\t\t\t\t// Error preparing API request\n\tRESPONSE = 'response',\t\t\t\t\t// Error response from API\n\tCANCEL = 'cancel',\t\t \t\t\t\t// Forced request abort using interceptor\n\tPARSE = 'parse',\t\t \t\t\t\t// Error parsing API resource\n TIMEOUT = 'timeout', \t\t\t\t// Timeout error\n\tTOKEN_REFRESH = 'token-refresh'\t// Error calling refresh token function\n}\n\n\nclass SdkError extends Error {\n\n\tstatic NAME = 'SdkError'\n\n\tstatic isSdkError(error: any): error is SdkError {\n\t\treturn error && [SdkError.NAME, ApiError.NAME].includes(error.name as string) && Object.values(ErrorType).includes(error.type as ErrorType)\n\t}\n\n\ttype: ErrorType\n\tcode?: string\n\tsource?: Error\n\n\tconstructor(error: { message: string, type?: ErrorType }) {\n\t\tsuper(error.message)\n\t\tthis.name = SdkError.NAME\n\t\tthis.type = error.type || ErrorType.CLIENT\n\t}\n\n}\n\n\nclass ApiError extends SdkError {\n\n\tstatic NAME = 'ApiError'\n\n\tstatic isApiError(error: any): error is ApiError {\n\t\treturn SdkError.isSdkError(error) && (error.name === ApiError.NAME) && (error.type === ErrorType.RESPONSE)\n\t}\n\n\terrors: any[] = []\n\tstatus?: number\n\tstatusText?: string\n\n\t// constructor(error: SdkError)\n\tconstructor(error: { message: string }) {\n\t\tsuper({ ...error, type: ErrorType.RESPONSE })\n\t\tthis.name = ApiError.NAME\n\t}\n\n\tfirst(): any {\n\t\treturn (this.errors?.length > 0) ? this.errors[0] : undefined\n\t}\n\n}\n\n\nconst isRequestError = (error: any): error is TypeError => {\n\treturn (error instanceof TypeError) && (error.message !== 'fetch failed')\n}\n\nconst isCancelError = (error: any): boolean => {\n\treturn (error instanceof DOMException) && (error.name === 'AbortError')\n}\n\nconst isTimeoutError = (error: any): boolean => {\n\treturn (error instanceof DOMException) && (error.name === 'TimeoutError')\n}\n\nconst isExpiredTokenError = (error: any): boolean => {\n\tconst invalidTokenCodes = ['INVALID_TOKEN'/*, 'UNAUTHORIZED' */]\n\treturn (ApiError.isApiError(error) && (error.status === 401) && (\n\t\tinvalidTokenCodes.includes(error.code || '') ||\n\t\t(error.errors && (error.errors.length > 0) && invalidTokenCodes.includes(error.errors[0].code as string))\n\t))\n}\n\n\nconst handleError = (error: Error): never => {\n\n\tif (SdkError.isSdkError(error) || ApiError.isApiError(error)) throw error\n\n\tlet sdkError = new SdkError({ message: error.message })\n\n\tif (FetchError.isFetchError(error)) {\n\t\t// console.log('Fetch Error')\n\t\tconst apiError = new ApiError(sdkError)\n\t\tapiError.type = ErrorType.RESPONSE\n\t\tapiError.status = error.status\n\t\tapiError.statusText = error.statusText\n\t\tapiError.code = String(apiError.status)\n\t\tapiError.errors = error.errors || []\n\t\tif (!apiError.message && apiError.statusText) apiError.message = apiError.statusText\n\t\tsdkError = apiError\n\t}\n\telse if (isRequestError(error)) {\n\t\t// console.log('Request Error')\n sdkError.type = ErrorType.REQUEST\n }\n\telse if (isCancelError(error)) {\n\t\t// console.log('Cancel Error')\n sdkError.type = ErrorType.CANCEL\n }\n else if (isTimeoutError(error)) {\n\t\t// console.log('Timeout Error')\n sdkError.type = ErrorType.TIMEOUT\n }\n\telse {\n\t\t// console.log('Generic Error')\n\t\tsdkError.type = ErrorType.CLIENT\n\t\tsdkError.source = error\n\t}\n\n\tthrow sdkError\n\n}\n\n\nexport { SdkError, ApiError, ErrorType, handleError, isExpiredTokenError }\n\n\nexport function isSdkError(error: unknown): error is SdkError {\n\treturn SdkError.isSdkError(error)\n}\n\nexport function isApiError(error: unknown): error is ApiError {\n\treturn ApiError.isApiError(error)\n}\n","\nimport type { InterceptorManager } from './interceptor'\nimport { ErrorType, SdkError } from './error'\n\n\nimport Debug from './debug'\nconst debug = Debug('fetch')\n\n\nexport type Fetch = (input: string | URL | Request, init?: RequestInit) => Promise<Response>\n\nexport type FetchResponse = any\nexport type FetchRequestOptions = RequestInit\nexport type FetchClientOptions = {\n interceptors?: InterceptorManager,\n fetch?: Fetch\n}\n\n\nexport class FetchError extends Error {\n\n static NAME = 'FetchError'\n\n static isFetchError = (error: any): error is FetchError => {\n return error instanceof FetchError\n }\n\n readonly #errors?: any[]\n readonly #status: number\n readonly #statusText: string\n readonly #request?: Partial<FetchRequestOptions>\n\n constructor(status: number, statusText: string, body?: any, request?: FetchRequestOptions) {\n super(statusText)\n this.#status = status\n this.#statusText = statusText\n if (body) this.#errors = body.errors\n if (request) this.#request = request\n this.name = FetchError.NAME\n }\n\n\n get errors(): any[] | undefined { return this.#errors }\n\n get status(): number { return this.#status }\n\n get statusText(): string { return this.#statusText }\n\n get request(): Partial<FetchRequestOptions> | undefined { return this.#request }\n\n}\n\n\n\nexport const fetchURL = async (url: URL, requestOptions: FetchRequestOptions, clientOptions?: FetchClientOptions): Promise<FetchResponse> => {\n\n debug('fetch: %s, %O, native[%s]', url, requestOptions || {}, (clientOptions?.fetch? 'no' : 'yes'))\n\n const interceptors = clientOptions?.interceptors\n\n if (interceptors?.request?.onSuccess) ( { url, options: requestOptions } = await interceptors.request.onSuccess({ url, options: requestOptions }) )\n\n // const request: Request = new Request(url, requestOptions) // not supported by all fetch implementations\n\n const fetchClient = clientOptions?.fetch || fetch\n\n let response = await fetchClient(url, requestOptions)\n\n if (response.ok) {\n if (interceptors?.rawReader?.onSuccess) await interceptors.rawReader.onSuccess(response)\n if (interceptors?.response?.onSuccess) response = await interceptors.response.onSuccess(response)\n } else {\n if (interceptors?.rawReader?.onFailure) await interceptors.rawReader.onFailure(response)\n }\n\n const responseBody = (response.body && (response.status !== 204)) ? await response.json()\n .then(json => { debug('response: %O', json); return json })\n .catch((err: Error) => {\n debug('error: %s', err.message)\n if (response.ok) throw new SdkError({ message: 'Error parsing API response body', type: ErrorType.PARSE })\n })\n : undefined\n \n if (!response.ok) {\n let error = new FetchError(response.status, response.statusText, responseBody, requestOptions)\n if (interceptors?.response?.onFailure) error = await interceptors.response.onFailure(error)\n if (error) throw error\n }\n\n return responseBody\n\n}\n"]}