@opencode-ai/client 0.0.0-dev-17471

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 (40) hide show
  1. package/README.md +27 -0
  2. package/dist/contract.d.ts +1 -0
  3. package/dist/contract.js +1 -0
  4. package/dist/effect/api/api.d.ts +2155 -0
  5. package/dist/effect/api/api.js +0 -0
  6. package/dist/effect/api.d.ts +7 -0
  7. package/dist/effect/api.js +0 -0
  8. package/dist/effect/generated/client-error.d.ts +7 -0
  9. package/dist/effect/generated/client-error.js +5 -0
  10. package/dist/effect/generated/client.d.ts +2208 -0
  11. package/dist/effect/generated/client.js +460 -0
  12. package/dist/effect/generated/index.d.ts +2 -0
  13. package/dist/effect/generated/index.js +2 -0
  14. package/dist/effect/index.d.ts +32 -0
  15. package/dist/effect/index.js +28 -0
  16. package/dist/effect/service.d.ts +78 -0
  17. package/dist/effect/service.js +286 -0
  18. package/dist/promise/api.d.ts +18 -0
  19. package/dist/promise/api.js +0 -0
  20. package/dist/promise/generated/client-error.d.ts +6 -0
  21. package/dist/promise/generated/client-error.js +8 -0
  22. package/dist/promise/generated/client.d.ts +228 -0
  23. package/dist/promise/generated/client.js +1205 -0
  24. package/dist/promise/generated/index.d.ts +3 -0
  25. package/dist/promise/generated/index.js +3 -0
  26. package/dist/promise/generated/types.d.ts +7807 -0
  27. package/dist/promise/generated/types.js +26 -0
  28. package/dist/promise/index.d.ts +4 -0
  29. package/dist/promise/index.js +1 -0
  30. package/dist/promise/service.d.ts +26 -0
  31. package/dist/promise/service.js +273 -0
  32. package/dist/service-contender.d.ts +11 -0
  33. package/dist/service-contender.js +52 -0
  34. package/dist/service-timing.d.ts +13 -0
  35. package/dist/service-timing.js +19 -0
  36. package/dist/service-version.d.ts +2 -0
  37. package/dist/service-version.js +9 -0
  38. package/dist/service.d.ts +48 -0
  39. package/dist/service.js +0 -0
  40. package/package.json +75 -0
@@ -0,0 +1,1205 @@
1
+ import { ClientError } from "./client-error.js";
2
+ const maxSseEventBytes = 16 * 1024 * 1024;
3
+ export function make(options) {
4
+ const fetch = options.fetch ?? globalThis.fetch;
5
+ const prepare = (descriptor, requestOptions) => {
6
+ const url = new URL(descriptor.path, options.baseUrl);
7
+ for (const [key, value] of Object.entries(descriptor.query ?? {}))
8
+ appendQuery(url.searchParams, key, value);
9
+ const headers = new Headers(options.headers);
10
+ for (const [key, value] of Object.entries(descriptor.headers ?? {})) {
11
+ if (value !== undefined && value !== null)
12
+ headers.set(key, String(value));
13
+ }
14
+ for (const [key, value] of new Headers(requestOptions?.headers))
15
+ headers.set(key, value);
16
+ if (descriptor.body !== undefined && !headers.has("content-type"))
17
+ headers.set("content-type", "application/json");
18
+ return {
19
+ url,
20
+ init: {
21
+ method: descriptor.method,
22
+ signal: requestOptions?.signal,
23
+ headers,
24
+ body: descriptor.body === undefined ? undefined : JSON.stringify(descriptor.body),
25
+ },
26
+ };
27
+ };
28
+ const execute = async (descriptor, requestOptions) => {
29
+ try {
30
+ const prepared = prepare(descriptor, requestOptions);
31
+ return await fetch(prepared.url, prepared.init);
32
+ }
33
+ catch (cause) {
34
+ throw new ClientError("Transport", { cause });
35
+ }
36
+ };
37
+ const responseError = async (response, descriptor) => {
38
+ if (descriptor.declaredStatuses.includes(response.status))
39
+ throw await json(response);
40
+ try {
41
+ await response.body?.cancel();
42
+ }
43
+ catch { }
44
+ throw new ClientError("UnexpectedStatus", { cause: { status: response.status } });
45
+ };
46
+ const request = async (descriptor, requestOptions) => {
47
+ const response = await execute(descriptor, requestOptions);
48
+ if (response.status !== descriptor.successStatus)
49
+ return responseError(response, descriptor);
50
+ if (descriptor.binary)
51
+ return new Uint8Array(await response.arrayBuffer());
52
+ if (descriptor.empty) {
53
+ try {
54
+ await response.body?.cancel();
55
+ }
56
+ catch { }
57
+ return undefined;
58
+ }
59
+ return (await json(response));
60
+ };
61
+ const sse = (descriptor, requestOptions) => ({
62
+ async *[Symbol.asyncIterator]() {
63
+ const response = await execute(descriptor, requestOptions);
64
+ if (response.status !== descriptor.successStatus)
65
+ await responseError(response, descriptor);
66
+ if (!isContentType(response, "text/event-stream")) {
67
+ try {
68
+ await response.body?.cancel();
69
+ }
70
+ catch { }
71
+ throw new ClientError("UnsupportedContentType");
72
+ }
73
+ if (response.body === null)
74
+ throw new ClientError("MalformedResponse");
75
+ const reader = response.body.getReader();
76
+ const decoder = new TextDecoder();
77
+ let buffer = "";
78
+ try {
79
+ while (true) {
80
+ let next;
81
+ try {
82
+ next = await reader.read();
83
+ }
84
+ catch (cause) {
85
+ throw new ClientError("Transport", { cause });
86
+ }
87
+ buffer += decoder.decode(next.value, { stream: !next.done });
88
+ if (buffer.length > maxSseEventBytes)
89
+ throw new ClientError("SseEventTooLarge");
90
+ const trailingCarriageReturn = !next.done && buffer.endsWith("\r");
91
+ if (trailingCarriageReturn)
92
+ buffer = buffer.slice(0, -1);
93
+ buffer = buffer.replaceAll("\r\n", "\n").replaceAll("\r", "\n");
94
+ if (trailingCarriageReturn)
95
+ buffer += "\r";
96
+ if (next.done && buffer !== "")
97
+ buffer += "\n\n";
98
+ let boundary = buffer.indexOf("\n\n");
99
+ while (boundary >= 0) {
100
+ const block = buffer.slice(0, boundary);
101
+ buffer = buffer.slice(boundary + 2);
102
+ const data = block
103
+ .split("\n")
104
+ .flatMap((line) => (line.startsWith("data:") ? [line.slice(5).trimStart()] : []))
105
+ .join("\n");
106
+ if (data !== "") {
107
+ try {
108
+ yield JSON.parse(data);
109
+ }
110
+ catch (cause) {
111
+ throw new ClientError("MalformedResponse", { cause });
112
+ }
113
+ }
114
+ boundary = buffer.indexOf("\n\n");
115
+ }
116
+ if (next.done)
117
+ return;
118
+ }
119
+ }
120
+ finally {
121
+ try {
122
+ await reader.cancel();
123
+ }
124
+ catch { }
125
+ reader.releaseLock();
126
+ }
127
+ },
128
+ });
129
+ return {
130
+ health: {
131
+ get: (requestOptions) => request({ method: "GET", path: `/api/health`, successStatus: 200, declaredStatuses: [401, 400], empty: false }, requestOptions),
132
+ stop: (input, requestOptions) => request({
133
+ method: "POST",
134
+ path: `/api/service/stop`,
135
+ body: { instanceID: input["instanceID"] },
136
+ successStatus: 200,
137
+ declaredStatuses: [401, 400],
138
+ empty: false,
139
+ }, requestOptions),
140
+ },
141
+ server: {
142
+ get: (requestOptions) => request({ method: "GET", path: `/api/server`, successStatus: 200, declaredStatuses: [401, 400], empty: false }, requestOptions),
143
+ },
144
+ location: {
145
+ get: (input, requestOptions) => request({
146
+ method: "GET",
147
+ path: `/api/location`,
148
+ query: { location: input?.["location"] },
149
+ successStatus: 200,
150
+ declaredStatuses: [401, 400],
151
+ empty: false,
152
+ }, requestOptions),
153
+ },
154
+ agent: {
155
+ list: (input, requestOptions) => request({
156
+ method: "GET",
157
+ path: `/api/agent`,
158
+ query: { location: input?.["location"] },
159
+ successStatus: 200,
160
+ declaredStatuses: [401, 400],
161
+ empty: false,
162
+ }, requestOptions),
163
+ get: (input, requestOptions) => request({
164
+ method: "GET",
165
+ path: `/api/agent/${encodeURIComponent(input.agentID)}`,
166
+ query: { location: input["location"] },
167
+ successStatus: 200,
168
+ declaredStatuses: [404, 401, 400],
169
+ empty: false,
170
+ }, requestOptions),
171
+ },
172
+ plugin: {
173
+ list: (input, requestOptions) => request({
174
+ method: "GET",
175
+ path: `/api/plugin`,
176
+ query: { location: input?.["location"] },
177
+ successStatus: 200,
178
+ declaredStatuses: [401, 400],
179
+ empty: false,
180
+ }, requestOptions),
181
+ },
182
+ session: {
183
+ list: (input, requestOptions) => request({
184
+ method: "GET",
185
+ path: `/api/session`,
186
+ query: {
187
+ workspace: input?.["workspace"],
188
+ limit: input?.["limit"],
189
+ order: input?.["order"],
190
+ search: input?.["search"],
191
+ parentID: input?.["parentID"],
192
+ directory: input?.["directory"],
193
+ project: input?.["project"],
194
+ subpath: input?.["subpath"],
195
+ cursor: input?.["cursor"],
196
+ },
197
+ successStatus: 200,
198
+ declaredStatuses: [400, 401],
199
+ empty: false,
200
+ }, requestOptions),
201
+ create: (input, requestOptions) => request({
202
+ method: "POST",
203
+ path: `/api/session`,
204
+ body: {
205
+ id: input?.["id"],
206
+ title: input?.["title"],
207
+ agent: input?.["agent"],
208
+ model: input?.["model"],
209
+ location: input?.["location"],
210
+ },
211
+ successStatus: 200,
212
+ declaredStatuses: [401, 400],
213
+ empty: false,
214
+ }, requestOptions).then((value) => value.data),
215
+ import: (input, requestOptions) => request({
216
+ method: "POST",
217
+ path: `/api/session/import`,
218
+ body: { info: input["info"], messages: input["messages"], location: input["location"] },
219
+ successStatus: 200,
220
+ declaredStatuses: [409, 401, 400],
221
+ empty: false,
222
+ }, requestOptions).then((value) => value.data),
223
+ export: (input, requestOptions) => request({
224
+ method: "GET",
225
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/export`,
226
+ query: { sanitize: input["sanitize"] },
227
+ successStatus: 200,
228
+ declaredStatuses: [404, 500, 401, 400],
229
+ empty: false,
230
+ }, requestOptions).then((value) => value.data),
231
+ active: (requestOptions) => request({
232
+ method: "GET",
233
+ path: `/api/session/active`,
234
+ successStatus: 200,
235
+ declaredStatuses: [401, 400],
236
+ empty: false,
237
+ }, requestOptions).then((value) => value.data),
238
+ get: (input, requestOptions) => request({
239
+ method: "GET",
240
+ path: `/api/session/${encodeURIComponent(input.sessionID)}`,
241
+ successStatus: 200,
242
+ declaredStatuses: [404, 401, 400],
243
+ empty: false,
244
+ }, requestOptions).then((value) => value.data),
245
+ remove: (input, requestOptions) => request({
246
+ method: "DELETE",
247
+ path: `/api/session/${encodeURIComponent(input.sessionID)}`,
248
+ successStatus: 204,
249
+ declaredStatuses: [404, 400, 401],
250
+ empty: true,
251
+ }, requestOptions),
252
+ fork: (input, requestOptions) => request({
253
+ method: "POST",
254
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/fork`,
255
+ body: { boundary: input["boundary"] },
256
+ successStatus: 200,
257
+ declaredStatuses: [404, 400, 401],
258
+ empty: false,
259
+ }, requestOptions).then((value) => value.data),
260
+ switchAgent: (input, requestOptions) => request({
261
+ method: "POST",
262
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/agent`,
263
+ body: { agent: input["agent"] },
264
+ successStatus: 204,
265
+ declaredStatuses: [404, 400, 401],
266
+ empty: true,
267
+ }, requestOptions),
268
+ switchModel: (input, requestOptions) => request({
269
+ method: "POST",
270
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/model`,
271
+ body: { model: input["model"] },
272
+ successStatus: 204,
273
+ declaredStatuses: [404, 400, 401],
274
+ empty: true,
275
+ }, requestOptions),
276
+ rename: (input, requestOptions) => request({
277
+ method: "POST",
278
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/rename`,
279
+ body: { title: input["title"] },
280
+ successStatus: 204,
281
+ declaredStatuses: [404, 400, 401],
282
+ empty: true,
283
+ }, requestOptions),
284
+ move: (input, requestOptions) => request({
285
+ method: "POST",
286
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/move`,
287
+ body: { directory: input["directory"], workspaceID: input["workspaceID"], delivery: input["delivery"] },
288
+ successStatus: 204,
289
+ declaredStatuses: [404, 400, 401],
290
+ empty: true,
291
+ }, requestOptions),
292
+ prompt: (input, requestOptions) => request({
293
+ method: "POST",
294
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/prompt`,
295
+ body: {
296
+ id: input["id"],
297
+ text: input["text"],
298
+ files: input["files"],
299
+ agents: input["agents"],
300
+ skills: input["skills"],
301
+ metadata: input["metadata"],
302
+ delivery: input["delivery"],
303
+ resume: input["resume"],
304
+ },
305
+ successStatus: 200,
306
+ declaredStatuses: [409, 400, 404, 401],
307
+ empty: false,
308
+ }, requestOptions).then((value) => value.data),
309
+ command: (input, requestOptions) => request({
310
+ method: "POST",
311
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/command`,
312
+ body: {
313
+ id: input["id"],
314
+ command: input["command"],
315
+ arguments: input["arguments"],
316
+ agent: input["agent"],
317
+ model: input["model"],
318
+ files: input["files"],
319
+ agents: input["agents"],
320
+ skills: input["skills"],
321
+ delivery: input["delivery"],
322
+ resume: input["resume"],
323
+ },
324
+ successStatus: 200,
325
+ declaredStatuses: [409, 400, 404, 500, 401],
326
+ empty: false,
327
+ }, requestOptions).then((value) => value.data),
328
+ skill: (input, requestOptions) => request({
329
+ method: "POST",
330
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/skill`,
331
+ body: { id: input["id"], skill: input["skill"], resume: input["resume"] },
332
+ successStatus: 204,
333
+ declaredStatuses: [404, 400, 401],
334
+ empty: true,
335
+ }, requestOptions),
336
+ synthetic: (input, requestOptions) => request({
337
+ method: "POST",
338
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/synthetic`,
339
+ body: {
340
+ id: input["id"],
341
+ text: input["text"],
342
+ description: input["description"],
343
+ metadata: input["metadata"],
344
+ delivery: input["delivery"],
345
+ resume: input["resume"],
346
+ },
347
+ successStatus: 200,
348
+ declaredStatuses: [409, 404, 400, 401],
349
+ empty: false,
350
+ }, requestOptions).then((value) => value.data),
351
+ shell: (input, requestOptions) => request({
352
+ method: "POST",
353
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/shell`,
354
+ body: { id: input["id"], command: input["command"] },
355
+ successStatus: 204,
356
+ declaredStatuses: [404, 400, 401],
357
+ empty: true,
358
+ }, requestOptions),
359
+ compact: (input, requestOptions) => request({
360
+ method: "POST",
361
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/compact`,
362
+ body: { id: input["id"], delivery: input["delivery"] },
363
+ successStatus: 200,
364
+ declaredStatuses: [409, 404, 400, 401],
365
+ empty: false,
366
+ }, requestOptions).then((value) => value.data),
367
+ wait: (input, requestOptions) => request({
368
+ method: "POST",
369
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/wait`,
370
+ successStatus: 204,
371
+ declaredStatuses: [404, 503, 400, 401],
372
+ empty: true,
373
+ }, requestOptions),
374
+ revert: {
375
+ stage: (input, requestOptions) => request({
376
+ method: "POST",
377
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/revert/stage`,
378
+ body: { messageID: input["messageID"], files: input["files"] },
379
+ successStatus: 200,
380
+ declaredStatuses: [404, 409, 500, 400, 401],
381
+ empty: false,
382
+ }, requestOptions).then((value) => value.data),
383
+ clear: (input, requestOptions) => request({
384
+ method: "POST",
385
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/revert/clear`,
386
+ successStatus: 204,
387
+ declaredStatuses: [404, 409, 500, 400, 401],
388
+ empty: true,
389
+ }, requestOptions),
390
+ commit: (input, requestOptions) => request({
391
+ method: "POST",
392
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/revert/commit`,
393
+ successStatus: 204,
394
+ declaredStatuses: [404, 409, 400, 401],
395
+ empty: true,
396
+ }, requestOptions),
397
+ },
398
+ context: (input, requestOptions) => request({
399
+ method: "GET",
400
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/context`,
401
+ successStatus: 200,
402
+ declaredStatuses: [404, 500, 401, 400],
403
+ empty: false,
404
+ }, requestOptions).then((value) => value.data),
405
+ inbox: {
406
+ list: (input, requestOptions) => request({
407
+ method: "GET",
408
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/inbox`,
409
+ successStatus: 200,
410
+ declaredStatuses: [404, 401, 400],
411
+ empty: false,
412
+ }, requestOptions).then((value) => value.data),
413
+ cancel: (input, requestOptions) => request({
414
+ method: "DELETE",
415
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/inbox/${encodeURIComponent(input.inboxID)}`,
416
+ successStatus: 204,
417
+ declaredStatuses: [409, 404, 401, 400],
418
+ empty: true,
419
+ }, requestOptions),
420
+ steer: (input, requestOptions) => request({
421
+ method: "POST",
422
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/inbox/${encodeURIComponent(input.inboxID)}/steer`,
423
+ successStatus: 204,
424
+ declaredStatuses: [409, 404, 401, 400],
425
+ empty: true,
426
+ }, requestOptions),
427
+ queue: (input, requestOptions) => request({
428
+ method: "POST",
429
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/inbox/${encodeURIComponent(input.inboxID)}/queue`,
430
+ successStatus: 204,
431
+ declaredStatuses: [409, 404, 401, 400],
432
+ empty: true,
433
+ }, requestOptions),
434
+ },
435
+ instructions: {
436
+ entry: {
437
+ list: (input, requestOptions) => request({
438
+ method: "GET",
439
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/instructions/entries`,
440
+ successStatus: 200,
441
+ declaredStatuses: [404, 400, 401],
442
+ empty: false,
443
+ }, requestOptions).then((value) => value.data),
444
+ put: (input, requestOptions) => request({
445
+ method: "PUT",
446
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/instructions/entries/${encodeURIComponent(input.key)}`,
447
+ body: { value: input["value"] },
448
+ successStatus: 204,
449
+ declaredStatuses: [404, 413, 400, 401],
450
+ empty: true,
451
+ }, requestOptions),
452
+ remove: (input, requestOptions) => request({
453
+ method: "DELETE",
454
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/instructions/entries/${encodeURIComponent(input.key)}`,
455
+ successStatus: 204,
456
+ declaredStatuses: [404, 400, 401],
457
+ empty: true,
458
+ }, requestOptions),
459
+ },
460
+ },
461
+ generate: (input, requestOptions) => request({
462
+ method: "POST",
463
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/generate`,
464
+ body: { prompt: input["prompt"] },
465
+ successStatus: 200,
466
+ declaredStatuses: [404, 503, 400, 401],
467
+ empty: false,
468
+ }, requestOptions).then((value) => value.data),
469
+ log: (input, requestOptions) => sse({
470
+ method: "GET",
471
+ path: `/api/experimental/session/${encodeURIComponent(input.sessionID)}/log`,
472
+ query: { after: input["after"], follow: input["follow"] },
473
+ successStatus: 200,
474
+ declaredStatuses: [404, 401, 400],
475
+ empty: false,
476
+ }, requestOptions),
477
+ interrupt: (input, requestOptions) => request({
478
+ method: "POST",
479
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/interrupt`,
480
+ query: { continue: input["continue"] },
481
+ successStatus: 204,
482
+ declaredStatuses: [404, 400, 401],
483
+ empty: true,
484
+ }, requestOptions),
485
+ background: (input, requestOptions) => request({
486
+ method: "POST",
487
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/background`,
488
+ successStatus: 204,
489
+ declaredStatuses: [404, 400, 401],
490
+ empty: true,
491
+ }, requestOptions),
492
+ message: (input, requestOptions) => request({
493
+ method: "GET",
494
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/message/${encodeURIComponent(input.messageID)}`,
495
+ successStatus: 200,
496
+ declaredStatuses: [404, 401, 400],
497
+ empty: false,
498
+ }, requestOptions).then((value) => value.data),
499
+ },
500
+ message: {
501
+ list: (input, requestOptions) => request({
502
+ method: "GET",
503
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/message`,
504
+ query: { limit: input["limit"], order: input["order"], cursor: input["cursor"] },
505
+ successStatus: 200,
506
+ declaredStatuses: [400, 404, 500, 401],
507
+ empty: false,
508
+ }, requestOptions),
509
+ },
510
+ model: {
511
+ list: (input, requestOptions) => request({
512
+ method: "GET",
513
+ path: `/api/model`,
514
+ query: { location: input?.["location"] },
515
+ successStatus: 200,
516
+ declaredStatuses: [503, 401, 400],
517
+ empty: false,
518
+ }, requestOptions),
519
+ default: (input, requestOptions) => request({
520
+ method: "GET",
521
+ path: `/api/model/default`,
522
+ query: { location: input?.["location"] },
523
+ successStatus: 200,
524
+ declaredStatuses: [503, 401, 400],
525
+ empty: false,
526
+ }, requestOptions),
527
+ },
528
+ generate: {
529
+ text: (input, requestOptions) => request({
530
+ method: "POST",
531
+ path: `/api/generate`,
532
+ query: { location: input["location"] },
533
+ body: { prompt: input["prompt"], model: input["model"] },
534
+ successStatus: 200,
535
+ declaredStatuses: [400, 503, 401],
536
+ empty: false,
537
+ }, requestOptions).then((value) => value.data),
538
+ },
539
+ provider: {
540
+ list: (input, requestOptions) => request({
541
+ method: "GET",
542
+ path: `/api/provider`,
543
+ query: { location: input?.["location"] },
544
+ successStatus: 200,
545
+ declaredStatuses: [503, 401, 400],
546
+ empty: false,
547
+ }, requestOptions),
548
+ get: (input, requestOptions) => request({
549
+ method: "GET",
550
+ path: `/api/provider/${encodeURIComponent(input.providerID)}`,
551
+ query: { location: input["location"] },
552
+ successStatus: 200,
553
+ declaredStatuses: [404, 503, 401, 400],
554
+ empty: false,
555
+ }, requestOptions),
556
+ },
557
+ integration: {
558
+ list: (input, requestOptions) => request({
559
+ method: "GET",
560
+ path: `/api/integration`,
561
+ query: { location: input?.["location"] },
562
+ successStatus: 200,
563
+ declaredStatuses: [401, 400],
564
+ empty: false,
565
+ }, requestOptions),
566
+ get: (input, requestOptions) => request({
567
+ method: "GET",
568
+ path: `/api/integration/${encodeURIComponent(input.integrationID)}`,
569
+ query: { location: input["location"] },
570
+ successStatus: 200,
571
+ declaredStatuses: [401, 400],
572
+ empty: false,
573
+ }, requestOptions),
574
+ wellknown: {
575
+ add: (input, requestOptions) => request({
576
+ method: "POST",
577
+ path: `/api/experimental/integration/wellknown`,
578
+ query: { location: input["location"] },
579
+ body: { url: input["url"] },
580
+ successStatus: 204,
581
+ declaredStatuses: [400, 401],
582
+ empty: true,
583
+ }, requestOptions),
584
+ },
585
+ connect: {
586
+ key: (input, requestOptions) => request({
587
+ method: "POST",
588
+ path: `/api/integration/${encodeURIComponent(input.integrationID)}/connect/key`,
589
+ query: { location: input["location"] },
590
+ body: { key: input["key"], answer: input["answer"], label: input["label"] },
591
+ successStatus: 204,
592
+ declaredStatuses: [400, 401],
593
+ empty: true,
594
+ }, requestOptions),
595
+ },
596
+ oauth: {
597
+ connect: (input, requestOptions) => request({
598
+ method: "POST",
599
+ path: `/api/integration/${encodeURIComponent(input.integrationID)}/connect/oauth`,
600
+ query: { location: input["location"] },
601
+ body: { methodID: input["methodID"], answer: input["answer"], label: input["label"] },
602
+ successStatus: 200,
603
+ declaredStatuses: [400, 401],
604
+ empty: false,
605
+ }, requestOptions),
606
+ status: (input, requestOptions) => request({
607
+ method: "GET",
608
+ path: `/api/integration/${encodeURIComponent(input.integrationID)}/connect/oauth/${encodeURIComponent(input.attemptID)}`,
609
+ query: { location: input["location"] },
610
+ successStatus: 200,
611
+ declaredStatuses: [401, 400],
612
+ empty: false,
613
+ }, requestOptions),
614
+ complete: (input, requestOptions) => request({
615
+ method: "POST",
616
+ path: `/api/integration/${encodeURIComponent(input.integrationID)}/connect/oauth/${encodeURIComponent(input.attemptID)}/complete`,
617
+ query: { location: input["location"] },
618
+ body: { code: input["code"] },
619
+ successStatus: 204,
620
+ declaredStatuses: [400, 401],
621
+ empty: true,
622
+ }, requestOptions),
623
+ cancel: (input, requestOptions) => request({
624
+ method: "DELETE",
625
+ path: `/api/integration/${encodeURIComponent(input.integrationID)}/connect/oauth/${encodeURIComponent(input.attemptID)}`,
626
+ query: { location: input["location"] },
627
+ successStatus: 204,
628
+ declaredStatuses: [401, 400],
629
+ empty: true,
630
+ }, requestOptions),
631
+ },
632
+ command: {
633
+ connect: (input, requestOptions) => request({
634
+ method: "POST",
635
+ path: `/api/integration/${encodeURIComponent(input.integrationID)}/connect/command`,
636
+ query: { location: input["location"] },
637
+ body: { methodID: input["methodID"], label: input["label"] },
638
+ successStatus: 200,
639
+ declaredStatuses: [400, 401],
640
+ empty: false,
641
+ }, requestOptions),
642
+ status: (input, requestOptions) => request({
643
+ method: "GET",
644
+ path: `/api/integration/${encodeURIComponent(input.integrationID)}/connect/command/${encodeURIComponent(input.attemptID)}`,
645
+ query: { location: input["location"] },
646
+ successStatus: 200,
647
+ declaredStatuses: [401, 400],
648
+ empty: false,
649
+ }, requestOptions),
650
+ cancel: (input, requestOptions) => request({
651
+ method: "DELETE",
652
+ path: `/api/integration/${encodeURIComponent(input.integrationID)}/connect/command/${encodeURIComponent(input.attemptID)}`,
653
+ query: { location: input["location"] },
654
+ successStatus: 204,
655
+ declaredStatuses: [401, 400],
656
+ empty: true,
657
+ }, requestOptions),
658
+ },
659
+ },
660
+ mcp: {
661
+ list: (input, requestOptions) => request({
662
+ method: "GET",
663
+ path: `/api/mcp`,
664
+ query: { location: input?.["location"] },
665
+ successStatus: 200,
666
+ declaredStatuses: [401, 400],
667
+ empty: false,
668
+ }, requestOptions),
669
+ add: (input, requestOptions) => request({
670
+ method: "PUT",
671
+ path: `/api/mcp/${encodeURIComponent(input.server)}`,
672
+ query: { location: input["location"] },
673
+ body: { config: input["config"] },
674
+ successStatus: 204,
675
+ declaredStatuses: [401, 400],
676
+ empty: true,
677
+ }, requestOptions),
678
+ remove: (input, requestOptions) => request({
679
+ method: "DELETE",
680
+ path: `/api/mcp/${encodeURIComponent(input.server)}`,
681
+ query: { location: input["location"] },
682
+ successStatus: 204,
683
+ declaredStatuses: [404, 401, 400],
684
+ empty: true,
685
+ }, requestOptions),
686
+ connect: (input, requestOptions) => request({
687
+ method: "POST",
688
+ path: `/api/mcp/${encodeURIComponent(input.server)}/connect`,
689
+ query: { location: input["location"] },
690
+ successStatus: 204,
691
+ declaredStatuses: [404, 401, 400],
692
+ empty: true,
693
+ }, requestOptions),
694
+ disconnect: (input, requestOptions) => request({
695
+ method: "POST",
696
+ path: `/api/mcp/${encodeURIComponent(input.server)}/disconnect`,
697
+ query: { location: input["location"] },
698
+ successStatus: 204,
699
+ declaredStatuses: [404, 401, 400],
700
+ empty: true,
701
+ }, requestOptions),
702
+ resource: {
703
+ catalog: (input, requestOptions) => request({
704
+ method: "GET",
705
+ path: `/api/mcp/resource`,
706
+ query: { location: input?.["location"] },
707
+ successStatus: 200,
708
+ declaredStatuses: [401, 400],
709
+ empty: false,
710
+ }, requestOptions),
711
+ },
712
+ },
713
+ credential: {
714
+ update: (input, requestOptions) => request({
715
+ method: "PATCH",
716
+ path: `/api/credential/${encodeURIComponent(input.credentialID)}`,
717
+ query: { location: input["location"] },
718
+ body: { label: input["label"] },
719
+ successStatus: 204,
720
+ declaredStatuses: [401, 400],
721
+ empty: true,
722
+ }, requestOptions),
723
+ remove: (input, requestOptions) => request({
724
+ method: "DELETE",
725
+ path: `/api/credential/${encodeURIComponent(input.credentialID)}`,
726
+ query: { location: input["location"] },
727
+ successStatus: 204,
728
+ declaredStatuses: [401, 400],
729
+ empty: true,
730
+ }, requestOptions),
731
+ },
732
+ project: {
733
+ list: (requestOptions) => request({ method: "GET", path: `/api/project`, successStatus: 200, declaredStatuses: [401, 400], empty: false }, requestOptions),
734
+ current: (input, requestOptions) => request({
735
+ method: "GET",
736
+ path: `/api/project/current`,
737
+ query: { location: input?.["location"] },
738
+ successStatus: 200,
739
+ declaredStatuses: [401, 400],
740
+ empty: false,
741
+ }, requestOptions),
742
+ },
743
+ form: {
744
+ request: {
745
+ list: (input, requestOptions) => request({
746
+ method: "GET",
747
+ path: `/api/form/request`,
748
+ query: { location: input?.["location"] },
749
+ successStatus: 200,
750
+ declaredStatuses: [401, 400],
751
+ empty: false,
752
+ }, requestOptions),
753
+ },
754
+ list: (input, requestOptions) => request({
755
+ method: "GET",
756
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/form`,
757
+ successStatus: 200,
758
+ declaredStatuses: [404, 400, 401],
759
+ empty: false,
760
+ }, requestOptions).then((value) => value.data),
761
+ create: (input, requestOptions) => request({
762
+ method: "POST",
763
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/form`,
764
+ body: { id: input["id"], title: input["title"], metadata: input["metadata"], fields: input["fields"] },
765
+ successStatus: 200,
766
+ declaredStatuses: [404, 409, 400, 401],
767
+ empty: false,
768
+ }, requestOptions).then((value) => value.data),
769
+ get: (input, requestOptions) => request({
770
+ method: "GET",
771
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/form/${encodeURIComponent(input.formID)}`,
772
+ successStatus: 200,
773
+ declaredStatuses: [404, 400, 401],
774
+ empty: false,
775
+ }, requestOptions).then((value) => value.data),
776
+ state: (input, requestOptions) => request({
777
+ method: "GET",
778
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/form/${encodeURIComponent(input.formID)}/state`,
779
+ successStatus: 200,
780
+ declaredStatuses: [404, 400, 401],
781
+ empty: false,
782
+ }, requestOptions).then((value) => value.data),
783
+ reply: (input, requestOptions) => request({
784
+ method: "POST",
785
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/form/${encodeURIComponent(input.formID)}/reply`,
786
+ body: { answer: input["answer"] },
787
+ successStatus: 204,
788
+ declaredStatuses: [404, 409, 400, 401],
789
+ empty: true,
790
+ }, requestOptions),
791
+ cancel: (input, requestOptions) => request({
792
+ method: "POST",
793
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/form/${encodeURIComponent(input.formID)}/cancel`,
794
+ successStatus: 204,
795
+ declaredStatuses: [404, 409, 400, 401],
796
+ empty: true,
797
+ }, requestOptions),
798
+ },
799
+ permission: {
800
+ request: {
801
+ list: (input, requestOptions) => request({
802
+ method: "GET",
803
+ path: `/api/permission/request`,
804
+ query: { location: input?.["location"] },
805
+ successStatus: 200,
806
+ declaredStatuses: [401, 400],
807
+ empty: false,
808
+ }, requestOptions),
809
+ },
810
+ saved: {
811
+ list: (input, requestOptions) => request({
812
+ method: "GET",
813
+ path: `/api/permission/saved`,
814
+ query: { projectID: input?.["projectID"] },
815
+ successStatus: 200,
816
+ declaredStatuses: [401, 400],
817
+ empty: false,
818
+ }, requestOptions).then((value) => value.data),
819
+ remove: (input, requestOptions) => request({
820
+ method: "DELETE",
821
+ path: `/api/permission/saved/${encodeURIComponent(input.id)}`,
822
+ successStatus: 204,
823
+ declaredStatuses: [401, 400],
824
+ empty: true,
825
+ }, requestOptions),
826
+ },
827
+ create: (input, requestOptions) => request({
828
+ method: "POST",
829
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/permission`,
830
+ body: {
831
+ id: input["id"],
832
+ action: input["action"],
833
+ resources: input["resources"],
834
+ save: input["save"],
835
+ metadata: input["metadata"],
836
+ source: input["source"],
837
+ agent: input["agent"],
838
+ },
839
+ successStatus: 200,
840
+ declaredStatuses: [404, 400, 401],
841
+ empty: false,
842
+ }, requestOptions).then((value) => value.data),
843
+ list: (input, requestOptions) => request({
844
+ method: "GET",
845
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/permission`,
846
+ successStatus: 200,
847
+ declaredStatuses: [404, 400, 401],
848
+ empty: false,
849
+ }, requestOptions).then((value) => value.data),
850
+ get: (input, requestOptions) => request({
851
+ method: "GET",
852
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/permission/${encodeURIComponent(input.requestID)}`,
853
+ successStatus: 200,
854
+ declaredStatuses: [404, 400, 401],
855
+ empty: false,
856
+ }, requestOptions).then((value) => value.data),
857
+ reply: (input, requestOptions) => request({
858
+ method: "POST",
859
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/permission/${encodeURIComponent(input.requestID)}/reply`,
860
+ body: { reply: input["reply"], message: input["message"] },
861
+ successStatus: 204,
862
+ declaredStatuses: [404, 400, 401],
863
+ empty: true,
864
+ }, requestOptions),
865
+ },
866
+ file: {
867
+ read: (input, requestOptions) => request({
868
+ method: "GET",
869
+ path: `/api/fs/read/${encodePath(input.path)}`,
870
+ query: { location: input["location"] },
871
+ successStatus: 200,
872
+ declaredStatuses: [401, 400],
873
+ empty: false,
874
+ binary: true,
875
+ }, requestOptions),
876
+ list: (input, requestOptions) => request({
877
+ method: "GET",
878
+ path: `/api/fs/list`,
879
+ query: { location: input?.["location"], path: input?.["path"] },
880
+ successStatus: 200,
881
+ declaredStatuses: [401, 400],
882
+ empty: false,
883
+ }, requestOptions),
884
+ find: (input, requestOptions) => request({
885
+ method: "GET",
886
+ path: `/api/fs/find`,
887
+ query: { location: input["location"], query: input["query"], type: input["type"], limit: input["limit"] },
888
+ successStatus: 200,
889
+ declaredStatuses: [401, 400],
890
+ empty: false,
891
+ }, requestOptions),
892
+ },
893
+ command: {
894
+ list: (input, requestOptions) => request({
895
+ method: "GET",
896
+ path: `/api/command`,
897
+ query: { location: input?.["location"] },
898
+ successStatus: 200,
899
+ declaredStatuses: [401, 400],
900
+ empty: false,
901
+ }, requestOptions),
902
+ },
903
+ skill: {
904
+ list: (input, requestOptions) => request({
905
+ method: "GET",
906
+ path: `/api/skill`,
907
+ query: { location: input?.["location"] },
908
+ successStatus: 200,
909
+ declaredStatuses: [401, 400],
910
+ empty: false,
911
+ }, requestOptions),
912
+ },
913
+ event: {
914
+ subscribe: (requestOptions) => sse({ method: "GET", path: `/api/event`, successStatus: 200, declaredStatuses: [401, 400], empty: false }, requestOptions),
915
+ },
916
+ pty: {
917
+ list: (input, requestOptions) => request({
918
+ method: "GET",
919
+ path: `/api/pty`,
920
+ query: { location: input?.["location"] },
921
+ successStatus: 200,
922
+ declaredStatuses: [401, 400],
923
+ empty: false,
924
+ }, requestOptions),
925
+ create: (input, requestOptions) => request({
926
+ method: "POST",
927
+ path: `/api/pty`,
928
+ query: { location: input?.["location"] },
929
+ body: {
930
+ command: input?.["command"],
931
+ args: input?.["args"],
932
+ cwd: input?.["cwd"],
933
+ title: input?.["title"],
934
+ env: input?.["env"],
935
+ },
936
+ successStatus: 200,
937
+ declaredStatuses: [401, 400],
938
+ empty: false,
939
+ }, requestOptions),
940
+ get: (input, requestOptions) => request({
941
+ method: "GET",
942
+ path: `/api/pty/${encodeURIComponent(input.ptyID)}`,
943
+ query: { location: input["location"] },
944
+ successStatus: 200,
945
+ declaredStatuses: [404, 401, 400],
946
+ empty: false,
947
+ }, requestOptions),
948
+ update: (input, requestOptions) => request({
949
+ method: "PUT",
950
+ path: `/api/pty/${encodeURIComponent(input.ptyID)}`,
951
+ query: { location: input["location"] },
952
+ body: { title: input["title"], size: input["size"] },
953
+ successStatus: 200,
954
+ declaredStatuses: [404, 401, 400],
955
+ empty: false,
956
+ }, requestOptions),
957
+ remove: (input, requestOptions) => request({
958
+ method: "DELETE",
959
+ path: `/api/pty/${encodeURIComponent(input.ptyID)}`,
960
+ query: { location: input["location"] },
961
+ successStatus: 204,
962
+ declaredStatuses: [404, 401, 400],
963
+ empty: true,
964
+ }, requestOptions),
965
+ },
966
+ shell: {
967
+ list: (input, requestOptions) => request({
968
+ method: "GET",
969
+ path: `/api/shell`,
970
+ query: { location: input?.["location"] },
971
+ successStatus: 200,
972
+ declaredStatuses: [401, 400],
973
+ empty: false,
974
+ }, requestOptions),
975
+ create: (input, requestOptions) => request({
976
+ method: "POST",
977
+ path: `/api/shell`,
978
+ query: { location: input["location"] },
979
+ body: {
980
+ command: input["command"],
981
+ cwd: input["cwd"],
982
+ timeout: input["timeout"],
983
+ metadata: input["metadata"],
984
+ },
985
+ successStatus: 200,
986
+ declaredStatuses: [401, 400],
987
+ empty: false,
988
+ }, requestOptions),
989
+ get: (input, requestOptions) => request({
990
+ method: "GET",
991
+ path: `/api/shell/${encodeURIComponent(input.id)}`,
992
+ query: { location: input["location"] },
993
+ successStatus: 200,
994
+ declaredStatuses: [404, 401, 400],
995
+ empty: false,
996
+ }, requestOptions),
997
+ timeout: (input, requestOptions) => request({
998
+ method: "PATCH",
999
+ path: `/api/shell/${encodeURIComponent(input.id)}/timeout`,
1000
+ query: { location: input["location"] },
1001
+ body: { timeout: input["timeout"] },
1002
+ successStatus: 200,
1003
+ declaredStatuses: [404, 401, 400],
1004
+ empty: false,
1005
+ }, requestOptions),
1006
+ output: (input, requestOptions) => request({
1007
+ method: "GET",
1008
+ path: `/api/shell/${encodeURIComponent(input.id)}/output`,
1009
+ query: { location: input["location"], cursor: input["cursor"], limit: input["limit"] },
1010
+ successStatus: 200,
1011
+ declaredStatuses: [404, 401, 400],
1012
+ empty: false,
1013
+ }, requestOptions),
1014
+ remove: (input, requestOptions) => request({
1015
+ method: "DELETE",
1016
+ path: `/api/shell/${encodeURIComponent(input.id)}`,
1017
+ query: { location: input["location"] },
1018
+ successStatus: 204,
1019
+ declaredStatuses: [404, 401, 400],
1020
+ empty: true,
1021
+ }, requestOptions),
1022
+ },
1023
+ reference: {
1024
+ list: (input, requestOptions) => request({
1025
+ method: "GET",
1026
+ path: `/api/reference`,
1027
+ query: { location: input?.["location"] },
1028
+ successStatus: 200,
1029
+ declaredStatuses: [401, 400],
1030
+ empty: false,
1031
+ }, requestOptions),
1032
+ },
1033
+ worktree: {
1034
+ list: (input, requestOptions) => request({
1035
+ method: "GET",
1036
+ path: `/api/worktree/${encodeURIComponent(input.projectID)}`,
1037
+ successStatus: 200,
1038
+ declaredStatuses: [401, 400],
1039
+ empty: false,
1040
+ }, requestOptions),
1041
+ create: (input, requestOptions) => request({
1042
+ method: "POST",
1043
+ path: `/api/worktree/${encodeURIComponent(input.projectID)}`,
1044
+ body: {
1045
+ strategy: input["strategy"],
1046
+ from: input["from"],
1047
+ directory: input["directory"],
1048
+ name: input["name"],
1049
+ },
1050
+ successStatus: 200,
1051
+ declaredStatuses: [400, 401],
1052
+ empty: false,
1053
+ }, requestOptions),
1054
+ remove: (input, requestOptions) => request({
1055
+ method: "DELETE",
1056
+ path: `/api/worktree/${encodeURIComponent(input.projectID)}`,
1057
+ body: { directory: input["directory"], force: input["force"] },
1058
+ successStatus: 204,
1059
+ declaredStatuses: [400, 401],
1060
+ empty: true,
1061
+ }, requestOptions),
1062
+ refresh: (input, requestOptions) => request({
1063
+ method: "POST",
1064
+ path: `/api/worktree/${encodeURIComponent(input.projectID)}/refresh`,
1065
+ successStatus: 204,
1066
+ declaredStatuses: [400, 401],
1067
+ empty: true,
1068
+ }, requestOptions),
1069
+ },
1070
+ vcs: {
1071
+ get: (input, requestOptions) => request({
1072
+ method: "GET",
1073
+ path: `/api/vcs`,
1074
+ query: { location: input?.["location"] },
1075
+ successStatus: 200,
1076
+ declaredStatuses: [401, 400],
1077
+ empty: false,
1078
+ }, requestOptions),
1079
+ status: (input, requestOptions) => request({
1080
+ method: "GET",
1081
+ path: `/api/vcs/status`,
1082
+ query: { location: input?.["location"] },
1083
+ successStatus: 200,
1084
+ declaredStatuses: [401, 400],
1085
+ empty: false,
1086
+ }, requestOptions),
1087
+ diff: (input, requestOptions) => request({
1088
+ method: "GET",
1089
+ path: `/api/vcs/diff`,
1090
+ query: { location: input["location"], mode: input["mode"], context: input["context"] },
1091
+ successStatus: 200,
1092
+ declaredStatuses: [401, 400],
1093
+ empty: false,
1094
+ }, requestOptions),
1095
+ },
1096
+ debug: {
1097
+ location: {
1098
+ list: (requestOptions) => request({
1099
+ method: "GET",
1100
+ path: `/api/debug/location`,
1101
+ successStatus: 200,
1102
+ declaredStatuses: [401, 400],
1103
+ empty: false,
1104
+ }, requestOptions),
1105
+ evict: (input, requestOptions) => request({
1106
+ method: "DELETE",
1107
+ path: `/api/debug/location`,
1108
+ query: { location: input?.["location"] },
1109
+ successStatus: 204,
1110
+ declaredStatuses: [401, 400],
1111
+ empty: true,
1112
+ }, requestOptions),
1113
+ },
1114
+ },
1115
+ migration: {
1116
+ v1: {
1117
+ status: (requestOptions) => request({
1118
+ method: "GET",
1119
+ path: `/api/experimental/migration/v1`,
1120
+ successStatus: 200,
1121
+ declaredStatuses: [401, 400],
1122
+ empty: false,
1123
+ }, requestOptions),
1124
+ },
1125
+ },
1126
+ websearch: {
1127
+ providers: (input, requestOptions) => request({
1128
+ method: "GET",
1129
+ path: `/api/websearch/provider`,
1130
+ query: { location: input?.["location"] },
1131
+ successStatus: 200,
1132
+ declaredStatuses: [503, 401, 400],
1133
+ empty: false,
1134
+ }, requestOptions),
1135
+ query: (input, requestOptions) => request({
1136
+ method: "POST",
1137
+ path: `/api/websearch`,
1138
+ query: { location: input["location"] },
1139
+ body: { query: input["query"], providerID: input["providerID"] },
1140
+ successStatus: 200,
1141
+ declaredStatuses: [400, 503, 401],
1142
+ empty: false,
1143
+ }, requestOptions),
1144
+ },
1145
+ config: {
1146
+ get: (input, requestOptions) => request({
1147
+ method: "GET",
1148
+ path: `/api/config`,
1149
+ query: { location: input?.["location"] },
1150
+ successStatus: 200,
1151
+ declaredStatuses: [401, 400],
1152
+ empty: false,
1153
+ }, requestOptions),
1154
+ },
1155
+ };
1156
+ }
1157
+ function encodePath(value) {
1158
+ return value.split("/").map(encodeURIComponent).join("/");
1159
+ }
1160
+ function appendQuery(params, key, value) {
1161
+ if (value === undefined)
1162
+ return;
1163
+ if (value === null) {
1164
+ params.append(key, "null");
1165
+ return;
1166
+ }
1167
+ if (Array.isArray(value)) {
1168
+ for (const item of value)
1169
+ appendQuery(params, key, item);
1170
+ return;
1171
+ }
1172
+ if (typeof value === "object") {
1173
+ for (const [child, item] of Object.entries(value))
1174
+ appendQuery(params, `${key}[${child}]`, item);
1175
+ return;
1176
+ }
1177
+ params.append(key, String(value));
1178
+ }
1179
+ async function json(response) {
1180
+ if (!isContentType(response, "application/json") && !response.headers.get("content-type")?.includes("+json")) {
1181
+ try {
1182
+ await response.body?.cancel();
1183
+ }
1184
+ catch { }
1185
+ throw new ClientError("UnsupportedContentType");
1186
+ }
1187
+ let text;
1188
+ try {
1189
+ text = await response.text();
1190
+ }
1191
+ catch (cause) {
1192
+ throw new ClientError("Transport", { cause });
1193
+ }
1194
+ if (text === "")
1195
+ throw new ClientError("MalformedResponse");
1196
+ try {
1197
+ return JSON.parse(text);
1198
+ }
1199
+ catch (cause) {
1200
+ throw new ClientError("MalformedResponse", { cause });
1201
+ }
1202
+ }
1203
+ function isContentType(response, expected) {
1204
+ return response.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() === expected;
1205
+ }