@amerged/ohmyhost-mcp 0.1.10

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 (72) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +4 -0
  3. package/README.md +11 -0
  4. package/THIRD_PARTY_NOTICES.md +474 -0
  5. package/dist/chunk-7MV2EVXV.js +30779 -0
  6. package/dist/index.js +9 -0
  7. package/dist/stdio-main.js +5607 -0
  8. package/package.json +32 -0
  9. package/src/apps/mcp/index.ts +30 -0
  10. package/src/apps/mcp/local-client.ts +891 -0
  11. package/src/apps/mcp/local-server.ts +1512 -0
  12. package/src/apps/mcp/stdio-main.ts +26 -0
  13. package/src/apps/product-cli/bin.ts +24 -0
  14. package/src/apps/product-cli/cli.ts +2271 -0
  15. package/src/apps/product-cli/command.ts +1811 -0
  16. package/src/apps/product-cli/composition.ts +823 -0
  17. package/src/apps/product-cli/credential-store.ts +149 -0
  18. package/src/apps/product-cli/device-token-expiry.ts +89 -0
  19. package/src/apps/product-cli/file-credential-store.ts +166 -0
  20. package/src/apps/product-cli/index.ts +23 -0
  21. package/src/apps/product-cli/product-api.ts +1082 -0
  22. package/src/apps/product-cli/project-link-store.ts +30 -0
  23. package/src/apps/product-cli/psql-session.ts +29 -0
  24. package/src/apps/product-cli/repository-init.ts +1622 -0
  25. package/src/apps/product-cli/runtime-contract.ts +1747 -0
  26. package/src/apps/product-cli/user-token-file.ts +214 -0
  27. package/src/apps/product-cli/workspace.ts +92 -0
  28. package/src/packages/agent-skills/generated-skill-resources.ts +147 -0
  29. package/src/packages/agent-skills/index.ts +37 -0
  30. package/src/packages/contracts/application-root.ts +80 -0
  31. package/src/packages/contracts/billing.ts +172 -0
  32. package/src/packages/contracts/credit-pricing.ts +214 -0
  33. package/src/packages/contracts/database-access.ts +257 -0
  34. package/src/packages/contracts/database-compute.ts +72 -0
  35. package/src/packages/contracts/database-migration-admission.ts +235 -0
  36. package/src/packages/contracts/feedback.ts +96 -0
  37. package/src/packages/contracts/framework-admission.ts +280 -0
  38. package/src/packages/contracts/framework-family.ts +18 -0
  39. package/src/packages/contracts/functions.ts +76 -0
  40. package/src/packages/contracts/index.ts +245 -0
  41. package/src/packages/contracts/operation-deployment-result.ts +165 -0
  42. package/src/packages/contracts/operation-failure.ts +150 -0
  43. package/src/packages/contracts/platform-origins.ts +5 -0
  44. package/src/packages/contracts/project-context.ts +59 -0
  45. package/src/packages/contracts/project-exports.ts +102 -0
  46. package/src/packages/contracts/user-api-keys.ts +98 -0
  47. package/src/packages/sdk-ts/generated/client/client.gen.ts +277 -0
  48. package/src/packages/sdk-ts/generated/client/index.ts +27 -0
  49. package/src/packages/sdk-ts/generated/client/types.gen.ts +217 -0
  50. package/src/packages/sdk-ts/generated/client/utils.gen.ts +316 -0
  51. package/src/packages/sdk-ts/generated/client.gen.ts +24 -0
  52. package/src/packages/sdk-ts/generated/core/auth.gen.ts +48 -0
  53. package/src/packages/sdk-ts/generated/core/bodySerializer.gen.ts +82 -0
  54. package/src/packages/sdk-ts/generated/core/params.gen.ts +178 -0
  55. package/src/packages/sdk-ts/generated/core/pathSerializer.gen.ts +171 -0
  56. package/src/packages/sdk-ts/generated/core/queryKeySerializer.gen.ts +117 -0
  57. package/src/packages/sdk-ts/generated/core/serverSentEvents.gen.ts +242 -0
  58. package/src/packages/sdk-ts/generated/core/types.gen.ts +114 -0
  59. package/src/packages/sdk-ts/generated/core/utils.gen.ts +140 -0
  60. package/src/packages/sdk-ts/generated/index.ts +578 -0
  61. package/src/packages/sdk-ts/generated/sdk.gen.ts +3440 -0
  62. package/src/packages/sdk-ts/generated/types.gen.ts +5790 -0
  63. package/src/packages/sdk-ts/index.ts +7 -0
  64. package/src/packages/workos-auth-contracts/device-flow.ts +271 -0
  65. package/src/packages/workos-auth-contracts/index.ts +8 -0
  66. package/src/packages/workos-auth-contracts/management-rpc.ts +379 -0
  67. package/src/packages/workos-auth-contracts/organizations.ts +113 -0
  68. package/src/packages/workos-auth-contracts/parsing.ts +75 -0
  69. package/src/packages/workos-auth-contracts/session-status.ts +53 -0
  70. package/src/packages/workos-auth-contracts/tokens.ts +216 -0
  71. package/src/packages/workos-auth-contracts/user-api-keys.ts +85 -0
  72. package/src/packages/workos-auth-contracts/webhooks.ts +127 -0
@@ -0,0 +1,59 @@
1
+ export interface ProjectNotesReceipt {
2
+ readonly version: number;
3
+ readonly updated_at: string;
4
+ }
5
+ export interface ProjectContext {
6
+ readonly project_id: string;
7
+ readonly generated_at: string;
8
+ readonly credit_access: "included" | "not_authorized";
9
+ readonly notes: {
10
+ readonly version: number;
11
+ readonly markdown: string;
12
+ readonly updated_at: string | null;
13
+ };
14
+ readonly markdown: string;
15
+ }
16
+ const record = (v: unknown): v is Record<string, unknown> =>
17
+ typeof v === "object" && v !== null && !Array.isArray(v);
18
+ const timestamp = (v: unknown): v is string =>
19
+ typeof v === "string" && Number.isFinite(Date.parse(v)) && new Date(v).toISOString() === v;
20
+ const version = (v: unknown) => Number.isInteger(v) && Number(v) >= 0 && Number(v) <= 2147483647;
21
+ const bounded = (v: unknown, lines: number, bytes: number): v is string =>
22
+ typeof v === "string" &&
23
+ !/[\r\u2028\u2029]/u.test(v) &&
24
+ !/\p{Cc}/u.test(v.replace(/[\n\t]/gu, "")) &&
25
+ v.split("\n").length <= lines &&
26
+ new TextEncoder().encode(v).length <= bytes;
27
+ export function assertProjectNotesReceipt(v: unknown): asserts v is ProjectNotesReceipt {
28
+ if (
29
+ !record(v) ||
30
+ Object.keys(v).sort().join(",") !== "updated_at,version" ||
31
+ !version(v["version"]) ||
32
+ v["version"] === 0 ||
33
+ !timestamp(v["updated_at"])
34
+ )
35
+ throw new TypeError("Invalid project notes receipt");
36
+ }
37
+ export function assertProjectContext(v: unknown): asserts v is ProjectContext {
38
+ if (
39
+ !record(v) ||
40
+ Object.keys(v).sort().join(",") !== "credit_access,generated_at,markdown,notes,project_id" ||
41
+ typeof v["project_id"] !== "string" ||
42
+ !/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/u.test(v["project_id"]) ||
43
+ !timestamp(v["generated_at"]) ||
44
+ !["included", "not_authorized"].includes(String(v["credit_access"])) ||
45
+ !bounded(v["markdown"], 500, 32768)
46
+ )
47
+ throw new TypeError("Invalid project context");
48
+ const notes = v["notes"];
49
+ if (
50
+ !record(notes) ||
51
+ Object.keys(notes).sort().join(",") !== "markdown,updated_at,version" ||
52
+ !version(notes["version"]) ||
53
+ !bounded(notes["markdown"], 250, 16384) ||
54
+ (notes["version"] === 0
55
+ ? notes["updated_at"] !== null || notes["markdown"] !== ""
56
+ : !timestamp(notes["updated_at"]))
57
+ )
58
+ throw new TypeError("Invalid project notes");
59
+ }
@@ -0,0 +1,102 @@
1
+ import { publicOperationFailure, type PublicOperationFailure } from "./operation-failure.js";
2
+ export interface ProjectExport {
3
+ readonly id: string;
4
+ readonly project_id: string;
5
+ readonly state: "queued" | "running" | "succeeded" | "failed" | "cancelled";
6
+ readonly requested_at: string;
7
+ readonly next_request_at: string;
8
+ readonly next_poll_after_seconds: 5 | null;
9
+ readonly error: PublicOperationFailure | null;
10
+ readonly archive: {
11
+ readonly bytes: number;
12
+ readonly sha256: string;
13
+ readonly sql_files: readonly string[];
14
+ readonly captured_at: string;
15
+ readonly expires_at: string;
16
+ readonly download_url: string | null;
17
+ readonly download_expires_at: string | null;
18
+ } | null;
19
+ }
20
+ /** The public export shape carries no job password, source URL or permanent storage credential. */
21
+ export function assertProjectExport(value: unknown): asserts value is ProjectExport {
22
+ if (
23
+ !record(value) ||
24
+ Object.keys(value).sort().join(",") !==
25
+ "archive,error,id,next_poll_after_seconds,next_request_at,project_id,requested_at,state" ||
26
+ typeof value["id"] !== "string" ||
27
+ !id.test(value["id"]) ||
28
+ typeof value["project_id"] !== "string" ||
29
+ !id.test(value["project_id"]) ||
30
+ !["queued", "running", "succeeded", "failed", "cancelled"].includes(String(value["state"])) ||
31
+ !timestamp(value["requested_at"]) ||
32
+ !timestamp(value["next_request_at"])
33
+ )
34
+ invalid();
35
+ const active = value["state"] === "queued" || value["state"] === "running";
36
+ if (value["next_poll_after_seconds"] !== (active ? 5 : null)) invalid();
37
+ if (value["state"] === "failed") {
38
+ const error = value["error"];
39
+ if (
40
+ !record(error) ||
41
+ Object.keys(error).sort().join(",") !== "code,message,retryable,suggested_action" ||
42
+ typeof error["code"] !== "string"
43
+ )
44
+ invalid();
45
+ const expected = publicOperationFailure(error["code"]);
46
+ for (const key of Object.keys(expected) as (keyof PublicOperationFailure)[])
47
+ if (error[key] !== expected[key]) invalid();
48
+ } else if (value["error"] !== null) invalid();
49
+ const archive = value["archive"];
50
+ if (archive === null) {
51
+ if (value["state"] === "succeeded") invalid();
52
+ return;
53
+ }
54
+ if (
55
+ value["state"] !== "succeeded" ||
56
+ !record(archive) ||
57
+ Object.keys(archive).sort().join(",") !==
58
+ "bytes,captured_at,download_expires_at,download_url,expires_at,sha256,sql_files" ||
59
+ !Number.isSafeInteger(archive["bytes"]) ||
60
+ Number(archive["bytes"]) < 1 ||
61
+ Number(archive["bytes"]) > 536870912 ||
62
+ typeof archive["sha256"] !== "string" ||
63
+ !/^sha256:[a-f0-9]{64}$/u.test(archive["sha256"]) ||
64
+ !['["dev.sql"]', '["prod.sql"]', '["dev.sql","prod.sql"]', '["shared.sql"]'].includes(
65
+ JSON.stringify(archive["sql_files"]),
66
+ ) ||
67
+ !timestamp(archive["captured_at"]) ||
68
+ !timestamp(archive["expires_at"])
69
+ )
70
+ invalid();
71
+ if (archive["download_url"] === null) {
72
+ if (archive["download_expires_at"] !== null) invalid();
73
+ return;
74
+ }
75
+ if (
76
+ typeof archive["download_url"] !== "string" ||
77
+ !timestamp(archive["download_expires_at"]) ||
78
+ Date.parse(archive["download_expires_at"]) > Date.parse(archive["expires_at"])
79
+ )
80
+ invalid();
81
+ let url;
82
+ try {
83
+ url = new URL(archive["download_url"]);
84
+ } catch {
85
+ invalid();
86
+ }
87
+ if (url.protocol !== "https:" || url.username || url.password || url.hash) invalid();
88
+ }
89
+ const id = /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/u;
90
+ function record(value: unknown): value is Record<string, unknown> {
91
+ return typeof value === "object" && value !== null && !Array.isArray(value);
92
+ }
93
+ function timestamp(value: unknown): value is string {
94
+ return (
95
+ typeof value === "string" &&
96
+ Number.isFinite(Date.parse(value)) &&
97
+ new Date(value).toISOString() === value
98
+ );
99
+ }
100
+ function invalid(): never {
101
+ throw new TypeError("Project export response is invalid");
102
+ }
@@ -0,0 +1,98 @@
1
+ export interface UserApiKey {
2
+ id: string;
3
+ organization_id: string;
4
+ name: string;
5
+ obfuscated_value: string;
6
+ permissions: string[];
7
+ expires_at: string | null;
8
+ created_at: string;
9
+ last_used_at: string | null;
10
+ }
11
+ export interface UserApiKeyCreation {
12
+ request_id: string;
13
+ replayed: boolean;
14
+ key: UserApiKey;
15
+ value: string | null;
16
+ }
17
+ export interface UserApiKeyPage {
18
+ data: UserApiKey[];
19
+ next_cursor: string | null;
20
+ }
21
+ export const USER_API_KEY_ID = /^api_key_[A-Za-z0-9_]{1,120}$/u;
22
+ const ulid = /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/u;
23
+
24
+ function object(value: unknown, fields: string): Record<string, unknown> {
25
+ if (
26
+ !value ||
27
+ typeof value !== "object" ||
28
+ Array.isArray(value) ||
29
+ Object.keys(value).sort().join(",") !== fields.split(",").sort().join(",")
30
+ )
31
+ throw new TypeError("Invalid user key response");
32
+ return value as Record<string, unknown>;
33
+ }
34
+ function date(value: unknown): boolean {
35
+ return (
36
+ typeof value === "string" &&
37
+ Number.isFinite(Date.parse(value)) &&
38
+ new Date(value).toISOString() === value
39
+ );
40
+ }
41
+ export function parseUserApiKey(value: unknown): UserApiKey {
42
+ const v = object(
43
+ value,
44
+ "id,organization_id,name,obfuscated_value,permissions,expires_at,created_at,last_used_at",
45
+ );
46
+ if (
47
+ typeof v["id"] !== "string" ||
48
+ !USER_API_KEY_ID.test(v["id"]) ||
49
+ typeof v["organization_id"] !== "string" ||
50
+ !ulid.test(v["organization_id"]) ||
51
+ typeof v["name"] !== "string" ||
52
+ v["name"].trim() !== v["name"] ||
53
+ v["name"].length < 1 ||
54
+ v["name"].length > 128 ||
55
+ /\p{Cc}/u.test(v["name"]) ||
56
+ typeof v["obfuscated_value"] !== "string" ||
57
+ !/^sk_(?:\.\.\.|…)[A-Za-z0-9_-]{1,12}$/u.test(v["obfuscated_value"]) ||
58
+ !Array.isArray(v["permissions"]) ||
59
+ v["permissions"].length > 100 ||
60
+ new Set(v["permissions"]).size !== v["permissions"].length ||
61
+ v["permissions"].some(
62
+ (p: unknown) => typeof p !== "string" || !/^[A-Za-z0-9_.*:-]{1,128}$/u.test(p),
63
+ ) ||
64
+ !date(v["created_at"]) ||
65
+ (v["expires_at"] !== null && !date(v["expires_at"])) ||
66
+ (v["last_used_at"] !== null && !date(v["last_used_at"]))
67
+ )
68
+ throw new TypeError("Invalid user key metadata");
69
+ return v as unknown as UserApiKey;
70
+ }
71
+ export function parseUserApiKeyCreation(value: unknown): UserApiKeyCreation {
72
+ const v = object(value, "request_id,replayed,key,value");
73
+ if (
74
+ typeof v["request_id"] !== "string" ||
75
+ !ulid.test(v["request_id"]) ||
76
+ typeof v["replayed"] !== "boolean" ||
77
+ (v["replayed"]
78
+ ? v["value"] !== null
79
+ : typeof v["value"] !== "string" || !/^sk_[A-Za-z0-9_-]{20,128}$/u.test(v["value"]))
80
+ )
81
+ throw new TypeError("Invalid user key creation");
82
+ parseUserApiKey(v["key"]);
83
+ return v as unknown as UserApiKeyCreation;
84
+ }
85
+ export function parseUserApiKeyPage(value: unknown): UserApiKeyPage {
86
+ const v = object(value, "data,next_cursor");
87
+ if (
88
+ !Array.isArray(v["data"]) ||
89
+ v["data"].length > 20 ||
90
+ (v["next_cursor"] !== null &&
91
+ (typeof v["next_cursor"] !== "string" || !USER_API_KEY_ID.test(v["next_cursor"])))
92
+ )
93
+ throw new TypeError("Invalid user key page");
94
+ const keys = v["data"].map(parseUserApiKey);
95
+ if (new Set(keys.map((key) => key.id)).size !== keys.length)
96
+ throw new TypeError("Duplicate user keys");
97
+ return v as unknown as UserApiKeyPage;
98
+ }
@@ -0,0 +1,277 @@
1
+ // This file is auto-generated by @hey-api/openapi-ts
2
+
3
+ import { createSseClient } from "../core/serverSentEvents.gen.js";
4
+ import type { HttpMethod } from "../core/types.gen.js";
5
+ import { getValidRequestBody } from "../core/utils.gen.js";
6
+ import type { Client, Config, RequestOptions, ResolvedRequestOptions } from "./types.gen.js";
7
+ import {
8
+ buildUrl,
9
+ createConfig,
10
+ createInterceptors,
11
+ getParseAs,
12
+ mergeConfigs,
13
+ mergeHeaders,
14
+ setAuthParams,
15
+ } from "./utils.gen.js";
16
+
17
+ type ReqInit = Omit<RequestInit, "body" | "headers"> & {
18
+ body?: any;
19
+ headers: ReturnType<typeof mergeHeaders>;
20
+ };
21
+
22
+ export const createClient = (config: Config = {}): Client => {
23
+ let _config = mergeConfigs(createConfig(), config);
24
+
25
+ const getConfig = (): Config => ({ ..._config });
26
+
27
+ const setConfig = (config: Config): Config => {
28
+ _config = mergeConfigs(_config, config);
29
+ return getConfig();
30
+ };
31
+
32
+ const interceptors = createInterceptors<Request, Response, unknown, ResolvedRequestOptions>();
33
+
34
+ const beforeRequest = async <
35
+ TData = unknown,
36
+ TResponseStyle extends "data" | "fields" = "fields",
37
+ ThrowOnError extends boolean = boolean,
38
+ Url extends string = string,
39
+ >(
40
+ options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,
41
+ ) => {
42
+ const opts = {
43
+ ..._config,
44
+ ...options,
45
+ fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,
46
+ headers: mergeHeaders(_config.headers, options.headers),
47
+ serializedBody: undefined as string | undefined,
48
+ };
49
+
50
+ if (opts.security) {
51
+ await setAuthParams(opts);
52
+ }
53
+
54
+ if (opts.requestValidator) {
55
+ await opts.requestValidator(opts);
56
+ }
57
+
58
+ if (opts.body !== undefined && opts.bodySerializer) {
59
+ opts.serializedBody = opts.bodySerializer(opts.body) as string | undefined;
60
+ }
61
+
62
+ // remove Content-Type header if body is empty to avoid sending invalid requests
63
+ if (opts.body === undefined || opts.serializedBody === "") {
64
+ opts.headers.delete("Content-Type");
65
+ }
66
+
67
+ const resolvedOpts = opts as typeof opts &
68
+ ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;
69
+ const url = buildUrl(resolvedOpts);
70
+
71
+ return { opts: resolvedOpts, url };
72
+ };
73
+
74
+ const request: Client["request"] = async (options) => {
75
+ const throwOnError = options.throwOnError ?? _config.throwOnError;
76
+ const responseStyle = options.responseStyle ?? _config.responseStyle;
77
+
78
+ let request: Request | undefined;
79
+ let response: Response | undefined;
80
+
81
+ try {
82
+ const { opts, url } = await beforeRequest(options);
83
+ const requestInit: ReqInit = {
84
+ redirect: "follow",
85
+ ...opts,
86
+ body: getValidRequestBody(opts),
87
+ };
88
+
89
+ request = new Request(url, requestInit);
90
+
91
+ for (const fn of interceptors.request.fns) {
92
+ if (fn) {
93
+ request = await fn(request, opts);
94
+ }
95
+ }
96
+
97
+ // fetch must be assigned here, otherwise it would throw the error:
98
+ // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation
99
+ const _fetch = opts.fetch!;
100
+
101
+ response = await _fetch(request);
102
+
103
+ for (const fn of interceptors.response.fns) {
104
+ if (fn) {
105
+ response = await fn(response, request, opts);
106
+ }
107
+ }
108
+
109
+ const result = {
110
+ request,
111
+ response,
112
+ };
113
+
114
+ if (response.ok) {
115
+ const parseAs =
116
+ (opts.parseAs === "auto"
117
+ ? getParseAs(response.headers.get("Content-Type"))
118
+ : opts.parseAs) ?? "json";
119
+
120
+ if (response.status === 204 || response.headers.get("Content-Length") === "0") {
121
+ let emptyData: any;
122
+ switch (parseAs) {
123
+ case "arrayBuffer":
124
+ case "blob":
125
+ case "text":
126
+ emptyData = await response[parseAs]();
127
+ break;
128
+ case "formData":
129
+ emptyData = new FormData();
130
+ break;
131
+ case "stream":
132
+ emptyData = response.body;
133
+ break;
134
+ case "json":
135
+ default:
136
+ emptyData = {};
137
+ break;
138
+ }
139
+ return opts.responseStyle === "data"
140
+ ? emptyData
141
+ : {
142
+ data: emptyData,
143
+ ...result,
144
+ };
145
+ }
146
+
147
+ let data: any;
148
+ switch (parseAs) {
149
+ case "arrayBuffer":
150
+ case "blob":
151
+ case "formData":
152
+ case "text":
153
+ data = await response[parseAs]();
154
+ break;
155
+ case "json": {
156
+ // Some servers return 200 with no Content-Length and empty body.
157
+ // response.json() would throw; read as text and parse if non-empty.
158
+ const text = await response.text();
159
+ data = text ? JSON.parse(text) : {};
160
+ break;
161
+ }
162
+ case "stream":
163
+ return opts.responseStyle === "data"
164
+ ? response.body
165
+ : {
166
+ data: response.body,
167
+ ...result,
168
+ };
169
+ }
170
+
171
+ if (parseAs === "json") {
172
+ if (opts.responseValidator) {
173
+ await opts.responseValidator(data);
174
+ }
175
+
176
+ if (opts.responseTransformer) {
177
+ data = await opts.responseTransformer(data);
178
+ }
179
+ }
180
+
181
+ return opts.responseStyle === "data"
182
+ ? data
183
+ : {
184
+ data,
185
+ ...result,
186
+ };
187
+ }
188
+
189
+ const textError = await response.text();
190
+ let jsonError: unknown;
191
+
192
+ try {
193
+ jsonError = JSON.parse(textError);
194
+ } catch {
195
+ // noop
196
+ }
197
+
198
+ throw jsonError ?? textError;
199
+ } catch (error) {
200
+ let finalError = error;
201
+
202
+ for (const fn of interceptors.error.fns) {
203
+ if (fn) {
204
+ finalError = await fn(finalError, response, request, options as ResolvedRequestOptions);
205
+ }
206
+ }
207
+
208
+ finalError = finalError || {};
209
+
210
+ if (throwOnError) {
211
+ throw finalError;
212
+ }
213
+
214
+ // TODO: we probably want to return error and improve types
215
+ return responseStyle === "data"
216
+ ? undefined
217
+ : {
218
+ error: finalError,
219
+ request,
220
+ response,
221
+ };
222
+ }
223
+ };
224
+
225
+ const makeMethodFn = (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>
226
+ request({ ...options, method });
227
+
228
+ const makeSseFn = (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {
229
+ const { opts, url } = await beforeRequest(options);
230
+ return createSseClient({
231
+ ...opts,
232
+ body: opts.body as BodyInit | null | undefined,
233
+ method,
234
+ onRequest: async (url, init) => {
235
+ let request = new Request(url, init);
236
+ for (const fn of interceptors.request.fns) {
237
+ if (fn) {
238
+ request = await fn(request, opts);
239
+ }
240
+ }
241
+ return request;
242
+ },
243
+ serializedBody: getValidRequestBody(opts) as BodyInit | null | undefined,
244
+ url,
245
+ });
246
+ };
247
+
248
+ const _buildUrl: Client["buildUrl"] = (options) => buildUrl({ ..._config, ...options });
249
+
250
+ return {
251
+ buildUrl: _buildUrl,
252
+ connect: makeMethodFn("CONNECT"),
253
+ delete: makeMethodFn("DELETE"),
254
+ get: makeMethodFn("GET"),
255
+ getConfig,
256
+ head: makeMethodFn("HEAD"),
257
+ interceptors,
258
+ options: makeMethodFn("OPTIONS"),
259
+ patch: makeMethodFn("PATCH"),
260
+ post: makeMethodFn("POST"),
261
+ put: makeMethodFn("PUT"),
262
+ request,
263
+ setConfig,
264
+ sse: {
265
+ connect: makeSseFn("CONNECT"),
266
+ delete: makeSseFn("DELETE"),
267
+ get: makeSseFn("GET"),
268
+ head: makeSseFn("HEAD"),
269
+ options: makeSseFn("OPTIONS"),
270
+ patch: makeSseFn("PATCH"),
271
+ post: makeSseFn("POST"),
272
+ put: makeSseFn("PUT"),
273
+ trace: makeSseFn("TRACE"),
274
+ },
275
+ trace: makeMethodFn("TRACE"),
276
+ } as Client;
277
+ };
@@ -0,0 +1,27 @@
1
+ // This file is auto-generated by @hey-api/openapi-ts
2
+
3
+ export type { Auth } from "../core/auth.gen.js";
4
+ export type { QuerySerializerOptions } from "../core/bodySerializer.gen.js";
5
+ export {
6
+ formDataBodySerializer,
7
+ jsonBodySerializer,
8
+ urlSearchParamsBodySerializer,
9
+ } from "../core/bodySerializer.gen.js";
10
+ export { buildClientParams } from "../core/params.gen.js";
11
+ export { serializeQueryKeyValue } from "../core/queryKeySerializer.gen.js";
12
+ export type { ServerSentEventsResult } from "../core/serverSentEvents.gen.js";
13
+ export type { ClientMeta } from "../core/types.gen.js";
14
+ export { createClient } from "./client.gen.js";
15
+ export type {
16
+ Client,
17
+ ClientOptions,
18
+ Config,
19
+ CreateClientConfig,
20
+ Options,
21
+ RequestOptions,
22
+ RequestResult,
23
+ ResolvedRequestOptions,
24
+ ResponseStyle,
25
+ TDataShape,
26
+ } from "./types.gen.js";
27
+ export { createConfig, mergeHeaders } from "./utils.gen.js";