@planqk/planqk-service-sdk 2.1.1 → 2.2.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.
Files changed (173) hide show
  1. package/.gitlab-ci.yml +8 -39
  2. package/README-node.md +16 -12
  3. package/README.md +30 -41
  4. package/dist/sdk/Client.d.ts +10 -4
  5. package/dist/sdk/Client.js +46 -4
  6. package/dist/sdk/api/index.d.ts +2 -3
  7. package/dist/sdk/api/index.js +2 -3
  8. package/dist/sdk/api/resources/index.d.ts +2 -2
  9. package/dist/sdk/api/resources/index.js +2 -2
  10. package/dist/sdk/api/resources/serviceApi/client/Client.d.ts +41 -55
  11. package/dist/sdk/api/resources/serviceApi/client/Client.js +131 -227
  12. package/dist/sdk/api/resources/serviceApi/index.d.ts +2 -2
  13. package/dist/sdk/api/resources/serviceApi/index.js +2 -2
  14. package/dist/sdk/api/resources/serviceApi/types/GetResultResponse.d.ts +13 -3
  15. package/dist/sdk/api/resources/serviceApi/types/index.d.ts +1 -4
  16. package/dist/sdk/api/resources/serviceApi/types/index.js +1 -4
  17. package/dist/sdk/api/types/ServiceExecution.d.ts +12 -2
  18. package/dist/sdk/api/types/ServiceExecution.js +12 -0
  19. package/dist/sdk/api/types/index.d.ts +2 -6
  20. package/dist/sdk/api/types/index.js +2 -6
  21. package/dist/sdk/core/auth/BasicAuth.js +3 -3
  22. package/dist/sdk/core/auth/index.d.ts +2 -2
  23. package/dist/sdk/core/auth/index.js +4 -4
  24. package/dist/sdk/core/base64.d.ts +2 -0
  25. package/dist/sdk/core/base64.js +26 -0
  26. package/dist/sdk/core/fetcher/APIResponse.d.ts +10 -0
  27. package/dist/sdk/core/fetcher/BinaryResponse.d.ts +20 -0
  28. package/dist/sdk/core/fetcher/BinaryResponse.js +17 -0
  29. package/dist/sdk/core/fetcher/Fetcher.d.ts +5 -4
  30. package/dist/sdk/core/fetcher/Fetcher.js +41 -22
  31. package/dist/sdk/core/fetcher/Headers.d.ts +2 -0
  32. package/dist/sdk/core/fetcher/Headers.js +85 -0
  33. package/dist/sdk/core/fetcher/HttpResponsePromise.d.ts +58 -0
  34. package/dist/sdk/core/fetcher/HttpResponsePromise.js +94 -0
  35. package/dist/sdk/core/fetcher/RawResponse.d.ts +29 -0
  36. package/dist/sdk/core/fetcher/RawResponse.js +44 -0
  37. package/dist/sdk/core/fetcher/ResponseWithBody.d.ts +4 -0
  38. package/dist/sdk/core/fetcher/ResponseWithBody.js +6 -0
  39. package/dist/sdk/core/fetcher/createRequestUrl.d.ts +1 -1
  40. package/dist/sdk/core/fetcher/createRequestUrl.js +3 -7
  41. package/dist/sdk/core/fetcher/getErrorResponseBody.d.ts +1 -0
  42. package/dist/sdk/core/fetcher/getErrorResponseBody.js +32 -0
  43. package/dist/sdk/core/fetcher/getFetchFn.d.ts +1 -4
  44. package/dist/sdk/core/fetcher/getFetchFn.js +1 -52
  45. package/dist/sdk/core/fetcher/getRequestBody.js +2 -1
  46. package/dist/sdk/core/fetcher/getResponseBody.js +34 -30
  47. package/dist/sdk/core/fetcher/index.d.ts +9 -5
  48. package/dist/sdk/core/fetcher/index.js +13 -7
  49. package/dist/sdk/core/fetcher/makeRequest.js +3 -3
  50. package/dist/sdk/core/fetcher/requestWithRetries.js +14 -5
  51. package/dist/sdk/core/headers.d.ts +3 -0
  52. package/dist/sdk/core/headers.js +29 -0
  53. package/dist/sdk/core/index.d.ts +5 -3
  54. package/dist/sdk/core/index.js +28 -3
  55. package/dist/sdk/core/json.d.ts +15 -0
  56. package/dist/sdk/core/json.js +24 -0
  57. package/dist/sdk/core/runtime/index.d.ts +1 -1
  58. package/dist/sdk/core/runtime/index.js +2 -2
  59. package/dist/sdk/core/runtime/runtime.d.ts +1 -1
  60. package/dist/sdk/core/runtime/runtime.js +49 -40
  61. package/dist/sdk/core/url/index.d.ts +2 -0
  62. package/dist/sdk/core/url/index.js +7 -0
  63. package/dist/sdk/core/url/join.d.ts +1 -0
  64. package/dist/sdk/core/url/join.js +49 -0
  65. package/dist/sdk/core/url/qs.d.ts +6 -0
  66. package/dist/sdk/core/url/qs.js +67 -0
  67. package/dist/sdk/errors/PlanqkServiceApiError.d.ts +4 -1
  68. package/dist/sdk/errors/PlanqkServiceApiError.js +7 -8
  69. package/dist/sdk/errors/PlanqkServiceApiTimeoutError.d.ts +1 -1
  70. package/dist/sdk/errors/PlanqkServiceApiTimeoutError.js +2 -2
  71. package/dist/sdk/errors/index.d.ts +2 -2
  72. package/dist/sdk/errors/index.js +4 -4
  73. package/dist/sdk/index.d.ts +4 -4
  74. package/dist/sdk/index.js +9 -9
  75. package/fern/fern.config.json +1 -1
  76. package/fern/generators.yml +2 -2
  77. package/fern/openapi/openapi.yml +41 -131
  78. package/notebooks/python-sdk.ipynb +1 -1
  79. package/package.json +2 -3
  80. package/planqk/service/_version.py +1 -1
  81. package/pyproject.toml +1 -1
  82. package/src/index.test.ts +29 -16
  83. package/src/sdk/Client.ts +27 -7
  84. package/src/sdk/api/index.ts +2 -3
  85. package/src/sdk/api/resources/index.ts +2 -2
  86. package/src/sdk/api/resources/serviceApi/client/Client.ts +223 -250
  87. package/src/sdk/api/resources/serviceApi/index.ts +2 -2
  88. package/src/sdk/api/resources/serviceApi/types/GetResultResponse.ts +15 -3
  89. package/src/sdk/api/resources/serviceApi/types/index.ts +1 -4
  90. package/src/sdk/api/types/ServiceExecution.ts +13 -3
  91. package/src/sdk/api/types/index.ts +2 -6
  92. package/src/sdk/core/auth/BasicAuth.ts +3 -3
  93. package/src/sdk/core/auth/index.ts +2 -2
  94. package/src/sdk/core/base64.ts +27 -0
  95. package/src/sdk/core/fetcher/APIResponse.ts +11 -0
  96. package/src/sdk/core/fetcher/BinaryResponse.ts +36 -0
  97. package/src/sdk/core/fetcher/Fetcher.ts +46 -26
  98. package/src/sdk/core/fetcher/Headers.ts +93 -0
  99. package/src/sdk/core/fetcher/HttpResponsePromise.ts +116 -0
  100. package/src/sdk/core/fetcher/RawResponse.ts +61 -0
  101. package/src/sdk/core/fetcher/ResponseWithBody.ts +7 -0
  102. package/src/sdk/core/fetcher/createRequestUrl.ts +4 -8
  103. package/src/sdk/core/fetcher/getErrorResponseBody.ts +32 -0
  104. package/src/sdk/core/fetcher/getFetchFn.ts +2 -24
  105. package/src/sdk/core/fetcher/getRequestBody.ts +3 -1
  106. package/src/sdk/core/fetcher/getResponseBody.ts +38 -27
  107. package/src/sdk/core/fetcher/index.ts +9 -5
  108. package/src/sdk/core/fetcher/makeRequest.ts +2 -2
  109. package/src/sdk/core/fetcher/requestWithRetries.ts +18 -6
  110. package/src/sdk/core/fetcher/signals.ts +1 -1
  111. package/src/sdk/core/headers.ts +35 -0
  112. package/src/sdk/core/index.ts +5 -3
  113. package/src/sdk/core/json.ts +27 -0
  114. package/src/sdk/core/runtime/index.ts +1 -1
  115. package/src/sdk/core/runtime/runtime.ts +60 -53
  116. package/src/sdk/core/url/index.ts +2 -0
  117. package/src/sdk/core/url/join.ts +55 -0
  118. package/src/sdk/core/url/qs.ts +74 -0
  119. package/src/sdk/errors/PlanqkServiceApiError.ts +21 -11
  120. package/src/sdk/errors/PlanqkServiceApiTimeoutError.ts +2 -2
  121. package/src/sdk/errors/index.ts +2 -2
  122. package/src/sdk/index.ts +4 -4
  123. package/dist/sdk/api/errors/BadRequestError.d.ts +0 -7
  124. package/dist/sdk/api/errors/BadRequestError.js +0 -51
  125. package/dist/sdk/api/errors/ForbiddenError.d.ts +0 -7
  126. package/dist/sdk/api/errors/ForbiddenError.js +0 -51
  127. package/dist/sdk/api/errors/InternalServerError.d.ts +0 -7
  128. package/dist/sdk/api/errors/InternalServerError.js +0 -51
  129. package/dist/sdk/api/errors/NotFoundError.d.ts +0 -7
  130. package/dist/sdk/api/errors/NotFoundError.js +0 -51
  131. package/dist/sdk/api/errors/UnauthorizedError.d.ts +0 -7
  132. package/dist/sdk/api/errors/UnauthorizedError.js +0 -51
  133. package/dist/sdk/api/errors/index.d.ts +0 -5
  134. package/dist/sdk/api/errors/index.js +0 -21
  135. package/dist/sdk/api/resources/serviceApi/types/GetResultResponseEmbedded.d.ts +0 -7
  136. package/dist/sdk/api/resources/serviceApi/types/GetResultResponseEmbedded.js +0 -5
  137. package/dist/sdk/api/resources/serviceApi/types/GetResultResponseLinks.d.ts +0 -7
  138. package/dist/sdk/api/resources/serviceApi/types/GetResultResponseLinks.js +0 -5
  139. package/dist/sdk/api/resources/serviceApi/types/HealthCheckResponse.d.ts +0 -7
  140. package/dist/sdk/api/resources/serviceApi/types/HealthCheckResponse.js +0 -5
  141. package/dist/sdk/api/types/InputData.d.ts +0 -4
  142. package/dist/sdk/api/types/InputData.js +0 -5
  143. package/dist/sdk/api/types/InputDataRef.d.ts +0 -8
  144. package/dist/sdk/api/types/InputDataRef.js +0 -5
  145. package/dist/sdk/api/types/InputParams.d.ts +0 -4
  146. package/dist/sdk/api/types/InputParams.js +0 -5
  147. package/dist/sdk/api/types/ServiceExecutionStatus.d.ts +0 -12
  148. package/dist/sdk/api/types/ServiceExecutionStatus.js +0 -14
  149. package/dist/sdk/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.d.ts +0 -30
  150. package/dist/sdk/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.js +0 -232
  151. package/dist/sdk/core/fetcher/stream-wrappers/NodePre18StreamWrapper.d.ts +0 -21
  152. package/dist/sdk/core/fetcher/stream-wrappers/NodePre18StreamWrapper.js +0 -91
  153. package/dist/sdk/core/fetcher/stream-wrappers/UndiciStreamWrapper.d.ts +0 -31
  154. package/dist/sdk/core/fetcher/stream-wrappers/UndiciStreamWrapper.js +0 -214
  155. package/dist/sdk/core/fetcher/stream-wrappers/chooseStreamWrapper.d.ts +0 -18
  156. package/dist/sdk/core/fetcher/stream-wrappers/chooseStreamWrapper.js +0 -48
  157. package/src/sdk/api/errors/BadRequestError.ts +0 -16
  158. package/src/sdk/api/errors/ForbiddenError.ts +0 -16
  159. package/src/sdk/api/errors/InternalServerError.ts +0 -16
  160. package/src/sdk/api/errors/NotFoundError.ts +0 -16
  161. package/src/sdk/api/errors/UnauthorizedError.ts +0 -16
  162. package/src/sdk/api/errors/index.ts +0 -5
  163. package/src/sdk/api/resources/serviceApi/types/GetResultResponseEmbedded.ts +0 -9
  164. package/src/sdk/api/resources/serviceApi/types/GetResultResponseLinks.ts +0 -9
  165. package/src/sdk/api/resources/serviceApi/types/HealthCheckResponse.ts +0 -8
  166. package/src/sdk/api/types/InputData.ts +0 -5
  167. package/src/sdk/api/types/InputDataRef.ts +0 -9
  168. package/src/sdk/api/types/InputParams.ts +0 -5
  169. package/src/sdk/api/types/ServiceExecutionStatus.ts +0 -14
  170. package/src/sdk/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.ts +0 -252
  171. package/src/sdk/core/fetcher/stream-wrappers/NodePre18StreamWrapper.ts +0 -106
  172. package/src/sdk/core/fetcher/stream-wrappers/UndiciStreamWrapper.ts +0 -239
  173. package/src/sdk/core/fetcher/stream-wrappers/chooseStreamWrapper.ts +0 -33
@@ -1,11 +1,21 @@
1
1
  /**
2
2
  * This file was auto-generated by Fern from our API Definition.
3
3
  */
4
- import * as PlanqkServiceApi from "../index";
5
4
  export interface ServiceExecution {
6
5
  id?: string;
7
- status?: PlanqkServiceApi.ServiceExecutionStatus;
6
+ status?: ServiceExecution.Status;
8
7
  createdAt?: string;
9
8
  startedAt?: string;
10
9
  endedAt?: string;
11
10
  }
11
+ export declare namespace ServiceExecution {
12
+ type Status = "UNKNOWN" | "PENDING" | "RUNNING" | "SUCCEEDED" | "CANCELLED" | "FAILED";
13
+ const Status: {
14
+ readonly Unknown: "UNKNOWN";
15
+ readonly Pending: "PENDING";
16
+ readonly Running: "RUNNING";
17
+ readonly Succeeded: "SUCCEEDED";
18
+ readonly Cancelled: "CANCELLED";
19
+ readonly Failed: "FAILED";
20
+ };
21
+ }
@@ -3,3 +3,15 @@
3
3
  * This file was auto-generated by Fern from our API Definition.
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ServiceExecution = void 0;
7
+ var ServiceExecution;
8
+ (function (ServiceExecution) {
9
+ ServiceExecution.Status = {
10
+ Unknown: "UNKNOWN",
11
+ Pending: "PENDING",
12
+ Running: "RUNNING",
13
+ Succeeded: "SUCCEEDED",
14
+ Cancelled: "CANCELLED",
15
+ Failed: "FAILED",
16
+ };
17
+ })(ServiceExecution || (exports.ServiceExecution = ServiceExecution = {}));
@@ -1,6 +1,2 @@
1
- export * from "./InputData";
2
- export * from "./InputParams";
3
- export * from "./InputDataRef";
4
- export * from "./ServiceExecutionStatus";
5
- export * from "./ServiceExecution";
6
- export * from "./HalLink";
1
+ export * from "./ServiceExecution.js";
2
+ export * from "./HalLink.js";
@@ -14,9 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./InputData"), exports);
18
- __exportStar(require("./InputParams"), exports);
19
- __exportStar(require("./InputDataRef"), exports);
20
- __exportStar(require("./ServiceExecutionStatus"), exports);
21
- __exportStar(require("./ServiceExecution"), exports);
22
- __exportStar(require("./HalLink"), exports);
17
+ __exportStar(require("./ServiceExecution.js"), exports);
18
+ __exportStar(require("./HalLink.js"), exports);
@@ -1,19 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BasicAuth = void 0;
4
- const js_base64_1 = require("js-base64");
4
+ const base64_js_1 = require("../base64.js");
5
5
  const BASIC_AUTH_HEADER_PREFIX = /^Basic /i;
6
6
  exports.BasicAuth = {
7
7
  toAuthorizationHeader: (basicAuth) => {
8
8
  if (basicAuth == null) {
9
9
  return undefined;
10
10
  }
11
- const token = js_base64_1.Base64.encode(`${basicAuth.username}:${basicAuth.password}`);
11
+ const token = (0, base64_js_1.base64Encode)(`${basicAuth.username}:${basicAuth.password}`);
12
12
  return `Basic ${token}`;
13
13
  },
14
14
  fromAuthorizationHeader: (header) => {
15
15
  const credentials = header.replace(BASIC_AUTH_HEADER_PREFIX, "");
16
- const decoded = js_base64_1.Base64.decode(credentials);
16
+ const decoded = (0, base64_js_1.base64Decode)(credentials);
17
17
  const [username, password] = decoded.split(":", 2);
18
18
  if (username == null || password == null) {
19
19
  throw new Error("Invalid basic auth");
@@ -1,2 +1,2 @@
1
- export { BasicAuth } from "./BasicAuth";
2
- export { BearerToken } from "./BearerToken";
1
+ export { BasicAuth } from "./BasicAuth.js";
2
+ export { BearerToken } from "./BearerToken.js";
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BearerToken = exports.BasicAuth = void 0;
4
- var BasicAuth_1 = require("./BasicAuth");
5
- Object.defineProperty(exports, "BasicAuth", { enumerable: true, get: function () { return BasicAuth_1.BasicAuth; } });
6
- var BearerToken_1 = require("./BearerToken");
7
- Object.defineProperty(exports, "BearerToken", { enumerable: true, get: function () { return BearerToken_1.BearerToken; } });
4
+ var BasicAuth_js_1 = require("./BasicAuth.js");
5
+ Object.defineProperty(exports, "BasicAuth", { enumerable: true, get: function () { return BasicAuth_js_1.BasicAuth; } });
6
+ var BearerToken_js_1 = require("./BearerToken.js");
7
+ Object.defineProperty(exports, "BearerToken", { enumerable: true, get: function () { return BearerToken_js_1.BearerToken; } });
@@ -0,0 +1,2 @@
1
+ export declare function base64Encode(input: string): string;
2
+ export declare function base64Decode(input: string): string;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.base64Encode = base64Encode;
4
+ exports.base64Decode = base64Decode;
5
+ function base64ToBytes(base64) {
6
+ const binString = atob(base64);
7
+ return Uint8Array.from(binString, (m) => m.codePointAt(0));
8
+ }
9
+ function bytesToBase64(bytes) {
10
+ const binString = String.fromCodePoint(...bytes);
11
+ return btoa(binString);
12
+ }
13
+ function base64Encode(input) {
14
+ if (typeof Buffer !== "undefined") {
15
+ return Buffer.from(input, "utf8").toString("base64");
16
+ }
17
+ const bytes = new TextEncoder().encode(input);
18
+ return bytesToBase64(bytes);
19
+ }
20
+ function base64Decode(input) {
21
+ if (typeof Buffer !== "undefined") {
22
+ return Buffer.from(input, "base64").toString("utf8");
23
+ }
24
+ const bytes = base64ToBytes(input);
25
+ return new TextDecoder().decode(bytes);
26
+ }
@@ -1,10 +1,20 @@
1
+ import { RawResponse } from "./RawResponse.js";
2
+ /**
3
+ * The response of an API call.
4
+ * It is a successful response or a failed response.
5
+ */
1
6
  export type APIResponse<Success, Failure> = SuccessfulResponse<Success> | FailedResponse<Failure>;
2
7
  export interface SuccessfulResponse<T> {
3
8
  ok: true;
4
9
  body: T;
10
+ /**
11
+ * @deprecated Use `rawResponse` instead
12
+ */
5
13
  headers?: Record<string, any>;
14
+ rawResponse: RawResponse;
6
15
  }
7
16
  export interface FailedResponse<T> {
8
17
  ok: false;
9
18
  error: T;
19
+ rawResponse: RawResponse;
10
20
  }
@@ -0,0 +1,20 @@
1
+ import { ResponseWithBody } from "./ResponseWithBody.js";
2
+ export type BinaryResponse = {
3
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bodyUsed) */
4
+ bodyUsed: boolean;
5
+ /**
6
+ * Returns a ReadableStream of the response body.
7
+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/body)
8
+ */
9
+ stream: () => ReadableStream<Uint8Array>;
10
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/arrayBuffer) */
11
+ arrayBuffer: () => Promise<ArrayBuffer>;
12
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/blob) */
13
+ blob: () => Promise<Blob>;
14
+ /**
15
+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bytes)
16
+ * Some versions of the Fetch API may not support this method.
17
+ */
18
+ bytes?(): Promise<Uint8Array>;
19
+ };
20
+ export declare function getBinaryResponse(response: ResponseWithBody): BinaryResponse;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBinaryResponse = getBinaryResponse;
4
+ function getBinaryResponse(response) {
5
+ const binaryResponse = {
6
+ get bodyUsed() {
7
+ return response.bodyUsed;
8
+ },
9
+ stream: () => response.body,
10
+ arrayBuffer: response.arrayBuffer.bind(response),
11
+ blob: response.blob.bind(response),
12
+ };
13
+ if ("bytes" in response && typeof response.bytes === "function") {
14
+ binaryResponse.bytes = response.bytes.bind(response);
15
+ }
16
+ return binaryResponse;
17
+ }
@@ -1,19 +1,20 @@
1
- import { APIResponse } from "./APIResponse";
1
+ import { APIResponse } from "./APIResponse.js";
2
+ import { Supplier } from "./Supplier.js";
2
3
  export type FetchFunction = <R = unknown>(args: Fetcher.Args) => Promise<APIResponse<R, Fetcher.Error>>;
3
4
  export declare namespace Fetcher {
4
5
  interface Args {
5
6
  url: string;
6
7
  method: string;
7
8
  contentType?: string;
8
- headers?: Record<string, string | undefined>;
9
- queryParameters?: Record<string, string | string[] | object | object[]>;
9
+ headers?: Record<string, string | Supplier<string | undefined> | undefined>;
10
+ queryParameters?: Record<string, string | string[] | object | object[] | null>;
10
11
  body?: unknown;
11
12
  timeoutMs?: number;
12
13
  maxRetries?: number;
13
14
  withCredentials?: boolean;
14
15
  abortSignal?: AbortSignal;
15
16
  requestType?: "json" | "file" | "bytes";
16
- responseType?: "json" | "blob" | "sse" | "streaming" | "text";
17
+ responseType?: "json" | "blob" | "sse" | "streaming" | "text" | "arrayBuffer" | "binary-response";
17
18
  duplex?: "half";
18
19
  }
19
20
  type Error = FailedStatusCodeError | NonJsonError | TimeoutError | UnknownError;
@@ -2,38 +2,52 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.fetcher = void 0;
4
4
  exports.fetcherImpl = fetcherImpl;
5
- const createRequestUrl_1 = require("./createRequestUrl");
6
- const getFetchFn_1 = require("./getFetchFn");
7
- const getRequestBody_1 = require("./getRequestBody");
8
- const getResponseBody_1 = require("./getResponseBody");
9
- const makeRequest_1 = require("./makeRequest");
10
- const requestWithRetries_1 = require("./requestWithRetries");
11
- async function fetcherImpl(args) {
12
- const headers = {};
5
+ const json_js_1 = require("../json.js");
6
+ const RawResponse_js_1 = require("./RawResponse.js");
7
+ const Supplier_js_1 = require("./Supplier.js");
8
+ const createRequestUrl_js_1 = require("./createRequestUrl.js");
9
+ const getErrorResponseBody_js_1 = require("./getErrorResponseBody.js");
10
+ const getFetchFn_js_1 = require("./getFetchFn.js");
11
+ const getRequestBody_js_1 = require("./getRequestBody.js");
12
+ const getResponseBody_js_1 = require("./getResponseBody.js");
13
+ const makeRequest_js_1 = require("./makeRequest.js");
14
+ const requestWithRetries_js_1 = require("./requestWithRetries.js");
15
+ async function getHeaders(args) {
16
+ const newHeaders = {};
13
17
  if (args.body !== undefined && args.contentType != null) {
14
- headers["Content-Type"] = args.contentType;
18
+ newHeaders["Content-Type"] = args.contentType;
19
+ }
20
+ if (args.headers == null) {
21
+ return newHeaders;
15
22
  }
16
- if (args.headers != null) {
17
- for (const [key, value] of Object.entries(args.headers)) {
18
- if (value != null) {
19
- headers[key] = value;
20
- }
23
+ for (const [key, value] of Object.entries(args.headers)) {
24
+ const result = await Supplier_js_1.Supplier.get(value);
25
+ if (typeof result === "string") {
26
+ newHeaders[key] = result;
27
+ continue;
28
+ }
29
+ if (result == null) {
30
+ continue;
21
31
  }
32
+ newHeaders[key] = `${result}`;
22
33
  }
23
- const url = (0, createRequestUrl_1.createRequestUrl)(args.url, args.queryParameters);
24
- let requestBody = await (0, getRequestBody_1.getRequestBody)({
34
+ return newHeaders;
35
+ }
36
+ async function fetcherImpl(args) {
37
+ const url = (0, createRequestUrl_js_1.createRequestUrl)(args.url, args.queryParameters);
38
+ const requestBody = await (0, getRequestBody_js_1.getRequestBody)({
25
39
  body: args.body,
26
40
  type: args.requestType === "json" ? "json" : "other",
27
41
  });
28
- const fetchFn = await (0, getFetchFn_1.getFetchFn)();
42
+ const fetchFn = await (0, getFetchFn_js_1.getFetchFn)();
29
43
  try {
30
- const response = await (0, requestWithRetries_1.requestWithRetries)(async () => (0, makeRequest_1.makeRequest)(fetchFn, url, args.method, headers, requestBody, args.timeoutMs, args.abortSignal, args.withCredentials, args.duplex), args.maxRetries);
31
- let responseBody = await (0, getResponseBody_1.getResponseBody)(response, args.responseType);
44
+ const response = await (0, requestWithRetries_js_1.requestWithRetries)(async () => (0, makeRequest_js_1.makeRequest)(fetchFn, url, args.method, await getHeaders(args), requestBody, args.timeoutMs, args.abortSignal, args.withCredentials, args.duplex), args.maxRetries);
32
45
  if (response.status >= 200 && response.status < 400) {
33
46
  return {
34
47
  ok: true,
35
- body: responseBody,
48
+ body: (await (0, getResponseBody_js_1.getResponseBody)(response, args.responseType)),
36
49
  headers: response.headers,
50
+ rawResponse: (0, RawResponse_js_1.toRawResponse)(response),
37
51
  };
38
52
  }
39
53
  else {
@@ -42,8 +56,9 @@ async function fetcherImpl(args) {
42
56
  error: {
43
57
  reason: "status-code",
44
58
  statusCode: response.status,
45
- body: responseBody,
59
+ body: await (0, getErrorResponseBody_js_1.getErrorResponseBody)(response),
46
60
  },
61
+ rawResponse: (0, RawResponse_js_1.toRawResponse)(response),
47
62
  };
48
63
  }
49
64
  }
@@ -55,6 +70,7 @@ async function fetcherImpl(args) {
55
70
  reason: "unknown",
56
71
  errorMessage: "The user aborted a request",
57
72
  },
73
+ rawResponse: RawResponse_js_1.abortRawResponse,
58
74
  };
59
75
  }
60
76
  else if (error instanceof Error && error.name === "AbortError") {
@@ -63,6 +79,7 @@ async function fetcherImpl(args) {
63
79
  error: {
64
80
  reason: "timeout",
65
81
  },
82
+ rawResponse: RawResponse_js_1.abortRawResponse,
66
83
  };
67
84
  }
68
85
  else if (error instanceof Error) {
@@ -72,14 +89,16 @@ async function fetcherImpl(args) {
72
89
  reason: "unknown",
73
90
  errorMessage: error.message,
74
91
  },
92
+ rawResponse: RawResponse_js_1.unknownRawResponse,
75
93
  };
76
94
  }
77
95
  return {
78
96
  ok: false,
79
97
  error: {
80
98
  reason: "unknown",
81
- errorMessage: JSON.stringify(error),
99
+ errorMessage: (0, json_js_1.toJson)(error),
82
100
  },
101
+ rawResponse: RawResponse_js_1.unknownRawResponse,
83
102
  };
84
103
  }
85
104
  }
@@ -0,0 +1,2 @@
1
+ declare let Headers: typeof globalThis.Headers;
2
+ export { Headers };
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Headers = void 0;
4
+ let Headers;
5
+ if (typeof globalThis.Headers !== "undefined") {
6
+ exports.Headers = Headers = globalThis.Headers;
7
+ }
8
+ else {
9
+ exports.Headers = Headers = class Headers {
10
+ headers;
11
+ constructor(init) {
12
+ this.headers = new Map();
13
+ if (init) {
14
+ if (init instanceof Headers) {
15
+ init.forEach((value, key) => this.append(key, value));
16
+ }
17
+ else if (Array.isArray(init)) {
18
+ for (const [key, value] of init) {
19
+ if (typeof key === "string" && typeof value === "string") {
20
+ this.append(key, value);
21
+ }
22
+ else {
23
+ throw new TypeError("Each header entry must be a [string, string] tuple");
24
+ }
25
+ }
26
+ }
27
+ else {
28
+ for (const [key, value] of Object.entries(init)) {
29
+ if (typeof value === "string") {
30
+ this.append(key, value);
31
+ }
32
+ else {
33
+ throw new TypeError("Header values must be strings");
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ append(name, value) {
40
+ const key = name.toLowerCase();
41
+ const existing = this.headers.get(key) || [];
42
+ this.headers.set(key, [...existing, value]);
43
+ }
44
+ delete(name) {
45
+ const key = name.toLowerCase();
46
+ this.headers.delete(key);
47
+ }
48
+ get(name) {
49
+ const key = name.toLowerCase();
50
+ const values = this.headers.get(key);
51
+ return values ? values.join(", ") : null;
52
+ }
53
+ has(name) {
54
+ const key = name.toLowerCase();
55
+ return this.headers.has(key);
56
+ }
57
+ set(name, value) {
58
+ const key = name.toLowerCase();
59
+ this.headers.set(key, [value]);
60
+ }
61
+ forEach(callbackfn, thisArg) {
62
+ const boundCallback = thisArg ? callbackfn.bind(thisArg) : callbackfn;
63
+ this.headers.forEach((values, key) => boundCallback(values.join(", "), key, this));
64
+ }
65
+ getSetCookie() {
66
+ return this.headers.get("set-cookie") || [];
67
+ }
68
+ *entries() {
69
+ for (const [key, values] of this.headers.entries()) {
70
+ yield [key, values.join(", ")];
71
+ }
72
+ }
73
+ *keys() {
74
+ yield* this.headers.keys();
75
+ }
76
+ *values() {
77
+ for (const values of this.headers.values()) {
78
+ yield values.join(", ");
79
+ }
80
+ }
81
+ [Symbol.iterator]() {
82
+ return this.entries();
83
+ }
84
+ };
85
+ }
@@ -0,0 +1,58 @@
1
+ import { WithRawResponse } from "./RawResponse.js";
2
+ /**
3
+ * A promise that returns the parsed response and lets you retrieve the raw response too.
4
+ */
5
+ export declare class HttpResponsePromise<T> extends Promise<T> {
6
+ private innerPromise;
7
+ private unwrappedPromise;
8
+ private constructor();
9
+ /**
10
+ * Creates an `HttpResponsePromise` from a function that returns a promise.
11
+ *
12
+ * @param fn - A function that returns a promise resolving to a `WithRawResponse` object.
13
+ * @param args - Arguments to pass to the function.
14
+ * @returns An `HttpResponsePromise` instance.
15
+ */
16
+ static fromFunction<F extends (...args: never[]) => Promise<WithRawResponse<T>>, T>(fn: F, ...args: Parameters<F>): HttpResponsePromise<T>;
17
+ /**
18
+ * Creates a function that returns 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
+ * @returns A function that returns an `HttpResponsePromise` instance.
22
+ */
23
+ static interceptFunction<F extends (...args: never[]) => Promise<WithRawResponse<T>>, T = Awaited<ReturnType<F>>["data"]>(fn: F): (...args: Parameters<F>) => HttpResponsePromise<T>;
24
+ /**
25
+ * Creates an `HttpResponsePromise` from an existing promise.
26
+ *
27
+ * @param promise - A promise resolving to a `WithRawResponse` object.
28
+ * @returns An `HttpResponsePromise` instance.
29
+ */
30
+ static fromPromise<T>(promise: Promise<WithRawResponse<T>>): HttpResponsePromise<T>;
31
+ /**
32
+ * Creates an `HttpResponsePromise` from an executor function.
33
+ *
34
+ * @param executor - A function that takes resolve and reject callbacks to create a promise.
35
+ * @returns An `HttpResponsePromise` instance.
36
+ */
37
+ static fromExecutor<T>(executor: (resolve: (value: WithRawResponse<T>) => void, reject: (reason?: unknown) => void) => void): HttpResponsePromise<T>;
38
+ /**
39
+ * Creates an `HttpResponsePromise` from a resolved result.
40
+ *
41
+ * @param result - A `WithRawResponse` object to resolve immediately.
42
+ * @returns An `HttpResponsePromise` instance.
43
+ */
44
+ static fromResult<T>(result: WithRawResponse<T>): HttpResponsePromise<T>;
45
+ private unwrap;
46
+ /** @inheritdoc */
47
+ then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
48
+ /** @inheritdoc */
49
+ catch<TResult = never>(onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null): Promise<T | TResult>;
50
+ /** @inheritdoc */
51
+ finally(onfinally?: (() => void) | null): Promise<T>;
52
+ /**
53
+ * Retrieves the data and raw response.
54
+ *
55
+ * @returns A promise resolving to a `WithRawResponse` object.
56
+ */
57
+ withRawResponse(): Promise<WithRawResponse<T>>;
58
+ }
@@ -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
+ }