@planqk/planqk-api-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.devcontainer/devcontainer.json +32 -0
- package/.devcontainer/post-create.sh +7 -0
- package/.env.template +2 -0
- package/.gitlab-ci.yml +71 -0
- package/.python-version +1 -0
- package/.releaserc.json +45 -0
- package/LICENSE +201 -0
- package/README-node.md +18 -0
- package/README-python.md +21 -0
- package/README.md +56 -0
- package/dist/Client.d.ts +32 -0
- package/dist/Client.js +60 -0
- package/dist/api/errors/BadRequestError.d.ts +8 -0
- package/dist/api/errors/BadRequestError.js +52 -0
- package/dist/api/errors/ForbiddenError.d.ts +8 -0
- package/dist/api/errors/ForbiddenError.js +52 -0
- package/dist/api/errors/InternalServerError.d.ts +8 -0
- package/dist/api/errors/InternalServerError.js +52 -0
- package/dist/api/errors/NotFoundError.d.ts +8 -0
- package/dist/api/errors/NotFoundError.js +52 -0
- package/dist/api/errors/UnauthorizedError.d.ts +8 -0
- package/dist/api/errors/UnauthorizedError.js +52 -0
- package/dist/api/errors/index.d.ts +5 -0
- package/dist/api/errors/index.js +21 -0
- package/dist/api/index.d.ts +3 -0
- package/dist/api/index.js +19 -0
- package/dist/api/resources/dataPools/client/Client.d.ts +177 -0
- package/dist/api/resources/dataPools/client/Client.js +676 -0
- package/dist/api/resources/dataPools/client/index.d.ts +2 -0
- package/dist/api/resources/dataPools/client/index.js +17 -0
- package/dist/api/resources/dataPools/client/requests/AddDataPoolFileRequest.d.ts +14 -0
- package/dist/api/resources/dataPools/client/requests/AddDataPoolFileRequest.js +5 -0
- package/dist/api/resources/dataPools/client/requests/CreateDataPoolRequest.d.ts +10 -0
- package/dist/api/resources/dataPools/client/requests/CreateDataPoolRequest.js +5 -0
- package/dist/api/resources/dataPools/client/requests/UpdateDataPoolRequest.d.ts +12 -0
- package/dist/api/resources/dataPools/client/requests/UpdateDataPoolRequest.js +5 -0
- package/dist/api/resources/dataPools/client/requests/index.d.ts +3 -0
- package/dist/api/resources/dataPools/client/requests/index.js +2 -0
- package/dist/api/resources/dataPools/index.d.ts +1 -0
- package/dist/api/resources/dataPools/index.js +17 -0
- package/dist/api/resources/index.d.ts +2 -0
- package/dist/api/resources/index.js +41 -0
- package/dist/api/types/DataPoolDto.d.ts +23 -0
- package/dist/api/types/DataPoolDto.js +14 -0
- package/dist/api/types/DataPoolFileDto.d.ts +12 -0
- package/dist/api/types/DataPoolFileDto.js +5 -0
- package/dist/api/types/OauthScope.d.ts +9 -0
- package/dist/api/types/OauthScope.js +9 -0
- package/dist/api/types/index.d.ts +3 -0
- package/dist/api/types/index.js +19 -0
- package/dist/core/fetcher/APIResponse.d.ts +20 -0
- package/dist/core/fetcher/APIResponse.js +2 -0
- package/dist/core/fetcher/BinaryResponse.d.ts +20 -0
- package/dist/core/fetcher/BinaryResponse.js +17 -0
- package/dist/core/fetcher/Fetcher.d.ts +40 -0
- package/dist/core/fetcher/Fetcher.js +105 -0
- package/dist/core/fetcher/Headers.d.ts +2 -0
- package/dist/core/fetcher/Headers.js +85 -0
- package/dist/core/fetcher/HttpResponsePromise.d.ts +58 -0
- package/dist/core/fetcher/HttpResponsePromise.js +94 -0
- package/dist/core/fetcher/RawResponse.d.ts +29 -0
- package/dist/core/fetcher/RawResponse.js +44 -0
- package/dist/core/fetcher/ResponseWithBody.d.ts +4 -0
- package/dist/core/fetcher/ResponseWithBody.js +6 -0
- package/dist/core/fetcher/Supplier.d.ts +4 -0
- package/dist/core/fetcher/Supplier.js +13 -0
- package/dist/core/fetcher/createRequestUrl.d.ts +1 -0
- package/dist/core/fetcher/createRequestUrl.js +8 -0
- package/dist/core/fetcher/getErrorResponseBody.d.ts +1 -0
- package/dist/core/fetcher/getErrorResponseBody.js +32 -0
- package/dist/core/fetcher/getFetchFn.d.ts +1 -0
- package/dist/core/fetcher/getFetchFn.js +6 -0
- package/dist/core/fetcher/getHeader.d.ts +1 -0
- package/dist/core/fetcher/getHeader.js +11 -0
- package/dist/core/fetcher/getRequestBody.d.ts +7 -0
- package/dist/core/fetcher/getRequestBody.js +12 -0
- package/dist/core/fetcher/getResponseBody.d.ts +1 -0
- package/dist/core/fetcher/getResponseBody.js +44 -0
- package/dist/core/fetcher/index.d.ts +9 -0
- package/dist/core/fetcher/index.js +15 -0
- package/dist/core/fetcher/makeRequest.d.ts +1 -0
- package/dist/core/fetcher/makeRequest.js +33 -0
- package/dist/core/fetcher/requestWithRetries.d.ts +1 -0
- package/dist/core/fetcher/requestWithRetries.js +29 -0
- package/dist/core/fetcher/signals.d.ts +11 -0
- package/dist/core/fetcher/signals.js +36 -0
- package/dist/core/file.d.ts +1 -0
- package/dist/core/file.js +2 -0
- package/dist/core/form-data-utils/FormDataWrapper.d.ts +16 -0
- package/dist/core/form-data-utils/FormDataWrapper.js +166 -0
- package/dist/core/form-data-utils/encodeAsFormParameter.d.ts +1 -0
- package/dist/core/form-data-utils/encodeAsFormParameter.js +12 -0
- package/dist/core/form-data-utils/index.d.ts +2 -0
- package/dist/core/form-data-utils/index.js +20 -0
- package/dist/core/headers.d.ts +3 -0
- package/dist/core/headers.js +29 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.js +44 -0
- package/dist/core/json.d.ts +15 -0
- package/dist/core/json.js +24 -0
- package/dist/core/runtime/index.d.ts +1 -0
- package/dist/core/runtime/index.js +5 -0
- package/dist/core/runtime/runtime.d.ts +9 -0
- package/dist/core/runtime/runtime.js +101 -0
- package/dist/core/url/index.d.ts +2 -0
- package/dist/core/url/index.js +7 -0
- package/dist/core/url/join.d.ts +1 -0
- package/dist/core/url/join.js +49 -0
- package/dist/core/url/qs.d.ts +6 -0
- package/dist/core/url/qs.js +67 -0
- package/dist/environments.d.ts +7 -0
- package/dist/environments.js +9 -0
- package/dist/errors/PlanqkApiError.d.ts +15 -0
- package/dist/errors/PlanqkApiError.js +33 -0
- package/dist/errors/PlanqkApiTimeoutError.d.ts +6 -0
- package/dist/errors/PlanqkApiTimeoutError.js +13 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.js +7 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +44 -0
- package/eslint.config.mjs +11 -0
- package/fern/fern.config.json +4 -0
- package/fern/generators.yml +25 -0
- package/fern/openapi/openapi.json +610 -0
- package/notebooks/python-sdk.ipynb +218 -0
- package/package.json +48 -0
- package/planqk/__init__.py +0 -0
- package/planqk/api/__init__.py +1 -0
- package/planqk/api/_version.py +1 -0
- package/planqk/api/client.py +19 -0
- package/planqk/api/credentials.py +103 -0
- package/planqk/api/sdk/__init__.py +25 -0
- package/planqk/api/sdk/client.py +153 -0
- package/planqk/api/sdk/core/__init__.py +52 -0
- package/planqk/api/sdk/core/api_error.py +23 -0
- package/planqk/api/sdk/core/client_wrapper.py +76 -0
- package/planqk/api/sdk/core/datetime_utils.py +28 -0
- package/planqk/api/sdk/core/file.py +67 -0
- package/planqk/api/sdk/core/force_multipart.py +16 -0
- package/planqk/api/sdk/core/http_client.py +543 -0
- package/planqk/api/sdk/core/http_response.py +55 -0
- package/planqk/api/sdk/core/jsonable_encoder.py +100 -0
- package/planqk/api/sdk/core/pydantic_utilities.py +255 -0
- package/planqk/api/sdk/core/query_encoder.py +58 -0
- package/planqk/api/sdk/core/remove_none_from_dict.py +11 -0
- package/planqk/api/sdk/core/request_options.py +35 -0
- package/planqk/api/sdk/core/serialization.py +276 -0
- package/planqk/api/sdk/data_pools/__init__.py +4 -0
- package/planqk/api/sdk/data_pools/client.py +700 -0
- package/planqk/api/sdk/data_pools/raw_client.py +1650 -0
- package/planqk/api/sdk/environment.py +7 -0
- package/planqk/api/sdk/errors/__init__.py +11 -0
- package/planqk/api/sdk/errors/bad_request_error.py +10 -0
- package/planqk/api/sdk/errors/forbidden_error.py +10 -0
- package/planqk/api/sdk/errors/internal_server_error.py +10 -0
- package/planqk/api/sdk/errors/not_found_error.py +10 -0
- package/planqk/api/sdk/errors/unauthorized_error.py +10 -0
- package/planqk/api/sdk/types/__init__.py +10 -0
- package/planqk/api/sdk/types/data_pool_dto.py +33 -0
- package/planqk/api/sdk/types/data_pool_dto_current_user_permission.py +5 -0
- package/planqk/api/sdk/types/data_pool_file_dto.py +27 -0
- package/planqk/api/sdk/types/oauth_scope.py +5 -0
- package/pyproject.toml +51 -0
- package/scripts/update-version.sh +6 -0
- package/src/Client.ts +53 -0
- package/src/api/errors/BadRequestError.ts +18 -0
- package/src/api/errors/ForbiddenError.ts +18 -0
- package/src/api/errors/InternalServerError.ts +18 -0
- package/src/api/errors/NotFoundError.ts +18 -0
- package/src/api/errors/UnauthorizedError.ts +18 -0
- package/src/api/errors/index.ts +5 -0
- package/src/api/index.ts +3 -0
- package/src/api/resources/dataPools/client/Client.ts +825 -0
- package/src/api/resources/dataPools/client/index.ts +2 -0
- package/src/api/resources/dataPools/client/requests/AddDataPoolFileRequest.ts +17 -0
- package/src/api/resources/dataPools/client/requests/CreateDataPoolRequest.ts +11 -0
- package/src/api/resources/dataPools/client/requests/UpdateDataPoolRequest.ts +13 -0
- package/src/api/resources/dataPools/client/requests/index.ts +3 -0
- package/src/api/resources/dataPools/index.ts +1 -0
- package/src/api/resources/index.ts +2 -0
- package/src/api/types/DataPoolDto.ts +25 -0
- package/src/api/types/DataPoolFileDto.ts +13 -0
- package/src/api/types/OauthScope.ts +10 -0
- package/src/api/types/index.ts +3 -0
- package/src/core/fetcher/APIResponse.ts +23 -0
- package/src/core/fetcher/BinaryResponse.ts +36 -0
- package/src/core/fetcher/Fetcher.ts +163 -0
- package/src/core/fetcher/Headers.ts +93 -0
- package/src/core/fetcher/HttpResponsePromise.ts +116 -0
- package/src/core/fetcher/RawResponse.ts +61 -0
- package/src/core/fetcher/ResponseWithBody.ts +7 -0
- package/src/core/fetcher/Supplier.ts +11 -0
- package/src/core/fetcher/createRequestUrl.ts +6 -0
- package/src/core/fetcher/getErrorResponseBody.ts +32 -0
- package/src/core/fetcher/getFetchFn.ts +3 -0
- package/src/core/fetcher/getHeader.ts +8 -0
- package/src/core/fetcher/getRequestBody.ts +16 -0
- package/src/core/fetcher/getResponseBody.ts +43 -0
- package/src/core/fetcher/index.ts +9 -0
- package/src/core/fetcher/makeRequest.ts +44 -0
- package/src/core/fetcher/requestWithRetries.ts +33 -0
- package/src/core/fetcher/signals.ts +38 -0
- package/src/core/file.ts +11 -0
- package/src/core/form-data-utils/FormDataWrapper.ts +176 -0
- package/src/core/form-data-utils/encodeAsFormParameter.ts +12 -0
- package/src/core/form-data-utils/index.ts +2 -0
- package/src/core/headers.ts +35 -0
- package/src/core/index.ts +5 -0
- package/src/core/json.ts +27 -0
- package/src/core/runtime/index.ts +1 -0
- package/src/core/runtime/runtime.ts +133 -0
- package/src/core/url/index.ts +2 -0
- package/src/core/url/join.ts +55 -0
- package/src/core/url/qs.ts +74 -0
- package/src/environments.ts +9 -0
- package/src/errors/PlanqkApiError.ts +55 -0
- package/src/errors/PlanqkApiTimeoutError.ts +10 -0
- package/src/errors/index.ts +2 -0
- package/src/index.test.ts +17 -0
- package/src/index.ts +4 -0
- package/tsconfig.json +18 -0
- package/uv.lock +1102 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HttpResponsePromise = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* A promise that returns the parsed response and lets you retrieve the raw response too.
|
|
6
|
+
*/
|
|
7
|
+
class HttpResponsePromise extends Promise {
|
|
8
|
+
innerPromise;
|
|
9
|
+
unwrappedPromise;
|
|
10
|
+
constructor(promise) {
|
|
11
|
+
// Initialize with a no-op to avoid premature parsing
|
|
12
|
+
super((resolve) => {
|
|
13
|
+
resolve(undefined);
|
|
14
|
+
});
|
|
15
|
+
this.innerPromise = promise;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Creates an `HttpResponsePromise` from a function that returns a promise.
|
|
19
|
+
*
|
|
20
|
+
* @param fn - A function that returns a promise resolving to a `WithRawResponse` object.
|
|
21
|
+
* @param args - Arguments to pass to the function.
|
|
22
|
+
* @returns An `HttpResponsePromise` instance.
|
|
23
|
+
*/
|
|
24
|
+
static fromFunction(fn, ...args) {
|
|
25
|
+
return new HttpResponsePromise(fn(...args));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a function that returns an `HttpResponsePromise` from a function that returns a promise.
|
|
29
|
+
*
|
|
30
|
+
* @param fn - A function that returns a promise resolving to a `WithRawResponse` object.
|
|
31
|
+
* @returns A function that returns an `HttpResponsePromise` instance.
|
|
32
|
+
*/
|
|
33
|
+
static interceptFunction(fn) {
|
|
34
|
+
return (...args) => {
|
|
35
|
+
return HttpResponsePromise.fromPromise(fn(...args));
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Creates an `HttpResponsePromise` from an existing promise.
|
|
40
|
+
*
|
|
41
|
+
* @param promise - A promise resolving to a `WithRawResponse` object.
|
|
42
|
+
* @returns An `HttpResponsePromise` instance.
|
|
43
|
+
*/
|
|
44
|
+
static fromPromise(promise) {
|
|
45
|
+
return new HttpResponsePromise(promise);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Creates an `HttpResponsePromise` from an executor function.
|
|
49
|
+
*
|
|
50
|
+
* @param executor - A function that takes resolve and reject callbacks to create a promise.
|
|
51
|
+
* @returns An `HttpResponsePromise` instance.
|
|
52
|
+
*/
|
|
53
|
+
static fromExecutor(executor) {
|
|
54
|
+
const promise = new Promise(executor);
|
|
55
|
+
return new HttpResponsePromise(promise);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Creates an `HttpResponsePromise` from a resolved result.
|
|
59
|
+
*
|
|
60
|
+
* @param result - A `WithRawResponse` object to resolve immediately.
|
|
61
|
+
* @returns An `HttpResponsePromise` instance.
|
|
62
|
+
*/
|
|
63
|
+
static fromResult(result) {
|
|
64
|
+
const promise = Promise.resolve(result);
|
|
65
|
+
return new HttpResponsePromise(promise);
|
|
66
|
+
}
|
|
67
|
+
unwrap() {
|
|
68
|
+
if (!this.unwrappedPromise) {
|
|
69
|
+
this.unwrappedPromise = this.innerPromise.then(({ data }) => data);
|
|
70
|
+
}
|
|
71
|
+
return this.unwrappedPromise;
|
|
72
|
+
}
|
|
73
|
+
/** @inheritdoc */
|
|
74
|
+
then(onfulfilled, onrejected) {
|
|
75
|
+
return this.unwrap().then(onfulfilled, onrejected);
|
|
76
|
+
}
|
|
77
|
+
/** @inheritdoc */
|
|
78
|
+
catch(onrejected) {
|
|
79
|
+
return this.unwrap().catch(onrejected);
|
|
80
|
+
}
|
|
81
|
+
/** @inheritdoc */
|
|
82
|
+
finally(onfinally) {
|
|
83
|
+
return this.unwrap().finally(onfinally);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Retrieves the data and raw response.
|
|
87
|
+
*
|
|
88
|
+
* @returns A promise resolving to a `WithRawResponse` object.
|
|
89
|
+
*/
|
|
90
|
+
async withRawResponse() {
|
|
91
|
+
return await this.innerPromise;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.HttpResponsePromise = HttpResponsePromise;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The raw response from the fetch call excluding the body.
|
|
3
|
+
*/
|
|
4
|
+
export type RawResponse = Omit<{
|
|
5
|
+
[K in keyof Response as Response[K] extends Function ? never : K]: Response[K];
|
|
6
|
+
}, "ok" | "body" | "bodyUsed">;
|
|
7
|
+
/**
|
|
8
|
+
* A raw response indicating that the request was aborted.
|
|
9
|
+
*/
|
|
10
|
+
export declare const abortRawResponse: RawResponse;
|
|
11
|
+
/**
|
|
12
|
+
* A raw response indicating an unknown error.
|
|
13
|
+
*/
|
|
14
|
+
export declare const unknownRawResponse: RawResponse;
|
|
15
|
+
/**
|
|
16
|
+
* Converts a `RawResponse` object into a `RawResponse` by extracting its properties,
|
|
17
|
+
* excluding the `body` and `bodyUsed` fields.
|
|
18
|
+
*
|
|
19
|
+
* @param response - The `RawResponse` object to convert.
|
|
20
|
+
* @returns A `RawResponse` object containing the extracted properties of the input response.
|
|
21
|
+
*/
|
|
22
|
+
export declare function toRawResponse(response: Response): RawResponse;
|
|
23
|
+
/**
|
|
24
|
+
* Creates a `RawResponse` from a standard `Response` object.
|
|
25
|
+
*/
|
|
26
|
+
export interface WithRawResponse<T> {
|
|
27
|
+
readonly data: T;
|
|
28
|
+
readonly rawResponse: RawResponse;
|
|
29
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.unknownRawResponse = exports.abortRawResponse = void 0;
|
|
4
|
+
exports.toRawResponse = toRawResponse;
|
|
5
|
+
const Headers_js_1 = require("./Headers.js");
|
|
6
|
+
/**
|
|
7
|
+
* A raw response indicating that the request was aborted.
|
|
8
|
+
*/
|
|
9
|
+
exports.abortRawResponse = {
|
|
10
|
+
headers: new Headers_js_1.Headers(),
|
|
11
|
+
redirected: false,
|
|
12
|
+
status: 499,
|
|
13
|
+
statusText: "Client Closed Request",
|
|
14
|
+
type: "error",
|
|
15
|
+
url: "",
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* A raw response indicating an unknown error.
|
|
19
|
+
*/
|
|
20
|
+
exports.unknownRawResponse = {
|
|
21
|
+
headers: new Headers_js_1.Headers(),
|
|
22
|
+
redirected: false,
|
|
23
|
+
status: 0,
|
|
24
|
+
statusText: "Unknown Error",
|
|
25
|
+
type: "error",
|
|
26
|
+
url: "",
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Converts a `RawResponse` object into a `RawResponse` by extracting its properties,
|
|
30
|
+
* excluding the `body` and `bodyUsed` fields.
|
|
31
|
+
*
|
|
32
|
+
* @param response - The `RawResponse` object to convert.
|
|
33
|
+
* @returns A `RawResponse` object containing the extracted properties of the input response.
|
|
34
|
+
*/
|
|
35
|
+
function toRawResponse(response) {
|
|
36
|
+
return {
|
|
37
|
+
headers: response.headers,
|
|
38
|
+
redirected: response.redirected,
|
|
39
|
+
status: response.status,
|
|
40
|
+
statusText: response.statusText,
|
|
41
|
+
type: response.type,
|
|
42
|
+
url: response.url,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Supplier = void 0;
|
|
4
|
+
exports.Supplier = {
|
|
5
|
+
get: async (supplier) => {
|
|
6
|
+
if (typeof supplier === "function") {
|
|
7
|
+
return supplier();
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
return supplier;
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function createRequestUrl(baseUrl: string, queryParameters?: Record<string, unknown>): string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRequestUrl = createRequestUrl;
|
|
4
|
+
const qs_js_1 = require("../url/qs.js");
|
|
5
|
+
function createRequestUrl(baseUrl, queryParameters) {
|
|
6
|
+
const queryString = (0, qs_js_1.toQueryString)(queryParameters, { arrayFormat: "repeat" });
|
|
7
|
+
return queryString ? `${baseUrl}?${queryString}` : baseUrl;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getErrorResponseBody(response: Response): Promise<unknown>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getErrorResponseBody = getErrorResponseBody;
|
|
4
|
+
const json_js_1 = require("../json.js");
|
|
5
|
+
const getResponseBody_js_1 = require("./getResponseBody.js");
|
|
6
|
+
async function getErrorResponseBody(response) {
|
|
7
|
+
let contentType = response.headers.get("Content-Type")?.toLowerCase();
|
|
8
|
+
if (contentType == null || contentType.length === 0) {
|
|
9
|
+
return (0, getResponseBody_js_1.getResponseBody)(response);
|
|
10
|
+
}
|
|
11
|
+
if (contentType.indexOf(";") !== -1) {
|
|
12
|
+
contentType = contentType.split(";")[0]?.trim() ?? "";
|
|
13
|
+
}
|
|
14
|
+
switch (contentType) {
|
|
15
|
+
case "application/hal+json":
|
|
16
|
+
case "application/json":
|
|
17
|
+
case "application/ld+json":
|
|
18
|
+
case "application/problem+json":
|
|
19
|
+
case "application/vnd.api+json":
|
|
20
|
+
case "text/json":
|
|
21
|
+
const text = await response.text();
|
|
22
|
+
return text.length > 0 ? (0, json_js_1.fromJson)(text) : undefined;
|
|
23
|
+
default:
|
|
24
|
+
if (contentType.startsWith("application/vnd.") && contentType.endsWith("+json")) {
|
|
25
|
+
const text = await response.text();
|
|
26
|
+
return text.length > 0 ? (0, json_js_1.fromJson)(text) : undefined;
|
|
27
|
+
}
|
|
28
|
+
// Fallback to plain text if content type is not recognized
|
|
29
|
+
// Even if no body is present, the response will be an empty string
|
|
30
|
+
return await response.text();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getFetchFn(): Promise<typeof fetch>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getHeader(headers: Record<string, any>, header: string): string | undefined;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getHeader = getHeader;
|
|
4
|
+
function getHeader(headers, header) {
|
|
5
|
+
for (const [headerKey, headerValue] of Object.entries(headers)) {
|
|
6
|
+
if (headerKey.toLowerCase() === header.toLowerCase()) {
|
|
7
|
+
return headerValue;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getRequestBody = getRequestBody;
|
|
4
|
+
const json_js_1 = require("../json.js");
|
|
5
|
+
async function getRequestBody({ body, type }) {
|
|
6
|
+
if (type.includes("json")) {
|
|
7
|
+
return (0, json_js_1.toJson)(body);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
return body;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getResponseBody(response: Response, responseType?: string): Promise<unknown>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getResponseBody = getResponseBody;
|
|
4
|
+
const BinaryResponse_js_1 = require("./BinaryResponse.js");
|
|
5
|
+
const ResponseWithBody_js_1 = require("./ResponseWithBody.js");
|
|
6
|
+
const json_js_1 = require("../json.js");
|
|
7
|
+
async function getResponseBody(response, responseType) {
|
|
8
|
+
if (!(0, ResponseWithBody_js_1.isResponseWithBody)(response)) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
switch (responseType) {
|
|
12
|
+
case "binary-response":
|
|
13
|
+
return (0, BinaryResponse_js_1.getBinaryResponse)(response);
|
|
14
|
+
case "blob":
|
|
15
|
+
return await response.blob();
|
|
16
|
+
case "arrayBuffer":
|
|
17
|
+
return await response.arrayBuffer();
|
|
18
|
+
case "sse":
|
|
19
|
+
return response.body;
|
|
20
|
+
case "streaming":
|
|
21
|
+
return response.body;
|
|
22
|
+
case "text":
|
|
23
|
+
return await response.text();
|
|
24
|
+
}
|
|
25
|
+
// if responseType is "json" or not specified, try to parse as JSON
|
|
26
|
+
const text = await response.text();
|
|
27
|
+
if (text.length > 0) {
|
|
28
|
+
try {
|
|
29
|
+
let responseBody = (0, json_js_1.fromJson)(text);
|
|
30
|
+
return responseBody;
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
return {
|
|
34
|
+
ok: false,
|
|
35
|
+
error: {
|
|
36
|
+
reason: "non-json",
|
|
37
|
+
statusCode: response.status,
|
|
38
|
+
rawBody: text,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { APIResponse } from "./APIResponse.js";
|
|
2
|
+
export { fetcher } from "./Fetcher.js";
|
|
3
|
+
export type { Fetcher, FetchFunction } from "./Fetcher.js";
|
|
4
|
+
export { getHeader } from "./getHeader.js";
|
|
5
|
+
export { Supplier } from "./Supplier.js";
|
|
6
|
+
export { abortRawResponse, toRawResponse, unknownRawResponse } from "./RawResponse.js";
|
|
7
|
+
export type { RawResponse, WithRawResponse } from "./RawResponse.js";
|
|
8
|
+
export { HttpResponsePromise } from "./HttpResponsePromise.js";
|
|
9
|
+
export { BinaryResponse } from "./BinaryResponse.js";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HttpResponsePromise = exports.unknownRawResponse = exports.toRawResponse = exports.abortRawResponse = exports.Supplier = exports.getHeader = exports.fetcher = void 0;
|
|
4
|
+
var Fetcher_js_1 = require("./Fetcher.js");
|
|
5
|
+
Object.defineProperty(exports, "fetcher", { enumerable: true, get: function () { return Fetcher_js_1.fetcher; } });
|
|
6
|
+
var getHeader_js_1 = require("./getHeader.js");
|
|
7
|
+
Object.defineProperty(exports, "getHeader", { enumerable: true, get: function () { return getHeader_js_1.getHeader; } });
|
|
8
|
+
var Supplier_js_1 = require("./Supplier.js");
|
|
9
|
+
Object.defineProperty(exports, "Supplier", { enumerable: true, get: function () { return Supplier_js_1.Supplier; } });
|
|
10
|
+
var RawResponse_js_1 = require("./RawResponse.js");
|
|
11
|
+
Object.defineProperty(exports, "abortRawResponse", { enumerable: true, get: function () { return RawResponse_js_1.abortRawResponse; } });
|
|
12
|
+
Object.defineProperty(exports, "toRawResponse", { enumerable: true, get: function () { return RawResponse_js_1.toRawResponse; } });
|
|
13
|
+
Object.defineProperty(exports, "unknownRawResponse", { enumerable: true, get: function () { return RawResponse_js_1.unknownRawResponse; } });
|
|
14
|
+
var HttpResponsePromise_js_1 = require("./HttpResponsePromise.js");
|
|
15
|
+
Object.defineProperty(exports, "HttpResponsePromise", { enumerable: true, get: function () { return HttpResponsePromise_js_1.HttpResponsePromise; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const makeRequest: (fetchFn: (url: string, init: RequestInit) => Promise<Response>, url: string, method: string, headers: Record<string, string>, requestBody: BodyInit | undefined, timeoutMs?: number, abortSignal?: AbortSignal, withCredentials?: boolean, duplex?: "half") => Promise<Response>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeRequest = void 0;
|
|
4
|
+
const signals_js_1 = require("./signals.js");
|
|
5
|
+
const makeRequest = async (fetchFn, url, method, headers, requestBody, timeoutMs, abortSignal, withCredentials, duplex) => {
|
|
6
|
+
const signals = [];
|
|
7
|
+
// Add timeout signal
|
|
8
|
+
let timeoutAbortId = undefined;
|
|
9
|
+
if (timeoutMs != null) {
|
|
10
|
+
const { signal, abortId } = (0, signals_js_1.getTimeoutSignal)(timeoutMs);
|
|
11
|
+
timeoutAbortId = abortId;
|
|
12
|
+
signals.push(signal);
|
|
13
|
+
}
|
|
14
|
+
// Add arbitrary signal
|
|
15
|
+
if (abortSignal != null) {
|
|
16
|
+
signals.push(abortSignal);
|
|
17
|
+
}
|
|
18
|
+
let newSignals = (0, signals_js_1.anySignal)(signals);
|
|
19
|
+
const response = await fetchFn(url, {
|
|
20
|
+
method: method,
|
|
21
|
+
headers,
|
|
22
|
+
body: requestBody,
|
|
23
|
+
signal: newSignals,
|
|
24
|
+
credentials: withCredentials ? "include" : undefined,
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
duplex,
|
|
27
|
+
});
|
|
28
|
+
if (timeoutAbortId != null) {
|
|
29
|
+
clearTimeout(timeoutAbortId);
|
|
30
|
+
}
|
|
31
|
+
return response;
|
|
32
|
+
};
|
|
33
|
+
exports.makeRequest = makeRequest;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function requestWithRetries(requestFn: () => Promise<Response>, maxRetries?: number): Promise<Response>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requestWithRetries = requestWithRetries;
|
|
4
|
+
const INITIAL_RETRY_DELAY = 1000; // in milliseconds
|
|
5
|
+
const MAX_RETRY_DELAY = 60000; // in milliseconds
|
|
6
|
+
const DEFAULT_MAX_RETRIES = 2;
|
|
7
|
+
const JITTER_FACTOR = 0.2; // 20% random jitter
|
|
8
|
+
function addJitter(delay) {
|
|
9
|
+
// Generate a random value between -JITTER_FACTOR and +JITTER_FACTOR
|
|
10
|
+
const jitterMultiplier = 1 + (Math.random() * 2 - 1) * JITTER_FACTOR;
|
|
11
|
+
return delay * jitterMultiplier;
|
|
12
|
+
}
|
|
13
|
+
async function requestWithRetries(requestFn, maxRetries = DEFAULT_MAX_RETRIES) {
|
|
14
|
+
let response = await requestFn();
|
|
15
|
+
for (let i = 0; i < maxRetries; ++i) {
|
|
16
|
+
if ([408, 429].includes(response.status) || response.status >= 500) {
|
|
17
|
+
// Calculate base delay using exponential backoff (in milliseconds)
|
|
18
|
+
const baseDelay = Math.min(INITIAL_RETRY_DELAY * Math.pow(2, i), MAX_RETRY_DELAY);
|
|
19
|
+
// Add jitter to the delay
|
|
20
|
+
const delayWithJitter = addJitter(baseDelay);
|
|
21
|
+
await new Promise((resolve) => setTimeout(resolve, delayWithJitter));
|
|
22
|
+
response = await requestFn();
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return response;
|
|
29
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function getTimeoutSignal(timeoutMs: number): {
|
|
2
|
+
signal: AbortSignal;
|
|
3
|
+
abortId: NodeJS.Timeout;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Returns an abort signal that is getting aborted when
|
|
7
|
+
* at least one of the specified abort signals is aborted.
|
|
8
|
+
*
|
|
9
|
+
* Requires at least node.js 18.
|
|
10
|
+
*/
|
|
11
|
+
export declare function anySignal(...args: AbortSignal[] | [AbortSignal[]]): AbortSignal;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTimeoutSignal = getTimeoutSignal;
|
|
4
|
+
exports.anySignal = anySignal;
|
|
5
|
+
const TIMEOUT = "timeout";
|
|
6
|
+
function getTimeoutSignal(timeoutMs) {
|
|
7
|
+
const controller = new AbortController();
|
|
8
|
+
const abortId = setTimeout(() => controller.abort(TIMEOUT), timeoutMs);
|
|
9
|
+
return { signal: controller.signal, abortId };
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Returns an abort signal that is getting aborted when
|
|
13
|
+
* at least one of the specified abort signals is aborted.
|
|
14
|
+
*
|
|
15
|
+
* Requires at least node.js 18.
|
|
16
|
+
*/
|
|
17
|
+
function anySignal(...args) {
|
|
18
|
+
// Allowing signals to be passed either as array
|
|
19
|
+
// of signals or as multiple arguments.
|
|
20
|
+
const signals = (args.length === 1 && Array.isArray(args[0]) ? args[0] : args);
|
|
21
|
+
const controller = new AbortController();
|
|
22
|
+
for (const signal of signals) {
|
|
23
|
+
if (signal.aborted) {
|
|
24
|
+
// Exiting early if one of the signals
|
|
25
|
+
// is already aborted.
|
|
26
|
+
controller.abort(signal?.reason);
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
// Listening for signals and removing the listeners
|
|
30
|
+
// when at least one symbol is aborted.
|
|
31
|
+
signal.addEventListener("abort", () => controller.abort(signal?.reason), {
|
|
32
|
+
signal: controller.signal,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return controller.signal;
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type FileLike = ArrayBuffer | Uint8Array | import("buffer").Buffer | import("buffer").Blob | import("buffer").File | import("stream").Readable | import("stream/web").ReadableStream | globalThis.Blob | globalThis.File | ReadableStream;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface FormDataRequest<Body> {
|
|
2
|
+
body: Body;
|
|
3
|
+
headers: Record<string, string>;
|
|
4
|
+
duplex?: "half";
|
|
5
|
+
}
|
|
6
|
+
export declare function newFormData(): Promise<FormDataWrapper>;
|
|
7
|
+
export declare class FormDataWrapper {
|
|
8
|
+
private fd;
|
|
9
|
+
setup(): Promise<void>;
|
|
10
|
+
append(key: string, value: unknown): void;
|
|
11
|
+
private getFileName;
|
|
12
|
+
private convertToBlob;
|
|
13
|
+
appendFile(key: string, value: unknown, fileName?: string): Promise<void>;
|
|
14
|
+
getRequest(): FormDataRequest<FormData>;
|
|
15
|
+
}
|
|
16
|
+
export {};
|