@project-ajax/sdk 0.0.60 → 0.0.62

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 (150) hide show
  1. package/dist/index.d.ts +0 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +0 -2
  4. package/package.json +4 -16
  5. package/src/index.ts +0 -1
  6. package/dist/capabilities/slashCommand.d.ts +0 -56
  7. package/dist/capabilities/slashCommand.d.ts.map +0 -1
  8. package/dist/capabilities/slashCommand.js +0 -32
  9. package/dist/cli/api/client.d.ts +0 -212
  10. package/dist/cli/api/client.d.ts.map +0 -1
  11. package/dist/cli/api/client.js +0 -330
  12. package/dist/cli/api/result.d.ts +0 -43
  13. package/dist/cli/api/result.d.ts.map +0 -1
  14. package/dist/cli/api/result.js +0 -43
  15. package/dist/cli/bin/cli.d.ts +0 -3
  16. package/dist/cli/bin/cli.d.ts.map +0 -1
  17. package/dist/cli/bin/cli.js +0 -5
  18. package/dist/cli/commands/auth.d.ts +0 -2
  19. package/dist/cli/commands/auth.d.ts.map +0 -1
  20. package/dist/cli/commands/auth.impl.d.ts +0 -5
  21. package/dist/cli/commands/auth.impl.d.ts.map +0 -1
  22. package/dist/cli/commands/auth.impl.js +0 -45
  23. package/dist/cli/commands/auth.impl.test.d.ts +0 -2
  24. package/dist/cli/commands/auth.impl.test.d.ts.map +0 -1
  25. package/dist/cli/commands/auth.js +0 -56
  26. package/dist/cli/commands/bundle.d.ts +0 -2
  27. package/dist/cli/commands/bundle.d.ts.map +0 -1
  28. package/dist/cli/commands/bundle.impl.d.ts +0 -2
  29. package/dist/cli/commands/bundle.impl.d.ts.map +0 -1
  30. package/dist/cli/commands/bundle.impl.js +0 -21
  31. package/dist/cli/commands/bundle.impl.test.d.ts +0 -2
  32. package/dist/cli/commands/bundle.impl.test.d.ts.map +0 -1
  33. package/dist/cli/commands/bundle.js +0 -23
  34. package/dist/cli/commands/capabilities.d.ts +0 -2
  35. package/dist/cli/commands/capabilities.d.ts.map +0 -1
  36. package/dist/cli/commands/capabilities.impl.d.ts +0 -3
  37. package/dist/cli/commands/capabilities.impl.d.ts.map +0 -1
  38. package/dist/cli/commands/capabilities.impl.js +0 -40
  39. package/dist/cli/commands/capabilities.js +0 -24
  40. package/dist/cli/commands/connect.d.ts +0 -2
  41. package/dist/cli/commands/connect.d.ts.map +0 -1
  42. package/dist/cli/commands/connect.impl.d.ts +0 -6
  43. package/dist/cli/commands/connect.impl.d.ts.map +0 -1
  44. package/dist/cli/commands/connect.impl.js +0 -116
  45. package/dist/cli/commands/connect.js +0 -78
  46. package/dist/cli/commands/deploy.d.ts +0 -3
  47. package/dist/cli/commands/deploy.d.ts.map +0 -1
  48. package/dist/cli/commands/deploy.impl.d.ts +0 -6
  49. package/dist/cli/commands/deploy.impl.d.ts.map +0 -1
  50. package/dist/cli/commands/deploy.impl.js +0 -60
  51. package/dist/cli/commands/deploy.impl.test.d.ts +0 -2
  52. package/dist/cli/commands/deploy.impl.test.d.ts.map +0 -1
  53. package/dist/cli/commands/deploy.js +0 -22
  54. package/dist/cli/commands/env.d.ts +0 -2
  55. package/dist/cli/commands/env.d.ts.map +0 -1
  56. package/dist/cli/commands/env.impl.d.ts +0 -11
  57. package/dist/cli/commands/env.impl.d.ts.map +0 -1
  58. package/dist/cli/commands/env.impl.js +0 -62
  59. package/dist/cli/commands/env.js +0 -39
  60. package/dist/cli/commands/exec.d.ts +0 -3
  61. package/dist/cli/commands/exec.d.ts.map +0 -1
  62. package/dist/cli/commands/exec.impl.d.ts +0 -7
  63. package/dist/cli/commands/exec.impl.d.ts.map +0 -1
  64. package/dist/cli/commands/exec.impl.js +0 -123
  65. package/dist/cli/commands/exec.js +0 -30
  66. package/dist/cli/commands/runs.d.ts +0 -2
  67. package/dist/cli/commands/runs.d.ts.map +0 -1
  68. package/dist/cli/commands/runs.impl.d.ts +0 -4
  69. package/dist/cli/commands/runs.impl.d.ts.map +0 -1
  70. package/dist/cli/commands/runs.impl.js +0 -71
  71. package/dist/cli/commands/runs.js +0 -45
  72. package/dist/cli/commands/secrets.d.ts +0 -2
  73. package/dist/cli/commands/secrets.d.ts.map +0 -1
  74. package/dist/cli/commands/secrets.impl.d.ts +0 -5
  75. package/dist/cli/commands/secrets.impl.d.ts.map +0 -1
  76. package/dist/cli/commands/secrets.impl.js +0 -99
  77. package/dist/cli/commands/secrets.js +0 -64
  78. package/dist/cli/commands/utils/testing.d.ts +0 -13
  79. package/dist/cli/commands/utils/testing.d.ts.map +0 -1
  80. package/dist/cli/commands/utils/testing.js +0 -58
  81. package/dist/cli/config.d.ts +0 -63
  82. package/dist/cli/config.d.ts.map +0 -1
  83. package/dist/cli/config.js +0 -194
  84. package/dist/cli/config.test.d.ts +0 -2
  85. package/dist/cli/config.test.d.ts.map +0 -1
  86. package/dist/cli/context.d.ts +0 -15
  87. package/dist/cli/context.d.ts.map +0 -1
  88. package/dist/cli/context.js +0 -16
  89. package/dist/cli/deploy.d.ts +0 -37
  90. package/dist/cli/deploy.d.ts.map +0 -1
  91. package/dist/cli/deploy.js +0 -100
  92. package/dist/cli/flags.d.ts +0 -21
  93. package/dist/cli/flags.d.ts.map +0 -1
  94. package/dist/cli/flags.js +0 -49
  95. package/dist/cli/handler.d.ts +0 -14
  96. package/dist/cli/handler.d.ts.map +0 -1
  97. package/dist/cli/handler.js +0 -32
  98. package/dist/cli/io.d.ts +0 -55
  99. package/dist/cli/io.d.ts.map +0 -1
  100. package/dist/cli/io.js +0 -96
  101. package/dist/cli/routes.d.ts +0 -2
  102. package/dist/cli/routes.d.ts.map +0 -1
  103. package/dist/cli/routes.js +0 -62
  104. package/dist/cli/utils/array.d.ts +0 -2
  105. package/dist/cli/utils/array.d.ts.map +0 -1
  106. package/dist/cli/utils/array.js +0 -10
  107. package/dist/cli/utils/openUrl.d.ts +0 -4
  108. package/dist/cli/utils/openUrl.d.ts.map +0 -1
  109. package/dist/cli/utils/openUrl.js +0 -43
  110. package/dist/cli/utils/string.d.ts +0 -2
  111. package/dist/cli/utils/string.d.ts.map +0 -1
  112. package/dist/cli/utils/string.js +0 -12
  113. package/src/capabilities/slashCommand.ts +0 -71
  114. package/src/cli/api/client.ts +0 -628
  115. package/src/cli/api/result.ts +0 -71
  116. package/src/cli/bin/cli.ts +0 -7
  117. package/src/cli/commands/.cursor/rules/testing-commands.mdc +0 -212
  118. package/src/cli/commands/auth.impl.test.ts +0 -228
  119. package/src/cli/commands/auth.impl.ts +0 -56
  120. package/src/cli/commands/auth.ts +0 -63
  121. package/src/cli/commands/bundle.impl.test.ts +0 -143
  122. package/src/cli/commands/bundle.impl.ts +0 -21
  123. package/src/cli/commands/bundle.ts +0 -23
  124. package/src/cli/commands/capabilities.impl.ts +0 -47
  125. package/src/cli/commands/capabilities.ts +0 -25
  126. package/src/cli/commands/connect.impl.ts +0 -149
  127. package/src/cli/commands/connect.ts +0 -80
  128. package/src/cli/commands/deploy.impl.test.ts +0 -254
  129. package/src/cli/commands/deploy.impl.ts +0 -73
  130. package/src/cli/commands/deploy.ts +0 -22
  131. package/src/cli/commands/env.impl.ts +0 -88
  132. package/src/cli/commands/env.ts +0 -38
  133. package/src/cli/commands/exec.impl.ts +0 -171
  134. package/src/cli/commands/exec.ts +0 -32
  135. package/src/cli/commands/runs.impl.ts +0 -87
  136. package/src/cli/commands/runs.ts +0 -49
  137. package/src/cli/commands/secrets.impl.ts +0 -130
  138. package/src/cli/commands/secrets.ts +0 -73
  139. package/src/cli/commands/utils/testing.ts +0 -66
  140. package/src/cli/config.test.ts +0 -108
  141. package/src/cli/config.ts +0 -265
  142. package/src/cli/context.ts +0 -26
  143. package/src/cli/deploy.ts +0 -190
  144. package/src/cli/flags.ts +0 -72
  145. package/src/cli/handler.ts +0 -68
  146. package/src/cli/io.ts +0 -132
  147. package/src/cli/routes.ts +0 -61
  148. package/src/cli/utils/array.ts +0 -7
  149. package/src/cli/utils/openUrl.ts +0 -53
  150. package/src/cli/utils/string.ts +0 -9
@@ -1,71 +0,0 @@
1
- import type { Block } from "../block.js";
2
- import { ExecutionError } from "../error.js";
3
-
4
- export type SlashCommandConfiguration = {
5
- menuTitle: string;
6
- menuDescription: string;
7
- search: {
8
- placeholder: string;
9
- debounce: number;
10
- };
11
-
12
- /**
13
- * A function that returns a list of items to display in the search results
14
- * as well as the corresponding blocks to insert for each item should it be selected.
15
- */
16
- executeSearch: (searchQuery: string) => Promise<{
17
- items: { title: string; description: string; id: string }[];
18
- }>;
19
- executeSelect: (selectedItemId: string) => Promise<Block[]>;
20
- };
21
-
22
- export type SlashCommandHandlerResult = {
23
- menuTitle: string;
24
- menuDescription: string;
25
- search: {
26
- placeholder: string;
27
- debounce: number;
28
- };
29
- };
30
-
31
- /**
32
- * Creates a special handler for handling slash commands.
33
- *
34
- * @param slashCommandConfiguration - The configuration for the slash command.
35
- * @returns A handler function that executes the slash command function, and passes data
36
- * needed to complete the operation back to the platform.
37
- */
38
- export function slashCommand(
39
- slashCommandConfiguration: SlashCommandConfiguration,
40
- ) {
41
- return {
42
- _tag: "slashCommand",
43
- config: {
44
- menuTitle: slashCommandConfiguration.menuTitle,
45
- menuDescription: slashCommandConfiguration.menuDescription,
46
- search: slashCommandConfiguration.search,
47
- },
48
- async handleSearch(searchQuery: string) {
49
- const result = await slashCommandConfiguration
50
- .executeSearch(searchQuery)
51
- .catch((err) => {
52
- throw new ExecutionError(err);
53
- });
54
-
55
- process.stdout.write(`\n<output>${JSON.stringify(result)}</output>\n`);
56
-
57
- return result;
58
- },
59
- async handleSelect(selectedItemId: string) {
60
- const result = await slashCommandConfiguration
61
- .executeSelect(selectedItemId)
62
- .catch((err) => {
63
- throw new ExecutionError(err);
64
- });
65
-
66
- process.stdout.write(`\n<output>${JSON.stringify(result)}</output>\n`);
67
-
68
- return result;
69
- },
70
- };
71
- }
@@ -1,628 +0,0 @@
1
- /**
2
- * API client for making authenticated requests to the Workers API
3
- */
4
-
5
- import type { IO } from "../io.js";
6
- import { Result } from "./result.js";
7
-
8
- export type Environment = "local" | "staging" | "dev" | "prod";
9
-
10
- interface ApiClientConfig {
11
- token: string;
12
- environment: Environment;
13
- baseUrl?: string | undefined;
14
- cellId: string;
15
- writer: IO;
16
- }
17
-
18
- type Endpoint = `/${string}`;
19
-
20
- export interface ApiError {
21
- status: number;
22
- statusText: string;
23
- message: string;
24
- validationError?: {
25
- errorId: string;
26
- name: string;
27
- debugMessage: string;
28
- message: string;
29
- };
30
- }
31
-
32
- /**
33
- * API client for making authenticated requests to Workers endpoints
34
- */
35
- export class ApiClient {
36
- readonly #token: string;
37
- readonly #baseUrl: string | undefined;
38
- readonly #cellId: string;
39
- readonly #writer: IO;
40
-
41
- constructor(config: ApiClientConfig) {
42
- this.#token = config.token;
43
- this.#baseUrl = config.baseUrl;
44
- this.#cellId = config.cellId;
45
- this.#writer = config.writer;
46
- }
47
-
48
- #baseApiUrl() {
49
- return `${this.#baseUrl}/api/v3`;
50
- }
51
-
52
- /**
53
- * Make an authenticated fetch request to the Workers API
54
- */
55
- private async fetch(
56
- endpoint: Endpoint,
57
- requestOptions: Omit<RequestInit, "body"> & { body?: unknown },
58
- options: { stream: true },
59
- ): Promise<Result<ReadableStream<Uint8Array<ArrayBufferLike>>, ApiError>>;
60
- private async fetch<TResponse>(
61
- endpoint: Endpoint,
62
- requestOptions?: Omit<RequestInit, "body"> & { body?: unknown },
63
- ): Promise<Result<TResponse, ApiError>>;
64
- private async fetch<TResponse>(
65
- endpoint: Endpoint,
66
- requestOptions: Omit<RequestInit, "body"> & { body?: unknown } = {},
67
- options?: { stream: true },
68
- ): Promise<
69
- Result<TResponse | ReadableStream<Uint8Array<ArrayBufferLike>>, ApiError>
70
- > {
71
- if (!endpoint.startsWith("/")) {
72
- throw new Error("Endpoint must start with a slash (/)");
73
- }
74
-
75
- const url = `${this.#baseApiUrl()}${endpoint}`;
76
-
77
- this.#writer.debug(`Fetching ${url}`);
78
- this.#writer.debug(
79
- `Options: ${JSON.stringify(requestOptions, null, "\t")}`,
80
- );
81
-
82
- const headers = new Headers({
83
- Authorization: `Bearer ${this.#token}`,
84
- "Content-Type": "application/json",
85
- "X-Notion-Cell": this.#cellId,
86
- });
87
-
88
- const addlHeaders = headersInitToEntries(requestOptions.headers);
89
-
90
- for (const [key, value] of addlHeaders) {
91
- headers.append(key, value);
92
- }
93
-
94
- const response = await fetch(url, {
95
- method: requestOptions.method ?? "GET",
96
- headers,
97
- body: requestOptions.body ? JSON.stringify(requestOptions.body) : null,
98
- });
99
-
100
- this.#writer.debug(`Response: ${response.status} ${response.statusText}`);
101
-
102
- if (!response.ok) {
103
- const error = await parseApiError(response);
104
- return Result.fail(error);
105
- }
106
-
107
- if (options?.stream) {
108
- if (!response.body) {
109
- return Result.fail({
110
- status: response.status,
111
- statusText: response.statusText,
112
- message: "No body in response",
113
- });
114
- }
115
-
116
- return Result.success(response.body);
117
- } else {
118
- const data = (await response.json()) as TResponse;
119
- return Result.success(data);
120
- }
121
- }
122
-
123
- /**
124
- * Create a new worker
125
- */
126
- async createWorker(name: string): Promise<
127
- Result<
128
- {
129
- worker: {
130
- workerId: string;
131
- name: string;
132
- spaceId: string;
133
- createdAt: string;
134
- updatedAt: string;
135
- state: unknown;
136
- };
137
- url: string;
138
- fields: Record<string, string>;
139
- },
140
- ApiError
141
- >
142
- > {
143
- return this.fetch("/workersCreateWorker", {
144
- method: "POST",
145
- body: {
146
- name,
147
- },
148
- });
149
- }
150
-
151
- /**
152
- * Update an existing worker's bundle
153
- */
154
- async updateWorkerBundle(workerId: string): Promise<
155
- Result<
156
- {
157
- url: string;
158
- fields: Record<string, string>;
159
- },
160
- ApiError
161
- >
162
- > {
163
- return this.fetch("/workersUpdateWorker", {
164
- method: "POST",
165
- body: {
166
- workerId,
167
- },
168
- });
169
- }
170
-
171
- /**
172
- * Get a worker by ID
173
- */
174
- async getWorker(workerId: string): Promise<
175
- Result<
176
- {
177
- worker: {
178
- workerId: string;
179
- name: string;
180
- spaceId: string;
181
- state: unknown;
182
- tools: unknown[];
183
- createdAt: string;
184
- updatedAt: string;
185
- };
186
- },
187
- ApiError
188
- >
189
- > {
190
- return this.fetch("/workersGetWorker", {
191
- method: "POST",
192
- body: {
193
- workerId,
194
- },
195
- });
196
- }
197
-
198
- /**
199
- * List all workers in the space
200
- */
201
- async listWorkers(): Promise<
202
- Result<
203
- {
204
- workers: Array<{
205
- workerId: string;
206
- name: string;
207
- spaceId: string;
208
- state: unknown;
209
- createdAt: string;
210
- updatedAt: string;
211
- }>;
212
- },
213
- ApiError
214
- >
215
- > {
216
- return this.fetch("/workersListWorkers", {
217
- method: "POST",
218
- body: {},
219
- });
220
- }
221
-
222
- /**
223
- * Delete a worker
224
- */
225
- async deleteWorker(
226
- workerId: string,
227
- ): Promise<Result<Record<string, never>, ApiError>> {
228
- return this.fetch("/workersDeleteWorker", {
229
- method: "POST",
230
- body: {
231
- workerId,
232
- },
233
- });
234
- }
235
-
236
- /**
237
- * Fetch and save worker capabilities
238
- */
239
- async fetchAndSaveCapabilities(workerId: string): Promise<
240
- Result<
241
- {
242
- capabilities: ReadonlyArray<{
243
- _tag: "sync" | "slashCommand";
244
- spaceId: string;
245
- workerId: string;
246
- key: string;
247
- config: unknown;
248
- }>;
249
- },
250
- ApiError
251
- >
252
- > {
253
- return this.fetch("/workersFetchAndSaveCapabilities", {
254
- method: "POST",
255
- body: {
256
- workerId,
257
- },
258
- });
259
- }
260
-
261
- /**
262
- * Upsert secrets (create or update multiple secrets)
263
- */
264
- async upsertSecrets(
265
- workerId: string,
266
- secrets: Array<{ key: string; value: string }>,
267
- ): Promise<
268
- Result<
269
- {
270
- secrets: Array<{
271
- spaceId: string;
272
- workerId: string;
273
- key: string;
274
- createdAt: string;
275
- }>;
276
- },
277
- ApiError
278
- >
279
- > {
280
- return this.fetch("/workersUpsertSecrets", {
281
- method: "POST",
282
- body: {
283
- workerId,
284
- secrets,
285
- },
286
- });
287
- }
288
-
289
- /**
290
- * List all secrets for a worker (keys only, not values)
291
- */
292
- async listSecrets(
293
- workerId: string,
294
- options?: { secretKinds?: Array<"keyValue" | "oauth"> },
295
- ): Promise<
296
- Result<
297
- {
298
- secrets: Array<{
299
- spaceId: string;
300
- workerId: string;
301
- key: string;
302
- createdAt: string;
303
- kind: "keyValue" | "oauth";
304
- }>;
305
- },
306
- ApiError
307
- >
308
- > {
309
- return this.fetch("/workersListSecrets", {
310
- method: "POST",
311
- body: {
312
- workerId,
313
- secretKinds: options?.secretKinds,
314
- },
315
- });
316
- }
317
-
318
- /**
319
- * Pull decrypted env vars for a worker
320
- */
321
- async pullEnv(workerId: string): Promise<
322
- Result<
323
- {
324
- env: Array<{
325
- key: string;
326
- value: string;
327
- }>;
328
- },
329
- ApiError
330
- >
331
- > {
332
- return this.fetch("/workersPullEnv", {
333
- method: "POST",
334
- body: {
335
- workerId,
336
- },
337
- });
338
- }
339
-
340
- async listOauthProviders(): Promise<
341
- Result<
342
- {
343
- providers: Array<{
344
- key: string;
345
- displayName: string;
346
- }>;
347
- },
348
- ApiError
349
- >
350
- > {
351
- return this.fetch("/workersListOauthProviders", {
352
- method: "POST",
353
- body: {},
354
- });
355
- }
356
-
357
- /**
358
- * Start the OAuth flow for a provider
359
- */
360
- async startOauth(args: { workerId: string; provider: string }): Promise<
361
- Result<
362
- {
363
- authorizationUrl: string;
364
- state: string;
365
- },
366
- ApiError
367
- >
368
- > {
369
- return this.fetch("/workersStartOauth", {
370
- method: "POST",
371
- body: {
372
- workerId: args.workerId,
373
- provider: args.provider,
374
- },
375
- });
376
- }
377
-
378
- /**
379
- * Remove an OAuth connection for a worker
380
- */
381
- async deleteOauthConnection(args: {
382
- workerId: string;
383
- provider: string;
384
- }): Promise<Result<Record<string, never>, ApiError>> {
385
- return this.fetch("/workersDeleteOauthConnection", {
386
- method: "POST",
387
- body: {
388
- workerId: args.workerId,
389
- provider: args.provider,
390
- },
391
- });
392
- }
393
-
394
- /**
395
- * Delete a secret
396
- */
397
- async deleteSecret(
398
- workerId: string,
399
- key: string,
400
- ): Promise<Result<Record<string, never>, ApiError>> {
401
- return this.fetch("/workersDeleteSecret", {
402
- method: "POST",
403
- body: {
404
- workerId,
405
- key,
406
- },
407
- });
408
- }
409
-
410
- /**
411
- * List all capabilities for a worker
412
- */
413
- async listCapabilities(workerId: string): Promise<
414
- Result<
415
- {
416
- capabilities: Array<{
417
- _tag: "sync" | "slashCommand";
418
- key: string;
419
- }>;
420
- },
421
- ApiError
422
- >
423
- > {
424
- return this.fetch("/workersListCapabilities", {
425
- method: "POST",
426
- body: {
427
- workerId,
428
- },
429
- });
430
- }
431
-
432
- /**
433
- * Run a capability
434
- */
435
- async runCapability(
436
- workerId: string,
437
- capabilityKey: string,
438
- functionName: string | null,
439
- args: Array<{ name: string; value: string }>,
440
- stream: true,
441
- ): Promise<Result<ReadableStream<Uint8Array<ArrayBufferLike>>, ApiError>>;
442
- async runCapability(
443
- workerId: string,
444
- capabilityKey: string,
445
- functionName: string | null,
446
- args: Array<{ name: string; value: string }>,
447
- stream?: false | undefined,
448
- ): Promise<Result<{ result: unknown }, ApiError>>;
449
- async runCapability(
450
- workerId: string,
451
- capabilityKey: string,
452
- functionName: string | null,
453
- args: Array<{ name: string; value: string }>,
454
- stream?: boolean | undefined,
455
- ): Promise<
456
- Result<
457
- { result: unknown } | ReadableStream<Uint8Array<ArrayBufferLike>>,
458
- ApiError
459
- >
460
- > {
461
- if (stream) {
462
- return this.fetch(
463
- "/workersRunCapability",
464
- {
465
- method: "POST",
466
- body: {
467
- workerId,
468
- capabilityKey,
469
- functionName,
470
- args,
471
- stream,
472
- },
473
- },
474
- { stream },
475
- );
476
- } else {
477
- return this.fetch("/workersRunCapability", {
478
- method: "POST",
479
- body: {
480
- workerId,
481
- capabilityKey,
482
- functionName,
483
- args,
484
- stream,
485
- },
486
- });
487
- }
488
- }
489
-
490
- /**
491
- * Download the bundle for a worker
492
- */
493
- async downloadWorkerBundle(
494
- workerId: string,
495
- ): Promise<Result<ReadableStream<Uint8Array<ArrayBufferLike>>, ApiError>> {
496
- return this.fetch(
497
- "/workersGetBundle",
498
- {
499
- method: "POST",
500
- body: {
501
- workerId,
502
- },
503
- },
504
- { stream: true },
505
- );
506
- }
507
-
508
- /**
509
- * List all runs for a worker
510
- */
511
- async listRunsForWorker(workerId: string): Promise<
512
- Result<
513
- {
514
- runs: Array<{
515
- workerId: string;
516
- spaceId: string;
517
- runId: string;
518
- name: string;
519
- exitCode: number | null;
520
- startedAt: string;
521
- endedAt: string | null;
522
- }>;
523
- },
524
- ApiError
525
- >
526
- > {
527
- return this.fetch("/workersListRunsForWorker", {
528
- method: "POST",
529
- body: {
530
- workerId,
531
- },
532
- });
533
- }
534
-
535
- /**
536
- * Get logs for a specific run
537
- */
538
- async getRunLogs(
539
- workerId: string,
540
- runId: string,
541
- ): Promise<
542
- Result<
543
- {
544
- logs: string;
545
- },
546
- ApiError
547
- >
548
- > {
549
- return this.fetch("/workersGetRunLogs", {
550
- method: "POST",
551
- body: {
552
- workerId,
553
- runId,
554
- },
555
- });
556
- }
557
- }
558
-
559
- function headersInitToEntries(
560
- headersInit: RequestInit["headers"],
561
- ): [string, string][] {
562
- if (headersInit instanceof Headers) {
563
- return Array.from(headersInit.entries());
564
- }
565
-
566
- if (Array.isArray(headersInit)) {
567
- return headersInit;
568
- }
569
-
570
- if (headersInit === undefined) {
571
- return [];
572
- }
573
-
574
- const entries: [string, string][] = [];
575
- for (const [key, value] of Object.entries(headersInit)) {
576
- if (value === undefined) {
577
- continue;
578
- }
579
- entries.push([key, value]);
580
- }
581
-
582
- return entries;
583
- }
584
-
585
- async function parseApiError(response: Response): Promise<ApiError> {
586
- const errorText = await response.text();
587
- const message = `[${response.status}] ${response.statusText}: ${errorText}`;
588
- const error: ApiError = {
589
- status: response.status,
590
- statusText: response.statusText,
591
- message,
592
- };
593
-
594
- if (response.status === 400) {
595
- const validationError = parseValidationError(errorText);
596
- if (validationError) {
597
- error.validationError = validationError;
598
- }
599
- }
600
-
601
- return error;
602
- }
603
-
604
- /**
605
- * Try to parse a ValidationError from error response text
606
- */
607
- function parseValidationError(
608
- errorText: string,
609
- ): ApiError["validationError"] | undefined {
610
- try {
611
- const errorJson = JSON.parse(errorText);
612
- if (
613
- errorJson.name === "ValidationError" &&
614
- errorJson.debugMessage &&
615
- errorJson.errorId
616
- ) {
617
- return {
618
- errorId: errorJson.errorId,
619
- name: errorJson.name,
620
- debugMessage: errorJson.debugMessage,
621
- message: errorJson.message,
622
- };
623
- }
624
- } catch {
625
- // If parsing fails, return undefined
626
- }
627
- return undefined;
628
- }