@petrominds/corr-select-mind 0.1.0-beta.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/dist/cjs/BaseClient.d.ts +42 -0
- package/dist/cjs/BaseClient.js +77 -0
- package/dist/cjs/Client.d.ts +26 -0
- package/dist/cjs/Client.js +83 -0
- package/dist/cjs/api/errors/BadRequestError.d.ts +6 -0
- package/dist/cjs/api/errors/BadRequestError.js +54 -0
- package/dist/cjs/api/errors/TooManyRequestsError.d.ts +6 -0
- package/dist/cjs/api/errors/TooManyRequestsError.js +54 -0
- package/dist/cjs/api/errors/UnauthorizedError.d.ts +6 -0
- package/dist/cjs/api/errors/UnauthorizedError.js +54 -0
- package/dist/cjs/api/errors/UnprocessableEntityError.d.ts +6 -0
- package/dist/cjs/api/errors/UnprocessableEntityError.js +54 -0
- package/dist/cjs/api/errors/index.d.ts +4 -0
- package/dist/cjs/api/errors/index.js +20 -0
- package/dist/cjs/api/index.d.ts +3 -0
- package/dist/cjs/api/index.js +19 -0
- package/dist/cjs/api/resources/index.d.ts +2 -0
- package/dist/cjs/api/resources/index.js +41 -0
- package/dist/cjs/api/resources/pvt/client/Client.d.ts +38 -0
- package/dist/cjs/api/resources/pvt/client/Client.js +131 -0
- package/dist/cjs/api/resources/pvt/client/index.d.ts +1 -0
- package/dist/cjs/api/resources/pvt/client/index.js +17 -0
- package/dist/cjs/api/resources/pvt/client/requests/GetPvtBestCorrelationQuery.d.ts +31 -0
- package/dist/cjs/api/resources/pvt/client/requests/GetPvtBestCorrelationQuery.js +3 -0
- package/dist/cjs/api/resources/pvt/client/requests/index.d.ts +1 -0
- package/dist/cjs/api/resources/pvt/client/requests/index.js +2 -0
- package/dist/cjs/api/resources/pvt/exports.d.ts +2 -0
- package/dist/cjs/api/resources/pvt/exports.js +21 -0
- package/dist/cjs/api/resources/pvt/index.d.ts +1 -0
- package/dist/cjs/api/resources/pvt/index.js +17 -0
- package/dist/cjs/api/types/Correlation.d.ts +6 -0
- package/dist/cjs/api/types/Correlation.js +3 -0
- package/dist/cjs/api/types/ErrorResponse.d.ts +8 -0
- package/dist/cjs/api/types/ErrorResponse.js +3 -0
- package/dist/cjs/api/types/GetPvtBestCorrelationResponse.d.ts +36 -0
- package/dist/cjs/api/types/GetPvtBestCorrelationResponse.js +17 -0
- package/dist/cjs/api/types/index.d.ts +3 -0
- package/dist/cjs/api/types/index.js +19 -0
- package/dist/cjs/auth/HeaderAuthProvider.d.ts +20 -0
- package/dist/cjs/auth/HeaderAuthProvider.js +80 -0
- package/dist/cjs/auth/index.d.ts +1 -0
- package/dist/cjs/auth/index.js +5 -0
- package/dist/cjs/core/auth/AuthProvider.d.ts +8 -0
- package/dist/cjs/core/auth/AuthProvider.js +9 -0
- package/dist/cjs/core/auth/AuthRequest.d.ts +9 -0
- package/dist/cjs/core/auth/AuthRequest.js +2 -0
- package/dist/cjs/core/auth/BasicAuth.d.ts +8 -0
- package/dist/cjs/core/auth/BasicAuth.js +33 -0
- package/dist/cjs/core/auth/BearerToken.d.ts +7 -0
- package/dist/cjs/core/auth/BearerToken.js +16 -0
- package/dist/cjs/core/auth/NoOpAuthProvider.d.ts +5 -0
- package/dist/cjs/core/auth/NoOpAuthProvider.js +9 -0
- package/dist/cjs/core/auth/index.d.ts +5 -0
- package/dist/cjs/core/auth/index.js +11 -0
- package/dist/cjs/core/base64.d.ts +2 -0
- package/dist/cjs/core/base64.js +26 -0
- package/dist/cjs/core/exports.d.ts +1 -0
- package/dist/cjs/core/exports.js +17 -0
- package/dist/cjs/core/fetcher/APIResponse.d.ts +20 -0
- package/dist/cjs/core/fetcher/APIResponse.js +2 -0
- package/dist/cjs/core/fetcher/BinaryResponse.d.ts +19 -0
- package/dist/cjs/core/fetcher/BinaryResponse.js +17 -0
- package/dist/cjs/core/fetcher/EndpointMetadata.d.ts +13 -0
- package/dist/cjs/core/fetcher/EndpointMetadata.js +2 -0
- package/dist/cjs/core/fetcher/EndpointSupplier.d.ts +12 -0
- package/dist/cjs/core/fetcher/EndpointSupplier.js +22 -0
- package/dist/cjs/core/fetcher/Fetcher.d.ts +56 -0
- package/dist/cjs/core/fetcher/Fetcher.js +327 -0
- package/dist/cjs/core/fetcher/Headers.d.ts +2 -0
- package/dist/cjs/core/fetcher/Headers.js +84 -0
- package/dist/cjs/core/fetcher/HttpResponsePromise.d.ts +58 -0
- package/dist/cjs/core/fetcher/HttpResponsePromise.js +103 -0
- package/dist/cjs/core/fetcher/RawResponse.d.ts +29 -0
- package/dist/cjs/core/fetcher/RawResponse.js +44 -0
- package/dist/cjs/core/fetcher/Supplier.d.ts +4 -0
- package/dist/cjs/core/fetcher/Supplier.js +22 -0
- package/dist/cjs/core/fetcher/createRequestUrl.d.ts +1 -0
- package/dist/cjs/core/fetcher/createRequestUrl.js +8 -0
- package/dist/cjs/core/fetcher/getErrorResponseBody.d.ts +1 -0
- package/dist/cjs/core/fetcher/getErrorResponseBody.js +45 -0
- package/dist/cjs/core/fetcher/getFetchFn.d.ts +1 -0
- package/dist/cjs/core/fetcher/getFetchFn.js +17 -0
- package/dist/cjs/core/fetcher/getHeader.d.ts +1 -0
- package/dist/cjs/core/fetcher/getHeader.js +11 -0
- package/dist/cjs/core/fetcher/getRequestBody.d.ts +7 -0
- package/dist/cjs/core/fetcher/getRequestBody.js +27 -0
- package/dist/cjs/core/fetcher/getResponseBody.d.ts +1 -0
- package/dist/cjs/core/fetcher/getResponseBody.js +80 -0
- package/dist/cjs/core/fetcher/index.d.ts +13 -0
- package/dist/cjs/core/fetcher/index.js +19 -0
- package/dist/cjs/core/fetcher/makePassthroughRequest.d.ts +49 -0
- package/dist/cjs/core/fetcher/makePassthroughRequest.js +135 -0
- package/dist/cjs/core/fetcher/makeRequest.d.ts +6 -0
- package/dist/cjs/core/fetcher/makeRequest.js +61 -0
- package/dist/cjs/core/fetcher/requestWithRetries.d.ts +1 -0
- package/dist/cjs/core/fetcher/requestWithRetries.js +70 -0
- package/dist/cjs/core/fetcher/signals.d.ts +5 -0
- package/dist/cjs/core/fetcher/signals.js +24 -0
- package/dist/cjs/core/headers.d.ts +2 -0
- package/dist/cjs/core/headers.js +31 -0
- package/dist/cjs/core/index.d.ts +6 -0
- package/dist/cjs/core/index.js +45 -0
- package/dist/cjs/core/json.d.ts +15 -0
- package/dist/cjs/core/json.js +24 -0
- package/dist/cjs/core/logging/exports.d.ts +18 -0
- package/dist/cjs/core/logging/exports.js +45 -0
- package/dist/cjs/core/logging/index.d.ts +1 -0
- package/dist/cjs/core/logging/index.js +17 -0
- package/dist/cjs/core/logging/logger.d.ts +126 -0
- package/dist/cjs/core/logging/logger.js +144 -0
- package/dist/cjs/core/runtime/index.d.ts +1 -0
- package/dist/cjs/core/runtime/index.js +5 -0
- package/dist/cjs/core/runtime/runtime.d.ts +9 -0
- package/dist/cjs/core/runtime/runtime.js +104 -0
- package/dist/cjs/core/url/QueryStringBuilder.d.ts +47 -0
- package/dist/cjs/core/url/QueryStringBuilder.js +83 -0
- package/dist/cjs/core/url/encodePathParam.d.ts +1 -0
- package/dist/cjs/core/url/encodePathParam.js +21 -0
- package/dist/cjs/core/url/index.d.ts +4 -0
- package/dist/cjs/core/url/index.js +11 -0
- package/dist/cjs/core/url/join.d.ts +1 -0
- package/dist/cjs/core/url/join.js +68 -0
- package/dist/cjs/core/url/qs.d.ts +7 -0
- package/dist/cjs/core/url/qs.js +76 -0
- package/dist/cjs/environments.d.ts +4 -0
- package/dist/cjs/environments.js +7 -0
- package/dist/cjs/errors/CorrSelectMindError.d.ts +14 -0
- package/dist/cjs/errors/CorrSelectMindError.js +35 -0
- package/dist/cjs/errors/CorrSelectMindTimeoutError.d.ts +6 -0
- package/dist/cjs/errors/CorrSelectMindTimeoutError.js +18 -0
- package/dist/cjs/errors/handleNonStatusCodeError.d.ts +2 -0
- package/dist/cjs/errors/handleNonStatusCodeError.js +68 -0
- package/dist/cjs/errors/index.d.ts +2 -0
- package/dist/cjs/errors/index.js +7 -0
- package/dist/cjs/exports.d.ts +1 -0
- package/dist/cjs/exports.js +17 -0
- package/dist/cjs/index.d.ts +6 -0
- package/dist/cjs/index.js +48 -0
- package/dist/cjs/version.d.ts +1 -0
- package/dist/cjs/version.js +4 -0
- package/dist/esm/BaseClient.d.mts +42 -0
- package/dist/esm/BaseClient.mjs +40 -0
- package/dist/esm/Client.d.mts +26 -0
- package/dist/esm/Client.mjs +46 -0
- package/dist/esm/api/errors/BadRequestError.d.mts +6 -0
- package/dist/esm/api/errors/BadRequestError.mjs +17 -0
- package/dist/esm/api/errors/TooManyRequestsError.d.mts +6 -0
- package/dist/esm/api/errors/TooManyRequestsError.mjs +17 -0
- package/dist/esm/api/errors/UnauthorizedError.d.mts +6 -0
- package/dist/esm/api/errors/UnauthorizedError.mjs +17 -0
- package/dist/esm/api/errors/UnprocessableEntityError.d.mts +6 -0
- package/dist/esm/api/errors/UnprocessableEntityError.mjs +17 -0
- package/dist/esm/api/errors/index.d.mts +4 -0
- package/dist/esm/api/errors/index.mjs +4 -0
- package/dist/esm/api/index.d.mts +3 -0
- package/dist/esm/api/index.mjs +3 -0
- package/dist/esm/api/resources/index.d.mts +2 -0
- package/dist/esm/api/resources/index.mjs +2 -0
- package/dist/esm/api/resources/pvt/client/Client.d.mts +38 -0
- package/dist/esm/api/resources/pvt/client/Client.mjs +94 -0
- package/dist/esm/api/resources/pvt/client/index.d.mts +1 -0
- package/dist/esm/api/resources/pvt/client/index.mjs +1 -0
- package/dist/esm/api/resources/pvt/client/requests/GetPvtBestCorrelationQuery.d.mts +31 -0
- package/dist/esm/api/resources/pvt/client/requests/GetPvtBestCorrelationQuery.mjs +2 -0
- package/dist/esm/api/resources/pvt/client/requests/index.d.mts +1 -0
- package/dist/esm/api/resources/pvt/client/requests/index.mjs +1 -0
- package/dist/esm/api/resources/pvt/exports.d.mts +2 -0
- package/dist/esm/api/resources/pvt/exports.mjs +3 -0
- package/dist/esm/api/resources/pvt/index.d.mts +1 -0
- package/dist/esm/api/resources/pvt/index.mjs +1 -0
- package/dist/esm/api/types/Correlation.d.mts +6 -0
- package/dist/esm/api/types/Correlation.mjs +2 -0
- package/dist/esm/api/types/ErrorResponse.d.mts +8 -0
- package/dist/esm/api/types/ErrorResponse.mjs +2 -0
- package/dist/esm/api/types/GetPvtBestCorrelationResponse.d.mts +36 -0
- package/dist/esm/api/types/GetPvtBestCorrelationResponse.mjs +14 -0
- package/dist/esm/api/types/index.d.mts +3 -0
- package/dist/esm/api/types/index.mjs +3 -0
- package/dist/esm/auth/HeaderAuthProvider.d.mts +20 -0
- package/dist/esm/auth/HeaderAuthProvider.mjs +43 -0
- package/dist/esm/auth/index.d.mts +1 -0
- package/dist/esm/auth/index.mjs +1 -0
- package/dist/esm/core/auth/AuthProvider.d.mts +8 -0
- package/dist/esm/core/auth/AuthProvider.mjs +6 -0
- package/dist/esm/core/auth/AuthRequest.d.mts +9 -0
- package/dist/esm/core/auth/AuthRequest.mjs +1 -0
- package/dist/esm/core/auth/BasicAuth.d.mts +8 -0
- package/dist/esm/core/auth/BasicAuth.mjs +30 -0
- package/dist/esm/core/auth/BearerToken.d.mts +7 -0
- package/dist/esm/core/auth/BearerToken.mjs +13 -0
- package/dist/esm/core/auth/NoOpAuthProvider.d.mts +5 -0
- package/dist/esm/core/auth/NoOpAuthProvider.mjs +5 -0
- package/dist/esm/core/auth/index.d.mts +5 -0
- package/dist/esm/core/auth/index.mjs +4 -0
- package/dist/esm/core/base64.d.mts +2 -0
- package/dist/esm/core/base64.mjs +22 -0
- package/dist/esm/core/exports.d.mts +1 -0
- package/dist/esm/core/exports.mjs +1 -0
- package/dist/esm/core/fetcher/APIResponse.d.mts +20 -0
- package/dist/esm/core/fetcher/APIResponse.mjs +1 -0
- package/dist/esm/core/fetcher/BinaryResponse.d.mts +19 -0
- package/dist/esm/core/fetcher/BinaryResponse.mjs +14 -0
- package/dist/esm/core/fetcher/EndpointMetadata.d.mts +13 -0
- package/dist/esm/core/fetcher/EndpointMetadata.mjs +1 -0
- package/dist/esm/core/fetcher/EndpointSupplier.d.mts +12 -0
- package/dist/esm/core/fetcher/EndpointSupplier.mjs +19 -0
- package/dist/esm/core/fetcher/Fetcher.d.mts +56 -0
- package/dist/esm/core/fetcher/Fetcher.mjs +323 -0
- package/dist/esm/core/fetcher/Headers.d.mts +2 -0
- package/dist/esm/core/fetcher/Headers.mjs +82 -0
- package/dist/esm/core/fetcher/HttpResponsePromise.d.mts +58 -0
- package/dist/esm/core/fetcher/HttpResponsePromise.mjs +99 -0
- package/dist/esm/core/fetcher/RawResponse.d.mts +29 -0
- package/dist/esm/core/fetcher/RawResponse.mjs +40 -0
- package/dist/esm/core/fetcher/Supplier.d.mts +4 -0
- package/dist/esm/core/fetcher/Supplier.mjs +19 -0
- package/dist/esm/core/fetcher/createRequestUrl.d.mts +1 -0
- package/dist/esm/core/fetcher/createRequestUrl.mjs +5 -0
- package/dist/esm/core/fetcher/getErrorResponseBody.d.mts +1 -0
- package/dist/esm/core/fetcher/getErrorResponseBody.mjs +42 -0
- package/dist/esm/core/fetcher/getFetchFn.d.mts +1 -0
- package/dist/esm/core/fetcher/getFetchFn.mjs +14 -0
- package/dist/esm/core/fetcher/getHeader.d.mts +1 -0
- package/dist/esm/core/fetcher/getHeader.mjs +8 -0
- package/dist/esm/core/fetcher/getRequestBody.d.mts +7 -0
- package/dist/esm/core/fetcher/getRequestBody.mjs +24 -0
- package/dist/esm/core/fetcher/getResponseBody.d.mts +1 -0
- package/dist/esm/core/fetcher/getResponseBody.mjs +77 -0
- package/dist/esm/core/fetcher/index.d.mts +13 -0
- package/dist/esm/core/fetcher/index.mjs +7 -0
- package/dist/esm/core/fetcher/makePassthroughRequest.d.mts +49 -0
- package/dist/esm/core/fetcher/makePassthroughRequest.mjs +132 -0
- package/dist/esm/core/fetcher/makeRequest.d.mts +6 -0
- package/dist/esm/core/fetcher/makeRequest.mjs +55 -0
- package/dist/esm/core/fetcher/requestWithRetries.d.mts +1 -0
- package/dist/esm/core/fetcher/requestWithRetries.mjs +67 -0
- package/dist/esm/core/fetcher/signals.d.mts +5 -0
- package/dist/esm/core/fetcher/signals.mjs +20 -0
- package/dist/esm/core/headers.d.mts +2 -0
- package/dist/esm/core/headers.mjs +27 -0
- package/dist/esm/core/index.d.mts +6 -0
- package/dist/esm/core/index.mjs +6 -0
- package/dist/esm/core/json.d.mts +15 -0
- package/dist/esm/core/json.mjs +19 -0
- package/dist/esm/core/logging/exports.d.mts +18 -0
- package/dist/esm/core/logging/exports.mjs +9 -0
- package/dist/esm/core/logging/index.d.mts +1 -0
- package/dist/esm/core/logging/index.mjs +1 -0
- package/dist/esm/core/logging/logger.d.mts +126 -0
- package/dist/esm/core/logging/logger.mjs +138 -0
- package/dist/esm/core/runtime/index.d.mts +1 -0
- package/dist/esm/core/runtime/index.mjs +1 -0
- package/dist/esm/core/runtime/runtime.d.mts +9 -0
- package/dist/esm/core/runtime/runtime.mjs +101 -0
- package/dist/esm/core/url/QueryStringBuilder.d.mts +47 -0
- package/dist/esm/core/url/QueryStringBuilder.mjs +80 -0
- package/dist/esm/core/url/encodePathParam.d.mts +1 -0
- package/dist/esm/core/url/encodePathParam.mjs +18 -0
- package/dist/esm/core/url/index.d.mts +4 -0
- package/dist/esm/core/url/index.mjs +4 -0
- package/dist/esm/core/url/join.d.mts +1 -0
- package/dist/esm/core/url/join.mjs +65 -0
- package/dist/esm/core/url/qs.d.mts +7 -0
- package/dist/esm/core/url/qs.mjs +73 -0
- package/dist/esm/environments.d.mts +4 -0
- package/dist/esm/environments.mjs +4 -0
- package/dist/esm/errors/CorrSelectMindError.d.mts +14 -0
- package/dist/esm/errors/CorrSelectMindError.mjs +31 -0
- package/dist/esm/errors/CorrSelectMindTimeoutError.d.mts +6 -0
- package/dist/esm/errors/CorrSelectMindTimeoutError.mjs +14 -0
- package/dist/esm/errors/handleNonStatusCodeError.d.mts +2 -0
- package/dist/esm/errors/handleNonStatusCodeError.mjs +32 -0
- package/dist/esm/errors/index.d.mts +2 -0
- package/dist/esm/errors/index.mjs +2 -0
- package/dist/esm/exports.d.mts +1 -0
- package/dist/esm/exports.mjs +1 -0
- package/dist/esm/index.d.mts +6 -0
- package/dist/esm/index.mjs +5 -0
- package/dist/esm/version.d.mts +1 -0
- package/dist/esm/version.mjs +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { fromJson } from "../json.mjs";
|
|
11
|
+
import { getResponseBody } from "./getResponseBody.mjs";
|
|
12
|
+
export function getErrorResponseBody(response) {
|
|
13
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14
|
+
var _a, _b, _c;
|
|
15
|
+
let contentType = (_a = response.headers.get("Content-Type")) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
16
|
+
if (contentType == null || contentType.length === 0) {
|
|
17
|
+
return getResponseBody(response);
|
|
18
|
+
}
|
|
19
|
+
if (contentType.indexOf(";") !== -1) {
|
|
20
|
+
contentType = (_c = (_b = contentType.split(";")[0]) === null || _b === void 0 ? void 0 : _b.trim()) !== null && _c !== void 0 ? _c : "";
|
|
21
|
+
}
|
|
22
|
+
switch (contentType) {
|
|
23
|
+
case "application/hal+json":
|
|
24
|
+
case "application/json":
|
|
25
|
+
case "application/ld+json":
|
|
26
|
+
case "application/problem+json":
|
|
27
|
+
case "application/vnd.api+json":
|
|
28
|
+
case "text/json": {
|
|
29
|
+
const text = yield response.text();
|
|
30
|
+
return text.length > 0 ? fromJson(text) : undefined;
|
|
31
|
+
}
|
|
32
|
+
default:
|
|
33
|
+
if (contentType.startsWith("application/vnd.") && contentType.endsWith("+json")) {
|
|
34
|
+
const text = yield response.text();
|
|
35
|
+
return text.length > 0 ? fromJson(text) : undefined;
|
|
36
|
+
}
|
|
37
|
+
// Fallback to plain text if content type is not recognized
|
|
38
|
+
// Even if no body is present, the response will be an empty string
|
|
39
|
+
return yield response.text();
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getFetchFn(): Promise<typeof fetch>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
export function getFetchFn() {
|
|
11
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
12
|
+
return fetch;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getHeader(headers: Record<string, any>, header: string): string | undefined;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { toJson } from "../json.mjs";
|
|
11
|
+
import { toQueryString } from "../url/qs.mjs";
|
|
12
|
+
export function getRequestBody(_a) {
|
|
13
|
+
return __awaiter(this, arguments, void 0, function* ({ body, type }) {
|
|
14
|
+
if (type === "form") {
|
|
15
|
+
return toQueryString(body, { arrayFormat: "repeat", encode: true });
|
|
16
|
+
}
|
|
17
|
+
if (type.includes("json")) {
|
|
18
|
+
return toJson(body);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return body;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getResponseBody(response: Response, responseType?: string): Promise<unknown>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { fromJson } from "../json.mjs";
|
|
11
|
+
import { getBinaryResponse } from "./BinaryResponse.mjs";
|
|
12
|
+
// Pins the upstream Response so undici's FinalizationRegistry can't GC it and cancel the body stream.
|
|
13
|
+
function retainResponse(target, response) {
|
|
14
|
+
Object.defineProperty(target, "__fern_response_ref", {
|
|
15
|
+
value: response,
|
|
16
|
+
enumerable: false,
|
|
17
|
+
configurable: true,
|
|
18
|
+
writable: false,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export function getResponseBody(response, responseType) {
|
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
switch (responseType) {
|
|
24
|
+
case "binary-response":
|
|
25
|
+
return getBinaryResponse(response);
|
|
26
|
+
case "blob":
|
|
27
|
+
return yield response.blob();
|
|
28
|
+
case "arrayBuffer":
|
|
29
|
+
return yield response.arrayBuffer();
|
|
30
|
+
case "sse":
|
|
31
|
+
if (response.body == null) {
|
|
32
|
+
return {
|
|
33
|
+
ok: false,
|
|
34
|
+
error: {
|
|
35
|
+
reason: "body-is-null",
|
|
36
|
+
statusCode: response.status,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
retainResponse(response.body, response);
|
|
41
|
+
return response.body;
|
|
42
|
+
case "streaming":
|
|
43
|
+
if (response.body == null) {
|
|
44
|
+
return {
|
|
45
|
+
ok: false,
|
|
46
|
+
error: {
|
|
47
|
+
reason: "body-is-null",
|
|
48
|
+
statusCode: response.status,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
retainResponse(response.body, response);
|
|
53
|
+
return response.body;
|
|
54
|
+
case "text":
|
|
55
|
+
return yield response.text();
|
|
56
|
+
}
|
|
57
|
+
// if responseType is "json" or not specified, try to parse as JSON
|
|
58
|
+
const text = yield response.text();
|
|
59
|
+
if (text.length > 0) {
|
|
60
|
+
try {
|
|
61
|
+
const responseBody = fromJson(text);
|
|
62
|
+
return responseBody;
|
|
63
|
+
}
|
|
64
|
+
catch (_err) {
|
|
65
|
+
return {
|
|
66
|
+
ok: false,
|
|
67
|
+
error: {
|
|
68
|
+
reason: "non-json",
|
|
69
|
+
statusCode: response.status,
|
|
70
|
+
rawBody: text,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type { APIResponse } from "./APIResponse.mjs";
|
|
2
|
+
export type { BinaryResponse } from "./BinaryResponse.mjs";
|
|
3
|
+
export type { EndpointMetadata } from "./EndpointMetadata.mjs";
|
|
4
|
+
export { EndpointSupplier } from "./EndpointSupplier.mjs";
|
|
5
|
+
export type { Fetcher, FetchFunction } from "./Fetcher.mjs";
|
|
6
|
+
export { fetcher } from "./Fetcher.mjs";
|
|
7
|
+
export { getHeader } from "./getHeader.mjs";
|
|
8
|
+
export { HttpResponsePromise } from "./HttpResponsePromise.mjs";
|
|
9
|
+
export type { PassthroughRequest } from "./makePassthroughRequest.mjs";
|
|
10
|
+
export { makePassthroughRequest } from "./makePassthroughRequest.mjs";
|
|
11
|
+
export type { RawResponse, WithRawResponse } from "./RawResponse.mjs";
|
|
12
|
+
export { abortRawResponse, toRawResponse, unknownRawResponse } from "./RawResponse.mjs";
|
|
13
|
+
export { Supplier } from "./Supplier.mjs";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { EndpointSupplier } from "./EndpointSupplier.mjs";
|
|
2
|
+
export { fetcher } from "./Fetcher.mjs";
|
|
3
|
+
export { getHeader } from "./getHeader.mjs";
|
|
4
|
+
export { HttpResponsePromise } from "./HttpResponsePromise.mjs";
|
|
5
|
+
export { makePassthroughRequest } from "./makePassthroughRequest.mjs";
|
|
6
|
+
export { abortRawResponse, toRawResponse, unknownRawResponse } from "./RawResponse.mjs";
|
|
7
|
+
export { Supplier } from "./Supplier.mjs";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type LogConfig, type Logger } from "../logging/logger.mjs";
|
|
2
|
+
import { Supplier } from "./Supplier.mjs";
|
|
3
|
+
export declare namespace PassthroughRequest {
|
|
4
|
+
/**
|
|
5
|
+
* Per-request options that can override the SDK client defaults.
|
|
6
|
+
*/
|
|
7
|
+
interface RequestOptions {
|
|
8
|
+
/** Override the default timeout for this request (in seconds). */
|
|
9
|
+
timeoutInSeconds?: number;
|
|
10
|
+
/** Override the default number of retries for this request. */
|
|
11
|
+
maxRetries?: number;
|
|
12
|
+
/** Additional headers to include in this request. */
|
|
13
|
+
headers?: Record<string, string>;
|
|
14
|
+
/** Abort signal for this request. */
|
|
15
|
+
abortSignal?: AbortSignal;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* SDK client configuration used by the passthrough fetch method.
|
|
19
|
+
*/
|
|
20
|
+
interface ClientOptions {
|
|
21
|
+
/** The base URL or environment for the client. */
|
|
22
|
+
environment?: Supplier<string>;
|
|
23
|
+
/** Override the base URL. */
|
|
24
|
+
baseUrl?: Supplier<string>;
|
|
25
|
+
/** Default headers to include in requests. */
|
|
26
|
+
headers?: Record<string, unknown>;
|
|
27
|
+
/** Default maximum time to wait for a response in seconds. */
|
|
28
|
+
timeoutInSeconds?: number;
|
|
29
|
+
/** Default number of times to retry the request. Defaults to 2. */
|
|
30
|
+
maxRetries?: number;
|
|
31
|
+
/** A custom fetch function. */
|
|
32
|
+
fetch?: typeof fetch;
|
|
33
|
+
/** Logging configuration. */
|
|
34
|
+
logging?: LogConfig | Logger;
|
|
35
|
+
/** A function that returns auth headers. */
|
|
36
|
+
getAuthHeaders?: () => Promise<Record<string, string>>;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Makes a passthrough HTTP request using the SDK's configuration (auth, retry, logging, etc.)
|
|
41
|
+
* while mimicking the standard `fetch` API.
|
|
42
|
+
*
|
|
43
|
+
* @param input - The URL, path, or Request object. If a relative path, it will be resolved against the configured base URL.
|
|
44
|
+
* @param init - Standard RequestInit options (method, headers, body, signal, etc.)
|
|
45
|
+
* @param clientOptions - SDK client options (auth, default headers, logging, etc.)
|
|
46
|
+
* @param requestOptions - Per-request overrides (timeout, retries, extra headers, abort signal).
|
|
47
|
+
* @returns A standard Response object.
|
|
48
|
+
*/
|
|
49
|
+
export declare function makePassthroughRequest(input: Request | string | URL, init: RequestInit | undefined, clientOptions: PassthroughRequest.ClientOptions, requestOptions?: PassthroughRequest.RequestOptions): Promise<Response>;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { createLogger } from "../logging/logger.mjs";
|
|
11
|
+
import { join } from "../url/join.mjs";
|
|
12
|
+
import { EndpointSupplier } from "./EndpointSupplier.mjs";
|
|
13
|
+
import { getFetchFn } from "./getFetchFn.mjs";
|
|
14
|
+
import { makeRequest } from "./makeRequest.mjs";
|
|
15
|
+
import { requestWithRetries } from "./requestWithRetries.mjs";
|
|
16
|
+
import { Supplier } from "./Supplier.mjs";
|
|
17
|
+
/**
|
|
18
|
+
* Makes a passthrough HTTP request using the SDK's configuration (auth, retry, logging, etc.)
|
|
19
|
+
* while mimicking the standard `fetch` API.
|
|
20
|
+
*
|
|
21
|
+
* @param input - The URL, path, or Request object. If a relative path, it will be resolved against the configured base URL.
|
|
22
|
+
* @param init - Standard RequestInit options (method, headers, body, signal, etc.)
|
|
23
|
+
* @param clientOptions - SDK client options (auth, default headers, logging, etc.)
|
|
24
|
+
* @param requestOptions - Per-request overrides (timeout, retries, extra headers, abort signal).
|
|
25
|
+
* @returns A standard Response object.
|
|
26
|
+
*/
|
|
27
|
+
export function makePassthroughRequest(input, init, clientOptions, requestOptions) {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
30
|
+
const logger = createLogger(clientOptions.logging);
|
|
31
|
+
// Extract URL and default init properties from Request object if provided
|
|
32
|
+
let url;
|
|
33
|
+
let effectiveInit = init;
|
|
34
|
+
if (input instanceof Request) {
|
|
35
|
+
url = input.url;
|
|
36
|
+
// If no explicit init provided, extract properties from the Request object
|
|
37
|
+
if (init == null) {
|
|
38
|
+
effectiveInit = {
|
|
39
|
+
method: input.method,
|
|
40
|
+
headers: Object.fromEntries(input.headers.entries()),
|
|
41
|
+
body: input.body,
|
|
42
|
+
signal: input.signal,
|
|
43
|
+
credentials: input.credentials,
|
|
44
|
+
cache: input.cache,
|
|
45
|
+
redirect: input.redirect,
|
|
46
|
+
referrer: input.referrer,
|
|
47
|
+
integrity: input.integrity,
|
|
48
|
+
mode: input.mode,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
url = input instanceof URL ? input.toString() : input;
|
|
54
|
+
}
|
|
55
|
+
// Resolve the base URL
|
|
56
|
+
const baseUrl = (_a = (clientOptions.baseUrl != null ? yield Supplier.get(clientOptions.baseUrl) : undefined)) !== null && _a !== void 0 ? _a : (clientOptions.environment != null ? yield Supplier.get(clientOptions.environment) : undefined);
|
|
57
|
+
// Determine the full URL
|
|
58
|
+
let fullUrl;
|
|
59
|
+
if (url.startsWith("http://") || url.startsWith("https://")) {
|
|
60
|
+
fullUrl = url;
|
|
61
|
+
}
|
|
62
|
+
else if (baseUrl != null) {
|
|
63
|
+
fullUrl = join(baseUrl, url);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
fullUrl = url;
|
|
67
|
+
}
|
|
68
|
+
// Merge headers: SDK default headers -> auth headers -> user-provided headers
|
|
69
|
+
const mergedHeaders = {};
|
|
70
|
+
// Apply SDK default headers (resolve suppliers)
|
|
71
|
+
if (clientOptions.headers != null) {
|
|
72
|
+
for (const [key, value] of Object.entries(clientOptions.headers)) {
|
|
73
|
+
const resolved = yield EndpointSupplier.get(value, { endpointMetadata: {} });
|
|
74
|
+
if (resolved != null) {
|
|
75
|
+
mergedHeaders[key.toLowerCase()] = `${resolved}`;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Apply auth headers
|
|
80
|
+
if (clientOptions.getAuthHeaders != null) {
|
|
81
|
+
const authHeaders = yield clientOptions.getAuthHeaders();
|
|
82
|
+
for (const [key, value] of Object.entries(authHeaders)) {
|
|
83
|
+
mergedHeaders[key.toLowerCase()] = value;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Apply user-provided headers from init
|
|
87
|
+
if ((effectiveInit === null || effectiveInit === void 0 ? void 0 : effectiveInit.headers) != null) {
|
|
88
|
+
const initHeaders = effectiveInit.headers instanceof Headers
|
|
89
|
+
? Object.fromEntries(effectiveInit.headers.entries())
|
|
90
|
+
: Array.isArray(effectiveInit.headers)
|
|
91
|
+
? Object.fromEntries(effectiveInit.headers)
|
|
92
|
+
: effectiveInit.headers;
|
|
93
|
+
for (const [key, value] of Object.entries(initHeaders)) {
|
|
94
|
+
if (value != null) {
|
|
95
|
+
mergedHeaders[key.toLowerCase()] = value;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Apply per-request option headers (highest priority)
|
|
100
|
+
if ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers) != null) {
|
|
101
|
+
for (const [key, value] of Object.entries(requestOptions.headers)) {
|
|
102
|
+
mergedHeaders[key.toLowerCase()] = value;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const method = (_b = effectiveInit === null || effectiveInit === void 0 ? void 0 : effectiveInit.method) !== null && _b !== void 0 ? _b : "GET";
|
|
106
|
+
const body = effectiveInit === null || effectiveInit === void 0 ? void 0 : effectiveInit.body;
|
|
107
|
+
const timeoutInSeconds = (_c = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _c !== void 0 ? _c : clientOptions.timeoutInSeconds;
|
|
108
|
+
const timeoutMs = timeoutInSeconds != null ? timeoutInSeconds * 1000 : undefined;
|
|
109
|
+
const maxRetries = (_d = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _d !== void 0 ? _d : clientOptions.maxRetries;
|
|
110
|
+
const abortSignal = (_f = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal) !== null && _e !== void 0 ? _e : effectiveInit === null || effectiveInit === void 0 ? void 0 : effectiveInit.signal) !== null && _f !== void 0 ? _f : undefined;
|
|
111
|
+
const fetchFn = (_g = clientOptions.fetch) !== null && _g !== void 0 ? _g : (yield getFetchFn());
|
|
112
|
+
if (logger.isDebug()) {
|
|
113
|
+
logger.debug("Making passthrough HTTP request", {
|
|
114
|
+
method,
|
|
115
|
+
url: fullUrl,
|
|
116
|
+
hasBody: body != null,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
const response = yield requestWithRetries(() => __awaiter(this, void 0, void 0, function* () {
|
|
120
|
+
return makeRequest(fetchFn, fullUrl, method, mergedHeaders, body !== null && body !== void 0 ? body : undefined, timeoutMs, abortSignal, (effectiveInit === null || effectiveInit === void 0 ? void 0 : effectiveInit.credentials) === "include", undefined, // duplex
|
|
121
|
+
false);
|
|
122
|
+
}), maxRetries);
|
|
123
|
+
if (logger.isDebug()) {
|
|
124
|
+
logger.debug("Passthrough HTTP request completed", {
|
|
125
|
+
method,
|
|
126
|
+
url: fullUrl,
|
|
127
|
+
statusCode: response.status,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return response;
|
|
131
|
+
});
|
|
132
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function isCacheNoStoreSupported(): boolean;
|
|
2
|
+
/**
|
|
3
|
+
* Reset the cached result of `isCacheNoStoreSupported`. Exposed for testing only.
|
|
4
|
+
*/
|
|
5
|
+
export declare function resetCacheNoStoreSupported(): void;
|
|
6
|
+
export declare const makeRequest: (fetchFn: (url: string, init: RequestInit) => Promise<Response>, url: string, method: string, headers: Headers | Record<string, string>, requestBody: BodyInit | undefined, timeoutMs?: number, abortSignal?: AbortSignal, withCredentials?: boolean, duplex?: "half", disableCache?: boolean) => Promise<Response>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { anySignal, getTimeoutSignal } from "./signals.mjs";
|
|
11
|
+
/**
|
|
12
|
+
* Cached result of checking whether the current runtime supports
|
|
13
|
+
* the `cache` option in `Request`. Some runtimes (e.g. Cloudflare Workers)
|
|
14
|
+
* throw a TypeError when this option is used.
|
|
15
|
+
*/
|
|
16
|
+
let _cacheNoStoreSupported;
|
|
17
|
+
export function isCacheNoStoreSupported() {
|
|
18
|
+
if (_cacheNoStoreSupported != null) {
|
|
19
|
+
return _cacheNoStoreSupported;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
new Request("http://localhost", { cache: "no-store" });
|
|
23
|
+
_cacheNoStoreSupported = true;
|
|
24
|
+
}
|
|
25
|
+
catch (_a) {
|
|
26
|
+
_cacheNoStoreSupported = false;
|
|
27
|
+
}
|
|
28
|
+
return _cacheNoStoreSupported;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Reset the cached result of `isCacheNoStoreSupported`. Exposed for testing only.
|
|
32
|
+
*/
|
|
33
|
+
export function resetCacheNoStoreSupported() {
|
|
34
|
+
_cacheNoStoreSupported = undefined;
|
|
35
|
+
}
|
|
36
|
+
export const makeRequest = (fetchFn, url, method, headers, requestBody, timeoutMs, abortSignal, withCredentials, duplex, disableCache) => __awaiter(void 0, void 0, void 0, function* () {
|
|
37
|
+
const signals = [];
|
|
38
|
+
let timeoutAbortId;
|
|
39
|
+
if (timeoutMs != null) {
|
|
40
|
+
const { signal, abortId } = getTimeoutSignal(timeoutMs);
|
|
41
|
+
timeoutAbortId = abortId;
|
|
42
|
+
signals.push(signal);
|
|
43
|
+
}
|
|
44
|
+
if (abortSignal != null) {
|
|
45
|
+
signals.push(abortSignal);
|
|
46
|
+
}
|
|
47
|
+
const newSignals = anySignal(signals);
|
|
48
|
+
const response = yield fetchFn(url, Object.assign({ method: method, headers, body: requestBody, signal: newSignals, credentials: withCredentials ? "include" : undefined,
|
|
49
|
+
// @ts-ignore
|
|
50
|
+
duplex }, (disableCache && isCacheNoStoreSupported() ? { cache: "no-store" } : {})));
|
|
51
|
+
if (timeoutAbortId != null) {
|
|
52
|
+
clearTimeout(timeoutAbortId);
|
|
53
|
+
}
|
|
54
|
+
return response;
|
|
55
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function requestWithRetries(requestFn: () => Promise<Response>, maxRetries?: number): Promise<Response>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
const INITIAL_RETRY_DELAY = 1000; // in milliseconds
|
|
11
|
+
const MAX_RETRY_DELAY = 60000; // in milliseconds
|
|
12
|
+
const DEFAULT_MAX_RETRIES = 2;
|
|
13
|
+
const JITTER_FACTOR = 0.2; // 20% random jitter
|
|
14
|
+
function isRetryableStatusCode(statusCode) {
|
|
15
|
+
return [408, 429].includes(statusCode) || statusCode >= 500;
|
|
16
|
+
}
|
|
17
|
+
function addPositiveJitter(delay) {
|
|
18
|
+
const jitterMultiplier = 1 + Math.random() * JITTER_FACTOR;
|
|
19
|
+
return delay * jitterMultiplier;
|
|
20
|
+
}
|
|
21
|
+
function addSymmetricJitter(delay) {
|
|
22
|
+
const jitterMultiplier = 1 + (Math.random() - 0.5) * JITTER_FACTOR;
|
|
23
|
+
return delay * jitterMultiplier;
|
|
24
|
+
}
|
|
25
|
+
function getRetryDelayFromHeaders(response, retryAttempt) {
|
|
26
|
+
const retryAfter = response.headers.get("Retry-After");
|
|
27
|
+
if (retryAfter) {
|
|
28
|
+
const retryAfterSeconds = parseInt(retryAfter, 10);
|
|
29
|
+
if (!Number.isNaN(retryAfterSeconds) && retryAfterSeconds > 0) {
|
|
30
|
+
return Math.min(retryAfterSeconds * 1000, MAX_RETRY_DELAY);
|
|
31
|
+
}
|
|
32
|
+
const retryAfterDate = new Date(retryAfter);
|
|
33
|
+
if (!Number.isNaN(retryAfterDate.getTime())) {
|
|
34
|
+
const delay = retryAfterDate.getTime() - Date.now();
|
|
35
|
+
if (delay > 0) {
|
|
36
|
+
return Math.min(Math.max(delay, 0), MAX_RETRY_DELAY);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const rateLimitReset = response.headers.get("X-RateLimit-Reset");
|
|
41
|
+
if (rateLimitReset) {
|
|
42
|
+
const resetTime = parseInt(rateLimitReset, 10);
|
|
43
|
+
if (!Number.isNaN(resetTime)) {
|
|
44
|
+
const delay = resetTime * 1000 - Date.now();
|
|
45
|
+
if (delay > 0) {
|
|
46
|
+
return addPositiveJitter(Math.min(delay, MAX_RETRY_DELAY));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return addSymmetricJitter(Math.min(INITIAL_RETRY_DELAY * Math.pow(2, retryAttempt), MAX_RETRY_DELAY));
|
|
51
|
+
}
|
|
52
|
+
export function requestWithRetries(requestFn_1) {
|
|
53
|
+
return __awaiter(this, arguments, void 0, function* (requestFn, maxRetries = DEFAULT_MAX_RETRIES) {
|
|
54
|
+
let response = yield requestFn();
|
|
55
|
+
for (let i = 0; i < maxRetries; ++i) {
|
|
56
|
+
if (isRetryableStatusCode(response.status)) {
|
|
57
|
+
const delay = getRetryDelayFromHeaders(response, i);
|
|
58
|
+
yield new Promise((resolve) => setTimeout(resolve, delay));
|
|
59
|
+
response = yield requestFn();
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return response;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const TIMEOUT = "timeout";
|
|
2
|
+
export function getTimeoutSignal(timeoutMs) {
|
|
3
|
+
const controller = new AbortController();
|
|
4
|
+
const abortId = setTimeout(() => controller.abort(TIMEOUT), timeoutMs);
|
|
5
|
+
return { signal: controller.signal, abortId };
|
|
6
|
+
}
|
|
7
|
+
export function anySignal(...args) {
|
|
8
|
+
const signals = (args.length === 1 && Array.isArray(args[0]) ? args[0] : args);
|
|
9
|
+
const controller = new AbortController();
|
|
10
|
+
for (const signal of signals) {
|
|
11
|
+
if (signal.aborted) {
|
|
12
|
+
controller.abort(signal === null || signal === void 0 ? void 0 : signal.reason);
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
signal.addEventListener("abort", () => controller.abort(signal === null || signal === void 0 ? void 0 : signal.reason), {
|
|
16
|
+
signal: controller.signal,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return controller.signal;
|
|
20
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function mergeHeaders(...headersArray) {
|
|
2
|
+
const result = {};
|
|
3
|
+
for (const [key, value] of headersArray
|
|
4
|
+
.filter((headers) => headers != null)
|
|
5
|
+
.flatMap((headers) => Object.entries(headers))) {
|
|
6
|
+
const insensitiveKey = key.toLowerCase();
|
|
7
|
+
if (value != null) {
|
|
8
|
+
result[insensitiveKey] = value;
|
|
9
|
+
}
|
|
10
|
+
else if (insensitiveKey in result) {
|
|
11
|
+
delete result[insensitiveKey];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
export function mergeOnlyDefinedHeaders(...headersArray) {
|
|
17
|
+
const result = {};
|
|
18
|
+
for (const [key, value] of headersArray
|
|
19
|
+
.filter((headers) => headers != null)
|
|
20
|
+
.flatMap((headers) => Object.entries(headers))) {
|
|
21
|
+
const insensitiveKey = key.toLowerCase();
|
|
22
|
+
if (value != null) {
|
|
23
|
+
result[insensitiveKey] = value;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialize a value to JSON
|
|
3
|
+
* @param value A JavaScript value, usually an object or array, to be converted.
|
|
4
|
+
* @param replacer A function that transforms the results.
|
|
5
|
+
* @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
|
|
6
|
+
* @returns JSON string
|
|
7
|
+
*/
|
|
8
|
+
export declare const toJson: (value: unknown, replacer?: (this: unknown, key: string, value: unknown) => unknown, space?: string | number) => string;
|
|
9
|
+
/**
|
|
10
|
+
* Parse JSON string to object, array, or other type
|
|
11
|
+
* @param text A valid JSON string.
|
|
12
|
+
* @param reviver A function that transforms the results. This function is called for each member of the object. If a member contains nested objects, the nested objects are transformed before the parent object is.
|
|
13
|
+
* @returns Parsed object, array, or other type
|
|
14
|
+
*/
|
|
15
|
+
export declare function fromJson<T = unknown>(text: string, reviver?: (this: unknown, key: string, value: unknown) => unknown): T;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialize a value to JSON
|
|
3
|
+
* @param value A JavaScript value, usually an object or array, to be converted.
|
|
4
|
+
* @param replacer A function that transforms the results.
|
|
5
|
+
* @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
|
|
6
|
+
* @returns JSON string
|
|
7
|
+
*/
|
|
8
|
+
export const toJson = (value, replacer, space) => {
|
|
9
|
+
return JSON.stringify(value, replacer, space);
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Parse JSON string to object, array, or other type
|
|
13
|
+
* @param text A valid JSON string.
|
|
14
|
+
* @param reviver A function that transforms the results. This function is called for each member of the object. If a member contains nested objects, the nested objects are transformed before the parent object is.
|
|
15
|
+
* @returns Parsed object, array, or other type
|
|
16
|
+
*/
|
|
17
|
+
export function fromJson(text, reviver) {
|
|
18
|
+
return JSON.parse(text, reviver);
|
|
19
|
+
}
|