accessio 1.0.0 → 1.1.1
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/README.md +121 -391
- package/cjs/accessio.cjs +23 -52
- package/cjs/accessio.cjs.map +1 -1
- package/cjs/core/accessioError.cjs +1 -7
- package/cjs/core/accessioError.cjs.map +1 -1
- package/cjs/core/buildURL.cjs +3 -7
- package/cjs/core/buildURL.cjs.map +1 -1
- package/cjs/core/mergeConfig.cjs +2 -4
- package/cjs/core/mergeConfig.cjs.map +1 -1
- package/cjs/core/request.cjs +74 -66
- package/cjs/core/request.cjs.map +1 -1
- package/cjs/core/retry.cjs +2 -11
- package/cjs/core/retry.cjs.map +1 -1
- package/cjs/defaults/index.cjs.map +1 -1
- package/cjs/defaults/transforms.cjs +8 -1
- package/cjs/defaults/transforms.cjs.map +1 -1
- package/cjs/helpers/debug.cjs +1 -3
- package/cjs/helpers/debug.cjs.map +1 -1
- package/cjs/helpers/parseHeaders.cjs.map +1 -1
- package/cjs/helpers/rateLimiter.cjs +13 -7
- package/cjs/helpers/rateLimiter.cjs.map +1 -1
- package/cjs/helpers/transformData.cjs.map +1 -1
- package/cjs/index.cjs.map +1 -1
- package/cjs/interceptors/interceptorManager.cjs +40 -3
- package/cjs/interceptors/interceptorManager.cjs.map +1 -1
- package/package.json +7 -15
- package/src/accessio.ts +28 -72
- package/src/core/accessioError.ts +1 -7
- package/src/core/buildURL.ts +6 -15
- package/src/core/mergeConfig.ts +6 -16
- package/src/core/request.ts +90 -74
- package/src/core/retry.ts +4 -19
- package/src/defaults/index.ts +1 -3
- package/src/defaults/transforms.ts +9 -5
- package/src/helpers/debug.ts +12 -22
- package/src/helpers/parseHeaders.ts +1 -3
- package/src/helpers/rateLimiter.ts +19 -16
- package/src/helpers/transformData.ts +1 -4
- package/src/index.ts +3 -11
- package/src/interceptors/interceptorManager.ts +50 -2
- package/src/types.ts +8 -68
package/cjs/accessio.cjs
CHANGED
|
@@ -40,11 +40,12 @@ var import_buildURL = __toESM(require("./core/buildURL"), 1);
|
|
|
40
40
|
var import_retry = __toESM(require("./core/retry"), 1);
|
|
41
41
|
var import_debug = require("./helpers/debug");
|
|
42
42
|
var import_rateLimiter = require("./helpers/rateLimiter");
|
|
43
|
+
var import_defaults = __toESM(require("./defaults/index"), 1);
|
|
43
44
|
class Accessio {
|
|
44
45
|
defaults;
|
|
45
46
|
interceptors;
|
|
46
47
|
constructor(instanceConfig = {}) {
|
|
47
|
-
this.defaults = instanceConfig;
|
|
48
|
+
this.defaults = (0, import_mergeConfig.default)(import_defaults.default, instanceConfig);
|
|
48
49
|
this.interceptors = {
|
|
49
50
|
request: new import_interceptorManager.default(),
|
|
50
51
|
response: new import_interceptorManager.default()
|
|
@@ -80,23 +81,15 @@ class Accessio {
|
|
|
80
81
|
});
|
|
81
82
|
let promise = Promise.resolve(mergedConfig);
|
|
82
83
|
for (const interceptor of requestInterceptors) {
|
|
83
|
-
promise = promise.then(
|
|
84
|
-
(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
},
|
|
90
|
-
interceptor.rejected
|
|
91
|
-
);
|
|
84
|
+
promise = promise.then((value) => {
|
|
85
|
+
if (interceptor.fulfilled) {
|
|
86
|
+
return interceptor.fulfilled(value);
|
|
87
|
+
}
|
|
88
|
+
return value;
|
|
89
|
+
}, interceptor.rejected);
|
|
92
90
|
}
|
|
93
91
|
promise = promise.then((cfg) => {
|
|
94
|
-
const fullUrl = (0, import_buildURL.default)(
|
|
95
|
-
cfg.url ?? "",
|
|
96
|
-
cfg.baseURL,
|
|
97
|
-
cfg.params,
|
|
98
|
-
cfg.paramsSerializer
|
|
99
|
-
);
|
|
92
|
+
const fullUrl = (0, import_buildURL.default)(cfg.url ?? "", cfg.baseURL, cfg.params, cfg.paramsSerializer);
|
|
100
93
|
(0, import_debug.logRequest)(cfg, fullUrl);
|
|
101
94
|
const enrichedCfg = fullUrl !== (cfg.url || "") ? { ...cfg, _builtUrl: fullUrl } : cfg;
|
|
102
95
|
const dispatchFn = cfg.rateLimiter ? (config2) => (0, import_rateLimiter.rateLimitedRequest)(import_request.default, config2.rateLimiter, config2) : import_request.default;
|
|
@@ -113,61 +106,39 @@ class Accessio {
|
|
|
113
106
|
}
|
|
114
107
|
);
|
|
115
108
|
for (const interceptor of responseInterceptors) {
|
|
116
|
-
promise = promise.then(
|
|
117
|
-
(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
},
|
|
123
|
-
interceptor.rejected
|
|
124
|
-
);
|
|
109
|
+
promise = promise.then((value) => {
|
|
110
|
+
if (interceptor.fulfilled) {
|
|
111
|
+
return interceptor.fulfilled(value);
|
|
112
|
+
}
|
|
113
|
+
return value;
|
|
114
|
+
}, interceptor.rejected);
|
|
125
115
|
}
|
|
126
116
|
return promise;
|
|
127
117
|
}
|
|
128
118
|
getUri(config) {
|
|
129
119
|
const merged = (0, import_mergeConfig.default)(this.defaults, config);
|
|
130
|
-
return (0, import_buildURL.default)(
|
|
131
|
-
merged.url ?? "",
|
|
132
|
-
merged.baseURL,
|
|
133
|
-
merged.params,
|
|
134
|
-
merged.paramsSerializer
|
|
135
|
-
);
|
|
120
|
+
return (0, import_buildURL.default)(merged.url ?? "", merged.baseURL, merged.params, merged.paramsSerializer);
|
|
136
121
|
}
|
|
137
122
|
get(url, config) {
|
|
138
|
-
return this.request(
|
|
139
|
-
(0, import_mergeConfig.default)(config || {}, { method: "get", url })
|
|
140
|
-
);
|
|
123
|
+
return this.request((0, import_mergeConfig.default)(config || {}, { method: "get", url }));
|
|
141
124
|
}
|
|
142
125
|
delete(url, config) {
|
|
143
|
-
return this.request(
|
|
144
|
-
(0, import_mergeConfig.default)(config || {}, { method: "delete", url })
|
|
145
|
-
);
|
|
126
|
+
return this.request((0, import_mergeConfig.default)(config || {}, { method: "delete", url }));
|
|
146
127
|
}
|
|
147
128
|
head(url, config) {
|
|
148
|
-
return this.request(
|
|
149
|
-
(0, import_mergeConfig.default)(config || {}, { method: "head", url })
|
|
150
|
-
);
|
|
129
|
+
return this.request((0, import_mergeConfig.default)(config || {}, { method: "head", url }));
|
|
151
130
|
}
|
|
152
131
|
options(url, config) {
|
|
153
|
-
return this.request(
|
|
154
|
-
(0, import_mergeConfig.default)(config || {}, { method: "options", url })
|
|
155
|
-
);
|
|
132
|
+
return this.request((0, import_mergeConfig.default)(config || {}, { method: "options", url }));
|
|
156
133
|
}
|
|
157
134
|
post(url, data, config) {
|
|
158
|
-
return this.request(
|
|
159
|
-
(0, import_mergeConfig.default)(config || {}, { method: "post", url, data })
|
|
160
|
-
);
|
|
135
|
+
return this.request((0, import_mergeConfig.default)(config || {}, { method: "post", url, data }));
|
|
161
136
|
}
|
|
162
137
|
put(url, data, config) {
|
|
163
|
-
return this.request(
|
|
164
|
-
(0, import_mergeConfig.default)(config || {}, { method: "put", url, data })
|
|
165
|
-
);
|
|
138
|
+
return this.request((0, import_mergeConfig.default)(config || {}, { method: "put", url, data }));
|
|
166
139
|
}
|
|
167
140
|
patch(url, data, config) {
|
|
168
|
-
return this.request(
|
|
169
|
-
(0, import_mergeConfig.default)(config || {}, { method: "patch", url, data })
|
|
170
|
-
);
|
|
141
|
+
return this.request((0, import_mergeConfig.default)(config || {}, { method: "patch", url, data }));
|
|
171
142
|
}
|
|
172
143
|
postForm(url, data, config) {
|
|
173
144
|
return this.request(
|
package/cjs/accessio.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/accessio.ts"],"sourcesContent":["import InterceptorManager from './interceptors/interceptorManager';\nimport AccessioError from './core/accessioError';\nimport mergeConfig from './core/mergeConfig';\nimport dispatchRequest from './core/request';\nimport buildURL from './core/buildURL';\nimport retryRequest from './core/retry';\nimport { logRequest, logResponse, logError } from './helpers/debug';\nimport { rateLimitedRequest } from './helpers/rateLimiter';\nimport type {\n AccessioRequestConfig,\n AccessioResponse,\n Interceptors,\n InterceptorHandler,\n} from './types';\n\nexport class Accessio {\n defaults: AccessioRequestConfig;\n interceptors: Interceptors;\n\n constructor(instanceConfig: AccessioRequestConfig = {}) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager(),\n };\n }\n\n request<T = any>(\n configOrUrl: string | AccessioRequestConfig,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n if (typeof configOrUrl === 'string') {\n config = { ...config, url: configOrUrl };\n } else {\n config = configOrUrl ? { ...configOrUrl } : {};\n }\n\n const mergedConfig = mergeConfig(this.defaults, config);\n\n mergedConfig.method = (mergedConfig.method || 'get').toLowerCase();\n\n if (!mergedConfig.url && !mergedConfig.baseURL) {\n throw new AccessioError(\n 'Request URL is required. Provide a `url` or `baseURL` in the config.',\n AccessioError.ERR_BAD_OPTION,\n mergedConfig,\n null,\n null,\n );\n }\n\n const requestInterceptors: any[] = [];\n const responseInterceptors: any[] = [];\n\n this.interceptors.request.forEach((interceptor: InterceptorHandler) => {\n if (interceptor.runWhen && !interceptor.runWhen(mergedConfig)) {\n return;\n }\n requestInterceptors.unshift(interceptor);\n });\n\n this.interceptors.response.forEach((interceptor: InterceptorHandler) => {\n responseInterceptors.push(interceptor);\n });\n\n let promise: Promise<any> = Promise.resolve(mergedConfig);\n\n for (const interceptor of requestInterceptors) {\n promise = promise.then(\n (value: any) => {\n if (interceptor.fulfilled) {\n return interceptor.fulfilled(value);\n }\n return value;\n },\n interceptor.rejected,\n );\n }\n\n promise = promise.then((cfg: any) => {\n const fullUrl = buildURL(\n cfg.url ?? '',\n cfg.baseURL,\n cfg.params,\n cfg.paramsSerializer,\n );\n\n logRequest(cfg, fullUrl);\n\n const enrichedCfg =\n fullUrl !== (cfg.url || '')\n ? { ...cfg, _builtUrl: fullUrl }\n : cfg;\n\n const dispatchFn = cfg.rateLimiter\n ? (config: AccessioRequestConfig) =>\n rateLimitedRequest(dispatchRequest, config.rateLimiter!, config)\n : dispatchRequest;\n\n return retryRequest(dispatchFn, enrichedCfg);\n });\n\n promise = promise.then(\n (value: any) => {\n logResponse(value);\n return value;\n },\n (error: any) => {\n logError(error, mergedConfig);\n throw error;\n },\n );\n\n for (const interceptor of responseInterceptors) {\n promise = promise.then(\n (value: any) => {\n if (interceptor.fulfilled) {\n return interceptor.fulfilled(value);\n }\n return value;\n },\n interceptor.rejected,\n );\n }\n\n return promise;\n }\n\n getUri(config?: AccessioRequestConfig): string {\n const merged = mergeConfig(this.defaults, config);\n return buildURL(\n merged.url ?? '',\n merged.baseURL,\n merged.params,\n merged.paramsSerializer,\n );\n }\n\n get<T = any>(\n url: string,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, { method: 'get', url }),\n );\n }\n\n delete<T = any>(\n url: string,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, { method: 'delete', url }),\n );\n }\n\n head<T = any>(\n url: string,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, { method: 'head', url }),\n );\n }\n\n options<T = any>(\n url: string,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, { method: 'options', url }),\n );\n }\n\n post<T = any>(\n url: string,\n data?: any,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, { method: 'post', url, data }),\n );\n }\n\n put<T = any>(\n url: string,\n data?: any,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, { method: 'put', url, data }),\n );\n }\n\n patch<T = any>(\n url: string,\n data?: any,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, { method: 'patch', url, data }),\n );\n }\n\n postForm<T = any>(\n url: string,\n data?: any,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, {\n method: 'post',\n url,\n data,\n headers: { 'Content-Type': 'multipart/form-data' },\n }),\n );\n }\n\n putForm<T = any>(\n url: string,\n data?: any,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, {\n method: 'put',\n url,\n data,\n headers: { 'Content-Type': 'multipart/form-data' },\n }),\n );\n }\n\n patchForm<T = any>(\n url: string,\n data?: any,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, {\n method: 'patch',\n url,\n data,\n headers: { 'Content-Type': 'multipart/form-data' },\n }),\n );\n }\n}\n\nexport default Accessio;\n"],"mappings":"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","names":["InterceptorManager","mergeConfig","AccessioError","buildURL","config","dispatchRequest","retryRequest"]}
|
|
1
|
+
{"version":3,"sources":["../src/accessio.ts"],"sourcesContent":["import InterceptorManager from './interceptors/interceptorManager';\nimport AccessioError from './core/accessioError';\nimport mergeConfig from './core/mergeConfig';\nimport dispatchRequest from './core/request';\nimport buildURL from './core/buildURL';\nimport retryRequest from './core/retry';\nimport { logRequest, logResponse, logError } from './helpers/debug';\nimport { rateLimitedRequest } from './helpers/rateLimiter';\nimport type {\n AccessioRequestConfig,\n AccessioResponse,\n Interceptors,\n InterceptorHandler,\n} from './types';\nimport defaultsConfig from './defaults/index';\n\nexport class Accessio {\n defaults: AccessioRequestConfig;\n interceptors: Interceptors;\n\n constructor(instanceConfig: AccessioRequestConfig = {}) {\n this.defaults = mergeConfig(defaultsConfig, instanceConfig);\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager(),\n };\n }\n\n request<T = any>(\n configOrUrl: string | AccessioRequestConfig,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n if (typeof configOrUrl === 'string') {\n config = { ...config, url: configOrUrl };\n } else {\n config = configOrUrl ? { ...configOrUrl } : {};\n }\n\n const mergedConfig = mergeConfig(this.defaults, config);\n\n mergedConfig.method = (mergedConfig.method || 'get').toLowerCase();\n\n if (!mergedConfig.url && !mergedConfig.baseURL) {\n throw new AccessioError(\n 'Request URL is required. Provide a `url` or `baseURL` in the config.',\n AccessioError.ERR_BAD_OPTION,\n mergedConfig,\n null,\n null,\n );\n }\n\n const requestInterceptors: any[] = [];\n const responseInterceptors: any[] = [];\n\n this.interceptors.request.forEach((interceptor: InterceptorHandler) => {\n if (interceptor.runWhen && !interceptor.runWhen(mergedConfig)) {\n return;\n }\n requestInterceptors.unshift(interceptor);\n });\n\n this.interceptors.response.forEach((interceptor: InterceptorHandler) => {\n responseInterceptors.push(interceptor);\n });\n\n let promise: Promise<any> = Promise.resolve(mergedConfig);\n\n for (const interceptor of requestInterceptors) {\n promise = promise.then((value: any) => {\n if (interceptor.fulfilled) {\n return interceptor.fulfilled(value);\n }\n return value;\n }, interceptor.rejected);\n }\n\n promise = promise.then((cfg: any) => {\n const fullUrl = buildURL(cfg.url ?? '', cfg.baseURL, cfg.params, cfg.paramsSerializer);\n\n logRequest(cfg, fullUrl);\n\n const enrichedCfg = fullUrl !== (cfg.url || '') ? { ...cfg, _builtUrl: fullUrl } : cfg;\n\n const dispatchFn = cfg.rateLimiter\n ? (config: AccessioRequestConfig) =>\n rateLimitedRequest(dispatchRequest, config.rateLimiter!, config)\n : dispatchRequest;\n\n return retryRequest(dispatchFn, enrichedCfg);\n });\n\n promise = promise.then(\n (value: any) => {\n logResponse(value);\n return value;\n },\n (error: any) => {\n logError(error, mergedConfig);\n throw error;\n },\n );\n\n for (const interceptor of responseInterceptors) {\n promise = promise.then((value: any) => {\n if (interceptor.fulfilled) {\n return interceptor.fulfilled(value);\n }\n return value;\n }, interceptor.rejected);\n }\n\n return promise;\n }\n\n getUri(config?: AccessioRequestConfig): string {\n const merged = mergeConfig(this.defaults, config);\n return buildURL(merged.url ?? '', merged.baseURL, merged.params, merged.paramsSerializer);\n }\n\n get<T = any>(url: string, config?: AccessioRequestConfig): Promise<AccessioResponse<T>> {\n return this.request<T>(mergeConfig(config || {}, { method: 'get', url }));\n }\n\n delete<T = any>(url: string, config?: AccessioRequestConfig): Promise<AccessioResponse<T>> {\n return this.request<T>(mergeConfig(config || {}, { method: 'delete', url }));\n }\n\n head<T = any>(url: string, config?: AccessioRequestConfig): Promise<AccessioResponse<T>> {\n return this.request<T>(mergeConfig(config || {}, { method: 'head', url }));\n }\n\n options<T = any>(url: string, config?: AccessioRequestConfig): Promise<AccessioResponse<T>> {\n return this.request<T>(mergeConfig(config || {}, { method: 'options', url }));\n }\n\n post<T = any>(\n url: string,\n data?: any,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(mergeConfig(config || {}, { method: 'post', url, data }));\n }\n\n put<T = any>(\n url: string,\n data?: any,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(mergeConfig(config || {}, { method: 'put', url, data }));\n }\n\n patch<T = any>(\n url: string,\n data?: any,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(mergeConfig(config || {}, { method: 'patch', url, data }));\n }\n\n postForm<T = any>(\n url: string,\n data?: any,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, {\n method: 'post',\n url,\n data,\n headers: { 'Content-Type': 'multipart/form-data' },\n }),\n );\n }\n\n putForm<T = any>(\n url: string,\n data?: any,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, {\n method: 'put',\n url,\n data,\n headers: { 'Content-Type': 'multipart/form-data' },\n }),\n );\n }\n\n patchForm<T = any>(\n url: string,\n data?: any,\n config?: AccessioRequestConfig,\n ): Promise<AccessioResponse<T>> {\n return this.request<T>(\n mergeConfig(config || {}, {\n method: 'patch',\n url,\n data,\n headers: { 'Content-Type': 'multipart/form-data' },\n }),\n );\n }\n}\n\nexport default Accessio;\n"],"mappings":"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","names":["mergeConfig","defaultsConfig","InterceptorManager","AccessioError","buildURL","config","dispatchRequest","retryRequest"]}
|
|
@@ -73,13 +73,7 @@ class AccessioError extends Error {
|
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
75
|
static from(error, code, config, request, response) {
|
|
76
|
-
const accessioError = new AccessioError(
|
|
77
|
-
error.message,
|
|
78
|
-
code,
|
|
79
|
-
config,
|
|
80
|
-
request,
|
|
81
|
-
response
|
|
82
|
-
);
|
|
76
|
+
const accessioError = new AccessioError(error.message, code, config, request, response);
|
|
83
77
|
accessioError.cause = error;
|
|
84
78
|
accessioError.stack = error.stack;
|
|
85
79
|
return accessioError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/accessioError.ts"],"sourcesContent":["import ErrorCodes from '../constants/errorCodes';\nimport type { AccessioRequestConfig, AccessioResponse } from '../types';\n\nexport class AccessioError extends Error {\n static ERR_BAD_OPTION_VALUE: string = ErrorCodes.ERR_BAD_OPTION_VALUE;\n static ERR_BAD_OPTION: string = ErrorCodes.ERR_BAD_OPTION;\n static ECONNABORTED: string = ErrorCodes.ECONNABORTED;\n static ETIMEDOUT: string = ErrorCodes.ETIMEDOUT;\n static ERR_NETWORK: string = ErrorCodes.ERR_NETWORK;\n static ERR_FR_TOO_MANY_REDIRECTS: string = ErrorCodes.ERR_FR_TOO_MANY_REDIRECTS;\n static ERR_BAD_RESPONSE: string = ErrorCodes.ERR_BAD_RESPONSE;\n static ERR_BAD_REQUEST: string = ErrorCodes.ERR_BAD_REQUEST;\n static ERR_CANCELED: string = ErrorCodes.ERR_CANCELED;\n static ERR_NOT_SUPPORT: string = ErrorCodes.ERR_NOT_SUPPORT;\n static ERR_INVALID_URL: string = ErrorCodes.ERR_INVALID_URL;\n\n readonly code: string | null;\n readonly config: AccessioRequestConfig | null;\n readonly request: unknown;\n readonly response: AccessioResponse | null;\n readonly isAccessioError: true;\n cause?: Error;\n\n constructor(\n message: string,\n code: string | null,\n config: AccessioRequestConfig | null,\n request: unknown,\n response: AccessioResponse | null,\n ) {\n super(message);\n this.name = 'AccessioError';\n this.code = code ?? null;\n this.config = config ?? null;\n this.request = request ?? null;\n this.response = response ?? null;\n this.isAccessioError = true;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, AccessioError);\n }\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n status: this.response ? this.response.status : null,\n config: this.config,\n };\n }\n\n static from(\n error: Error,\n code: string,\n config: AccessioRequestConfig | null,\n request: unknown,\n response: AccessioResponse | null,\n ): AccessioError {\n const accessioError = new AccessioError(
|
|
1
|
+
{"version":3,"sources":["../../src/core/accessioError.ts"],"sourcesContent":["import ErrorCodes from '../constants/errorCodes';\nimport type { AccessioRequestConfig, AccessioResponse } from '../types';\n\nexport class AccessioError extends Error {\n static ERR_BAD_OPTION_VALUE: string = ErrorCodes.ERR_BAD_OPTION_VALUE;\n static ERR_BAD_OPTION: string = ErrorCodes.ERR_BAD_OPTION;\n static ECONNABORTED: string = ErrorCodes.ECONNABORTED;\n static ETIMEDOUT: string = ErrorCodes.ETIMEDOUT;\n static ERR_NETWORK: string = ErrorCodes.ERR_NETWORK;\n static ERR_FR_TOO_MANY_REDIRECTS: string = ErrorCodes.ERR_FR_TOO_MANY_REDIRECTS;\n static ERR_BAD_RESPONSE: string = ErrorCodes.ERR_BAD_RESPONSE;\n static ERR_BAD_REQUEST: string = ErrorCodes.ERR_BAD_REQUEST;\n static ERR_CANCELED: string = ErrorCodes.ERR_CANCELED;\n static ERR_NOT_SUPPORT: string = ErrorCodes.ERR_NOT_SUPPORT;\n static ERR_INVALID_URL: string = ErrorCodes.ERR_INVALID_URL;\n\n readonly code: string | null;\n readonly config: AccessioRequestConfig | null;\n readonly request: unknown;\n readonly response: AccessioResponse | null;\n readonly isAccessioError: true;\n cause?: Error;\n\n constructor(\n message: string,\n code: string | null,\n config: AccessioRequestConfig | null,\n request: unknown,\n response: AccessioResponse | null,\n ) {\n super(message);\n this.name = 'AccessioError';\n this.code = code ?? null;\n this.config = config ?? null;\n this.request = request ?? null;\n this.response = response ?? null;\n this.isAccessioError = true;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, AccessioError);\n }\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n status: this.response ? this.response.status : null,\n config: this.config,\n };\n }\n\n static from(\n error: Error,\n code: string,\n config: AccessioRequestConfig | null,\n request: unknown,\n response: AccessioResponse | null,\n ): AccessioError {\n const accessioError = new AccessioError(error.message, code, config, request, response);\n accessioError.cause = error;\n accessioError.stack = error.stack;\n return accessioError;\n }\n}\n\nexport default AccessioError;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAuB;AAGhB,MAAM,sBAAsB,MAAM;AAAA,EACvC,OAAO,uBAA+B,kBAAAA,QAAW;AAAA,EACjD,OAAO,iBAAyB,kBAAAA,QAAW;AAAA,EAC3C,OAAO,eAAuB,kBAAAA,QAAW;AAAA,EACzC,OAAO,YAAoB,kBAAAA,QAAW;AAAA,EACtC,OAAO,cAAsB,kBAAAA,QAAW;AAAA,EACxC,OAAO,4BAAoC,kBAAAA,QAAW;AAAA,EACtD,OAAO,mBAA2B,kBAAAA,QAAW;AAAA,EAC7C,OAAO,kBAA0B,kBAAAA,QAAW;AAAA,EAC5C,OAAO,eAAuB,kBAAAA,QAAW;AAAA,EACzC,OAAO,kBAA0B,kBAAAA,QAAW;AAAA,EAC5C,OAAO,kBAA0B,kBAAAA,QAAW;AAAA,EAEnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACT;AAAA,EAEA,YACE,SACA,MACA,QACA,SACA,UACA;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO,QAAQ;AACpB,SAAK,SAAS,UAAU;AACxB,SAAK,UAAU,WAAW;AAC1B,SAAK,WAAW,YAAY;AAC5B,SAAK,kBAAkB;AAEvB,QAAI,MAAM,mBAAmB;AAC3B,YAAM,kBAAkB,MAAM,aAAa;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,SAAkC;AAChC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK,WAAW,KAAK,SAAS,SAAS;AAAA,MAC/C,QAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAAA,EAEA,OAAO,KACL,OACA,MACA,QACA,SACA,UACe;AACf,UAAM,gBAAgB,IAAI,cAAc,MAAM,SAAS,MAAM,QAAQ,SAAS,QAAQ;AACtF,kBAAc,QAAQ;AACtB,kBAAc,QAAQ,MAAM;AAC5B,WAAO;AAAA,EACT;AACF;AAEA,IAAO,wBAAQ;","names":["ErrorCodes"]}
|
package/cjs/core/buildURL.cjs
CHANGED
|
@@ -42,7 +42,7 @@ function serializeParams(params, paramsSerializer) {
|
|
|
42
42
|
if (typeof item === "object" && item !== null) {
|
|
43
43
|
encode(`${prefix}[${index}]`, item);
|
|
44
44
|
} else {
|
|
45
|
-
encode(
|
|
45
|
+
encode(prefix, item);
|
|
46
46
|
}
|
|
47
47
|
});
|
|
48
48
|
} else if (typeof value === "object" && !(value instanceof Date)) {
|
|
@@ -51,11 +51,7 @@ function serializeParams(params, paramsSerializer) {
|
|
|
51
51
|
});
|
|
52
52
|
} else {
|
|
53
53
|
const encodedValue = value instanceof Date ? value.toISOString() : value;
|
|
54
|
-
parts.push(
|
|
55
|
-
`${encodeURIComponent(prefix)}=${encodeURIComponent(
|
|
56
|
-
encodedValue
|
|
57
|
-
)}`
|
|
58
|
-
);
|
|
54
|
+
parts.push(`${encodeURIComponent(prefix)}=${encodeURIComponent(encodedValue)}`);
|
|
59
55
|
}
|
|
60
56
|
}
|
|
61
57
|
Object.keys(params).forEach((key) => {
|
|
@@ -77,7 +73,7 @@ function combineURLs(baseURL, relativeURL) {
|
|
|
77
73
|
return `${base}/${relative}`;
|
|
78
74
|
}
|
|
79
75
|
function isAbsoluteURL(url) {
|
|
80
|
-
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
|
|
76
|
+
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url) || /^([a-z][a-z\d+\-.]*:)/i.test(url);
|
|
81
77
|
}
|
|
82
78
|
function buildURL(url, baseURL, params, paramsSerializer) {
|
|
83
79
|
let fullURL = baseURL && !isAbsoluteURL(url) ? combineURLs(baseURL, url) : url || "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/buildURL.ts"],"sourcesContent":["import type { ParamsSerializer } from '../types';\n\nfunction serializeParams(\n params: Record<string, unknown>,\n paramsSerializer?: ParamsSerializer,\n): string {\n if (!params) return '';\n\n if (typeof paramsSerializer === 'function') {\n return paramsSerializer(params);\n }\n\n if (
|
|
1
|
+
{"version":3,"sources":["../../src/core/buildURL.ts"],"sourcesContent":["import type { ParamsSerializer } from '../types';\n\nfunction serializeParams(\n params: Record<string, unknown>,\n paramsSerializer?: ParamsSerializer,\n): string {\n if (!params) return '';\n\n if (typeof paramsSerializer === 'function') {\n return paramsSerializer(params);\n }\n\n if (typeof URLSearchParams !== 'undefined' && params instanceof URLSearchParams) {\n return params.toString();\n }\n\n const parts: string[] = [];\n\n function encode(prefix: string, value: unknown): void {\n if (value === null || value === undefined) {\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) => {\n if (typeof item === 'object' && item !== null) {\n encode(`${prefix}[${index}]`, item);\n } else {\n encode(prefix, item);\n }\n });\n } else if (typeof value === 'object' && !(value instanceof Date)) {\n Object.keys(value as Record<string, unknown>).forEach((key) => {\n encode(`${prefix}[${key}]`, (value as Record<string, unknown>)[key]);\n });\n } else {\n const encodedValue = value instanceof Date ? value.toISOString() : value;\n parts.push(`${encodeURIComponent(prefix)}=${encodeURIComponent(encodedValue as string)}`);\n }\n }\n\n Object.keys(params).forEach((key) => {\n encode(key, params[key]);\n });\n\n return parts.join('&');\n}\n\nfunction combineURLs(baseURL: string, relativeURL: string): string {\n if (!baseURL) return relativeURL || '';\n if (!relativeURL) return baseURL;\n\n let base = baseURL;\n while (base.endsWith('/')) {\n base = base.slice(0, -1);\n }\n\n let relative = relativeURL;\n while (relative.startsWith('/')) {\n relative = relative.slice(1);\n }\n\n return `${base}/${relative}`;\n}\n\nfunction isAbsoluteURL(url: string): boolean {\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url) || /^([a-z][a-z\\d+\\-.]*:)/i.test(url);\n}\n\nexport default function buildURL(\n url: string,\n baseURL?: string,\n params?: Record<string, unknown>,\n paramsSerializer?: ParamsSerializer,\n): string {\n let fullURL = baseURL && !isAbsoluteURL(url) ? combineURLs(baseURL, url) : url || '';\n\n const serialized = serializeParams(params as Record<string, unknown>, paramsSerializer);\n if (serialized) {\n const hashIndex = fullURL.indexOf('#');\n if (hashIndex !== -1) {\n fullURL = fullURL.slice(0, hashIndex);\n }\n fullURL += (fullURL.indexOf('?') === -1 ? '?' : '&') + serialized;\n }\n\n return fullURL;\n}\n\nexport { serializeParams, combineURLs, isAbsoluteURL };\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,SAAS,gBACP,QACA,kBACQ;AACR,MAAI,CAAC,OAAQ,QAAO;AAEpB,MAAI,OAAO,qBAAqB,YAAY;AAC1C,WAAO,iBAAiB,MAAM;AAAA,EAChC;AAEA,MAAI,OAAO,oBAAoB,eAAe,kBAAkB,iBAAiB;AAC/E,WAAO,OAAO,SAAS;AAAA,EACzB;AAEA,QAAM,QAAkB,CAAC;AAEzB,WAAS,OAAO,QAAgB,OAAsB;AACpD,QAAI,UAAU,QAAQ,UAAU,QAAW;AACzC;AAAA,IACF;AAEA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAM,QAAQ,CAAC,MAAM,UAAU;AAC7B,YAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,iBAAO,GAAG,MAAM,IAAI,KAAK,KAAK,IAAI;AAAA,QACpC,OAAO;AACL,iBAAO,QAAQ,IAAI;AAAA,QACrB;AAAA,MACF,CAAC;AAAA,IACH,WAAW,OAAO,UAAU,YAAY,EAAE,iBAAiB,OAAO;AAChE,aAAO,KAAK,KAAgC,EAAE,QAAQ,CAAC,QAAQ;AAC7D,eAAO,GAAG,MAAM,IAAI,GAAG,KAAM,MAAkC,GAAG,CAAC;AAAA,MACrE,CAAC;AAAA,IACH,OAAO;AACL,YAAM,eAAe,iBAAiB,OAAO,MAAM,YAAY,IAAI;AACnE,YAAM,KAAK,GAAG,mBAAmB,MAAM,CAAC,IAAI,mBAAmB,YAAsB,CAAC,EAAE;AAAA,IAC1F;AAAA,EACF;AAEA,SAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,QAAQ;AACnC,WAAO,KAAK,OAAO,GAAG,CAAC;AAAA,EACzB,CAAC;AAED,SAAO,MAAM,KAAK,GAAG;AACvB;AAEA,SAAS,YAAY,SAAiB,aAA6B;AACjE,MAAI,CAAC,QAAS,QAAO,eAAe;AACpC,MAAI,CAAC,YAAa,QAAO;AAEzB,MAAI,OAAO;AACX,SAAO,KAAK,SAAS,GAAG,GAAG;AACzB,WAAO,KAAK,MAAM,GAAG,EAAE;AAAA,EACzB;AAEA,MAAI,WAAW;AACf,SAAO,SAAS,WAAW,GAAG,GAAG;AAC/B,eAAW,SAAS,MAAM,CAAC;AAAA,EAC7B;AAEA,SAAO,GAAG,IAAI,IAAI,QAAQ;AAC5B;AAEA,SAAS,cAAc,KAAsB;AAC3C,SAAO,8BAA8B,KAAK,GAAG,KAAK,yBAAyB,KAAK,GAAG;AACrF;AAEe,SAAR,SACL,KACA,SACA,QACA,kBACQ;AACR,MAAI,UAAU,WAAW,CAAC,cAAc,GAAG,IAAI,YAAY,SAAS,GAAG,IAAI,OAAO;AAElF,QAAM,aAAa,gBAAgB,QAAmC,gBAAgB;AACtF,MAAI,YAAY;AACd,UAAM,YAAY,QAAQ,QAAQ,GAAG;AACrC,QAAI,cAAc,IAAI;AACpB,gBAAU,QAAQ,MAAM,GAAG,SAAS;AAAA,IACtC;AACA,gBAAY,QAAQ,QAAQ,GAAG,MAAM,KAAK,MAAM,OAAO;AAAA,EACzD;AAEA,SAAO;AACT;","names":[]}
|
package/cjs/core/mergeConfig.cjs
CHANGED
|
@@ -27,6 +27,7 @@ function deepMerge(...sources) {
|
|
|
27
27
|
for (const source of sources) {
|
|
28
28
|
if (!source || typeof source !== "object") continue;
|
|
29
29
|
for (const key of Object.keys(source)) {
|
|
30
|
+
if (key === "__proto__" || key === "constructor" || key === "prototype") continue;
|
|
30
31
|
const value = source[key];
|
|
31
32
|
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
32
33
|
if (value instanceof Date || value instanceof RegExp || value instanceof Map || value instanceof Set || value instanceof Error || typeof ArrayBuffer !== "undefined" && value instanceof ArrayBuffer || typeof Blob !== "undefined" && value instanceof Blob) {
|
|
@@ -47,10 +48,7 @@ const requestOnlyKeys = /* @__PURE__ */ new Set(["url", "data", "signal"]);
|
|
|
47
48
|
const deepMergeKeys = /* @__PURE__ */ new Set(["headers"]);
|
|
48
49
|
function mergeConfig(config1 = {}, config2 = {}) {
|
|
49
50
|
const merged = {};
|
|
50
|
-
const allKeys = /* @__PURE__ */ new Set([
|
|
51
|
-
...Object.keys(config1),
|
|
52
|
-
...Object.keys(config2)
|
|
53
|
-
]);
|
|
51
|
+
const allKeys = /* @__PURE__ */ new Set([...Object.keys(config1), ...Object.keys(config2)]);
|
|
54
52
|
for (const key of allKeys) {
|
|
55
53
|
const val1 = config1[key];
|
|
56
54
|
const val2 = config2[key];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/mergeConfig.ts"],"sourcesContent":["import type { AccessioRequestConfig } from '../types';\n\nfunction deepMerge(...sources: any[]): Record<string, any> {\n const result: Record<string, any> = {};\n\n for (const source of sources) {\n if (!source || typeof source !== 'object') continue;\n\n for (const key of Object.keys(source)) {\n const value = source[key];\n\n if (
|
|
1
|
+
{"version":3,"sources":["../../src/core/mergeConfig.ts"],"sourcesContent":["import type { AccessioRequestConfig } from '../types';\n\nfunction deepMerge(...sources: any[]): Record<string, any> {\n const result: Record<string, any> = {};\n\n for (const source of sources) {\n if (!source || typeof source !== 'object') continue;\n\n for (const key of Object.keys(source)) {\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') continue;\n\n const value = source[key];\n\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n if (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof Map ||\n value instanceof Set ||\n value instanceof Error ||\n (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) ||\n (typeof Blob !== 'undefined' && value instanceof Blob)\n ) {\n result[key] = value;\n } else if (result[key] && typeof result[key] === 'object' && !Array.isArray(result[key])) {\n result[key] = deepMerge(result[key], value);\n } else {\n result[key] = deepMerge(value);\n }\n } else if (value !== undefined) {\n result[key] = value;\n }\n }\n }\n\n return result;\n}\n\nconst requestOnlyKeys = new Set<string>(['url', 'data', 'signal']);\nconst deepMergeKeys = new Set<string>(['headers']);\n\nexport default function mergeConfig(\n config1: AccessioRequestConfig = {},\n config2: AccessioRequestConfig = {},\n): AccessioRequestConfig {\n const merged: any = {};\n\n const allKeys = new Set<string>([...Object.keys(config1), ...Object.keys(config2)]);\n\n for (const key of allKeys) {\n const val1 = config1[key as keyof AccessioRequestConfig];\n const val2 = config2[key as keyof AccessioRequestConfig];\n\n if (requestOnlyKeys.has(key)) {\n if (val2 !== undefined) {\n merged[key] = val2;\n }\n } else if (deepMergeKeys.has(key)) {\n merged[key] = deepMerge(val1 || {}, val2 || {});\n } else {\n merged[key] = val2 !== undefined ? val2 : val1;\n }\n }\n\n return merged;\n}\n\nexport { deepMerge };\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,SAAS,aAAa,SAAqC;AACzD,QAAM,SAA8B,CAAC;AAErC,aAAW,UAAU,SAAS;AAC5B,QAAI,CAAC,UAAU,OAAO,WAAW,SAAU;AAE3C,eAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AACrC,UAAI,QAAQ,eAAe,QAAQ,iBAAiB,QAAQ,YAAa;AAEzE,YAAM,QAAQ,OAAO,GAAG;AAExB,UAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,YACE,iBAAiB,QACjB,iBAAiB,UACjB,iBAAiB,OACjB,iBAAiB,OACjB,iBAAiB,SAChB,OAAO,gBAAgB,eAAe,iBAAiB,eACvD,OAAO,SAAS,eAAe,iBAAiB,MACjD;AACA,iBAAO,GAAG,IAAI;AAAA,QAChB,WAAW,OAAO,GAAG,KAAK,OAAO,OAAO,GAAG,MAAM,YAAY,CAAC,MAAM,QAAQ,OAAO,GAAG,CAAC,GAAG;AACxF,iBAAO,GAAG,IAAI,UAAU,OAAO,GAAG,GAAG,KAAK;AAAA,QAC5C,OAAO;AACL,iBAAO,GAAG,IAAI,UAAU,KAAK;AAAA,QAC/B;AAAA,MACF,WAAW,UAAU,QAAW;AAC9B,eAAO,GAAG,IAAI;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,MAAM,kBAAkB,oBAAI,IAAY,CAAC,OAAO,QAAQ,QAAQ,CAAC;AACjE,MAAM,gBAAgB,oBAAI,IAAY,CAAC,SAAS,CAAC;AAElC,SAAR,YACL,UAAiC,CAAC,GAClC,UAAiC,CAAC,GACX;AACvB,QAAM,SAAc,CAAC;AAErB,QAAM,UAAU,oBAAI,IAAY,CAAC,GAAG,OAAO,KAAK,OAAO,GAAG,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC;AAElF,aAAW,OAAO,SAAS;AACzB,UAAM,OAAO,QAAQ,GAAkC;AACvD,UAAM,OAAO,QAAQ,GAAkC;AAEvD,QAAI,gBAAgB,IAAI,GAAG,GAAG;AAC5B,UAAI,SAAS,QAAW;AACtB,eAAO,GAAG,IAAI;AAAA,MAChB;AAAA,IACF,WAAW,cAAc,IAAI,GAAG,GAAG;AACjC,aAAO,GAAG,IAAI,UAAU,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;AAAA,IAChD,OAAO;AACL,aAAO,GAAG,IAAI,SAAS,SAAY,OAAO;AAAA,IAC5C;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
package/cjs/core/request.cjs
CHANGED
|
@@ -64,10 +64,8 @@ function flattenHeaders(headers, method) {
|
|
|
64
64
|
return merged;
|
|
65
65
|
}
|
|
66
66
|
function removeContentType(headers) {
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
);
|
|
70
|
-
if (key) {
|
|
67
|
+
const keys = Object.keys(headers).filter((k) => k.toLowerCase() === "content-type");
|
|
68
|
+
for (const key of keys) {
|
|
71
69
|
delete headers[key];
|
|
72
70
|
}
|
|
73
71
|
}
|
|
@@ -76,6 +74,38 @@ function buildTransformArray(transform) {
|
|
|
76
74
|
if (Array.isArray(transform)) return transform;
|
|
77
75
|
return [transform];
|
|
78
76
|
}
|
|
77
|
+
function setBasicAuth(config, headers) {
|
|
78
|
+
if (!config.auth) return;
|
|
79
|
+
const username = config.auth.username || "";
|
|
80
|
+
const password = config.auth.password || "";
|
|
81
|
+
const credentials = `${username}:${password}`;
|
|
82
|
+
let encoded;
|
|
83
|
+
if (typeof Buffer !== "undefined") {
|
|
84
|
+
encoded = Buffer.from(credentials).toString("base64");
|
|
85
|
+
} else {
|
|
86
|
+
encoded = btoa(
|
|
87
|
+
encodeURIComponent(credentials).replace(/%([0-9A-F]{2})/g, (match, p1) => {
|
|
88
|
+
return String.fromCharCode(parseInt(p1, 16));
|
|
89
|
+
})
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
headers["Authorization"] = `Basic ${encoded}`;
|
|
93
|
+
}
|
|
94
|
+
async function readResponseData(fetchResponse, responseType) {
|
|
95
|
+
switch (responseType) {
|
|
96
|
+
case "arraybuffer":
|
|
97
|
+
return await fetchResponse.arrayBuffer();
|
|
98
|
+
case "blob":
|
|
99
|
+
return await fetchResponse.blob();
|
|
100
|
+
case "text":
|
|
101
|
+
return await fetchResponse.text();
|
|
102
|
+
case "stream":
|
|
103
|
+
return fetchResponse.body;
|
|
104
|
+
case "json":
|
|
105
|
+
default:
|
|
106
|
+
return await fetchResponse.text();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
79
109
|
function dispatchRequest(config) {
|
|
80
110
|
const fullURL = config._builtUrl || (0, import_buildURL.default)(
|
|
81
111
|
config.url ?? "",
|
|
@@ -83,37 +113,13 @@ function dispatchRequest(config) {
|
|
|
83
113
|
config.params,
|
|
84
114
|
config.paramsSerializer
|
|
85
115
|
);
|
|
86
|
-
const flatHeaders = flattenHeaders(
|
|
87
|
-
config.headers,
|
|
88
|
-
config.method
|
|
89
|
-
);
|
|
116
|
+
const flatHeaders = flattenHeaders(config.headers, config.method);
|
|
90
117
|
const requestTransforms = buildTransformArray(config.transformRequest);
|
|
91
|
-
const requestData = (0, import_transformData.default)(
|
|
92
|
-
requestTransforms,
|
|
93
|
-
config.data,
|
|
94
|
-
flatHeaders,
|
|
95
|
-
config
|
|
96
|
-
);
|
|
118
|
+
const requestData = (0, import_transformData.default)(requestTransforms, config.data, flatHeaders, config);
|
|
97
119
|
if (requestData === null || requestData === void 0 || typeof FormData !== "undefined" && requestData instanceof FormData) {
|
|
98
120
|
removeContentType(flatHeaders);
|
|
99
121
|
}
|
|
100
|
-
|
|
101
|
-
const username = config.auth.username || "";
|
|
102
|
-
const password = config.auth.password || "";
|
|
103
|
-
const credentials = `${username}:${password}`;
|
|
104
|
-
let encoded;
|
|
105
|
-
if (typeof Buffer !== "undefined") {
|
|
106
|
-
encoded = Buffer.from(credentials).toString("base64");
|
|
107
|
-
} else {
|
|
108
|
-
const bytes = new TextEncoder().encode(credentials);
|
|
109
|
-
const binString = Array.from(
|
|
110
|
-
bytes,
|
|
111
|
-
(x) => String.fromCodePoint(x)
|
|
112
|
-
).join("");
|
|
113
|
-
encoded = btoa(binString);
|
|
114
|
-
}
|
|
115
|
-
flatHeaders["Authorization"] = `Basic ${encoded}`;
|
|
116
|
-
}
|
|
122
|
+
setBasicAuth(config, flatHeaders);
|
|
117
123
|
const fetchOptions = {
|
|
118
124
|
method: (config.method || "GET").toUpperCase(),
|
|
119
125
|
headers: flatHeaders
|
|
@@ -125,36 +131,42 @@ function dispatchRequest(config) {
|
|
|
125
131
|
if (config.withCredentials) {
|
|
126
132
|
fetchOptions.credentials = "include";
|
|
127
133
|
}
|
|
134
|
+
if (config.dispatcher) {
|
|
135
|
+
fetchOptions.dispatcher = config.dispatcher;
|
|
136
|
+
}
|
|
137
|
+
if (config.agent) {
|
|
138
|
+
fetchOptions.agent = config.agent;
|
|
139
|
+
}
|
|
128
140
|
let abortController = null;
|
|
129
141
|
let timeoutId = null;
|
|
130
142
|
let isTimedOut = false;
|
|
131
143
|
let onUserAbort = null;
|
|
132
|
-
|
|
144
|
+
const timeoutValue = Number(config.timeout);
|
|
145
|
+
if (!isNaN(timeoutValue) && timeoutValue > 0) {
|
|
133
146
|
abortController = new AbortController();
|
|
134
147
|
timeoutId = setTimeout(() => {
|
|
135
148
|
isTimedOut = true;
|
|
136
149
|
abortController.abort(
|
|
137
150
|
new import_accessioError.default(
|
|
138
|
-
`timeout of ${
|
|
151
|
+
`timeout of ${timeoutValue}ms exceeded`,
|
|
139
152
|
import_accessioError.default.ETIMEDOUT,
|
|
140
153
|
config,
|
|
141
154
|
null,
|
|
142
155
|
null
|
|
143
156
|
)
|
|
144
157
|
);
|
|
145
|
-
},
|
|
158
|
+
}, timeoutValue);
|
|
146
159
|
if (config.signal) {
|
|
147
160
|
if (typeof AbortSignal.any === "function") {
|
|
148
|
-
fetchOptions.signal = AbortSignal.any([
|
|
149
|
-
config.signal,
|
|
150
|
-
abortController.signal
|
|
151
|
-
]);
|
|
161
|
+
fetchOptions.signal = AbortSignal.any([config.signal, abortController.signal]);
|
|
152
162
|
} else {
|
|
153
163
|
if (config.signal.aborted) {
|
|
154
164
|
abortController.abort(config.signal.reason);
|
|
155
165
|
} else {
|
|
156
166
|
onUserAbort = () => {
|
|
157
|
-
abortController
|
|
167
|
+
if (!isTimedOut && abortController) {
|
|
168
|
+
abortController.abort(config.signal.reason);
|
|
169
|
+
}
|
|
158
170
|
};
|
|
159
171
|
config.signal.addEventListener("abort", onUserAbort, {
|
|
160
172
|
once: true
|
|
@@ -172,25 +184,18 @@ function dispatchRequest(config) {
|
|
|
172
184
|
return fetch(fullURL, fetchOptions).then(async (fetchResponse) => {
|
|
173
185
|
let responseData;
|
|
174
186
|
const responseType = config.responseType || "json";
|
|
187
|
+
const contentLength = fetchResponse.headers.get("content-length");
|
|
188
|
+
if (contentLength && config.maxContentLength && parseInt(contentLength, 10) > config.maxContentLength) {
|
|
189
|
+
throw new import_accessioError.default(
|
|
190
|
+
`maxContentLength size of ${config.maxContentLength} exceeded`,
|
|
191
|
+
import_accessioError.default.ERR_BAD_RESPONSE,
|
|
192
|
+
config,
|
|
193
|
+
fetchResponse,
|
|
194
|
+
null
|
|
195
|
+
);
|
|
196
|
+
}
|
|
175
197
|
try {
|
|
176
|
-
|
|
177
|
-
case "arraybuffer":
|
|
178
|
-
responseData = await fetchResponse.arrayBuffer();
|
|
179
|
-
break;
|
|
180
|
-
case "blob":
|
|
181
|
-
responseData = await fetchResponse.blob();
|
|
182
|
-
break;
|
|
183
|
-
case "text":
|
|
184
|
-
responseData = await fetchResponse.text();
|
|
185
|
-
break;
|
|
186
|
-
case "stream":
|
|
187
|
-
responseData = fetchResponse.body;
|
|
188
|
-
break;
|
|
189
|
-
case "json":
|
|
190
|
-
default:
|
|
191
|
-
responseData = await fetchResponse.text();
|
|
192
|
-
break;
|
|
193
|
-
}
|
|
198
|
+
responseData = await readResponseData(fetchResponse, responseType);
|
|
194
199
|
} catch (readError) {
|
|
195
200
|
throw import_accessioError.default.from(
|
|
196
201
|
readError,
|
|
@@ -202,12 +207,7 @@ function dispatchRequest(config) {
|
|
|
202
207
|
}
|
|
203
208
|
const responseHeaders = (0, import_parseHeaders.default)(fetchResponse.headers);
|
|
204
209
|
const responseTransforms = buildTransformArray(config.transformResponse);
|
|
205
|
-
responseData = (0, import_transformData.default)(
|
|
206
|
-
responseTransforms,
|
|
207
|
-
responseData,
|
|
208
|
-
responseHeaders,
|
|
209
|
-
config
|
|
210
|
-
);
|
|
210
|
+
responseData = (0, import_transformData.default)(responseTransforms, responseData, responseHeaders, config);
|
|
211
211
|
const response = {
|
|
212
212
|
data: responseData,
|
|
213
213
|
status: fetchResponse.status,
|
|
@@ -218,7 +218,12 @@ function dispatchRequest(config) {
|
|
|
218
218
|
duration: Date.now() - requestStartTime
|
|
219
219
|
};
|
|
220
220
|
return new Promise((resolve, reject) => {
|
|
221
|
-
(0, import_settle.default)(
|
|
221
|
+
(0, import_settle.default)(
|
|
222
|
+
resolve,
|
|
223
|
+
reject,
|
|
224
|
+
response,
|
|
225
|
+
config
|
|
226
|
+
);
|
|
222
227
|
});
|
|
223
228
|
}).catch((error) => {
|
|
224
229
|
if (error instanceof import_accessioError.default) {
|
|
@@ -234,9 +239,12 @@ function dispatchRequest(config) {
|
|
|
234
239
|
null
|
|
235
240
|
);
|
|
236
241
|
}
|
|
242
|
+
throw new import_accessioError.default("Request aborted", import_accessioError.default.ERR_CANCELED, config, null, null);
|
|
243
|
+
}
|
|
244
|
+
if (error instanceof TypeError && (error.message.toLowerCase().includes("url") || error.message.toLowerCase().includes("fetch"))) {
|
|
237
245
|
throw new import_accessioError.default(
|
|
238
|
-
|
|
239
|
-
import_accessioError.default.
|
|
246
|
+
`Invalid URL: ${fullURL}`,
|
|
247
|
+
import_accessioError.default.ERR_INVALID_URL,
|
|
240
248
|
config,
|
|
241
249
|
null,
|
|
242
250
|
null
|
package/cjs/core/request.cjs.map
CHANGED
|
@@ -1 +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":"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","names":["buildURL","transformData","AccessioError","parseHeaders","settle"]}
|
|
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 (Object.prototype.hasOwnProperty.call(headers, key) && !METHOD_KEYS.has(key)) {\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 keys = Object.keys(headers).filter((k) => k.toLowerCase() === 'content-type');\n for (const key of keys) {\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\nfunction setBasicAuth(config: AccessioRequestConfig, headers: Record<string, string>): void {\n if (!config.auth) return;\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 encoded = btoa(\n encodeURIComponent(credentials).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode(parseInt(p1, 16));\n }),\n );\n }\n headers['Authorization'] = `Basic ${encoded}`;\n}\n\nasync function readResponseData(fetchResponse: Response, responseType: string): Promise<unknown> {\n switch (responseType) {\n case 'arraybuffer':\n return await fetchResponse.arrayBuffer();\n case 'blob':\n return await fetchResponse.blob();\n case 'text':\n return await fetchResponse.text();\n case 'stream':\n return fetchResponse.body;\n case 'json':\n default:\n return await fetchResponse.text();\n }\n}\n\nexport default function dispatchRequest(config: AccessioRequestConfig): 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(config.headers as HeadersConfig | undefined, config.method);\n\n const requestTransforms = buildTransformArray(config.transformRequest);\n\n const requestData = transformData(requestTransforms, config.data, flatHeaders, config);\n\n if (\n requestData === null ||\n requestData === undefined ||\n (typeof FormData !== 'undefined' && requestData instanceof FormData)\n ) {\n removeContentType(flatHeaders);\n }\n\n setBasicAuth(config, flatHeaders);\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 if (config.dispatcher) {\n (fetchOptions as any).dispatcher = config.dispatcher;\n }\n if (config.agent) {\n (fetchOptions as any).agent = config.agent;\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 const timeoutValue = Number(config.timeout);\n if (!isNaN(timeoutValue) && timeoutValue > 0) {\n abortController = new AbortController();\n\n timeoutId = setTimeout(() => {\n isTimedOut = true;\n abortController!.abort(\n new AccessioError(\n `timeout of ${timeoutValue}ms exceeded`,\n AccessioError.ETIMEDOUT,\n config,\n null,\n null,\n ),\n );\n }, timeoutValue);\n\n if (config.signal) {\n if (typeof AbortSignal.any === 'function') {\n fetchOptions.signal = AbortSignal.any([config.signal, abortController.signal]);\n } else {\n if (config.signal.aborted) {\n abortController.abort(config.signal.reason);\n } else {\n onUserAbort = () => {\n if (!isTimedOut && abortController) {\n abortController.abort(config.signal!.reason);\n }\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 const contentLength = fetchResponse.headers.get('content-length');\n if (\n contentLength &&\n config.maxContentLength &&\n parseInt(contentLength, 10) > config.maxContentLength\n ) {\n throw new AccessioError(\n `maxContentLength size of ${config.maxContentLength} exceeded`,\n AccessioError.ERR_BAD_RESPONSE,\n config,\n fetchResponse,\n null,\n );\n }\n\n try {\n responseData = await readResponseData(fetchResponse, responseType);\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(responseTransforms, responseData, responseHeaders, config);\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(\n resolve as (value: AccessioResponse) => void,\n reject as (reason: AccessioError) => void,\n response,\n config,\n );\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('Request aborted', AccessioError.ERR_CANCELED, config, null, null);\n }\n\n if (\n error instanceof TypeError &&\n (error.message.toLowerCase().includes('url') ||\n error.message.toLowerCase().includes('fetch'))\n ) {\n throw new AccessioError(\n `Invalid URL: ${fullURL}`,\n AccessioError.ERR_INVALID_URL,\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":"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","names":["buildURL","transformData","AccessioError","parseHeaders","settle"]}
|
package/cjs/core/retry.cjs
CHANGED
|
@@ -31,9 +31,6 @@ function defaultRetryCondition(error) {
|
|
|
31
31
|
if (error.code === import_errorCodes.ERR_NETWORK) {
|
|
32
32
|
return true;
|
|
33
33
|
}
|
|
34
|
-
if (error.code === import_errorCodes.ETIMEDOUT) {
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
34
|
if (error.response && error.response.status >= 500) {
|
|
38
35
|
return true;
|
|
39
36
|
}
|
|
@@ -56,9 +53,7 @@ function sleep(ms, options) {
|
|
|
56
53
|
if (options?.signal) {
|
|
57
54
|
if (options.signal.aborted) {
|
|
58
55
|
clearTimeout(timeoutId);
|
|
59
|
-
return reject(
|
|
60
|
-
options.signal.reason || new Error("Sleep aborted")
|
|
61
|
-
);
|
|
56
|
+
return reject(options.signal.reason || new Error("Sleep aborted"));
|
|
62
57
|
}
|
|
63
58
|
onAbort = () => {
|
|
64
59
|
clearTimeout(timeoutId);
|
|
@@ -89,11 +84,7 @@ async function retryRequest(dispatchFn, config) {
|
|
|
89
84
|
}
|
|
90
85
|
const delay = calculateDelay(attempt, retryDelay);
|
|
91
86
|
if (typeof config.onRetry === "function") {
|
|
92
|
-
config.onRetry(
|
|
93
|
-
attempt + 1,
|
|
94
|
-
error,
|
|
95
|
-
config
|
|
96
|
-
);
|
|
87
|
+
config.onRetry(attempt + 1, error, config);
|
|
97
88
|
}
|
|
98
89
|
await sleep(delay, { signal: config.signal });
|
|
99
90
|
}
|