@orq-ai/node 3.1.6 → 3.2.0-rc.3

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 (165) hide show
  1. package/README.md +0 -38
  2. package/docs/sdks/deployments/README.md +0 -81
  3. package/jsr.json +1 -2
  4. package/lib/config.d.ts +2 -2
  5. package/lib/config.js +2 -2
  6. package/lib/config.js.map +1 -1
  7. package/lib/matchers.d.ts.map +1 -1
  8. package/lib/matchers.js +1 -4
  9. package/lib/matchers.js.map +1 -1
  10. package/models/operations/createcontact.js +2 -2
  11. package/models/operations/fileget.js +2 -2
  12. package/models/operations/filelist.js +2 -2
  13. package/models/operations/fileupload.js +2 -2
  14. package/models/operations/index.d.ts +0 -1
  15. package/models/operations/index.d.ts.map +1 -1
  16. package/models/operations/index.js +0 -1
  17. package/models/operations/index.js.map +1 -1
  18. package/package.json +3 -2
  19. package/sdk/deployments.d.ts +0 -8
  20. package/sdk/deployments.d.ts.map +1 -1
  21. package/sdk/deployments.js +0 -10
  22. package/sdk/deployments.js.map +1 -1
  23. package/src/lib/config.ts +2 -2
  24. package/src/lib/matchers.ts +1 -4
  25. package/src/models/operations/createcontact.ts +2 -2
  26. package/src/models/operations/fileget.ts +2 -2
  27. package/src/models/operations/filelist.ts +2 -2
  28. package/src/models/operations/fileupload.ts +2 -2
  29. package/src/models/operations/index.ts +0 -1
  30. package/src/sdk/deployments.ts +0 -19
  31. package/funcs/deploymentsStream.d.ts +0 -16
  32. package/funcs/deploymentsStream.d.ts.map +0 -1
  33. package/funcs/deploymentsStream.js +0 -126
  34. package/funcs/deploymentsStream.js.map +0 -1
  35. package/lib/event-streams.d.ts +0 -17
  36. package/lib/event-streams.d.ts.map +0 -1
  37. package/lib/event-streams.js +0 -220
  38. package/lib/event-streams.js.map +0 -1
  39. package/models/operations/deploymentstream.d.ts +0 -1622
  40. package/models/operations/deploymentstream.d.ts.map +0 -1
  41. package/models/operations/deploymentstream.js +0 -1571
  42. package/models/operations/deploymentstream.js.map +0 -1
  43. package/packages/orq-rc/FUNCTIONS.md +0 -106
  44. package/packages/orq-rc/README.md +0 -559
  45. package/packages/orq-rc/RUNTIMES.md +0 -48
  46. package/packages/orq-rc/docs/sdks/contacts/README.md +0 -84
  47. package/packages/orq-rc/docs/sdks/deployments/README.md +0 -316
  48. package/packages/orq-rc/docs/sdks/feedback/README.md +0 -92
  49. package/packages/orq-rc/docs/sdks/files/README.md +0 -305
  50. package/packages/orq-rc/docs/sdks/metrics/README.md +0 -86
  51. package/packages/orq-rc/docs/sdks/orq/README.md +0 -10
  52. package/packages/orq-rc/docs/sdks/prompts/README.md +0 -608
  53. package/packages/orq-rc/docs/sdks/promptsnippets/README.md +0 -534
  54. package/packages/orq-rc/docs/sdks/remoteconfig/README.md +0 -80
  55. package/packages/orq-rc/jsr.json +0 -28
  56. package/packages/orq-rc/package-lock.json +0 -1861
  57. package/packages/orq-rc/package.json +0 -31
  58. package/packages/orq-rc/src/core.ts +0 -13
  59. package/packages/orq-rc/src/funcs/contactsCreate.ts +0 -126
  60. package/packages/orq-rc/src/funcs/deploymentsGetConfig.ts +0 -134
  61. package/packages/orq-rc/src/funcs/deploymentsInvoke.ts +0 -142
  62. package/packages/orq-rc/src/funcs/deploymentsList.ts +0 -141
  63. package/packages/orq-rc/src/funcs/deploymentsMetricsCreate.ts +0 -134
  64. package/packages/orq-rc/src/funcs/deploymentsStream.ts +0 -150
  65. package/packages/orq-rc/src/funcs/feedbackCreate.ts +0 -126
  66. package/packages/orq-rc/src/funcs/filesDelete.ts +0 -130
  67. package/packages/orq-rc/src/funcs/filesGet.ts +0 -129
  68. package/packages/orq-rc/src/funcs/filesList.ts +0 -131
  69. package/packages/orq-rc/src/funcs/filesUpload.ts +0 -149
  70. package/packages/orq-rc/src/funcs/promptSnippetsCreate.ts +0 -128
  71. package/packages/orq-rc/src/funcs/promptSnippetsDelete.ts +0 -131
  72. package/packages/orq-rc/src/funcs/promptSnippetsGet.ts +0 -130
  73. package/packages/orq-rc/src/funcs/promptSnippetsGetByKey.ts +0 -132
  74. package/packages/orq-rc/src/funcs/promptSnippetsList.ts +0 -132
  75. package/packages/orq-rc/src/funcs/promptSnippetsUpdate.ts +0 -139
  76. package/packages/orq-rc/src/funcs/promptsCreate.ts +0 -126
  77. package/packages/orq-rc/src/funcs/promptsDelete.ts +0 -130
  78. package/packages/orq-rc/src/funcs/promptsGetVersion.ts +0 -146
  79. package/packages/orq-rc/src/funcs/promptsList.ts +0 -133
  80. package/packages/orq-rc/src/funcs/promptsListVersions.ts +0 -139
  81. package/packages/orq-rc/src/funcs/promptsRetrieve.ts +0 -132
  82. package/packages/orq-rc/src/funcs/promptsUpdate.ts +0 -138
  83. package/packages/orq-rc/src/funcs/remoteconfigGetConfig.ts +0 -127
  84. package/packages/orq-rc/src/hooks/global.ts +0 -44
  85. package/packages/orq-rc/src/hooks/hooks.ts +0 -132
  86. package/packages/orq-rc/src/hooks/index.ts +0 -6
  87. package/packages/orq-rc/src/hooks/registration.ts +0 -15
  88. package/packages/orq-rc/src/hooks/types.ts +0 -109
  89. package/packages/orq-rc/src/index.ts +0 -7
  90. package/packages/orq-rc/src/lib/base64.ts +0 -37
  91. package/packages/orq-rc/src/lib/config.ts +0 -70
  92. package/packages/orq-rc/src/lib/dlv.ts +0 -53
  93. package/packages/orq-rc/src/lib/encodings.ts +0 -483
  94. package/packages/orq-rc/src/lib/env.ts +0 -73
  95. package/packages/orq-rc/src/lib/event-streams.ts +0 -264
  96. package/packages/orq-rc/src/lib/files.ts +0 -40
  97. package/packages/orq-rc/src/lib/http.ts +0 -323
  98. package/packages/orq-rc/src/lib/is-plain-object.ts +0 -43
  99. package/packages/orq-rc/src/lib/logger.ts +0 -9
  100. package/packages/orq-rc/src/lib/matchers.ts +0 -325
  101. package/packages/orq-rc/src/lib/primitives.ts +0 -136
  102. package/packages/orq-rc/src/lib/retries.ts +0 -218
  103. package/packages/orq-rc/src/lib/schemas.ts +0 -91
  104. package/packages/orq-rc/src/lib/sdks.ts +0 -400
  105. package/packages/orq-rc/src/lib/security.ts +0 -254
  106. package/packages/orq-rc/src/lib/url.ts +0 -33
  107. package/packages/orq-rc/src/models/components/deployments.ts +0 -1666
  108. package/packages/orq-rc/src/models/components/index.ts +0 -6
  109. package/packages/orq-rc/src/models/components/security.ts +0 -71
  110. package/packages/orq-rc/src/models/errors/apierror.ts +0 -27
  111. package/packages/orq-rc/src/models/errors/getpromptversion.ts +0 -71
  112. package/packages/orq-rc/src/models/errors/honoapierror.ts +0 -82
  113. package/packages/orq-rc/src/models/errors/httpclienterrors.ts +0 -62
  114. package/packages/orq-rc/src/models/errors/index.ts +0 -11
  115. package/packages/orq-rc/src/models/errors/sdkvalidationerror.ts +0 -97
  116. package/packages/orq-rc/src/models/errors/updateprompt.ts +0 -71
  117. package/packages/orq-rc/src/models/errors/updatepromptsnippet.ts +0 -71
  118. package/packages/orq-rc/src/models/operations/createcontact.ts +0 -256
  119. package/packages/orq-rc/src/models/operations/createfeedback.ts +0 -286
  120. package/packages/orq-rc/src/models/operations/createprompt.ts +0 -3819
  121. package/packages/orq-rc/src/models/operations/createpromptsnippet.ts +0 -6239
  122. package/packages/orq-rc/src/models/operations/deleteprompt.ts +0 -69
  123. package/packages/orq-rc/src/models/operations/deletepromptsnippet.ts +0 -69
  124. package/packages/orq-rc/src/models/operations/deploymentcreatemetric.ts +0 -1790
  125. package/packages/orq-rc/src/models/operations/deploymentgetconfig.ts +0 -3527
  126. package/packages/orq-rc/src/models/operations/deploymentinvoke.ts +0 -1144
  127. package/packages/orq-rc/src/models/operations/deployments.ts +0 -2148
  128. package/packages/orq-rc/src/models/operations/deploymentstream.ts +0 -3062
  129. package/packages/orq-rc/src/models/operations/filedelete.ts +0 -78
  130. package/packages/orq-rc/src/models/operations/fileget.ts +0 -222
  131. package/packages/orq-rc/src/models/operations/filelist.ts +0 -321
  132. package/packages/orq-rc/src/models/operations/fileupload.ts +0 -322
  133. package/packages/orq-rc/src/models/operations/findonebykeypromptsnippet.ts +0 -4483
  134. package/packages/orq-rc/src/models/operations/findonepromptsnippet.ts +0 -4343
  135. package/packages/orq-rc/src/models/operations/getallprompts.ts +0 -2116
  136. package/packages/orq-rc/src/models/operations/getallpromptsnippets.ts +0 -4472
  137. package/packages/orq-rc/src/models/operations/getoneprompt.ts +0 -1982
  138. package/packages/orq-rc/src/models/operations/getpromptversion.ts +0 -2012
  139. package/packages/orq-rc/src/models/operations/index.ts +0 -29
  140. package/packages/orq-rc/src/models/operations/listpromptversions.ts +0 -2146
  141. package/packages/orq-rc/src/models/operations/remoteconfigsgetconfig.ts +0 -190
  142. package/packages/orq-rc/src/models/operations/updateprompt.ts +0 -3917
  143. package/packages/orq-rc/src/models/operations/updatepromptsnippet.ts +0 -6544
  144. package/packages/orq-rc/src/sdk/contacts.ts +0 -27
  145. package/packages/orq-rc/src/sdk/deployments.ts +0 -89
  146. package/packages/orq-rc/src/sdk/feedback.ts +0 -27
  147. package/packages/orq-rc/src/sdk/files.ts +0 -72
  148. package/packages/orq-rc/src/sdk/index.ts +0 -5
  149. package/packages/orq-rc/src/sdk/metrics.ts +0 -27
  150. package/packages/orq-rc/src/sdk/prompts.ts +0 -126
  151. package/packages/orq-rc/src/sdk/promptsnippets.ts +0 -99
  152. package/packages/orq-rc/src/sdk/remoteconfig.ts +0 -24
  153. package/packages/orq-rc/src/sdk/sdk.ts +0 -49
  154. package/packages/orq-rc/src/types/blobs.ts +0 -31
  155. package/packages/orq-rc/src/types/constdatetime.ts +0 -15
  156. package/packages/orq-rc/src/types/enums.ts +0 -16
  157. package/packages/orq-rc/src/types/fp.ts +0 -50
  158. package/packages/orq-rc/src/types/index.ts +0 -11
  159. package/packages/orq-rc/src/types/operations.ts +0 -105
  160. package/packages/orq-rc/src/types/rfcdate.ts +0 -54
  161. package/packages/orq-rc/src/types/streams.ts +0 -21
  162. package/packages/orq-rc/tsconfig.json +0 -41
  163. package/src/funcs/deploymentsStream.ts +0 -151
  164. package/src/lib/event-streams.ts +0 -264
  165. package/src/models/operations/deploymentstream.ts +0 -3062
@@ -1,91 +0,0 @@
1
- /*
2
- * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
- */
4
-
5
- import {
6
- output,
7
- ZodEffects,
8
- ZodError,
9
- ZodObject,
10
- ZodRawShape,
11
- ZodTypeAny,
12
- } from "zod";
13
- import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
14
- import { ERR, OK, Result } from "../types/fp.js";
15
-
16
- /**
17
- * Utility function that executes some code which may throw a ZodError. It
18
- * intercepts this error and converts it to an SDKValidationError so as to not
19
- * leak Zod implementation details to user code.
20
- */
21
- export function parse<Inp, Out>(
22
- rawValue: Inp,
23
- fn: (value: Inp) => Out,
24
- errorMessage: string,
25
- ): Out {
26
- try {
27
- return fn(rawValue);
28
- } catch (err) {
29
- if (err instanceof ZodError) {
30
- throw new SDKValidationError(errorMessage, err, rawValue);
31
- }
32
- throw err;
33
- }
34
- }
35
-
36
- /**
37
- * Utility function that executes some code which may result in a ZodError. It
38
- * intercepts this error and converts it to an SDKValidationError so as to not
39
- * leak Zod implementation details to user code.
40
- */
41
- export function safeParse<Inp, Out>(
42
- rawValue: Inp,
43
- fn: (value: Inp) => Out,
44
- errorMessage: string,
45
- ): Result<Out, SDKValidationError> {
46
- try {
47
- return OK(fn(rawValue));
48
- } catch (err) {
49
- return ERR(new SDKValidationError(errorMessage, err, rawValue));
50
- }
51
- }
52
-
53
- export function collectExtraKeys<
54
- Shape extends ZodRawShape,
55
- Catchall extends ZodTypeAny,
56
- K extends string,
57
- >(
58
- obj: ZodObject<Shape, "strip", Catchall>,
59
- extrasKey: K,
60
- optional: boolean,
61
- ): ZodEffects<
62
- typeof obj,
63
- & output<ZodObject<Shape, "strict">>
64
- & {
65
- [k in K]: Record<string, output<Catchall>>;
66
- }
67
- > {
68
- return obj.transform((val) => {
69
- const extras: Record<string, output<Catchall>> = {};
70
- const { shape } = obj;
71
- for (const [key] of Object.entries(val)) {
72
- if (key in shape) {
73
- continue;
74
- }
75
-
76
- const v = val[key];
77
- if (typeof v === "undefined") {
78
- continue;
79
- }
80
-
81
- extras[key] = v;
82
- delete val[key];
83
- }
84
-
85
- if (optional && Object.keys(extras).length === 0) {
86
- return val;
87
- }
88
-
89
- return { ...val, [extrasKey]: extras };
90
- });
91
- }
@@ -1,400 +0,0 @@
1
- /*
2
- * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
- */
4
-
5
- import { SDKHooks } from "../hooks/hooks.js";
6
- import { HookContext } from "../hooks/types.js";
7
- import {
8
- ConnectionError,
9
- InvalidRequestError,
10
- RequestAbortedError,
11
- RequestTimeoutError,
12
- UnexpectedClientError,
13
- } from "../models/errors/httpclienterrors.js";
14
- import { ERR, OK, Result } from "../types/fp.js";
15
- import { stringToBase64 } from "./base64.js";
16
- import { SDK_METADATA, SDKOptions, serverURLFromOptions } from "./config.js";
17
- import { encodeForm } from "./encodings.js";
18
- import { env, fillGlobals } from "./env.js";
19
- import {
20
- HTTPClient,
21
- isAbortError,
22
- isConnectionError,
23
- isTimeoutError,
24
- matchContentType,
25
- matchStatusCode,
26
- } from "./http.js";
27
- import { Logger } from "./logger.js";
28
- import { retry, RetryConfig } from "./retries.js";
29
- import { SecurityState } from "./security.js";
30
-
31
- export type RequestOptions = {
32
- /**
33
- * Sets a timeout, in milliseconds, on HTTP requests made by an SDK method. If
34
- * `fetchOptions.signal` is set then it will take precedence over this option.
35
- */
36
- timeoutMs?: number;
37
- /**
38
- * Set or override a retry policy on HTTP calls.
39
- */
40
- retries?: RetryConfig;
41
- /**
42
- * Specifies the status codes which should be retried using the given retry policy.
43
- */
44
- retryCodes?: string[];
45
- /**
46
- * Overrides the base server URL that will be used by an operation.
47
- */
48
- serverURL?: string | URL;
49
- /**
50
- * Sets various request options on the `fetch` call made by an SDK method.
51
- *
52
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options|Request}
53
- */
54
- fetchOptions?: Omit<RequestInit, "method" | "body">;
55
- };
56
-
57
- type RequestConfig = {
58
- method: string;
59
- path: string;
60
- baseURL?: string | URL | undefined;
61
- query?: string;
62
- body?: RequestInit["body"];
63
- headers?: HeadersInit;
64
- security?: SecurityState | null;
65
- uaHeader?: string;
66
- timeoutMs?: number;
67
- };
68
-
69
- const gt: unknown = typeof globalThis === "undefined" ? null : globalThis;
70
- const webWorkerLike = typeof gt === "object"
71
- && gt != null
72
- && "importScripts" in gt
73
- && typeof gt["importScripts"] === "function";
74
- const isBrowserLike = webWorkerLike
75
- || (typeof navigator !== "undefined" && "serviceWorker" in navigator)
76
- || (typeof window === "object" && typeof window.document !== "undefined");
77
-
78
- export class ClientSDK {
79
- readonly #httpClient: HTTPClient;
80
- readonly #hooks: SDKHooks;
81
- readonly #logger?: Logger | undefined;
82
- protected readonly _baseURL: URL | null;
83
- public readonly _options: SDKOptions & { hooks?: SDKHooks };
84
-
85
- constructor(options: SDKOptions = {}) {
86
- const opt = options as unknown;
87
- if (
88
- typeof opt === "object"
89
- && opt != null
90
- && "hooks" in opt
91
- && opt.hooks instanceof SDKHooks
92
- ) {
93
- this.#hooks = opt.hooks;
94
- } else {
95
- this.#hooks = new SDKHooks();
96
- }
97
- this._options = { ...fillGlobals(options), hooks: this.#hooks };
98
-
99
- const url = serverURLFromOptions(options);
100
- if (url) {
101
- url.pathname = url.pathname.replace(/\/+$/, "") + "/";
102
- }
103
- const { baseURL, client } = this.#hooks.sdkInit({
104
- baseURL: url,
105
- client: options.httpClient || new HTTPClient(),
106
- });
107
- this._baseURL = baseURL;
108
- this.#httpClient = client;
109
- this.#logger = options.debugLogger;
110
- if (!this.#logger && env().ORQ_DEBUG) {
111
- this.#logger = console;
112
- }
113
- }
114
-
115
- public _createRequest(
116
- context: HookContext,
117
- conf: RequestConfig,
118
- options?: RequestOptions,
119
- ): Result<Request, InvalidRequestError | UnexpectedClientError> {
120
- const { method, path, query, headers: opHeaders, security } = conf;
121
-
122
- const base = conf.baseURL ?? this._baseURL;
123
- if (!base) {
124
- return ERR(new InvalidRequestError("No base URL provided for operation"));
125
- }
126
- const reqURL = new URL(base);
127
- const inputURL = new URL(path, reqURL);
128
-
129
- if (path) {
130
- reqURL.pathname += reqURL.pathname.endsWith("/") ? "" : "/";
131
- reqURL.pathname += inputURL.pathname.replace(/^\/+/, "");
132
- }
133
-
134
- let finalQuery = query || "";
135
-
136
- const secQuery: string[] = [];
137
- for (const [k, v] of Object.entries(security?.queryParams || {})) {
138
- const q = encodeForm(k, v, { charEncoding: "percent" });
139
- if (typeof q !== "undefined") {
140
- secQuery.push(q);
141
- }
142
- }
143
- if (secQuery.length) {
144
- finalQuery += `&${secQuery.join("&")}`;
145
- }
146
-
147
- if (finalQuery) {
148
- const q = finalQuery.startsWith("&") ? finalQuery.slice(1) : finalQuery;
149
- reqURL.search = `?${q}`;
150
- }
151
-
152
- const headers = new Headers(opHeaders);
153
-
154
- const username = security?.basic.username;
155
- const password = security?.basic.password;
156
- if (username != null || password != null) {
157
- const encoded = stringToBase64(
158
- [username || "", password || ""].join(":"),
159
- );
160
- headers.set("Authorization", `Basic ${encoded}`);
161
- }
162
-
163
- const securityHeaders = new Headers(security?.headers || {});
164
- for (const [k, v] of securityHeaders) {
165
- headers.set(k, v);
166
- }
167
-
168
- let cookie = headers.get("cookie") || "";
169
- for (const [k, v] of Object.entries(security?.cookies || {})) {
170
- cookie += `; ${k}=${v}`;
171
- }
172
- cookie = cookie.startsWith("; ") ? cookie.slice(2) : cookie;
173
- headers.set("cookie", cookie);
174
-
175
- const userHeaders = new Headers(options?.fetchOptions?.headers);
176
- for (const [k, v] of userHeaders) {
177
- headers.set(k, v);
178
- }
179
-
180
- // Only set user agent header in non-browser-like environments since CORS
181
- // policy disallows setting it in browsers e.g. Chrome throws an error.
182
- if (!isBrowserLike) {
183
- headers.set(conf.uaHeader ?? "user-agent", SDK_METADATA.userAgent);
184
- }
185
-
186
- let fetchOptions = options?.fetchOptions;
187
- if (!fetchOptions?.signal && conf.timeoutMs && conf.timeoutMs > 0) {
188
- const timeoutSignal = AbortSignal.timeout(conf.timeoutMs);
189
- if (!fetchOptions) {
190
- fetchOptions = { signal: timeoutSignal };
191
- } else {
192
- fetchOptions.signal = timeoutSignal;
193
- }
194
- }
195
-
196
- if (conf.body instanceof ReadableStream) {
197
- if (!fetchOptions) {
198
- fetchOptions = {
199
- // @ts-expect-error see https://github.com/node-fetch/node-fetch/issues/1769
200
- duplex: "half",
201
- };
202
- } else {
203
- // @ts-expect-error see https://github.com/node-fetch/node-fetch/issues/1769
204
- fetchOptions.duplex = "half";
205
- }
206
- }
207
-
208
- let input;
209
- try {
210
- input = this.#hooks.beforeCreateRequest(context, {
211
- url: reqURL,
212
- options: {
213
- ...fetchOptions,
214
- body: conf.body ?? null,
215
- headers,
216
- method,
217
- },
218
- });
219
- } catch (err: unknown) {
220
- return ERR(
221
- new UnexpectedClientError("Create request hook failed to execute", {
222
- cause: err,
223
- }),
224
- );
225
- }
226
-
227
- return OK(new Request(input.url, input.options));
228
- }
229
-
230
- public async _do(
231
- request: Request,
232
- options: {
233
- context: HookContext;
234
- errorCodes: number | string | (number | string)[];
235
- retryConfig: RetryConfig;
236
- retryCodes: string[];
237
- },
238
- ): Promise<
239
- Result<
240
- Response,
241
- | RequestAbortedError
242
- | RequestTimeoutError
243
- | ConnectionError
244
- | UnexpectedClientError
245
- >
246
- > {
247
- const { context, errorCodes } = options;
248
-
249
- return retry(
250
- async () => {
251
- const req = await this.#hooks.beforeRequest(context, request.clone());
252
- await logRequest(this.#logger, req).catch((e) =>
253
- this.#logger?.log("Failed to log request:", e)
254
- );
255
-
256
- let response = await this.#httpClient.request(req);
257
-
258
- try {
259
- if (matchStatusCode(response, errorCodes)) {
260
- const result = await this.#hooks.afterError(
261
- context,
262
- response,
263
- null,
264
- );
265
- if (result.error) {
266
- throw result.error;
267
- }
268
- response = result.response || response;
269
- } else {
270
- response = await this.#hooks.afterSuccess(context, response);
271
- }
272
- } finally {
273
- await logResponse(this.#logger, response, req)
274
- .catch(e => this.#logger?.log("Failed to log response:", e));
275
- }
276
-
277
- return response;
278
- },
279
- { config: options.retryConfig, statusCodes: options.retryCodes },
280
- ).then(
281
- (r) => OK(r),
282
- (err) => {
283
- switch (true) {
284
- case isAbortError(err):
285
- return ERR(
286
- new RequestAbortedError("Request aborted by client", {
287
- cause: err,
288
- }),
289
- );
290
- case isTimeoutError(err):
291
- return ERR(
292
- new RequestTimeoutError("Request timed out", { cause: err }),
293
- );
294
- case isConnectionError(err):
295
- return ERR(
296
- new ConnectionError("Unable to make request", { cause: err }),
297
- );
298
- default:
299
- return ERR(
300
- new UnexpectedClientError("Unexpected HTTP client error", {
301
- cause: err,
302
- }),
303
- );
304
- }
305
- },
306
- );
307
- }
308
- }
309
-
310
- const jsonLikeContentTypeRE = /^application\/(?:.{0,100}\+)?json/;
311
- async function logRequest(logger: Logger | undefined, req: Request) {
312
- if (!logger) {
313
- return;
314
- }
315
-
316
- const contentType = req.headers.get("content-type");
317
- const ct = contentType?.split(";")[0] || "";
318
-
319
- logger.group(`> Request: ${req.method} ${req.url}`);
320
-
321
- logger.group("Headers:");
322
- for (const [k, v] of req.headers.entries()) {
323
- logger.log(`${k}: ${v}`);
324
- }
325
- logger.groupEnd();
326
-
327
- logger.group("Body:");
328
- switch (true) {
329
- case jsonLikeContentTypeRE.test(ct):
330
- logger.log(await req.clone().json());
331
- break;
332
- case ct.startsWith("text/"):
333
- logger.log(await req.clone().text());
334
- break;
335
- case ct === "multipart/form-data": {
336
- const body = await req.clone().formData();
337
- for (const [k, v] of body) {
338
- const vlabel = v instanceof Blob ? "<Blob>" : v;
339
- logger.log(`${k}: ${vlabel}`);
340
- }
341
- break;
342
- }
343
- default:
344
- logger.log(`<${contentType}>`);
345
- break;
346
- }
347
- logger.groupEnd();
348
-
349
- logger.groupEnd();
350
- }
351
-
352
- async function logResponse(
353
- logger: Logger | undefined,
354
- res: Response,
355
- req: Request,
356
- ) {
357
- if (!logger) {
358
- return;
359
- }
360
-
361
- const contentType = res.headers.get("content-type");
362
- const ct = contentType?.split(";")[0] || "";
363
-
364
- logger.group(`< Response: ${req.method} ${req.url}`);
365
- logger.log("Status Code:", res.status, res.statusText);
366
-
367
- logger.group("Headers:");
368
- for (const [k, v] of res.headers.entries()) {
369
- logger.log(`${k}: ${v}`);
370
- }
371
- logger.groupEnd();
372
-
373
- logger.group("Body:");
374
- switch (true) {
375
- case matchContentType(res, "application/json")
376
- || jsonLikeContentTypeRE.test(ct):
377
- logger.log(await res.clone().json());
378
- break;
379
- case matchContentType(res, "text/event-stream"):
380
- logger.log(`<${contentType}>`);
381
- break;
382
- case matchContentType(res, "text/*"):
383
- logger.log(await res.clone().text());
384
- break;
385
- case matchContentType(res, "multipart/form-data"): {
386
- const body = await res.clone().formData();
387
- for (const [k, v] of body) {
388
- const vlabel = v instanceof Blob ? "<Blob>" : v;
389
- logger.log(`${k}: ${vlabel}`);
390
- }
391
- break;
392
- }
393
- default:
394
- logger.log(`<${contentType}>`);
395
- break;
396
- }
397
- logger.groupEnd();
398
-
399
- logger.groupEnd();
400
- }