accessio 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +487 -0
- package/cjs/accessio.cjs +208 -0
- package/cjs/accessio.cjs.map +1 -0
- package/cjs/constants/errorCodes.cjs +76 -0
- package/cjs/constants/errorCodes.cjs.map +1 -0
- package/cjs/core/accessioError.cjs +93 -0
- package/cjs/core/accessioError.cjs.map +1 -0
- package/cjs/core/buildURL.cjs +100 -0
- package/cjs/core/buildURL.cjs.map +1 -0
- package/cjs/core/mergeConfig.cjs +73 -0
- package/cjs/core/mergeConfig.cjs.map +1 -0
- package/cjs/core/request.cjs +259 -0
- package/cjs/core/request.cjs.map +1 -0
- package/cjs/core/retry.cjs +109 -0
- package/cjs/core/retry.cjs.map +1 -0
- package/cjs/defaults/index.cjs +55 -0
- package/cjs/defaults/index.cjs.map +1 -0
- package/cjs/defaults/transforms.cjs +59 -0
- package/cjs/defaults/transforms.cjs.map +1 -0
- package/cjs/helpers/debug.cjs +96 -0
- package/cjs/helpers/debug.cjs.map +1 -0
- package/cjs/helpers/parseHeaders.cjs +52 -0
- package/cjs/helpers/parseHeaders.cjs.map +1 -0
- package/cjs/helpers/rateLimiter.cjs +98 -0
- package/cjs/helpers/rateLimiter.cjs.map +1 -0
- package/cjs/helpers/settle.cjs +50 -0
- package/cjs/helpers/settle.cjs.map +1 -0
- package/cjs/helpers/transformData.cjs +57 -0
- package/cjs/helpers/transformData.cjs.map +1 -0
- package/cjs/index.cjs +121 -0
- package/cjs/index.cjs.map +1 -0
- package/cjs/interceptors/interceptorManager.cjs +31 -0
- package/cjs/interceptors/interceptorManager.cjs.map +1 -0
- package/index.d.ts +454 -0
- package/package.json +116 -0
- package/src/accessio.ts +251 -0
- package/src/constants/errorCodes.ts +29 -0
- package/src/core/accessioError.ts +74 -0
- package/src/core/buildURL.ts +99 -0
- package/src/core/mergeConfig.ts +78 -0
- package/src/core/request.ts +284 -0
- package/src/core/retry.ts +117 -0
- package/src/defaults/index.ts +36 -0
- package/src/defaults/transforms.ts +44 -0
- package/src/helpers/debug.ts +103 -0
- package/src/helpers/parseHeaders.ts +35 -0
- package/src/helpers/rateLimiter.ts +96 -0
- package/src/helpers/settle.ts +26 -0
- package/src/helpers/transformData.ts +36 -0
- package/src/index.ts +102 -0
- package/src/interceptors/interceptorManager.ts +5 -0
- package/src/types.ts +159 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/request.ts"],"sourcesContent":["import buildURL from './buildURL';\nimport AccessioError from './accessioError';\nimport parseHeaders from '../helpers/parseHeaders';\nimport transformData from '../helpers/transformData';\nimport settle from '../helpers/settle';\nimport type { AccessioRequestConfig, AccessioResponse, TransformFunction } from '../types';\n\nconst METHOD_KEYS = new Set<string>([\n 'common',\n 'delete',\n 'get',\n 'head',\n 'options',\n 'post',\n 'put',\n 'patch',\n]);\n\ntype HeadersConfig = Record<string, Record<string, string>>;\n\nfunction flattenHeaders(\n headers: HeadersConfig | undefined,\n method?: string,\n): Record<string, string> {\n if (!headers) return {};\n\n const merged: Record<string, string> = {};\n const methodLower = (method || 'get').toLowerCase();\n\n if (headers['common']) {\n Object.assign(merged, headers['common']);\n }\n\n if (headers[methodLower]) {\n Object.assign(merged, headers[methodLower]);\n }\n\n for (const key in headers) {\n if (\n Object.prototype.hasOwnProperty.call(headers, key) &&\n !METHOD_KEYS.has(key)\n ) {\n merged[key] = headers[key] as unknown as string;\n }\n }\n\n return merged;\n}\n\nfunction removeContentType(headers: Record<string, string>): void {\n const key = Object.keys(headers).find(\n (k) => k.toLowerCase() === 'content-type',\n );\n if (key) {\n delete headers[key];\n }\n}\n\nfunction buildTransformArray(\n transform: TransformFunction | TransformFunction[] | undefined,\n): TransformFunction[] {\n if (!transform) return [];\n if (Array.isArray(transform)) return transform;\n return [transform];\n}\n\nexport default function dispatchRequest(\n config: AccessioRequestConfig,\n): Promise<AccessioResponse> {\n const fullURL =\n config._builtUrl ||\n buildURL(\n config.url ?? '',\n config.baseURL,\n config.params as Record<string, unknown> | undefined,\n config.paramsSerializer,\n );\n\n const flatHeaders = flattenHeaders(\n config.headers as HeadersConfig | undefined,\n config.method,\n );\n\n const requestTransforms = buildTransformArray(config.transformRequest);\n\n const requestData = transformData(\n requestTransforms,\n config.data,\n flatHeaders,\n config,\n );\n\n if (\n requestData === null ||\n requestData === undefined ||\n (typeof FormData !== 'undefined' && requestData instanceof FormData)\n ) {\n removeContentType(flatHeaders);\n }\n\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password || '';\n const credentials = `${username}:${password}`;\n\n let encoded: string;\n if (typeof Buffer !== 'undefined') {\n encoded = Buffer.from(credentials).toString('base64');\n } else {\n const bytes = new TextEncoder().encode(credentials);\n const binString = Array.from(bytes, (x) =>\n String.fromCodePoint(x),\n ).join('');\n encoded = btoa(binString);\n }\n\n flatHeaders['Authorization'] = `Basic ${encoded}`;\n }\n\n const fetchOptions: RequestInit = {\n method: (config.method || 'GET').toUpperCase(),\n headers: flatHeaders,\n };\n\n const methodsWithBody = ['POST', 'PUT', 'PATCH', 'DELETE'];\n if (\n methodsWithBody.includes(fetchOptions.method!) &&\n requestData !== undefined &&\n requestData !== null\n ) {\n fetchOptions.body = requestData as BodyInit;\n }\n\n if (config.withCredentials) {\n fetchOptions.credentials = 'include';\n }\n\n let abortController: AbortController | null = null;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let isTimedOut = false;\n let onUserAbort: (() => void) | null = null;\n\n if (config.timeout && config.timeout > 0) {\n abortController = new AbortController();\n\n timeoutId = setTimeout(() => {\n isTimedOut = true;\n abortController!.abort(\n new AccessioError(\n `timeout of ${config.timeout}ms exceeded`,\n AccessioError.ETIMEDOUT,\n config,\n null,\n null,\n ),\n );\n }, config.timeout);\n\n if (config.signal) {\n if (typeof AbortSignal.any === 'function') {\n fetchOptions.signal = AbortSignal.any([\n config.signal,\n abortController.signal,\n ]);\n } else {\n if (config.signal.aborted) {\n abortController.abort(config.signal.reason);\n } else {\n onUserAbort = () => {\n abortController!.abort(config.signal!.reason);\n };\n config.signal.addEventListener('abort', onUserAbort, {\n once: true,\n });\n }\n fetchOptions.signal = abortController.signal;\n }\n } else {\n fetchOptions.signal = abortController.signal;\n }\n } else if (config.signal) {\n fetchOptions.signal = config.signal;\n }\n\n const requestStartTime = Date.now();\n\n return fetch(fullURL, fetchOptions)\n .then(async (fetchResponse) => {\n let responseData: unknown;\n const responseType = config.responseType || 'json';\n\n try {\n switch (responseType) {\n case 'arraybuffer':\n responseData = await fetchResponse.arrayBuffer();\n break;\n case 'blob':\n responseData = await fetchResponse.blob();\n break;\n case 'text':\n responseData = await fetchResponse.text();\n break;\n case 'stream':\n responseData = fetchResponse.body;\n break;\n case 'json':\n default:\n responseData = await fetchResponse.text();\n break;\n }\n } catch (readError) {\n throw AccessioError.from(\n readError as Error,\n AccessioError.ERR_BAD_RESPONSE,\n config,\n fetchResponse,\n null,\n );\n }\n\n const responseHeaders = parseHeaders(fetchResponse.headers);\n\n const responseTransforms = buildTransformArray(config.transformResponse);\n\n responseData = transformData(\n responseTransforms,\n responseData,\n responseHeaders,\n config,\n );\n\n const response: AccessioResponse = {\n data: responseData,\n status: fetchResponse.status,\n statusText: fetchResponse.statusText,\n headers: responseHeaders,\n config: config,\n request: fetchResponse,\n duration: Date.now() - requestStartTime,\n };\n\n return new Promise<AccessioResponse>((resolve, reject) => {\n settle(resolve as (value: AccessioResponse) => void, reject as (reason: AccessioError) => void, response, config);\n });\n })\n .catch((error) => {\n if (error instanceof AccessioError) {\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n if (isTimedOut) {\n throw new AccessioError(\n `timeout of ${config.timeout}ms exceeded`,\n AccessioError.ETIMEDOUT,\n config,\n null,\n null,\n );\n }\n throw new AccessioError(\n 'Request aborted',\n AccessioError.ERR_CANCELED,\n config,\n null,\n null,\n );\n }\n\n throw AccessioError.from(\n error instanceof Error ? error : new Error(String(error)),\n AccessioError.ERR_NETWORK,\n config,\n null,\n null,\n );\n })\n .finally(() => {\n if (timeoutId) clearTimeout(timeoutId);\n if (config.signal && onUserAbort) {\n config.signal.removeEventListener('abort', onUserAbort);\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAqB;AACrB,2BAA0B;AAC1B,0BAAyB;AACzB,2BAA0B;AAC1B,oBAAmB;AAGnB,MAAM,cAAc,oBAAI,IAAY;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAID,SAAS,eACP,SACA,QACwB;AACxB,MAAI,CAAC,QAAS,QAAO,CAAC;AAEtB,QAAM,SAAiC,CAAC;AACxC,QAAM,eAAe,UAAU,OAAO,YAAY;AAElD,MAAI,QAAQ,QAAQ,GAAG;AACrB,WAAO,OAAO,QAAQ,QAAQ,QAAQ,CAAC;AAAA,EACzC;AAEA,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO,OAAO,QAAQ,QAAQ,WAAW,CAAC;AAAA,EAC5C;AAEA,aAAW,OAAO,SAAS;AACzB,QACE,OAAO,UAAU,eAAe,KAAK,SAAS,GAAG,KACjD,CAAC,YAAY,IAAI,GAAG,GACpB;AACA,aAAO,GAAG,IAAI,QAAQ,GAAG;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,SAAuC;AAChE,QAAM,MAAM,OAAO,KAAK,OAAO,EAAE;AAAA,IAC/B,CAAC,MAAM,EAAE,YAAY,MAAM;AAAA,EAC7B;AACA,MAAI,KAAK;AACP,WAAO,QAAQ,GAAG;AAAA,EACpB;AACF;AAEA,SAAS,oBACP,WACqB;AACrB,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,MAAI,MAAM,QAAQ,SAAS,EAAG,QAAO;AACrC,SAAO,CAAC,SAAS;AACnB;AAEe,SAAR,gBACL,QAC2B;AAC3B,QAAM,UACJ,OAAO,iBACP,gBAAAA;AAAA,IACE,OAAO,OAAO;AAAA,IACd,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAEF,QAAM,cAAc;AAAA,IAClB,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,oBAAoB,OAAO,gBAAgB;AAErE,QAAM,kBAAc,qBAAAC;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF;AAEA,MACE,gBAAgB,QAChB,gBAAgB,UACf,OAAO,aAAa,eAAe,uBAAuB,UAC3D;AACA,sBAAkB,WAAW;AAAA,EAC/B;AAEA,MAAI,OAAO,MAAM;AACf,UAAM,WAAW,OAAO,KAAK,YAAY;AACzC,UAAM,WAAW,OAAO,KAAK,YAAY;AACzC,UAAM,cAAc,GAAG,QAAQ,IAAI,QAAQ;AAE3C,QAAI;AACJ,QAAI,OAAO,WAAW,aAAa;AACjC,gBAAU,OAAO,KAAK,WAAW,EAAE,SAAS,QAAQ;AAAA,IACtD,OAAO;AACL,YAAM,QAAQ,IAAI,YAAY,EAAE,OAAO,WAAW;AAClD,YAAM,YAAY,MAAM;AAAA,QAAK;AAAA,QAAO,CAAC,MACnC,OAAO,cAAc,CAAC;AAAA,MACxB,EAAE,KAAK,EAAE;AACT,gBAAU,KAAK,SAAS;AAAA,IAC1B;AAEA,gBAAY,eAAe,IAAI,SAAS,OAAO;AAAA,EACjD;AAEA,QAAM,eAA4B;AAAA,IAChC,SAAS,OAAO,UAAU,OAAO,YAAY;AAAA,IAC7C,SAAS;AAAA,EACX;AAEA,QAAM,kBAAkB,CAAC,QAAQ,OAAO,SAAS,QAAQ;AACzD,MACE,gBAAgB,SAAS,aAAa,MAAO,KAC7C,gBAAgB,UAChB,gBAAgB,MAChB;AACA,iBAAa,OAAO;AAAA,EACtB;AAEA,MAAI,OAAO,iBAAiB;AAC1B,iBAAa,cAAc;AAAA,EAC7B;AAEA,MAAI,kBAA0C;AAC9C,MAAI,YAAkD;AACtD,MAAI,aAAa;AACjB,MAAI,cAAmC;AAEvC,MAAI,OAAO,WAAW,OAAO,UAAU,GAAG;AACxC,sBAAkB,IAAI,gBAAgB;AAEtC,gBAAY,WAAW,MAAM;AAC3B,mBAAa;AACb,sBAAiB;AAAA,QACf,IAAI,qBAAAC;AAAA,UACF,cAAc,OAAO,OAAO;AAAA,UAC5B,qBAAAA,QAAc;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAAG,OAAO,OAAO;AAEjB,QAAI,OAAO,QAAQ;AACjB,UAAI,OAAO,YAAY,QAAQ,YAAY;AACzC,qBAAa,SAAS,YAAY,IAAI;AAAA,UACpC,OAAO;AAAA,UACP,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH,OAAO;AACL,YAAI,OAAO,OAAO,SAAS;AACzB,0BAAgB,MAAM,OAAO,OAAO,MAAM;AAAA,QAC5C,OAAO;AACL,wBAAc,MAAM;AAClB,4BAAiB,MAAM,OAAO,OAAQ,MAAM;AAAA,UAC9C;AACA,iBAAO,OAAO,iBAAiB,SAAS,aAAa;AAAA,YACnD,MAAM;AAAA,UACR,CAAC;AAAA,QACH;AACA,qBAAa,SAAS,gBAAgB;AAAA,MACxC;AAAA,IACF,OAAO;AACL,mBAAa,SAAS,gBAAgB;AAAA,IACxC;AAAA,EACF,WAAW,OAAO,QAAQ;AACxB,iBAAa,SAAS,OAAO;AAAA,EAC/B;AAEA,QAAM,mBAAmB,KAAK,IAAI;AAElC,SAAO,MAAM,SAAS,YAAY,EAC/B,KAAK,OAAO,kBAAkB;AAC7B,QAAI;AACJ,UAAM,eAAe,OAAO,gBAAgB;AAE5C,QAAI;AACF,cAAQ,cAAc;AAAA,QACpB,KAAK;AACH,yBAAe,MAAM,cAAc,YAAY;AAC/C;AAAA,QACF,KAAK;AACH,yBAAe,MAAM,cAAc,KAAK;AACxC;AAAA,QACF,KAAK;AACH,yBAAe,MAAM,cAAc,KAAK;AACxC;AAAA,QACF,KAAK;AACH,yBAAe,cAAc;AAC7B;AAAA,QACF,KAAK;AAAA,QACL;AACE,yBAAe,MAAM,cAAc,KAAK;AACxC;AAAA,MACJ;AAAA,IACF,SAAS,WAAW;AAClB,YAAM,qBAAAA,QAAc;AAAA,QAClB;AAAA,QACA,qBAAAA,QAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,sBAAkB,oBAAAC,SAAa,cAAc,OAAO;AAE1D,UAAM,qBAAqB,oBAAoB,OAAO,iBAAiB;AAEvE,uBAAe,qBAAAF;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,WAA6B;AAAA,MACjC,MAAM;AAAA,MACN,QAAQ,cAAc;AAAA,MACtB,YAAY,cAAc;AAAA,MAC1B,SAAS;AAAA,MACT;AAAA,MACA,SAAS;AAAA,MACT,UAAU,KAAK,IAAI,IAAI;AAAA,IACzB;AAEA,WAAO,IAAI,QAA0B,CAAC,SAAS,WAAW;AACxD,wBAAAG,SAAO,SAA8C,QAA2C,UAAU,MAAM;AAAA,IAClH,CAAC;AAAA,EACH,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,QAAI,iBAAiB,qBAAAF,SAAe;AAClC,YAAM;AAAA,IACR;AAEA,QAAI,iBAAiB,SAAS,MAAM,SAAS,cAAc;AACzD,UAAI,YAAY;AACd,cAAM,IAAI,qBAAAA;AAAA,UACR,cAAc,OAAO,OAAO;AAAA,UAC5B,qBAAAA,QAAc;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,YAAM,IAAI,qBAAAA;AAAA,QACR;AAAA,QACA,qBAAAA,QAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,qBAAAA,QAAc;AAAA,MAClB,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,MACxD,qBAAAA,QAAc;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC,EACA,QAAQ,MAAM;AACb,QAAI,UAAW,cAAa,SAAS;AACrC,QAAI,OAAO,UAAU,aAAa;AAChC,aAAO,OAAO,oBAAoB,SAAS,WAAW;AAAA,IACxD;AAAA,EACF,CAAC;AACL;","names":["buildURL","transformData","AccessioError","parseHeaders","settle"]}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var retry_exports = {};
|
|
20
|
+
__export(retry_exports, {
|
|
21
|
+
calculateDelay: () => calculateDelay,
|
|
22
|
+
default: () => retry_default,
|
|
23
|
+
defaultRetryCondition: () => defaultRetryCondition
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(retry_exports);
|
|
26
|
+
var import_errorCodes = require("../constants/errorCodes");
|
|
27
|
+
function defaultRetryCondition(error) {
|
|
28
|
+
if (error.code === import_errorCodes.ERR_CANCELED) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
if (error.code === import_errorCodes.ERR_NETWORK) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
if (error.code === import_errorCodes.ETIMEDOUT) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
if (error.response && error.response.status >= 500) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
function calculateDelay(attempt, baseDelay) {
|
|
43
|
+
const exponentialDelay = baseDelay * Math.pow(2, attempt);
|
|
44
|
+
const jitter = exponentialDelay * 0.25 * (Math.random() * 2 - 1);
|
|
45
|
+
return Math.round(exponentialDelay + jitter);
|
|
46
|
+
}
|
|
47
|
+
function sleep(ms, options) {
|
|
48
|
+
return new Promise((resolve, reject) => {
|
|
49
|
+
let onAbort;
|
|
50
|
+
const timeoutId = setTimeout(() => {
|
|
51
|
+
if (options?.signal && onAbort) {
|
|
52
|
+
options.signal.removeEventListener("abort", onAbort);
|
|
53
|
+
}
|
|
54
|
+
resolve();
|
|
55
|
+
}, ms);
|
|
56
|
+
if (options?.signal) {
|
|
57
|
+
if (options.signal.aborted) {
|
|
58
|
+
clearTimeout(timeoutId);
|
|
59
|
+
return reject(
|
|
60
|
+
options.signal.reason || new Error("Sleep aborted")
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
onAbort = () => {
|
|
64
|
+
clearTimeout(timeoutId);
|
|
65
|
+
reject(options.signal.reason || new Error("Sleep aborted"));
|
|
66
|
+
};
|
|
67
|
+
options.signal.addEventListener("abort", onAbort, { once: true });
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
async function retryRequest(dispatchFn, config) {
|
|
72
|
+
const maxRetries = config.retry ?? 0;
|
|
73
|
+
if (maxRetries <= 0) {
|
|
74
|
+
return dispatchFn(config);
|
|
75
|
+
}
|
|
76
|
+
const retryDelay = config.retryDelay ?? 1e3;
|
|
77
|
+
const retryCondition = config.retryCondition ?? defaultRetryCondition;
|
|
78
|
+
let lastError;
|
|
79
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
80
|
+
try {
|
|
81
|
+
const response = await dispatchFn(config);
|
|
82
|
+
return response;
|
|
83
|
+
} catch (error) {
|
|
84
|
+
lastError = error;
|
|
85
|
+
const isLastAttempt = attempt >= maxRetries;
|
|
86
|
+
const shouldRetry = !isLastAttempt && retryCondition(error);
|
|
87
|
+
if (!shouldRetry) {
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
const delay = calculateDelay(attempt, retryDelay);
|
|
91
|
+
if (typeof config.onRetry === "function") {
|
|
92
|
+
config.onRetry(
|
|
93
|
+
attempt + 1,
|
|
94
|
+
error,
|
|
95
|
+
config
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
await sleep(delay, { signal: config.signal });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
throw lastError;
|
|
102
|
+
}
|
|
103
|
+
var retry_default = retryRequest;
|
|
104
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
105
|
+
0 && (module.exports = {
|
|
106
|
+
calculateDelay,
|
|
107
|
+
defaultRetryCondition
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=retry.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/retry.ts"],"sourcesContent":["import {\n ERR_CANCELED,\n ERR_NETWORK,\n ETIMEDOUT,\n} from '../constants/errorCodes';\nimport type {\n AccessioRequestConfig,\n AccessioResponse,\n AccessioError,\n RetryConditionFunction,\n OnRetryFunction,\n} from '../types';\n\nfunction defaultRetryCondition(error: any): boolean {\n if (error.code === ERR_CANCELED) {\n return false;\n }\n\n if (error.code === ERR_NETWORK) {\n return true;\n }\n\n if (error.code === ETIMEDOUT) {\n return true;\n }\n\n if (error.response && error.response.status >= 500) {\n return true;\n }\n\n return false;\n}\n\nfunction calculateDelay(attempt: number, baseDelay: number): number {\n const exponentialDelay = baseDelay * Math.pow(2, attempt);\n const jitter = exponentialDelay * 0.25 * (Math.random() * 2 - 1);\n return Math.round(exponentialDelay + jitter);\n}\n\nfunction sleep(ms: number, options?: { signal?: AbortSignal }): Promise<void> {\n return new Promise((resolve, reject) => {\n let onAbort: (() => void) | undefined;\n\n const timeoutId = setTimeout(() => {\n if (options?.signal && onAbort) {\n options.signal.removeEventListener('abort', onAbort);\n }\n resolve();\n }, ms);\n\n if (options?.signal) {\n if (options.signal.aborted) {\n clearTimeout(timeoutId);\n return reject(\n options.signal.reason || new Error('Sleep aborted'),\n );\n }\n\n onAbort = () => {\n clearTimeout(timeoutId);\n reject(options.signal!.reason || new Error('Sleep aborted'));\n };\n\n options.signal.addEventListener('abort', onAbort, { once: true });\n }\n });\n}\n\nasync function retryRequest(\n dispatchFn: (config: AccessioRequestConfig) => Promise<any>,\n config: AccessioRequestConfig,\n): Promise<any> {\n const maxRetries = config.retry ?? 0;\n\n if (maxRetries <= 0) {\n return dispatchFn(config);\n }\n\n const retryDelay = config.retryDelay ?? 1000;\n const retryCondition: RetryConditionFunction =\n config.retryCondition ?? defaultRetryCondition;\n\n let lastError: any;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n const response = await dispatchFn(config);\n return response;\n } catch (error) {\n lastError = error;\n\n const isLastAttempt = attempt >= maxRetries;\n const shouldRetry = !isLastAttempt && retryCondition(error as AccessioError);\n\n if (!shouldRetry) {\n throw error;\n }\n\n const delay = calculateDelay(attempt, retryDelay);\n\n if (typeof config.onRetry === 'function') {\n (config.onRetry as OnRetryFunction)(\n attempt + 1,\n error as AccessioError,\n config,\n );\n }\n\n await sleep(delay, { signal: config.signal });\n }\n }\n\n throw lastError;\n}\n\nexport { defaultRetryCondition, calculateDelay };\nexport default retryRequest;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAIO;AASP,SAAS,sBAAsB,OAAqB;AAClD,MAAI,MAAM,SAAS,gCAAc;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,SAAS,+BAAa;AAC9B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,SAAS,6BAAW;AAC5B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,YAAY,MAAM,SAAS,UAAU,KAAK;AAClD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,SAAiB,WAA2B;AAClE,QAAM,mBAAmB,YAAY,KAAK,IAAI,GAAG,OAAO;AACxD,QAAM,SAAS,mBAAmB,QAAQ,KAAK,OAAO,IAAI,IAAI;AAC9D,SAAO,KAAK,MAAM,mBAAmB,MAAM;AAC7C;AAEA,SAAS,MAAM,IAAY,SAAmD;AAC5E,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI;AAEJ,UAAM,YAAY,WAAW,MAAM;AACjC,UAAI,SAAS,UAAU,SAAS;AAC9B,gBAAQ,OAAO,oBAAoB,SAAS,OAAO;AAAA,MACrD;AACA,cAAQ;AAAA,IACV,GAAG,EAAE;AAEL,QAAI,SAAS,QAAQ;AACnB,UAAI,QAAQ,OAAO,SAAS;AAC1B,qBAAa,SAAS;AACtB,eAAO;AAAA,UACL,QAAQ,OAAO,UAAU,IAAI,MAAM,eAAe;AAAA,QACpD;AAAA,MACF;AAEA,gBAAU,MAAM;AACd,qBAAa,SAAS;AACtB,eAAO,QAAQ,OAAQ,UAAU,IAAI,MAAM,eAAe,CAAC;AAAA,MAC7D;AAEA,cAAQ,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,IAClE;AAAA,EACF,CAAC;AACH;AAEA,eAAe,aACb,YACA,QACc;AACd,QAAM,aAAa,OAAO,SAAS;AAEnC,MAAI,cAAc,GAAG;AACnB,WAAO,WAAW,MAAM;AAAA,EAC1B;AAEA,QAAM,aAAa,OAAO,cAAc;AACxC,QAAM,iBACJ,OAAO,kBAAkB;AAE3B,MAAI;AAEJ,WAAS,UAAU,GAAG,WAAW,YAAY,WAAW;AACtD,QAAI;AACF,YAAM,WAAW,MAAM,WAAW,MAAM;AACxC,aAAO;AAAA,IACT,SAAS,OAAO;AACd,kBAAY;AAEZ,YAAM,gBAAgB,WAAW;AACjC,YAAM,cAAc,CAAC,iBAAiB,eAAe,KAAsB;AAE3E,UAAI,CAAC,aAAa;AAChB,cAAM;AAAA,MACR;AAEA,YAAM,QAAQ,eAAe,SAAS,UAAU;AAEhD,UAAI,OAAO,OAAO,YAAY,YAAY;AACxC,QAAC,OAAO;AAAA,UACN,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAEA,YAAM,MAAM,OAAO,EAAE,QAAQ,OAAO,OAAO,CAAC;AAAA,IAC9C;AAAA,EACF;AAEA,QAAM;AACR;AAGA,IAAO,gBAAQ;","names":[]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var defaults_exports = {};
|
|
20
|
+
__export(defaults_exports, {
|
|
21
|
+
default: () => defaults_default
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(defaults_exports);
|
|
24
|
+
var import_transforms = require("./transforms");
|
|
25
|
+
const defaults = {
|
|
26
|
+
method: "get",
|
|
27
|
+
timeout: 0,
|
|
28
|
+
headers: {
|
|
29
|
+
common: {
|
|
30
|
+
Accept: "application/json, text/plain, */*"
|
|
31
|
+
},
|
|
32
|
+
delete: {},
|
|
33
|
+
get: {},
|
|
34
|
+
head: {},
|
|
35
|
+
options: {},
|
|
36
|
+
post: {
|
|
37
|
+
"Content-Type": "application/json"
|
|
38
|
+
},
|
|
39
|
+
put: {
|
|
40
|
+
"Content-Type": "application/json"
|
|
41
|
+
},
|
|
42
|
+
patch: {
|
|
43
|
+
"Content-Type": "application/json"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
transformRequest: [import_transforms.defaultTransformRequest],
|
|
47
|
+
transformResponse: [import_transforms.defaultTransformResponse],
|
|
48
|
+
validateStatus: function defaultValidateStatus(status) {
|
|
49
|
+
return status >= 200 && status < 300;
|
|
50
|
+
},
|
|
51
|
+
responseType: "json",
|
|
52
|
+
withCredentials: false
|
|
53
|
+
};
|
|
54
|
+
var defaults_default = defaults;
|
|
55
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/defaults/index.ts"],"sourcesContent":["import { defaultTransformRequest, defaultTransformResponse } from './transforms';\nimport type { AccessioRequestConfig } from '../types';\n\nconst defaults: AccessioRequestConfig = {\n method: 'get',\n timeout: 0,\n headers: {\n common: {\n Accept: 'application/json, text/plain, */*',\n },\n delete: {},\n get: {},\n head: {},\n options: {},\n post: {\n 'Content-Type': 'application/json',\n },\n put: {\n 'Content-Type': 'application/json',\n },\n patch: {\n 'Content-Type': 'application/json',\n },\n },\n transformRequest: [defaultTransformRequest],\n transformResponse: [defaultTransformResponse],\n validateStatus: function defaultValidateStatus(\n status: number,\n ): boolean {\n return status >= 200 && status < 300;\n },\n responseType: 'json',\n withCredentials: false,\n};\n\nexport default defaults;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAkE;AAGlE,MAAM,WAAkC;AAAA,EACtC,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,IACP,QAAQ;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,KAAK,CAAC;AAAA,IACN,MAAM,CAAC;AAAA,IACP,SAAS,CAAC;AAAA,IACV,MAAM;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,KAAK;AAAA,MACH,gBAAgB;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,MACL,gBAAgB;AAAA,IAClB;AAAA,EACF;AAAA,EACA,kBAAkB,CAAC,yCAAuB;AAAA,EAC1C,mBAAmB,CAAC,0CAAwB;AAAA,EAC5C,gBAAgB,SAAS,sBACvB,QACS;AACT,WAAO,UAAU,OAAO,SAAS;AAAA,EACnC;AAAA,EACA,cAAc;AAAA,EACd,iBAAiB;AACnB;AAEA,IAAO,mBAAQ;","names":[]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var transforms_exports = {};
|
|
20
|
+
__export(transforms_exports, {
|
|
21
|
+
defaultTransformRequest: () => defaultTransformRequest,
|
|
22
|
+
defaultTransformResponse: () => defaultTransformResponse
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(transforms_exports);
|
|
25
|
+
function defaultTransformRequest(data, headers) {
|
|
26
|
+
if (data === null || data === void 0) {
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
|
+
if (typeof data === "string" || data instanceof ArrayBuffer || typeof Blob !== "undefined" && data instanceof Blob || typeof FormData !== "undefined" && data instanceof FormData || typeof URLSearchParams !== "undefined" && data instanceof URLSearchParams || typeof ReadableStream !== "undefined" && data instanceof ReadableStream) {
|
|
30
|
+
return data;
|
|
31
|
+
}
|
|
32
|
+
if (typeof data === "object") {
|
|
33
|
+
if (headers && typeof headers === "object") {
|
|
34
|
+
const hasContentType = Object.keys(headers).some(
|
|
35
|
+
(key) => key.toLowerCase() === "content-type"
|
|
36
|
+
);
|
|
37
|
+
if (!hasContentType) {
|
|
38
|
+
headers["Content-Type"] = "application/json";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return JSON.stringify(data);
|
|
42
|
+
}
|
|
43
|
+
return data;
|
|
44
|
+
}
|
|
45
|
+
function defaultTransformResponse(data) {
|
|
46
|
+
if (typeof data === "string") {
|
|
47
|
+
try {
|
|
48
|
+
return JSON.parse(data);
|
|
49
|
+
} catch {
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return data;
|
|
53
|
+
}
|
|
54
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
55
|
+
0 && (module.exports = {
|
|
56
|
+
defaultTransformRequest,
|
|
57
|
+
defaultTransformResponse
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=transforms.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/defaults/transforms.ts"],"sourcesContent":["export function defaultTransformRequest(\n data: unknown,\n headers: Record<string, string>,\n): unknown {\n if (data === null || data === undefined) {\n return data;\n }\n\n if (\n typeof data === 'string' ||\n data instanceof ArrayBuffer ||\n (typeof Blob !== 'undefined' && data instanceof Blob) ||\n (typeof FormData !== 'undefined' && data instanceof FormData) ||\n (typeof URLSearchParams !== 'undefined' && data instanceof URLSearchParams) ||\n (typeof ReadableStream !== 'undefined' && data instanceof ReadableStream)\n ) {\n return data;\n }\n\n if (typeof data === 'object') {\n if (headers && typeof headers === 'object') {\n const hasContentType = Object.keys(headers).some(\n (key) => key.toLowerCase() === 'content-type',\n );\n if (!hasContentType) {\n headers['Content-Type'] = 'application/json';\n }\n }\n return JSON.stringify(data);\n }\n\n return data;\n}\n\nexport function defaultTransformResponse(data: unknown): unknown {\n if (typeof data === 'string') {\n try {\n return JSON.parse(data);\n } catch {\n // Not JSON — return as-is\n }\n }\n return data;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,SAAS,wBACd,MACA,SACS;AACT,MAAI,SAAS,QAAQ,SAAS,QAAW;AACvC,WAAO;AAAA,EACT;AAEA,MACE,OAAO,SAAS,YAChB,gBAAgB,eACf,OAAO,SAAS,eAAe,gBAAgB,QAC/C,OAAO,aAAa,eAAe,gBAAgB,YACnD,OAAO,oBAAoB,eAAe,gBAAgB,mBAC1D,OAAO,mBAAmB,eAAe,gBAAgB,gBAC1D;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,QAAI,WAAW,OAAO,YAAY,UAAU;AAC1C,YAAM,iBAAiB,OAAO,KAAK,OAAO,EAAE;AAAA,QAC1C,CAAC,QAAQ,IAAI,YAAY,MAAM;AAAA,MACjC;AACA,UAAI,CAAC,gBAAgB;AACnB,gBAAQ,cAAc,IAAI;AAAA,MAC5B;AAAA,IACF;AACA,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AAEA,SAAO;AACT;AAEO,SAAS,yBAAyB,MAAwB;AAC/D,MAAI,OAAO,SAAS,UAAU;AAC5B,QAAI;AACF,aAAO,KAAK,MAAM,IAAI;AAAA,IACxB,QAAQ;AAAA,IAER;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var debug_exports = {};
|
|
20
|
+
__export(debug_exports, {
|
|
21
|
+
logError: () => logError,
|
|
22
|
+
logRequest: () => logRequest,
|
|
23
|
+
logResponse: () => logResponse
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(debug_exports);
|
|
26
|
+
function formatBytes(bytes) {
|
|
27
|
+
if (bytes === 0) return "0 B";
|
|
28
|
+
const sizes = ["B", "KB", "MB", "GB"];
|
|
29
|
+
const i = Math.floor(Math.log(bytes) / Math.log(1024));
|
|
30
|
+
return `${(bytes / Math.pow(1024, i)).toFixed(1)} ${sizes[i]}`;
|
|
31
|
+
}
|
|
32
|
+
function sanitizeConfigForLog(config) {
|
|
33
|
+
return {
|
|
34
|
+
params: config.params,
|
|
35
|
+
timeout: config.timeout,
|
|
36
|
+
retry: config.retry
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function logRequest(config, fullUrl) {
|
|
40
|
+
if (!config.debug) return;
|
|
41
|
+
const safe = sanitizeConfigForLog(config);
|
|
42
|
+
const method = (config.method || "GET").toUpperCase();
|
|
43
|
+
const url = fullUrl || config.url || "";
|
|
44
|
+
const parts = [`\u{1F426}\u200D\u2B1B [Accessio] \u2192 ${method} ${url}`];
|
|
45
|
+
if (safe.params && Object.keys(safe.params).length > 0) {
|
|
46
|
+
parts.push(` Params: ${JSON.stringify(safe.params)}`);
|
|
47
|
+
}
|
|
48
|
+
if (config.data && typeof config.data === "object") {
|
|
49
|
+
const preview = JSON.stringify(config.data);
|
|
50
|
+
const truncated = preview.length > 200 ? `${preview.substring(0, 200)}...` : preview;
|
|
51
|
+
parts.push(` Body: ${truncated}`);
|
|
52
|
+
}
|
|
53
|
+
if (safe.timeout) {
|
|
54
|
+
parts.push(` Timeout: ${safe.timeout}ms`);
|
|
55
|
+
}
|
|
56
|
+
if (safe.retry) {
|
|
57
|
+
parts.push(` Retry: ${safe.retry}x`);
|
|
58
|
+
}
|
|
59
|
+
console.log(parts.join("\n"));
|
|
60
|
+
}
|
|
61
|
+
function logResponse(response) {
|
|
62
|
+
if (!response.config || !response.config.debug) return;
|
|
63
|
+
const status = response.status;
|
|
64
|
+
const statusText = response.statusText || "";
|
|
65
|
+
const duration = response.duration != null ? `${response.duration}ms` : "??";
|
|
66
|
+
const statusIcon = status >= 200 && status < 300 ? "\u2705" : status >= 400 ? "\u274C" : "\u26A0\uFE0F";
|
|
67
|
+
const parts = [
|
|
68
|
+
`\u{1F426}\u200D\u2B1B [Accessio] \u2190 ${statusIcon} ${status} ${statusText} (${duration})`
|
|
69
|
+
];
|
|
70
|
+
if (response.data) {
|
|
71
|
+
try {
|
|
72
|
+
const size = typeof response.data === "string" ? response.data.length : JSON.stringify(response.data).length;
|
|
73
|
+
parts.push(` Size: ~${formatBytes(size)}`);
|
|
74
|
+
} catch {
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
console.log(parts.join("\n"));
|
|
78
|
+
}
|
|
79
|
+
function logError(error, config) {
|
|
80
|
+
if (!config || !config.debug) return;
|
|
81
|
+
const parts = [`\u{1F426}\u200D\u2B1B [Accessio] \u2190 \u274C ERROR: ${error.message}`];
|
|
82
|
+
if (error.code) {
|
|
83
|
+
parts.push(` Code: ${error.code}`);
|
|
84
|
+
}
|
|
85
|
+
if (error.response) {
|
|
86
|
+
parts.push(` Status: ${error.response.status}`);
|
|
87
|
+
}
|
|
88
|
+
console.log(parts.join("\n"));
|
|
89
|
+
}
|
|
90
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
91
|
+
0 && (module.exports = {
|
|
92
|
+
logError,
|
|
93
|
+
logRequest,
|
|
94
|
+
logResponse
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=debug.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/helpers/debug.ts"],"sourcesContent":["import type { AccessioRequestConfig, AccessioResponse } from '../types';\nimport AccessioError from '../core/accessioError';\n\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n return `${(bytes / Math.pow(1024, i)).toFixed(1)} ${sizes[i]}`;\n}\n\nfunction sanitizeConfigForLog(\n config: AccessioRequestConfig,\n): { params: Record<string, unknown> | undefined; timeout: number | undefined; retry: number | undefined } {\n return {\n params: config.params,\n timeout: config.timeout,\n retry: config.retry,\n };\n}\n\nexport function logRequest(\n config: AccessioRequestConfig,\n fullUrl: string,\n): void {\n if (!config.debug) return;\n\n const safe = sanitizeConfigForLog(config);\n\n const method = (config.method || 'GET').toUpperCase();\n const url = fullUrl || config.url || '';\n\n const parts: string[] = [`🐦⬛ [Accessio] → ${method} ${url}`];\n\n if (safe.params && Object.keys(safe.params).length > 0) {\n parts.push(` Params: ${JSON.stringify(safe.params)}`);\n }\n\n if (config.data && typeof config.data === 'object') {\n const preview = JSON.stringify(config.data);\n const truncated =\n preview.length > 200 ? `${preview.substring(0, 200)}...` : preview;\n parts.push(` Body: ${truncated}`);\n }\n\n if (safe.timeout) {\n parts.push(` Timeout: ${safe.timeout}ms`);\n }\n\n if (safe.retry) {\n parts.push(` Retry: ${safe.retry}x`);\n }\n\n console.log(parts.join('\\n'));\n}\n\nexport function logResponse(response: AccessioResponse): void {\n if (!response.config || !response.config.debug) return;\n const status = response.status;\n const statusText = response.statusText || '';\n const duration =\n response.duration != null ? `${response.duration}ms` : '??';\n\n const statusIcon =\n status >= 200 && status < 300\n ? '✅'\n : status >= 400\n ? '❌'\n : '⚠️';\n\n const parts: string[] = [\n `🐦⬛ [Accessio] ← ${statusIcon} ${status} ${statusText} (${duration})`,\n ];\n\n if (response.data) {\n try {\n const size =\n typeof response.data === 'string'\n ? response.data.length\n : JSON.stringify(response.data).length;\n parts.push(` Size: ~${formatBytes(size)}`);\n } catch {\n // ignore\n }\n }\n\n console.log(parts.join('\\n'));\n}\n\nexport function logError(error: AccessioError, config?: AccessioRequestConfig): void {\n if (!config || !config.debug) return;\n\n const parts: string[] = [`🐦⬛ [Accessio] ← ❌ ERROR: ${error.message}`];\n\n if (error.code) {\n parts.push(` Code: ${error.code}`);\n }\n\n if (error.response) {\n parts.push(` Status: ${error.response.status}`);\n }\n\n console.log(parts.join('\\n'));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,SAAS,YAAY,OAAuB;AAC1C,MAAI,UAAU,EAAG,QAAO;AACxB,QAAM,QAAQ,CAAC,KAAK,MAAM,MAAM,IAAI;AACpC,QAAM,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC;AACrD,SAAO,IAAI,QAAQ,KAAK,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAC9D;AAEA,SAAS,qBACP,QACyG;AACzG,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,SAAS,OAAO;AAAA,IAChB,OAAO,OAAO;AAAA,EAChB;AACF;AAEO,SAAS,WACd,QACA,SACM;AACN,MAAI,CAAC,OAAO,MAAO;AAEnB,QAAM,OAAO,qBAAqB,MAAM;AAExC,QAAM,UAAU,OAAO,UAAU,OAAO,YAAY;AACpD,QAAM,MAAM,WAAW,OAAO,OAAO;AAErC,QAAM,QAAkB,CAAC,2CAAqB,MAAM,IAAI,GAAG,EAAE;AAE7D,MAAI,KAAK,UAAU,OAAO,KAAK,KAAK,MAAM,EAAE,SAAS,GAAG;AACtD,UAAM,KAAK,cAAc,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE;AAAA,EACxD;AAEA,MAAI,OAAO,QAAQ,OAAO,OAAO,SAAS,UAAU;AAClD,UAAM,UAAU,KAAK,UAAU,OAAO,IAAI;AAC1C,UAAM,YACJ,QAAQ,SAAS,MAAM,GAAG,QAAQ,UAAU,GAAG,GAAG,CAAC,QAAQ;AAC7D,UAAM,KAAK,YAAY,SAAS,EAAE;AAAA,EACpC;AAEA,MAAI,KAAK,SAAS;AAChB,UAAM,KAAK,eAAe,KAAK,OAAO,IAAI;AAAA,EAC5C;AAEA,MAAI,KAAK,OAAO;AACd,UAAM,KAAK,aAAa,KAAK,KAAK,GAAG;AAAA,EACvC;AAEA,UAAQ,IAAI,MAAM,KAAK,IAAI,CAAC;AAC9B;AAEO,SAAS,YAAY,UAAkC;AAC5D,MAAI,CAAC,SAAS,UAAU,CAAC,SAAS,OAAO,MAAO;AAChD,QAAM,SAAS,SAAS;AACxB,QAAM,aAAa,SAAS,cAAc;AAC1C,QAAM,WACJ,SAAS,YAAY,OAAO,GAAG,SAAS,QAAQ,OAAO;AAEzD,QAAM,aACJ,UAAU,OAAO,SAAS,MACtB,WACA,UAAU,MACR,WACA;AAER,QAAM,QAAkB;AAAA,IACtB,2CAAqB,UAAU,IAAI,MAAM,IAAI,UAAU,KAAK,QAAQ;AAAA,EACtE;AAEA,MAAI,SAAS,MAAM;AACjB,QAAI;AACF,YAAM,OACJ,OAAO,SAAS,SAAS,WACrB,SAAS,KAAK,SACd,KAAK,UAAU,SAAS,IAAI,EAAE;AACpC,YAAM,KAAK,aAAa,YAAY,IAAI,CAAC,EAAE;AAAA,IAC7C,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,UAAQ,IAAI,MAAM,KAAK,IAAI,CAAC;AAC9B;AAEO,SAAS,SAAS,OAAsB,QAAsC;AACnF,MAAI,CAAC,UAAU,CAAC,OAAO,MAAO;AAE9B,QAAM,QAAkB,CAAC,yDAA8B,MAAM,OAAO,EAAE;AAEtE,MAAI,MAAM,MAAM;AACd,UAAM,KAAK,YAAY,MAAM,IAAI,EAAE;AAAA,EACrC;AAEA,MAAI,MAAM,UAAU;AAClB,UAAM,KAAK,cAAc,MAAM,SAAS,MAAM,EAAE;AAAA,EAClD;AAEA,UAAQ,IAAI,MAAM,KAAK,IAAI,CAAC;AAC9B;","names":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var parseHeaders_exports = {};
|
|
20
|
+
__export(parseHeaders_exports, {
|
|
21
|
+
default: () => parseHeaders
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(parseHeaders_exports);
|
|
24
|
+
function parseHeaders(headers) {
|
|
25
|
+
const parsed = {};
|
|
26
|
+
if (!headers) return parsed;
|
|
27
|
+
if (typeof headers.forEach === "function") {
|
|
28
|
+
headers.forEach((value, key) => {
|
|
29
|
+
parsed[key.toLowerCase()] = value;
|
|
30
|
+
});
|
|
31
|
+
return parsed;
|
|
32
|
+
}
|
|
33
|
+
if (typeof headers === "string") {
|
|
34
|
+
headers.split("\n").forEach((line) => {
|
|
35
|
+
const index = line.indexOf(":");
|
|
36
|
+
if (index > 0) {
|
|
37
|
+
const key = line.substring(0, index).trim().toLowerCase();
|
|
38
|
+
const value = line.substring(index + 1).trim();
|
|
39
|
+
parsed[key] = value;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return parsed;
|
|
43
|
+
}
|
|
44
|
+
if (typeof headers === "object") {
|
|
45
|
+
Object.keys(headers).forEach((key) => {
|
|
46
|
+
parsed[key.toLowerCase()] = headers[key];
|
|
47
|
+
});
|
|
48
|
+
return parsed;
|
|
49
|
+
}
|
|
50
|
+
return parsed;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=parseHeaders.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/helpers/parseHeaders.ts"],"sourcesContent":["export default function parseHeaders(\n headers: any,\n): Record<string, string> {\n const parsed: Record<string, string> = {};\n\n if (!headers) return parsed;\n\n if (typeof headers.forEach === 'function') {\n headers.forEach((value: string, key: string) => {\n parsed[key.toLowerCase()] = value;\n });\n return parsed;\n }\n\n if (typeof headers === 'string') {\n headers.split('\\n').forEach((line: string) => {\n const index = line.indexOf(':');\n if (index > 0) {\n const key = line.substring(0, index).trim().toLowerCase();\n const value = line.substring(index + 1).trim();\n parsed[key] = value;\n }\n });\n return parsed;\n }\n\n if (typeof headers === 'object') {\n Object.keys(headers).forEach((key) => {\n parsed[key.toLowerCase()] = headers[key];\n });\n return parsed;\n }\n\n return parsed;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAe,SAAR,aACL,SACwB;AACxB,QAAM,SAAiC,CAAC;AAExC,MAAI,CAAC,QAAS,QAAO;AAErB,MAAI,OAAO,QAAQ,YAAY,YAAY;AACzC,YAAQ,QAAQ,CAAC,OAAe,QAAgB;AAC9C,aAAO,IAAI,YAAY,CAAC,IAAI;AAAA,IAC9B,CAAC;AACD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,UAAU;AAC/B,YAAQ,MAAM,IAAI,EAAE,QAAQ,CAAC,SAAiB;AAC5C,YAAM,QAAQ,KAAK,QAAQ,GAAG;AAC9B,UAAI,QAAQ,GAAG;AACb,cAAM,MAAM,KAAK,UAAU,GAAG,KAAK,EAAE,KAAK,EAAE,YAAY;AACxD,cAAM,QAAQ,KAAK,UAAU,QAAQ,CAAC,EAAE,KAAK;AAC7C,eAAO,GAAG,IAAI;AAAA,MAChB;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO,KAAK,OAAO,EAAE,QAAQ,CAAC,QAAQ;AACpC,aAAO,IAAI,YAAY,CAAC,IAAI,QAAQ,GAAG;AAAA,IACzC,CAAC;AACD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var rateLimiter_exports = {};
|
|
20
|
+
__export(rateLimiter_exports, {
|
|
21
|
+
createRateLimiter: () => createRateLimiter,
|
|
22
|
+
default: () => rateLimiter_default,
|
|
23
|
+
rateLimitedRequest: () => rateLimitedRequest
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(rateLimiter_exports);
|
|
26
|
+
function createRateLimiter(maxConcurrent = Infinity) {
|
|
27
|
+
if (maxConcurrent !== Infinity && (!Number.isInteger(maxConcurrent) || maxConcurrent < 1)) {
|
|
28
|
+
throw new RangeError(
|
|
29
|
+
`[Accessio] maxConcurrent must be a positive integer or Infinity, got: ${maxConcurrent}`
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
let active = 0;
|
|
33
|
+
let destroyed = false;
|
|
34
|
+
const queue = [];
|
|
35
|
+
function acquire() {
|
|
36
|
+
if (destroyed) {
|
|
37
|
+
return Promise.reject(
|
|
38
|
+
new Error("[Accessio] Rate limiter has been destroyed")
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
if (active < maxConcurrent) {
|
|
42
|
+
active++;
|
|
43
|
+
return Promise.resolve();
|
|
44
|
+
}
|
|
45
|
+
return new Promise((resolve, reject) => {
|
|
46
|
+
queue.push({ resolve, reject });
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function release() {
|
|
50
|
+
if (destroyed) return;
|
|
51
|
+
if (active <= 0) return;
|
|
52
|
+
active--;
|
|
53
|
+
if (queue.length > 0 && active < maxConcurrent) {
|
|
54
|
+
active++;
|
|
55
|
+
const next = queue.shift();
|
|
56
|
+
next?.resolve();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function destroy() {
|
|
60
|
+
destroyed = true;
|
|
61
|
+
const reason = new Error(
|
|
62
|
+
"[Accessio] Rate limiter destroyed \u2014 pending request cancelled"
|
|
63
|
+
);
|
|
64
|
+
while (queue.length > 0) {
|
|
65
|
+
const next = queue.shift();
|
|
66
|
+
next?.reject(reason);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
acquire,
|
|
71
|
+
release,
|
|
72
|
+
destroy,
|
|
73
|
+
get pending() {
|
|
74
|
+
return queue.length;
|
|
75
|
+
},
|
|
76
|
+
get active() {
|
|
77
|
+
return active;
|
|
78
|
+
},
|
|
79
|
+
get destroyed() {
|
|
80
|
+
return destroyed;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
async function rateLimitedRequest(dispatchFn, limiter, config) {
|
|
85
|
+
await limiter.acquire();
|
|
86
|
+
try {
|
|
87
|
+
return await dispatchFn(config);
|
|
88
|
+
} finally {
|
|
89
|
+
limiter.release();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
var rateLimiter_default = createRateLimiter;
|
|
93
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
94
|
+
0 && (module.exports = {
|
|
95
|
+
createRateLimiter,
|
|
96
|
+
rateLimitedRequest
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=rateLimiter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/helpers/rateLimiter.ts"],"sourcesContent":["import type {\n RateLimiter,\n AccessioRequestConfig,\n AccessioResponse,\n} from '../types';\n\ninterface QueueItem {\n resolve: () => void;\n reject: (reason: Error) => void;\n}\n\nexport function createRateLimiter(maxConcurrent: number = Infinity): RateLimiter {\n if (\n maxConcurrent !== Infinity &&\n (!Number.isInteger(maxConcurrent) || maxConcurrent < 1)\n ) {\n throw new RangeError(\n `[Accessio] maxConcurrent must be a positive integer or Infinity, got: ${maxConcurrent}`,\n );\n }\n let active = 0;\n let destroyed = false;\n const queue: QueueItem[] = [];\n\n function acquire(): Promise<void> {\n if (destroyed) {\n return Promise.reject(\n new Error('[Accessio] Rate limiter has been destroyed'),\n );\n }\n\n if (active < maxConcurrent) {\n active++;\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n queue.push({ resolve, reject });\n });\n }\n\n function release(): void {\n if (destroyed) return;\n\n if (active <= 0) return;\n\n active--;\n\n if (queue.length > 0 && active < maxConcurrent) {\n active++;\n const next = queue.shift();\n next?.resolve();\n }\n }\n\n function destroy(): void {\n destroyed = true;\n const reason = new Error(\n '[Accessio] Rate limiter destroyed — pending request cancelled',\n );\n while (queue.length > 0) {\n const next = queue.shift();\n next?.reject(reason);\n }\n }\n\n return {\n acquire,\n release,\n destroy,\n get pending() {\n return queue.length;\n },\n get active() {\n return active;\n },\n get destroyed() {\n return destroyed;\n },\n };\n}\n\nexport async function rateLimitedRequest<T = unknown>(\n dispatchFn: (config: AccessioRequestConfig) => Promise<AccessioResponse<T>>,\n limiter: RateLimiter,\n config: AccessioRequestConfig,\n): Promise<AccessioResponse<T>> {\n await limiter.acquire();\n try {\n return await dispatchFn(config);\n } finally {\n limiter.release();\n }\n}\n\nexport default createRateLimiter;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWO,SAAS,kBAAkB,gBAAwB,UAAuB;AAC/E,MACE,kBAAkB,aACjB,CAAC,OAAO,UAAU,aAAa,KAAK,gBAAgB,IACrD;AACA,UAAM,IAAI;AAAA,MACR,yEAAyE,aAAa;AAAA,IACxF;AAAA,EACF;AACA,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,QAAM,QAAqB,CAAC;AAE5B,WAAS,UAAyB;AAChC,QAAI,WAAW;AACb,aAAO,QAAQ;AAAA,QACb,IAAI,MAAM,4CAA4C;AAAA,MACxD;AAAA,IACF;AAEA,QAAI,SAAS,eAAe;AAC1B;AACA,aAAO,QAAQ,QAAQ;AAAA,IACzB;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,KAAK,EAAE,SAAS,OAAO,CAAC;AAAA,IAChC,CAAC;AAAA,EACH;AAEA,WAAS,UAAgB;AACvB,QAAI,UAAW;AAEf,QAAI,UAAU,EAAG;AAEjB;AAEA,QAAI,MAAM,SAAS,KAAK,SAAS,eAAe;AAC9C;AACA,YAAM,OAAO,MAAM,MAAM;AACzB,YAAM,QAAQ;AAAA,IAChB;AAAA,EACF;AAEA,WAAS,UAAgB;AACvB,gBAAY;AACZ,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,IACF;AACA,WAAO,MAAM,SAAS,GAAG;AACvB,YAAM,OAAO,MAAM,MAAM;AACzB,YAAM,OAAO,MAAM;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,UAAU;AACZ,aAAO,MAAM;AAAA,IACf;AAAA,IACA,IAAI,SAAS;AACX,aAAO;AAAA,IACT;AAAA,IACA,IAAI,YAAY;AACd,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,eAAsB,mBACpB,YACA,SACA,QAC8B;AAC9B,QAAM,QAAQ,QAAQ;AACtB,MAAI;AACF,WAAO,MAAM,WAAW,MAAM;AAAA,EAChC,UAAE;AACA,YAAQ,QAAQ;AAAA,EAClB;AACF;AAEA,IAAO,sBAAQ;","names":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var settle_exports = {};
|
|
30
|
+
__export(settle_exports, {
|
|
31
|
+
default: () => settle
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(settle_exports);
|
|
34
|
+
var import_accessioError = __toESM(require("../core/accessioError"), 1);
|
|
35
|
+
function settle(resolve, reject, response, config) {
|
|
36
|
+
const validateStatus = config.validateStatus;
|
|
37
|
+
if (!response.status || !validateStatus || validateStatus(response.status)) {
|
|
38
|
+
resolve(response);
|
|
39
|
+
} else {
|
|
40
|
+
const error = new import_accessioError.default(
|
|
41
|
+
`Request failed with status code ${response.status}`,
|
|
42
|
+
response.status >= 400 && response.status < 500 ? import_accessioError.default.ERR_BAD_REQUEST : import_accessioError.default.ERR_BAD_RESPONSE,
|
|
43
|
+
config,
|
|
44
|
+
response.request,
|
|
45
|
+
response
|
|
46
|
+
);
|
|
47
|
+
reject(error);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=settle.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/helpers/settle.ts"],"sourcesContent":["import AccessioError from '../core/accessioError';\nimport type { AccessioResponse, AccessioRequestConfig } from '../types';\n\nexport default function settle(\n resolve: (value: AccessioResponse) => void,\n reject: (reason: AccessioError) => void,\n response: AccessioResponse,\n config: AccessioRequestConfig,\n): void {\n const validateStatus = config.validateStatus;\n\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n const error = new AccessioError(\n `Request failed with status code ${response.status}`,\n response.status >= 400 && response.status < 500\n ? AccessioError.ERR_BAD_REQUEST\n : AccessioError.ERR_BAD_RESPONSE,\n config,\n response.request,\n response,\n );\n reject(error);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAA0B;AAGX,SAAR,OACL,SACA,QACA,UACA,QACM;AACN,QAAM,iBAAiB,OAAO;AAE9B,MAAI,CAAC,SAAS,UAAU,CAAC,kBAAkB,eAAe,SAAS,MAAM,GAAG;AAC1E,YAAQ,QAAQ;AAAA,EAClB,OAAO;AACL,UAAM,QAAQ,IAAI,qBAAAA;AAAA,MAChB,mCAAmC,SAAS,MAAM;AAAA,MAClD,SAAS,UAAU,OAAO,SAAS,SAAS,MACxC,qBAAAA,QAAc,kBACd,qBAAAA,QAAc;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AACF;","names":["AccessioError"]}
|