@perstack/api-client 0.0.35 → 0.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +438 -0
- package/dist/index.js +957 -0
- package/dist/index.js.map +1 -0
- package/package.json +6 -7
- package/dist/v1/index.d.ts +0 -4043
- package/dist/v1/index.js +0 -1701
- package/dist/v1/index.js.map +0 -1
package/dist/index.js
ADDED
|
@@ -0,0 +1,957 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// src/fetcher.ts
|
|
4
|
+
var DEFAULT_BASE_URL = "https://api.perstack.ai";
|
|
5
|
+
var DEFAULT_TIMEOUT = 3e4;
|
|
6
|
+
function createAbortError() {
|
|
7
|
+
return {
|
|
8
|
+
code: 0,
|
|
9
|
+
message: "Request aborted",
|
|
10
|
+
aborted: true
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function createNetworkError(error) {
|
|
14
|
+
return {
|
|
15
|
+
code: 0,
|
|
16
|
+
message: error instanceof Error ? error.message : "Network error",
|
|
17
|
+
reason: error
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function createHttpError(status, statusText, body) {
|
|
21
|
+
if (typeof body === "object" && body !== null) {
|
|
22
|
+
const errorBody = body;
|
|
23
|
+
return {
|
|
24
|
+
code: status,
|
|
25
|
+
message: errorBody.error ?? statusText,
|
|
26
|
+
reason: errorBody.reason
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
code: status,
|
|
31
|
+
message: statusText
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function createValidationError(error) {
|
|
35
|
+
return {
|
|
36
|
+
code: 0,
|
|
37
|
+
message: "Response validation failed",
|
|
38
|
+
reason: error
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function createFetcher(config) {
|
|
42
|
+
const baseUrl = config?.baseUrl ?? DEFAULT_BASE_URL;
|
|
43
|
+
const timeout = config?.timeout ?? DEFAULT_TIMEOUT;
|
|
44
|
+
const apiKey = config?.apiKey;
|
|
45
|
+
function buildUrl(path) {
|
|
46
|
+
return `${baseUrl}${path}`;
|
|
47
|
+
}
|
|
48
|
+
function buildHeaders(additionalHeaders) {
|
|
49
|
+
const headers = {
|
|
50
|
+
"Content-Type": "application/json",
|
|
51
|
+
...additionalHeaders
|
|
52
|
+
};
|
|
53
|
+
if (apiKey) {
|
|
54
|
+
headers.Authorization = `Bearer ${apiKey}`;
|
|
55
|
+
}
|
|
56
|
+
return headers;
|
|
57
|
+
}
|
|
58
|
+
function createTimeoutSignal(externalSignal) {
|
|
59
|
+
const controller = new AbortController();
|
|
60
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
61
|
+
if (externalSignal) {
|
|
62
|
+
if (externalSignal.aborted) {
|
|
63
|
+
controller.abort();
|
|
64
|
+
} else {
|
|
65
|
+
externalSignal.addEventListener("abort", () => controller.abort());
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
signal: controller.signal,
|
|
70
|
+
cleanup: () => clearTimeout(timeoutId)
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async function request(method, path, schema, body, options) {
|
|
74
|
+
const { signal, cleanup } = createTimeoutSignal(options?.signal);
|
|
75
|
+
try {
|
|
76
|
+
const response = await fetch(buildUrl(path), {
|
|
77
|
+
method,
|
|
78
|
+
headers: buildHeaders(),
|
|
79
|
+
body: body ? JSON.stringify(body) : void 0,
|
|
80
|
+
signal
|
|
81
|
+
});
|
|
82
|
+
if (!response.ok) {
|
|
83
|
+
let errorBody;
|
|
84
|
+
try {
|
|
85
|
+
errorBody = await response.json();
|
|
86
|
+
} catch {
|
|
87
|
+
errorBody = void 0;
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
ok: false,
|
|
91
|
+
error: createHttpError(response.status, response.statusText, errorBody)
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const json = await response.json();
|
|
95
|
+
const parsed = schema.safeParse(json);
|
|
96
|
+
if (!parsed.success) {
|
|
97
|
+
return { ok: false, error: createValidationError(parsed.error) };
|
|
98
|
+
}
|
|
99
|
+
return { ok: true, data: parsed.data };
|
|
100
|
+
} catch (error) {
|
|
101
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
102
|
+
return { ok: false, error: createAbortError() };
|
|
103
|
+
}
|
|
104
|
+
return { ok: false, error: createNetworkError(error) };
|
|
105
|
+
} finally {
|
|
106
|
+
cleanup();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function requestBlob(path, options) {
|
|
110
|
+
const { signal, cleanup } = createTimeoutSignal(options?.signal);
|
|
111
|
+
try {
|
|
112
|
+
const response = await fetch(buildUrl(path), {
|
|
113
|
+
method: "GET",
|
|
114
|
+
headers: buildHeaders(),
|
|
115
|
+
signal
|
|
116
|
+
});
|
|
117
|
+
if (!response.ok) {
|
|
118
|
+
let errorBody;
|
|
119
|
+
try {
|
|
120
|
+
errorBody = await response.json();
|
|
121
|
+
} catch {
|
|
122
|
+
errorBody = void 0;
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
ok: false,
|
|
126
|
+
error: createHttpError(response.status, response.statusText, errorBody)
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const blob = await response.blob();
|
|
130
|
+
return { ok: true, data: blob };
|
|
131
|
+
} catch (error) {
|
|
132
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
133
|
+
return { ok: false, error: createAbortError() };
|
|
134
|
+
}
|
|
135
|
+
return { ok: false, error: createNetworkError(error) };
|
|
136
|
+
} finally {
|
|
137
|
+
cleanup();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
get: (path, schema, options) => request("GET", path, schema, void 0, options),
|
|
142
|
+
post: (path, body, schema, options) => request("POST", path, schema, body, options),
|
|
143
|
+
delete: (path, schema, options) => request("DELETE", path, schema, void 0, options),
|
|
144
|
+
getBlob: (path, options) => requestBlob(path, options)
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
var registryExpertStatusSchema = z.enum(["available", "deprecated", "disabled"]);
|
|
148
|
+
var ownerSchema = z.object({
|
|
149
|
+
name: z.string().optional(),
|
|
150
|
+
organizationId: z.string(),
|
|
151
|
+
createdAt: z.string().transform((s) => new Date(s))
|
|
152
|
+
});
|
|
153
|
+
var registryExpertSchema = z.object({
|
|
154
|
+
type: z.literal("registryExpert"),
|
|
155
|
+
id: z.string(),
|
|
156
|
+
key: z.string(),
|
|
157
|
+
name: z.string(),
|
|
158
|
+
minRuntimeVersion: z.literal("v1.0"),
|
|
159
|
+
description: z.string(),
|
|
160
|
+
owner: ownerSchema,
|
|
161
|
+
createdAt: z.string().transform((s) => new Date(s)),
|
|
162
|
+
updatedAt: z.string().transform((s) => new Date(s)),
|
|
163
|
+
version: z.string(),
|
|
164
|
+
status: registryExpertStatusSchema,
|
|
165
|
+
instruction: z.string(),
|
|
166
|
+
skills: z.record(z.string(), z.unknown()).transform((s) => s),
|
|
167
|
+
delegates: z.array(z.string()),
|
|
168
|
+
tags: z.array(z.string())
|
|
169
|
+
});
|
|
170
|
+
var expertDigestSchema = z.object({
|
|
171
|
+
type: z.literal("expertDigest"),
|
|
172
|
+
id: z.string(),
|
|
173
|
+
key: z.string(),
|
|
174
|
+
name: z.string(),
|
|
175
|
+
minRuntimeVersion: z.literal("v1.0"),
|
|
176
|
+
description: z.string(),
|
|
177
|
+
owner: ownerSchema,
|
|
178
|
+
createdAt: z.string().transform((s) => new Date(s)),
|
|
179
|
+
updatedAt: z.string().transform((s) => new Date(s)),
|
|
180
|
+
version: z.string().optional(),
|
|
181
|
+
tags: z.array(z.string())
|
|
182
|
+
});
|
|
183
|
+
var getExpertResponseSchema = z.object({
|
|
184
|
+
data: z.object({
|
|
185
|
+
expert: registryExpertSchema
|
|
186
|
+
})
|
|
187
|
+
});
|
|
188
|
+
var listExpertsResponseSchema = z.object({
|
|
189
|
+
data: z.object({
|
|
190
|
+
experts: z.array(registryExpertSchema)
|
|
191
|
+
}),
|
|
192
|
+
meta: z.object({
|
|
193
|
+
total: z.number(),
|
|
194
|
+
take: z.number(),
|
|
195
|
+
skip: z.number()
|
|
196
|
+
})
|
|
197
|
+
});
|
|
198
|
+
var createExpertResponseSchema = z.object({
|
|
199
|
+
data: z.object({
|
|
200
|
+
expert: registryExpertSchema
|
|
201
|
+
})
|
|
202
|
+
});
|
|
203
|
+
var updateExpertResponseSchema = z.object({
|
|
204
|
+
data: z.object({
|
|
205
|
+
expert: registryExpertSchema
|
|
206
|
+
})
|
|
207
|
+
});
|
|
208
|
+
var deleteExpertResponseSchema = z.object({});
|
|
209
|
+
var getExpertVersionsResponseSchema = z.object({
|
|
210
|
+
data: z.object({
|
|
211
|
+
versions: z.array(expertDigestSchema),
|
|
212
|
+
latest: z.string()
|
|
213
|
+
}),
|
|
214
|
+
meta: z.object({
|
|
215
|
+
total: z.number()
|
|
216
|
+
})
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
// src/registry/experts.ts
|
|
220
|
+
function createRegistryExpertsApi(fetcher) {
|
|
221
|
+
return {
|
|
222
|
+
async get(key, options) {
|
|
223
|
+
const result = await fetcher.get(
|
|
224
|
+
`/api/registry/v1/experts/${encodeURIComponent(key)}`,
|
|
225
|
+
getExpertResponseSchema,
|
|
226
|
+
options
|
|
227
|
+
);
|
|
228
|
+
if (!result.ok) return result;
|
|
229
|
+
return { ok: true, data: result.data.data.expert };
|
|
230
|
+
},
|
|
231
|
+
async list(params, options) {
|
|
232
|
+
const searchParams = new URLSearchParams();
|
|
233
|
+
if (params?.organizationId) searchParams.set("organizationId", params.organizationId);
|
|
234
|
+
if (params?.filter) searchParams.set("filter", params.filter);
|
|
235
|
+
if (params?.sort) searchParams.set("sort", params.sort);
|
|
236
|
+
if (params?.order) searchParams.set("order", params.order);
|
|
237
|
+
if (params?.take !== void 0) searchParams.set("take", params.take.toString());
|
|
238
|
+
if (params?.skip !== void 0) searchParams.set("skip", params.skip.toString());
|
|
239
|
+
const query = searchParams.toString();
|
|
240
|
+
const path = `/api/registry/v1/experts/${query ? `?${query}` : ""}`;
|
|
241
|
+
const result = await fetcher.get(path, listExpertsResponseSchema, options);
|
|
242
|
+
if (!result.ok) return result;
|
|
243
|
+
return {
|
|
244
|
+
ok: true,
|
|
245
|
+
data: {
|
|
246
|
+
data: result.data.data.experts,
|
|
247
|
+
meta: result.data.meta
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
},
|
|
251
|
+
async create(input, options) {
|
|
252
|
+
const result = await fetcher.post(
|
|
253
|
+
"/api/registry/v1/experts/",
|
|
254
|
+
input,
|
|
255
|
+
createExpertResponseSchema,
|
|
256
|
+
options
|
|
257
|
+
);
|
|
258
|
+
if (!result.ok) return result;
|
|
259
|
+
return { ok: true, data: result.data.data.expert };
|
|
260
|
+
},
|
|
261
|
+
async update(key, input, options) {
|
|
262
|
+
const result = await fetcher.post(
|
|
263
|
+
`/api/registry/v1/experts/${encodeURIComponent(key)}`,
|
|
264
|
+
input,
|
|
265
|
+
updateExpertResponseSchema,
|
|
266
|
+
options
|
|
267
|
+
);
|
|
268
|
+
if (!result.ok) return result;
|
|
269
|
+
return { ok: true, data: result.data.data.expert };
|
|
270
|
+
},
|
|
271
|
+
async delete(key, options) {
|
|
272
|
+
const result = await fetcher.delete(
|
|
273
|
+
`/api/registry/v1/experts/${encodeURIComponent(key)}`,
|
|
274
|
+
deleteExpertResponseSchema,
|
|
275
|
+
options
|
|
276
|
+
);
|
|
277
|
+
if (!result.ok) return result;
|
|
278
|
+
return { ok: true, data: void 0 };
|
|
279
|
+
},
|
|
280
|
+
async getVersions(key, options) {
|
|
281
|
+
const result = await fetcher.get(
|
|
282
|
+
`/api/registry/v1/experts/${encodeURIComponent(key)}/versions`,
|
|
283
|
+
getExpertVersionsResponseSchema,
|
|
284
|
+
options
|
|
285
|
+
);
|
|
286
|
+
if (!result.ok) return result;
|
|
287
|
+
return {
|
|
288
|
+
ok: true,
|
|
289
|
+
data: {
|
|
290
|
+
versions: result.data.data.versions,
|
|
291
|
+
latest: result.data.data.latest,
|
|
292
|
+
total: result.data.meta.total
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// src/utils.ts
|
|
300
|
+
async function blobToBase64(blob) {
|
|
301
|
+
const buffer = await blob.arrayBuffer();
|
|
302
|
+
const bytes = new Uint8Array(buffer);
|
|
303
|
+
let binary = "";
|
|
304
|
+
for (let i = 0; i < bytes.byteLength; i++) {
|
|
305
|
+
binary += String.fromCharCode(bytes[i]);
|
|
306
|
+
}
|
|
307
|
+
return btoa(binary);
|
|
308
|
+
}
|
|
309
|
+
var applicationSchema = z.object({
|
|
310
|
+
id: z.string(),
|
|
311
|
+
name: z.string()
|
|
312
|
+
});
|
|
313
|
+
var ownerSchema2 = z.object({
|
|
314
|
+
name: z.string().optional(),
|
|
315
|
+
organizationId: z.string(),
|
|
316
|
+
createdAt: z.string().transform((s) => new Date(s))
|
|
317
|
+
});
|
|
318
|
+
var studioExpertSchema = z.object({
|
|
319
|
+
type: z.literal("studioExpert"),
|
|
320
|
+
id: z.string(),
|
|
321
|
+
key: z.string(),
|
|
322
|
+
name: z.string(),
|
|
323
|
+
minRuntimeVersion: z.literal("v1.0"),
|
|
324
|
+
description: z.string(),
|
|
325
|
+
owner: ownerSchema2,
|
|
326
|
+
createdAt: z.string().transform((s) => new Date(s)),
|
|
327
|
+
updatedAt: z.string().transform((s) => new Date(s)),
|
|
328
|
+
instruction: z.string(),
|
|
329
|
+
skills: z.record(z.string(), z.unknown()).transform((s) => s),
|
|
330
|
+
delegates: z.array(z.string()),
|
|
331
|
+
forkFrom: z.string().optional(),
|
|
332
|
+
application: applicationSchema
|
|
333
|
+
});
|
|
334
|
+
var expertDigestSchema2 = z.object({
|
|
335
|
+
type: z.literal("expertDigest"),
|
|
336
|
+
id: z.string(),
|
|
337
|
+
key: z.string(),
|
|
338
|
+
name: z.string(),
|
|
339
|
+
minRuntimeVersion: z.literal("v1.0"),
|
|
340
|
+
description: z.string(),
|
|
341
|
+
owner: ownerSchema2,
|
|
342
|
+
createdAt: z.string().transform((s) => new Date(s)),
|
|
343
|
+
updatedAt: z.string().transform((s) => new Date(s)),
|
|
344
|
+
version: z.string().optional(),
|
|
345
|
+
tags: z.array(z.string())
|
|
346
|
+
});
|
|
347
|
+
var getStudioExpertResponseSchema = z.object({
|
|
348
|
+
data: z.object({
|
|
349
|
+
expert: studioExpertSchema
|
|
350
|
+
})
|
|
351
|
+
});
|
|
352
|
+
var listStudioExpertsResponseSchema = z.object({
|
|
353
|
+
data: z.object({
|
|
354
|
+
experts: z.array(expertDigestSchema2)
|
|
355
|
+
}),
|
|
356
|
+
meta: z.object({
|
|
357
|
+
total: z.number(),
|
|
358
|
+
take: z.number(),
|
|
359
|
+
skip: z.number()
|
|
360
|
+
})
|
|
361
|
+
});
|
|
362
|
+
var createStudioExpertResponseSchema = z.object({
|
|
363
|
+
data: z.object({
|
|
364
|
+
expert: studioExpertSchema
|
|
365
|
+
})
|
|
366
|
+
});
|
|
367
|
+
var updateStudioExpertResponseSchema = z.object({
|
|
368
|
+
data: z.object({
|
|
369
|
+
expert: studioExpertSchema
|
|
370
|
+
})
|
|
371
|
+
});
|
|
372
|
+
var deleteStudioExpertResponseSchema = z.object({});
|
|
373
|
+
var expertJobStatusSchema = z.enum([
|
|
374
|
+
"queued",
|
|
375
|
+
"processing",
|
|
376
|
+
"completed",
|
|
377
|
+
"requestInteractiveToolResult",
|
|
378
|
+
"requestDelegateResult",
|
|
379
|
+
"exceededMaxSteps",
|
|
380
|
+
"failed",
|
|
381
|
+
"canceling",
|
|
382
|
+
"canceled",
|
|
383
|
+
"expired"
|
|
384
|
+
]);
|
|
385
|
+
var expertJobSchema = z.object({
|
|
386
|
+
id: z.string(),
|
|
387
|
+
expertKey: z.string(),
|
|
388
|
+
status: expertJobStatusSchema,
|
|
389
|
+
query: z.string().optional(),
|
|
390
|
+
createdAt: z.string().transform((s) => new Date(s)),
|
|
391
|
+
updatedAt: z.string().transform((s) => new Date(s)),
|
|
392
|
+
startedAt: z.string().transform((s) => new Date(s)).optional(),
|
|
393
|
+
completedAt: z.string().transform((s) => new Date(s)).optional()
|
|
394
|
+
});
|
|
395
|
+
var getExpertJobResponseSchema = z.object({
|
|
396
|
+
data: z.object({
|
|
397
|
+
expertJob: expertJobSchema
|
|
398
|
+
})
|
|
399
|
+
});
|
|
400
|
+
var listExpertJobsResponseSchema = z.object({
|
|
401
|
+
data: z.object({
|
|
402
|
+
expertJobs: z.array(expertJobSchema)
|
|
403
|
+
}),
|
|
404
|
+
meta: z.object({
|
|
405
|
+
total: z.number(),
|
|
406
|
+
take: z.number(),
|
|
407
|
+
skip: z.number()
|
|
408
|
+
})
|
|
409
|
+
});
|
|
410
|
+
var startExpertJobResponseSchema = z.object({
|
|
411
|
+
data: z.object({
|
|
412
|
+
expertJob: expertJobSchema
|
|
413
|
+
})
|
|
414
|
+
});
|
|
415
|
+
var continueExpertJobResponseSchema = z.object({
|
|
416
|
+
data: z.object({
|
|
417
|
+
expertJob: expertJobSchema
|
|
418
|
+
})
|
|
419
|
+
});
|
|
420
|
+
var updateExpertJobResponseSchema = z.object({
|
|
421
|
+
data: z.object({
|
|
422
|
+
expertJob: expertJobSchema
|
|
423
|
+
})
|
|
424
|
+
});
|
|
425
|
+
var checkpointSchema = z.object({
|
|
426
|
+
id: z.string(),
|
|
427
|
+
expertJobId: z.string(),
|
|
428
|
+
sequence: z.number(),
|
|
429
|
+
createdAt: z.string().transform((s) => new Date(s))
|
|
430
|
+
});
|
|
431
|
+
var getCheckpointResponseSchema = z.object({
|
|
432
|
+
data: z.object({
|
|
433
|
+
checkpoint: checkpointSchema
|
|
434
|
+
})
|
|
435
|
+
});
|
|
436
|
+
var listCheckpointsResponseSchema = z.object({
|
|
437
|
+
data: z.object({
|
|
438
|
+
checkpoints: z.array(checkpointSchema)
|
|
439
|
+
}),
|
|
440
|
+
meta: z.object({
|
|
441
|
+
total: z.number(),
|
|
442
|
+
take: z.number(),
|
|
443
|
+
skip: z.number()
|
|
444
|
+
})
|
|
445
|
+
});
|
|
446
|
+
var createCheckpointResponseSchema = z.object({
|
|
447
|
+
data: z.object({
|
|
448
|
+
checkpoint: checkpointSchema
|
|
449
|
+
})
|
|
450
|
+
});
|
|
451
|
+
var workspaceInstanceSchema = z.object({
|
|
452
|
+
id: z.string(),
|
|
453
|
+
expertJobId: z.string(),
|
|
454
|
+
createdAt: z.string().transform((s) => new Date(s))
|
|
455
|
+
});
|
|
456
|
+
var getWorkspaceInstanceResponseSchema = z.object({
|
|
457
|
+
data: z.object({
|
|
458
|
+
workspaceInstance: workspaceInstanceSchema
|
|
459
|
+
})
|
|
460
|
+
});
|
|
461
|
+
var workspaceItemSchema = z.object({
|
|
462
|
+
id: z.string(),
|
|
463
|
+
path: z.string(),
|
|
464
|
+
type: z.enum(["file", "directory"]),
|
|
465
|
+
size: z.number().optional(),
|
|
466
|
+
createdAt: z.string().transform((s) => new Date(s)),
|
|
467
|
+
updatedAt: z.string().transform((s) => new Date(s))
|
|
468
|
+
});
|
|
469
|
+
var getWorkspaceItemResponseSchema = z.object({
|
|
470
|
+
data: z.object({
|
|
471
|
+
item: workspaceItemSchema
|
|
472
|
+
})
|
|
473
|
+
});
|
|
474
|
+
var listWorkspaceItemsResponseSchema = z.object({
|
|
475
|
+
data: z.object({
|
|
476
|
+
workspaceItems: z.array(workspaceItemSchema)
|
|
477
|
+
}),
|
|
478
|
+
meta: z.object({
|
|
479
|
+
total: z.number(),
|
|
480
|
+
take: z.number(),
|
|
481
|
+
skip: z.number()
|
|
482
|
+
})
|
|
483
|
+
});
|
|
484
|
+
var createWorkspaceItemResponseSchema = z.object({
|
|
485
|
+
data: z.object({
|
|
486
|
+
item: workspaceItemSchema
|
|
487
|
+
})
|
|
488
|
+
});
|
|
489
|
+
var updateWorkspaceItemResponseSchema = z.object({
|
|
490
|
+
data: z.object({
|
|
491
|
+
item: workspaceItemSchema
|
|
492
|
+
})
|
|
493
|
+
});
|
|
494
|
+
var deleteWorkspaceItemResponseSchema = z.object({});
|
|
495
|
+
var findWorkspaceItemsResponseSchema = z.object({
|
|
496
|
+
data: z.object({
|
|
497
|
+
workspaceItems: z.array(workspaceItemSchema)
|
|
498
|
+
})
|
|
499
|
+
});
|
|
500
|
+
var workspaceSchema = z.object({
|
|
501
|
+
id: z.string(),
|
|
502
|
+
applicationId: z.string(),
|
|
503
|
+
createdAt: z.string().transform((s) => new Date(s)),
|
|
504
|
+
updatedAt: z.string().transform((s) => new Date(s))
|
|
505
|
+
});
|
|
506
|
+
var getWorkspaceResponseSchema = z.object({
|
|
507
|
+
data: z.object({
|
|
508
|
+
workspace: workspaceSchema
|
|
509
|
+
})
|
|
510
|
+
});
|
|
511
|
+
var workspaceVariableSchema = z.object({
|
|
512
|
+
name: z.string(),
|
|
513
|
+
value: z.string()
|
|
514
|
+
});
|
|
515
|
+
var workspaceSecretSchema = z.object({
|
|
516
|
+
name: z.string()
|
|
517
|
+
});
|
|
518
|
+
var createWorkspaceVariableResponseSchema = z.object({
|
|
519
|
+
data: z.object({
|
|
520
|
+
variable: workspaceVariableSchema
|
|
521
|
+
})
|
|
522
|
+
});
|
|
523
|
+
var updateWorkspaceVariableResponseSchema = z.object({
|
|
524
|
+
data: z.object({
|
|
525
|
+
variable: workspaceVariableSchema
|
|
526
|
+
})
|
|
527
|
+
});
|
|
528
|
+
var deleteWorkspaceVariableResponseSchema = z.object({});
|
|
529
|
+
var createWorkspaceSecretResponseSchema = z.object({
|
|
530
|
+
data: z.object({
|
|
531
|
+
secret: workspaceSecretSchema
|
|
532
|
+
})
|
|
533
|
+
});
|
|
534
|
+
var deleteWorkspaceSecretResponseSchema = z.object({});
|
|
535
|
+
|
|
536
|
+
// src/studio/expert-jobs.ts
|
|
537
|
+
function createStudioExpertJobsApi(fetcher) {
|
|
538
|
+
return {
|
|
539
|
+
async get(id, options) {
|
|
540
|
+
const result = await fetcher.get(
|
|
541
|
+
`/api/studio/v1/expert_jobs/${encodeURIComponent(id)}`,
|
|
542
|
+
getExpertJobResponseSchema,
|
|
543
|
+
options
|
|
544
|
+
);
|
|
545
|
+
if (!result.ok) return result;
|
|
546
|
+
return { ok: true, data: result.data.data.expertJob };
|
|
547
|
+
},
|
|
548
|
+
async list(params, options) {
|
|
549
|
+
const searchParams = new URLSearchParams();
|
|
550
|
+
searchParams.set("applicationId", params.applicationId);
|
|
551
|
+
if (params.filter) searchParams.set("filter", params.filter);
|
|
552
|
+
if (params.sort) searchParams.set("sort", params.sort);
|
|
553
|
+
if (params.order) searchParams.set("order", params.order);
|
|
554
|
+
if (params.take !== void 0) searchParams.set("take", params.take.toString());
|
|
555
|
+
if (params.skip !== void 0) searchParams.set("skip", params.skip.toString());
|
|
556
|
+
const path = `/api/studio/v1/expert_jobs/?${searchParams.toString()}`;
|
|
557
|
+
const result = await fetcher.get(path, listExpertJobsResponseSchema, options);
|
|
558
|
+
if (!result.ok) return result;
|
|
559
|
+
return {
|
|
560
|
+
ok: true,
|
|
561
|
+
data: {
|
|
562
|
+
data: result.data.data.expertJobs,
|
|
563
|
+
meta: result.data.meta
|
|
564
|
+
}
|
|
565
|
+
};
|
|
566
|
+
},
|
|
567
|
+
async start(input, options) {
|
|
568
|
+
const result = await fetcher.post(
|
|
569
|
+
"/api/studio/v1/expert_jobs/",
|
|
570
|
+
input,
|
|
571
|
+
startExpertJobResponseSchema,
|
|
572
|
+
options
|
|
573
|
+
);
|
|
574
|
+
if (!result.ok) return result;
|
|
575
|
+
return { ok: true, data: result.data.data.expertJob };
|
|
576
|
+
},
|
|
577
|
+
async continue(id, input, options) {
|
|
578
|
+
const result = await fetcher.post(
|
|
579
|
+
`/api/studio/v1/expert_jobs/${encodeURIComponent(id)}/continue`,
|
|
580
|
+
input,
|
|
581
|
+
continueExpertJobResponseSchema,
|
|
582
|
+
options
|
|
583
|
+
);
|
|
584
|
+
if (!result.ok) return result;
|
|
585
|
+
return { ok: true, data: result.data.data.expertJob };
|
|
586
|
+
},
|
|
587
|
+
async update(id, input, options) {
|
|
588
|
+
const result = await fetcher.post(
|
|
589
|
+
`/api/studio/v1/expert_jobs/${encodeURIComponent(id)}`,
|
|
590
|
+
input,
|
|
591
|
+
updateExpertJobResponseSchema,
|
|
592
|
+
options
|
|
593
|
+
);
|
|
594
|
+
if (!result.ok) return result;
|
|
595
|
+
return { ok: true, data: result.data.data.expertJob };
|
|
596
|
+
},
|
|
597
|
+
checkpoints: createCheckpointsApi(fetcher),
|
|
598
|
+
workspaceInstance: createWorkspaceInstanceApi(fetcher)
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
function createCheckpointsApi(fetcher) {
|
|
602
|
+
return {
|
|
603
|
+
async get(jobId, checkpointId, options) {
|
|
604
|
+
const result = await fetcher.get(
|
|
605
|
+
`/api/studio/v1/expert_jobs/${encodeURIComponent(jobId)}/checkpoints/${encodeURIComponent(checkpointId)}`,
|
|
606
|
+
getCheckpointResponseSchema,
|
|
607
|
+
options
|
|
608
|
+
);
|
|
609
|
+
if (!result.ok) return result;
|
|
610
|
+
return { ok: true, data: result.data.data.checkpoint };
|
|
611
|
+
},
|
|
612
|
+
async list(jobId, params, options) {
|
|
613
|
+
const searchParams = new URLSearchParams();
|
|
614
|
+
if (params?.take !== void 0) searchParams.set("take", params.take.toString());
|
|
615
|
+
if (params?.skip !== void 0) searchParams.set("skip", params.skip.toString());
|
|
616
|
+
if (params?.sort) searchParams.set("sort", params.sort);
|
|
617
|
+
if (params?.order) searchParams.set("order", params.order);
|
|
618
|
+
const query = searchParams.toString();
|
|
619
|
+
const path = `/api/studio/v1/expert_jobs/${encodeURIComponent(jobId)}/checkpoints/${query ? `?${query}` : ""}`;
|
|
620
|
+
const result = await fetcher.get(path, listCheckpointsResponseSchema, options);
|
|
621
|
+
if (!result.ok) return result;
|
|
622
|
+
return {
|
|
623
|
+
ok: true,
|
|
624
|
+
data: {
|
|
625
|
+
data: result.data.data.checkpoints,
|
|
626
|
+
meta: result.data.meta
|
|
627
|
+
}
|
|
628
|
+
};
|
|
629
|
+
},
|
|
630
|
+
async create(jobId, options) {
|
|
631
|
+
const result = await fetcher.post(
|
|
632
|
+
`/api/studio/v1/expert_jobs/${encodeURIComponent(jobId)}/checkpoints/`,
|
|
633
|
+
{},
|
|
634
|
+
createCheckpointResponseSchema,
|
|
635
|
+
options
|
|
636
|
+
);
|
|
637
|
+
if (!result.ok) return result;
|
|
638
|
+
return { ok: true, data: result.data.data.checkpoint };
|
|
639
|
+
}
|
|
640
|
+
};
|
|
641
|
+
}
|
|
642
|
+
function createWorkspaceInstanceApi(fetcher) {
|
|
643
|
+
return {
|
|
644
|
+
async get(jobId, options) {
|
|
645
|
+
const result = await fetcher.get(
|
|
646
|
+
`/api/studio/v1/expert_jobs/${encodeURIComponent(jobId)}/workspace_instance/`,
|
|
647
|
+
getWorkspaceInstanceResponseSchema,
|
|
648
|
+
options
|
|
649
|
+
);
|
|
650
|
+
if (!result.ok) return result;
|
|
651
|
+
return { ok: true, data: result.data.data.workspaceInstance };
|
|
652
|
+
},
|
|
653
|
+
items: createWorkspaceInstanceItemsApi(fetcher)
|
|
654
|
+
};
|
|
655
|
+
}
|
|
656
|
+
function createWorkspaceInstanceItemsApi(fetcher) {
|
|
657
|
+
return {
|
|
658
|
+
async get(jobId, itemId, options) {
|
|
659
|
+
const result = await fetcher.get(
|
|
660
|
+
`/api/studio/v1/expert_jobs/${encodeURIComponent(jobId)}/workspace_instance/items/${encodeURIComponent(itemId)}`,
|
|
661
|
+
getWorkspaceItemResponseSchema,
|
|
662
|
+
options
|
|
663
|
+
);
|
|
664
|
+
if (!result.ok) return result;
|
|
665
|
+
return { ok: true, data: result.data.data.item };
|
|
666
|
+
},
|
|
667
|
+
async list(jobId, params, options) {
|
|
668
|
+
const searchParams = new URLSearchParams();
|
|
669
|
+
if (params?.take !== void 0) searchParams.set("take", params.take.toString());
|
|
670
|
+
if (params?.skip !== void 0) searchParams.set("skip", params.skip.toString());
|
|
671
|
+
if (params?.path) searchParams.set("path", params.path);
|
|
672
|
+
const query = searchParams.toString();
|
|
673
|
+
const path = `/api/studio/v1/expert_jobs/${encodeURIComponent(jobId)}/workspace_instance/items/${query ? `?${query}` : ""}`;
|
|
674
|
+
const result = await fetcher.get(path, listWorkspaceItemsResponseSchema, options);
|
|
675
|
+
if (!result.ok) return result;
|
|
676
|
+
return {
|
|
677
|
+
ok: true,
|
|
678
|
+
data: {
|
|
679
|
+
data: result.data.data.workspaceItems,
|
|
680
|
+
meta: result.data.meta
|
|
681
|
+
}
|
|
682
|
+
};
|
|
683
|
+
},
|
|
684
|
+
async create(jobId, itemPath, content, options) {
|
|
685
|
+
const result = await fetcher.post(
|
|
686
|
+
`/api/studio/v1/expert_jobs/${encodeURIComponent(jobId)}/workspace_instance/items/`,
|
|
687
|
+
{ path: itemPath, content: await blobToBase64(content) },
|
|
688
|
+
createWorkspaceItemResponseSchema,
|
|
689
|
+
options
|
|
690
|
+
);
|
|
691
|
+
if (!result.ok) return result;
|
|
692
|
+
return { ok: true, data: result.data.data.item };
|
|
693
|
+
},
|
|
694
|
+
async update(jobId, itemId, content, options) {
|
|
695
|
+
const result = await fetcher.post(
|
|
696
|
+
`/api/studio/v1/expert_jobs/${encodeURIComponent(jobId)}/workspace_instance/items/${encodeURIComponent(itemId)}`,
|
|
697
|
+
{ content: await blobToBase64(content) },
|
|
698
|
+
updateWorkspaceItemResponseSchema,
|
|
699
|
+
options
|
|
700
|
+
);
|
|
701
|
+
if (!result.ok) return result;
|
|
702
|
+
return { ok: true, data: result.data.data.item };
|
|
703
|
+
},
|
|
704
|
+
async delete(jobId, itemId, options) {
|
|
705
|
+
const result = await fetcher.delete(
|
|
706
|
+
`/api/studio/v1/expert_jobs/${encodeURIComponent(jobId)}/workspace_instance/items/${encodeURIComponent(itemId)}`,
|
|
707
|
+
deleteWorkspaceItemResponseSchema,
|
|
708
|
+
options
|
|
709
|
+
);
|
|
710
|
+
if (!result.ok) return result;
|
|
711
|
+
return { ok: true, data: void 0 };
|
|
712
|
+
},
|
|
713
|
+
async download(jobId, itemId, options) {
|
|
714
|
+
return fetcher.getBlob(
|
|
715
|
+
`/api/studio/v1/expert_jobs/${encodeURIComponent(jobId)}/workspace_instance/items/${encodeURIComponent(itemId)}/download`,
|
|
716
|
+
options
|
|
717
|
+
);
|
|
718
|
+
},
|
|
719
|
+
async find(jobId, pathPattern, options) {
|
|
720
|
+
const searchParams = new URLSearchParams();
|
|
721
|
+
searchParams.set("path", pathPattern);
|
|
722
|
+
const path = `/api/studio/v1/expert_jobs/${encodeURIComponent(jobId)}/workspace_instance/items/find?${searchParams.toString()}`;
|
|
723
|
+
const result = await fetcher.get(path, findWorkspaceItemsResponseSchema, options);
|
|
724
|
+
if (!result.ok) return result;
|
|
725
|
+
return { ok: true, data: result.data.data.workspaceItems };
|
|
726
|
+
}
|
|
727
|
+
};
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
// src/studio/experts.ts
|
|
731
|
+
function createStudioExpertsApi(fetcher) {
|
|
732
|
+
return {
|
|
733
|
+
async get(key, options) {
|
|
734
|
+
const result = await fetcher.get(
|
|
735
|
+
`/api/studio/v1/experts/${encodeURIComponent(key)}`,
|
|
736
|
+
getStudioExpertResponseSchema,
|
|
737
|
+
options
|
|
738
|
+
);
|
|
739
|
+
if (!result.ok) return result;
|
|
740
|
+
return { ok: true, data: result.data.data.expert };
|
|
741
|
+
},
|
|
742
|
+
async list(params, options) {
|
|
743
|
+
const searchParams = new URLSearchParams();
|
|
744
|
+
searchParams.set("applicationId", params.applicationId);
|
|
745
|
+
if (params.filter) searchParams.set("filter", params.filter);
|
|
746
|
+
if (params.sort) searchParams.set("sort", params.sort);
|
|
747
|
+
if (params.order) searchParams.set("order", params.order);
|
|
748
|
+
if (params.take !== void 0) searchParams.set("take", params.take.toString());
|
|
749
|
+
if (params.skip !== void 0) searchParams.set("skip", params.skip.toString());
|
|
750
|
+
const path = `/api/studio/v1/experts/?${searchParams.toString()}`;
|
|
751
|
+
const result = await fetcher.get(path, listStudioExpertsResponseSchema, options);
|
|
752
|
+
if (!result.ok) return result;
|
|
753
|
+
return {
|
|
754
|
+
ok: true,
|
|
755
|
+
data: {
|
|
756
|
+
data: result.data.data.experts,
|
|
757
|
+
meta: result.data.meta
|
|
758
|
+
}
|
|
759
|
+
};
|
|
760
|
+
},
|
|
761
|
+
async create(input, options) {
|
|
762
|
+
const result = await fetcher.post(
|
|
763
|
+
"/api/studio/v1/experts/",
|
|
764
|
+
input,
|
|
765
|
+
createStudioExpertResponseSchema,
|
|
766
|
+
options
|
|
767
|
+
);
|
|
768
|
+
if (!result.ok) return result;
|
|
769
|
+
return { ok: true, data: result.data.data.expert };
|
|
770
|
+
},
|
|
771
|
+
async update(key, input, options) {
|
|
772
|
+
const result = await fetcher.post(
|
|
773
|
+
`/api/studio/v1/experts/${encodeURIComponent(key)}`,
|
|
774
|
+
input,
|
|
775
|
+
updateStudioExpertResponseSchema,
|
|
776
|
+
options
|
|
777
|
+
);
|
|
778
|
+
if (!result.ok) return result;
|
|
779
|
+
return { ok: true, data: result.data.data.expert };
|
|
780
|
+
},
|
|
781
|
+
async delete(key, options) {
|
|
782
|
+
const result = await fetcher.delete(
|
|
783
|
+
`/api/studio/v1/experts/${encodeURIComponent(key)}`,
|
|
784
|
+
deleteStudioExpertResponseSchema,
|
|
785
|
+
options
|
|
786
|
+
);
|
|
787
|
+
if (!result.ok) return result;
|
|
788
|
+
return { ok: true, data: void 0 };
|
|
789
|
+
}
|
|
790
|
+
};
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
// src/studio/workspace.ts
|
|
794
|
+
function createStudioWorkspaceApi(fetcher) {
|
|
795
|
+
return {
|
|
796
|
+
async get(options) {
|
|
797
|
+
const result = await fetcher.get(
|
|
798
|
+
"/api/studio/v1/workspace/",
|
|
799
|
+
getWorkspaceResponseSchema,
|
|
800
|
+
options
|
|
801
|
+
);
|
|
802
|
+
if (!result.ok) return result;
|
|
803
|
+
return { ok: true, data: result.data.data.workspace };
|
|
804
|
+
},
|
|
805
|
+
items: createWorkspaceItemsApi(fetcher),
|
|
806
|
+
variables: createWorkspaceVariablesApi(fetcher),
|
|
807
|
+
secrets: createWorkspaceSecretsApi(fetcher)
|
|
808
|
+
};
|
|
809
|
+
}
|
|
810
|
+
function createWorkspaceItemsApi(fetcher) {
|
|
811
|
+
return {
|
|
812
|
+
async get(itemId, options) {
|
|
813
|
+
const result = await fetcher.get(
|
|
814
|
+
`/api/studio/v1/workspace/items/${encodeURIComponent(itemId)}`,
|
|
815
|
+
getWorkspaceItemResponseSchema,
|
|
816
|
+
options
|
|
817
|
+
);
|
|
818
|
+
if (!result.ok) return result;
|
|
819
|
+
return { ok: true, data: result.data.data.item };
|
|
820
|
+
},
|
|
821
|
+
async list(params, options) {
|
|
822
|
+
const searchParams = new URLSearchParams();
|
|
823
|
+
if (params?.take !== void 0) searchParams.set("take", params.take.toString());
|
|
824
|
+
if (params?.skip !== void 0) searchParams.set("skip", params.skip.toString());
|
|
825
|
+
if (params?.path) searchParams.set("path", params.path);
|
|
826
|
+
const query = searchParams.toString();
|
|
827
|
+
const path = `/api/studio/v1/workspace/items/${query ? `?${query}` : ""}`;
|
|
828
|
+
const result = await fetcher.get(path, listWorkspaceItemsResponseSchema, options);
|
|
829
|
+
if (!result.ok) return result;
|
|
830
|
+
return {
|
|
831
|
+
ok: true,
|
|
832
|
+
data: {
|
|
833
|
+
data: result.data.data.workspaceItems,
|
|
834
|
+
meta: result.data.meta
|
|
835
|
+
}
|
|
836
|
+
};
|
|
837
|
+
},
|
|
838
|
+
async create(itemPath, content, options) {
|
|
839
|
+
const result = await fetcher.post(
|
|
840
|
+
"/api/studio/v1/workspace/items/",
|
|
841
|
+
{ path: itemPath, content: await blobToBase64(content) },
|
|
842
|
+
createWorkspaceItemResponseSchema,
|
|
843
|
+
options
|
|
844
|
+
);
|
|
845
|
+
if (!result.ok) return result;
|
|
846
|
+
return { ok: true, data: result.data.data.item };
|
|
847
|
+
},
|
|
848
|
+
async update(itemId, content, options) {
|
|
849
|
+
const result = await fetcher.post(
|
|
850
|
+
`/api/studio/v1/workspace/items/${encodeURIComponent(itemId)}`,
|
|
851
|
+
{ content: await blobToBase64(content) },
|
|
852
|
+
updateWorkspaceItemResponseSchema,
|
|
853
|
+
options
|
|
854
|
+
);
|
|
855
|
+
if (!result.ok) return result;
|
|
856
|
+
return { ok: true, data: result.data.data.item };
|
|
857
|
+
},
|
|
858
|
+
async delete(itemId, options) {
|
|
859
|
+
const result = await fetcher.delete(
|
|
860
|
+
`/api/studio/v1/workspace/items/${encodeURIComponent(itemId)}`,
|
|
861
|
+
deleteWorkspaceItemResponseSchema,
|
|
862
|
+
options
|
|
863
|
+
);
|
|
864
|
+
if (!result.ok) return result;
|
|
865
|
+
return { ok: true, data: void 0 };
|
|
866
|
+
},
|
|
867
|
+
async download(itemId, options) {
|
|
868
|
+
return fetcher.getBlob(
|
|
869
|
+
`/api/studio/v1/workspace/items/${encodeURIComponent(itemId)}/download`,
|
|
870
|
+
options
|
|
871
|
+
);
|
|
872
|
+
},
|
|
873
|
+
async find(pathPattern, options) {
|
|
874
|
+
const searchParams = new URLSearchParams();
|
|
875
|
+
searchParams.set("path", pathPattern);
|
|
876
|
+
const path = `/api/studio/v1/workspace/items/find?${searchParams.toString()}`;
|
|
877
|
+
const result = await fetcher.get(path, findWorkspaceItemsResponseSchema, options);
|
|
878
|
+
if (!result.ok) return result;
|
|
879
|
+
return { ok: true, data: result.data.data.workspaceItems };
|
|
880
|
+
}
|
|
881
|
+
};
|
|
882
|
+
}
|
|
883
|
+
function createWorkspaceVariablesApi(fetcher) {
|
|
884
|
+
return {
|
|
885
|
+
async create(input, options) {
|
|
886
|
+
const result = await fetcher.post(
|
|
887
|
+
"/api/studio/v1/workspace/variables/",
|
|
888
|
+
input,
|
|
889
|
+
createWorkspaceVariableResponseSchema,
|
|
890
|
+
options
|
|
891
|
+
);
|
|
892
|
+
if (!result.ok) return result;
|
|
893
|
+
return { ok: true, data: result.data.data.variable };
|
|
894
|
+
},
|
|
895
|
+
async update(name, input, options) {
|
|
896
|
+
const result = await fetcher.post(
|
|
897
|
+
`/api/studio/v1/workspace/variables/${encodeURIComponent(name)}`,
|
|
898
|
+
input,
|
|
899
|
+
updateWorkspaceVariableResponseSchema,
|
|
900
|
+
options
|
|
901
|
+
);
|
|
902
|
+
if (!result.ok) return result;
|
|
903
|
+
return { ok: true, data: result.data.data.variable };
|
|
904
|
+
},
|
|
905
|
+
async delete(name, options) {
|
|
906
|
+
const result = await fetcher.delete(
|
|
907
|
+
`/api/studio/v1/workspace/variables/${encodeURIComponent(name)}`,
|
|
908
|
+
deleteWorkspaceVariableResponseSchema,
|
|
909
|
+
options
|
|
910
|
+
);
|
|
911
|
+
if (!result.ok) return result;
|
|
912
|
+
return { ok: true, data: void 0 };
|
|
913
|
+
}
|
|
914
|
+
};
|
|
915
|
+
}
|
|
916
|
+
function createWorkspaceSecretsApi(fetcher) {
|
|
917
|
+
return {
|
|
918
|
+
async create(input, options) {
|
|
919
|
+
const result = await fetcher.post(
|
|
920
|
+
"/api/studio/v1/workspace/secrets/",
|
|
921
|
+
input,
|
|
922
|
+
createWorkspaceSecretResponseSchema,
|
|
923
|
+
options
|
|
924
|
+
);
|
|
925
|
+
if (!result.ok) return result;
|
|
926
|
+
return { ok: true, data: result.data.data.secret };
|
|
927
|
+
},
|
|
928
|
+
async delete(name, options) {
|
|
929
|
+
const result = await fetcher.delete(
|
|
930
|
+
`/api/studio/v1/workspace/secrets/${encodeURIComponent(name)}`,
|
|
931
|
+
deleteWorkspaceSecretResponseSchema,
|
|
932
|
+
options
|
|
933
|
+
);
|
|
934
|
+
if (!result.ok) return result;
|
|
935
|
+
return { ok: true, data: void 0 };
|
|
936
|
+
}
|
|
937
|
+
};
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
// src/client.ts
|
|
941
|
+
function createApiClient(config) {
|
|
942
|
+
const fetcher = createFetcher(config);
|
|
943
|
+
return {
|
|
944
|
+
registry: {
|
|
945
|
+
experts: createRegistryExpertsApi(fetcher)
|
|
946
|
+
},
|
|
947
|
+
studio: {
|
|
948
|
+
experts: createStudioExpertsApi(fetcher),
|
|
949
|
+
expertJobs: createStudioExpertJobsApi(fetcher),
|
|
950
|
+
workspace: createStudioWorkspaceApi(fetcher)
|
|
951
|
+
}
|
|
952
|
+
};
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
export { createApiClient, createFetcher, createRegistryExpertsApi, createStudioExpertJobsApi, createStudioExpertsApi, createStudioWorkspaceApi };
|
|
956
|
+
//# sourceMappingURL=index.js.map
|
|
957
|
+
//# sourceMappingURL=index.js.map
|