@prisma/compute-sdk 0.1.0

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 (52) hide show
  1. package/README.md +638 -0
  2. package/dist/api-client.d.ts +181 -0
  3. package/dist/api-client.d.ts.map +1 -0
  4. package/dist/api-client.js +193 -0
  5. package/dist/api-client.js.map +1 -0
  6. package/dist/archive.d.ts +11 -0
  7. package/dist/archive.d.ts.map +1 -0
  8. package/dist/archive.js +80 -0
  9. package/dist/archive.js.map +1 -0
  10. package/dist/build-strategy.d.ts +34 -0
  11. package/dist/build-strategy.d.ts.map +1 -0
  12. package/dist/build-strategy.js +33 -0
  13. package/dist/build-strategy.js.map +1 -0
  14. package/dist/bun-build.d.ts +14 -0
  15. package/dist/bun-build.d.ts.map +1 -0
  16. package/dist/bun-build.js +128 -0
  17. package/dist/bun-build.js.map +1 -0
  18. package/dist/callbacks.d.ts +44 -0
  19. package/dist/callbacks.d.ts.map +1 -0
  20. package/dist/callbacks.js +2 -0
  21. package/dist/callbacks.js.map +1 -0
  22. package/dist/compute-client.d.ts +136 -0
  23. package/dist/compute-client.d.ts.map +1 -0
  24. package/dist/compute-client.js +562 -0
  25. package/dist/compute-client.js.map +1 -0
  26. package/dist/errors.d.ts +101 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +56 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/index.d.ts +12 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +10 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/polling.d.ts +22 -0
  35. package/dist/polling.d.ts.map +1 -0
  36. package/dist/polling.js +64 -0
  37. package/dist/polling.js.map +1 -0
  38. package/dist/types.d.ts +46 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +17 -0
  41. package/dist/types.js.map +1 -0
  42. package/package.json +43 -0
  43. package/src/api-client.ts +330 -0
  44. package/src/archive.ts +111 -0
  45. package/src/build-strategy.ts +66 -0
  46. package/src/bun-build.ts +184 -0
  47. package/src/callbacks.ts +50 -0
  48. package/src/compute-client.ts +985 -0
  49. package/src/errors.ts +148 -0
  50. package/src/index.ts +75 -0
  51. package/src/polling.ts +108 -0
  52. package/src/types.ts +65 -0
@@ -0,0 +1,562 @@
1
+ import { Result } from "better-result";
2
+ import { InternalApiClient, readUploadUrl, toDeploymentUrl, } from "./api-client.js";
3
+ import { createArchive } from "./archive.js";
4
+ import { ApiError, ArtifactError, BuildError, CancelledError, DestroyAggregateError, MissingArgumentError, NoExistingVersionError, } from "./errors.js";
5
+ import { pollVersionStatus } from "./polling.js";
6
+ import { REGIONS } from "./types.js";
7
+ const DEFAULT_TIMEOUT_SECONDS = 120;
8
+ const DEFAULT_POLL_INTERVAL_MS = 1_000;
9
+ export class ComputeClient {
10
+ #api;
11
+ constructor(managementApiClient) {
12
+ this.#api = new InternalApiClient(managementApiClient);
13
+ }
14
+ async deploy(options) {
15
+ const self = this;
16
+ return Result.gen(async function* () {
17
+ yield* self.#checkAborted(options.signal);
18
+ const target = yield* Result.await(self.#resolveDeployTarget(options));
19
+ options.progress?.onBuildStart?.();
20
+ const artifact = yield* Result.await(Result.tryPromise({
21
+ try: () => options.strategy.execute(),
22
+ catch: (e) => new BuildError({
23
+ message: e instanceof Error ? e.message : String(e),
24
+ }),
25
+ }));
26
+ options.progress?.onBuildComplete?.(artifact);
27
+ try {
28
+ yield* self.#checkAborted(options.signal);
29
+ options.progress?.onArchiveCreating?.();
30
+ const archiveBytes = yield* Result.await(Result.tryPromise({
31
+ try: () => createArchive(artifact.directory, artifact.entrypoint),
32
+ catch: (e) => new ArtifactError({
33
+ message: e instanceof Error
34
+ ? e.message
35
+ : `Archive creation failed: ${String(e)}`,
36
+ cause: e,
37
+ }),
38
+ }));
39
+ options.progress?.onArchiveReady?.(archiveBytes.byteLength);
40
+ yield* self.#checkAborted(options.signal);
41
+ const createResponse = yield* Result.await(self.#api.createServiceVersion(target.serviceId, {
42
+ envVars: options.envVars,
43
+ portMapping: options.portMapping,
44
+ }, options.signal));
45
+ options.progress?.onVersionCreated?.(createResponse.id);
46
+ const uploadUrl = readUploadUrl(createResponse);
47
+ if (!uploadUrl) {
48
+ return Result.err(new ArtifactError({
49
+ message: "Version creation did not return an upload URL",
50
+ }));
51
+ }
52
+ yield* self.#checkAborted(options.signal);
53
+ options.progress?.onUploadStart?.();
54
+ yield* Result.await(self.#uploadArtifact(uploadUrl, archiveBytes));
55
+ options.progress?.onUploadComplete?.();
56
+ yield* self.#checkAborted(options.signal);
57
+ options.progress?.onStartRequested?.();
58
+ yield* Result.await(self.#api.startVersion(createResponse.id, options.signal));
59
+ const pollResult = yield* Result.await(pollVersionStatus(self.#api, createResponse.id, {
60
+ targetStatus: "running",
61
+ timeoutSeconds: options.timeoutSeconds ?? DEFAULT_TIMEOUT_SECONDS,
62
+ pollIntervalMs: options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS,
63
+ signal: options.signal,
64
+ onStatusChange: options.progress?.onStatusChange,
65
+ }));
66
+ const deploymentUrl = toDeploymentUrl(pollResult.previewDomain);
67
+ options.progress?.onRunning?.(deploymentUrl);
68
+ return Result.ok({
69
+ projectId: target.projectId,
70
+ serviceId: target.serviceId,
71
+ serviceName: target.serviceName,
72
+ region: target.region,
73
+ versionId: createResponse.id,
74
+ deploymentUrl,
75
+ resolvedConfig: {
76
+ projectId: target.projectId,
77
+ serviceId: target.serviceId,
78
+ serviceName: target.serviceName,
79
+ region: target.region,
80
+ portMapping: options.portMapping,
81
+ },
82
+ });
83
+ }
84
+ finally {
85
+ await artifact.cleanup?.();
86
+ }
87
+ });
88
+ }
89
+ async updateEnv(options) {
90
+ const self = this;
91
+ return Result.gen(async function* () {
92
+ yield* self.#checkAborted(options.signal);
93
+ const target = yield* Result.await(self.#resolveDeployTarget(options));
94
+ const versions = yield* Result.await(self.#api.listServiceVersions(target.serviceId, options.signal));
95
+ if (versions.length === 0) {
96
+ return Result.err(new NoExistingVersionError({ serviceId: target.serviceId }));
97
+ }
98
+ yield* self.#checkAborted(options.signal);
99
+ const createResponse = yield* Result.await(self.#api.createServiceVersion(target.serviceId, {
100
+ envVars: options.envVars,
101
+ portMapping: options.portMapping,
102
+ skipCodeUpload: true,
103
+ }, options.signal));
104
+ options.progress?.onVersionCreated?.(createResponse.id);
105
+ yield* self.#checkAborted(options.signal);
106
+ options.progress?.onStartRequested?.();
107
+ yield* Result.await(self.#api.startVersion(createResponse.id, options.signal));
108
+ const pollResult = yield* Result.await(pollVersionStatus(self.#api, createResponse.id, {
109
+ targetStatus: "running",
110
+ timeoutSeconds: options.timeoutSeconds ?? DEFAULT_TIMEOUT_SECONDS,
111
+ pollIntervalMs: options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS,
112
+ signal: options.signal,
113
+ onStatusChange: options.progress?.onStatusChange,
114
+ }));
115
+ const deploymentUrl = toDeploymentUrl(pollResult.previewDomain);
116
+ options.progress?.onRunning?.(deploymentUrl);
117
+ return Result.ok({
118
+ projectId: target.projectId,
119
+ serviceId: target.serviceId,
120
+ versionId: createResponse.id,
121
+ deploymentUrl,
122
+ resolvedConfig: {
123
+ projectId: target.projectId,
124
+ serviceId: target.serviceId,
125
+ serviceName: target.serviceName,
126
+ region: target.region,
127
+ portMapping: options.portMapping,
128
+ },
129
+ });
130
+ });
131
+ }
132
+ async destroyVersion(options) {
133
+ const self = this;
134
+ return Result.gen(async function* () {
135
+ yield* self.#checkAborted(options.signal);
136
+ let versionId = options.versionId;
137
+ let versionDetailsCache;
138
+ if (!versionId) {
139
+ const serviceId = options.serviceId;
140
+ if (!serviceId) {
141
+ return Result.err(new MissingArgumentError({ field: "versionId" }));
142
+ }
143
+ const versions = yield* Result.await(self.#api.listServiceVersions(serviceId, options.signal));
144
+ const versionDetailResults = await Promise.all(versions.map((v) => self.#api.getVersion(v.id, options.signal)));
145
+ const details = [];
146
+ for (const result of versionDetailResults) {
147
+ if (result.isErr())
148
+ return result;
149
+ details.push(result.value);
150
+ }
151
+ versionDetailsCache = new Map(details.map((v) => [v.id, v]));
152
+ const versionInfos = details
153
+ .map((v) => ({
154
+ id: v.id,
155
+ status: v.status,
156
+ createdAt: v.createdAt,
157
+ previewDomain: v.previewDomain,
158
+ }))
159
+ .sort(versionSortComparator);
160
+ if (versionInfos.length === 0) {
161
+ return Result.err(new MissingArgumentError({ field: "versionId" }));
162
+ }
163
+ if (!options.interaction?.selectVersion) {
164
+ return Result.err(new MissingArgumentError({ field: "versionId" }));
165
+ }
166
+ versionId = await options.interaction.selectVersion(versionInfos);
167
+ }
168
+ const version = versionDetailsCache?.get(versionId) ??
169
+ (yield* Result.await(self.#api.getVersion(versionId, options.signal)));
170
+ const previousStatus = version.status ?? "unknown";
171
+ const shouldStop = version.status === "running" || version.status === "provisioning";
172
+ let stopped = false;
173
+ if (shouldStop) {
174
+ options.progress?.onStopRequested?.(versionId);
175
+ yield* Result.await(self.#api.stopVersion(versionId, options.signal));
176
+ yield* Result.await(pollVersionStatus(self.#api, versionId, {
177
+ targetStatus: "stopped",
178
+ timeoutSeconds: options.timeoutSeconds ?? DEFAULT_TIMEOUT_SECONDS,
179
+ pollIntervalMs: options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS,
180
+ signal: options.signal,
181
+ }));
182
+ stopped = true;
183
+ options.progress?.onStopped?.(versionId);
184
+ }
185
+ yield* Result.await(self.#api.deleteVersion(versionId, options.signal));
186
+ options.progress?.onDeleted?.(versionId);
187
+ return Result.ok({
188
+ versionId,
189
+ previousStatus,
190
+ stopped,
191
+ deleted: true,
192
+ });
193
+ });
194
+ }
195
+ async destroyService(options) {
196
+ const self = this;
197
+ return Result.gen(async function* () {
198
+ yield* self.#checkAborted(options.signal);
199
+ const timeoutSeconds = options.timeoutSeconds ?? DEFAULT_TIMEOUT_SECONDS;
200
+ const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
201
+ const versions = yield* Result.await(self.#api.listServiceVersions(options.serviceId, options.signal));
202
+ const versionDetailResults = await Promise.all(versions.map((v) => self.#api.getVersion(v.id, options.signal)));
203
+ const versionDetails = [];
204
+ for (const result of versionDetailResults) {
205
+ if (result.isErr())
206
+ return result;
207
+ versionDetails.push(result.value);
208
+ }
209
+ const activeVersions = versionDetails.filter((v) => v.status === "running" || v.status === "provisioning");
210
+ const succeededIds = [];
211
+ const failures = [];
212
+ if (activeVersions.length > 0) {
213
+ const activeIds = activeVersions.map((v) => v.id);
214
+ options.progress?.onStoppingVersions?.(activeIds);
215
+ const stopResults = await Promise.all(activeVersions.map((v) => self.#api.stopVersion(v.id, options.signal)));
216
+ const stoppedCandidates = [];
217
+ for (const [i, result] of stopResults.entries()) {
218
+ // biome-ignore lint/style/noNonNullAssertion: both lists have the same length
219
+ const activeVersion = activeVersions[i];
220
+ if (result.isErr()) {
221
+ failures.push({
222
+ versionId: activeVersion.id,
223
+ error: result.error,
224
+ });
225
+ }
226
+ else {
227
+ stoppedCandidates.push(activeVersion);
228
+ }
229
+ }
230
+ if (stoppedCandidates.length > 0) {
231
+ const pollResults = await Promise.all(stoppedCandidates.map((v) => pollVersionStatus(self.#api, v.id, {
232
+ targetStatus: "stopped",
233
+ timeoutSeconds,
234
+ pollIntervalMs,
235
+ signal: options.signal,
236
+ })));
237
+ for (const [i, result] of pollResults.entries()) {
238
+ // biome-ignore lint/style/noNonNullAssertion: both lists have the same length
239
+ const stoppedVersion = stoppedCandidates[i];
240
+ if (result.isErr()) {
241
+ failures.push({
242
+ versionId: stoppedVersion.id,
243
+ error: result.error,
244
+ });
245
+ }
246
+ else {
247
+ options.progress?.onVersionStopped?.(stoppedVersion.id);
248
+ }
249
+ }
250
+ }
251
+ if (failures.length > 0) {
252
+ return Result.err(new DestroyAggregateError({
253
+ succeededVersionIds: succeededIds,
254
+ failures,
255
+ serviceDeleted: false,
256
+ }));
257
+ }
258
+ options.progress?.onAllVersionsStopped?.();
259
+ }
260
+ if (versions.length > 0) {
261
+ const versionIds = versions.map((v) => v.id);
262
+ options.progress?.onDeletingVersions?.(versionIds);
263
+ const deleteResults = await Promise.all(versions.map((v) => self.#api.deleteVersion(v.id, options.signal)));
264
+ for (const [i, result] of deleteResults.entries()) {
265
+ // biome-ignore lint/style/noNonNullAssertion: both lists have the same length
266
+ const version = versions[i];
267
+ if (result.isErr()) {
268
+ failures.push({
269
+ versionId: version.id,
270
+ error: result.error,
271
+ });
272
+ }
273
+ else {
274
+ succeededIds.push(version.id);
275
+ options.progress?.onVersionDeleted?.(version.id);
276
+ }
277
+ }
278
+ if (failures.length > 0) {
279
+ return Result.err(new DestroyAggregateError({
280
+ succeededVersionIds: succeededIds,
281
+ failures,
282
+ serviceDeleted: false,
283
+ }));
284
+ }
285
+ options.progress?.onAllVersionsDeleted?.();
286
+ }
287
+ let serviceDeleted = false;
288
+ if (!options.keepService) {
289
+ yield* Result.await(self.#api.deleteService(options.serviceId, options.signal));
290
+ serviceDeleted = true;
291
+ options.progress?.onServiceDeleted?.(options.serviceId);
292
+ }
293
+ return Result.ok({
294
+ serviceId: options.serviceId,
295
+ deletedVersionIds: succeededIds,
296
+ serviceDeleted,
297
+ });
298
+ });
299
+ }
300
+ async listProjects(options = {}) {
301
+ const self = this;
302
+ return Result.gen(async function* () {
303
+ yield* self.#checkAborted(options.signal);
304
+ const projects = yield* Result.await(self.#api.listProjects(options.signal));
305
+ return Result.ok(projects.map((p) => ({
306
+ id: p.id,
307
+ name: p.name,
308
+ defaultRegion: p.defaultRegion ?? undefined,
309
+ })));
310
+ });
311
+ }
312
+ async listServices(options) {
313
+ const self = this;
314
+ return Result.gen(async function* () {
315
+ yield* self.#checkAborted(options.signal);
316
+ const services = yield* Result.await(self.#api.listProjectServices(options.projectId, options.signal));
317
+ return Result.ok(services.map((s) => ({
318
+ id: s.id,
319
+ name: s.name,
320
+ region: s.region.id,
321
+ projectId: s.projectId,
322
+ })));
323
+ });
324
+ }
325
+ async createService(options) {
326
+ const self = this;
327
+ return Result.gen(async function* () {
328
+ yield* self.#checkAborted(options.signal);
329
+ const response = yield* Result.await(self.#api.createProjectService(options.projectId, {
330
+ displayName: options.serviceName,
331
+ regionId: options.region,
332
+ }, options.signal));
333
+ return Result.ok({
334
+ id: response.id,
335
+ name: response.name,
336
+ region: response.region.id,
337
+ projectId: options.projectId,
338
+ });
339
+ });
340
+ }
341
+ async showService(options) {
342
+ const self = this;
343
+ return Result.gen(async function* () {
344
+ yield* self.#checkAborted(options.signal);
345
+ const s = yield* Result.await(self.#api.getService(options.serviceId, options.signal));
346
+ return Result.ok({
347
+ id: s.id,
348
+ name: s.name,
349
+ region: s.region.id,
350
+ projectId: s.projectId,
351
+ latestVersionId: s.latestVersionId,
352
+ });
353
+ });
354
+ }
355
+ async deleteService(options) {
356
+ const self = this;
357
+ return Result.gen(async function* () {
358
+ yield* self.#checkAborted(options.signal);
359
+ yield* Result.await(self.#api.deleteService(options.serviceId, options.signal));
360
+ return Result.ok();
361
+ });
362
+ }
363
+ async listVersions(options) {
364
+ const self = this;
365
+ return Result.gen(async function* () {
366
+ yield* self.#checkAborted(options.signal);
367
+ const versions = yield* Result.await(self.#api.listServiceVersions(options.serviceId, options.signal));
368
+ const detailResults = await Promise.all(versions.map((v) => self.#api.getVersion(v.id, options.signal)));
369
+ const details = [];
370
+ for (const result of detailResults) {
371
+ if (result.isErr()) {
372
+ // listServiceVersions returns versions that have previously been deleted
373
+ // and can't be fetched using getVersion so we need to filter those out.
374
+ if (ApiError.is(result.error) && result.error.statusCode === 404)
375
+ continue;
376
+ return result;
377
+ }
378
+ details.push(result.value);
379
+ }
380
+ return Result.ok(details.map((v) => ({
381
+ id: v.id,
382
+ status: v.status,
383
+ createdAt: v.createdAt,
384
+ previewDomain: v.previewDomain,
385
+ })));
386
+ });
387
+ }
388
+ async showVersion(options) {
389
+ const self = this;
390
+ return Result.gen(async function* () {
391
+ yield* self.#checkAborted(options.signal);
392
+ const v = yield* Result.await(self.#api.getVersion(options.versionId, options.signal));
393
+ return Result.ok({
394
+ id: v.id,
395
+ status: v.status,
396
+ createdAt: v.createdAt,
397
+ previewDomain: v.previewDomain,
398
+ envVars: v.envVars ?? undefined,
399
+ });
400
+ });
401
+ }
402
+ async startVersion(options) {
403
+ const self = this;
404
+ return Result.gen(async function* () {
405
+ yield* self.#checkAborted(options.signal);
406
+ yield* Result.await(self.#api.startVersion(options.versionId, options.signal));
407
+ return Result.ok();
408
+ });
409
+ }
410
+ async stopVersion(options) {
411
+ const self = this;
412
+ return Result.gen(async function* () {
413
+ yield* self.#checkAborted(options.signal);
414
+ yield* Result.await(self.#api.stopVersion(options.versionId, options.signal));
415
+ return Result.ok();
416
+ });
417
+ }
418
+ async deleteVersion(options) {
419
+ const self = this;
420
+ return Result.gen(async function* () {
421
+ yield* self.#checkAborted(options.signal);
422
+ yield* Result.await(self.#api.deleteVersion(options.versionId, options.signal));
423
+ return Result.ok();
424
+ });
425
+ }
426
+ #checkAborted(signal) {
427
+ if (signal?.aborted) {
428
+ return Result.err(new CancelledError());
429
+ }
430
+ return Result.ok(undefined);
431
+ }
432
+ async #resolveDeployTarget(options) {
433
+ const self = this;
434
+ return Result.gen(async function* () {
435
+ if (options.serviceId) {
436
+ const service = yield* Result.await(self.#api.getService(options.serviceId, options.signal));
437
+ const projectId = options.projectId ?? service.projectId;
438
+ if (!projectId) {
439
+ return Result.err(new MissingArgumentError({ field: "projectId" }));
440
+ }
441
+ return Result.ok({
442
+ projectId,
443
+ serviceId: service.id,
444
+ serviceName: service.name ?? service.id,
445
+ region: service.region.id,
446
+ });
447
+ }
448
+ let projectId = options.projectId;
449
+ if (!projectId) {
450
+ const projects = yield* Result.await(self.#api.listProjects(options.signal));
451
+ const projectInfos = projects.map((p) => ({
452
+ id: p.id,
453
+ name: p.name,
454
+ defaultRegion: p.defaultRegion ?? undefined,
455
+ }));
456
+ if (!options.interaction?.selectProject) {
457
+ return Result.err(new MissingArgumentError({ field: "projectId" }));
458
+ }
459
+ projectId = await options.interaction.selectProject(projectInfos);
460
+ }
461
+ if (options.serviceName && options.region) {
462
+ const response = yield* Result.await(self.#api.createProjectService(projectId, {
463
+ displayName: options.serviceName,
464
+ regionId: options.region,
465
+ }, options.signal));
466
+ return Result.ok({
467
+ projectId,
468
+ serviceId: response.id,
469
+ serviceName: response.name,
470
+ region: response.region.id,
471
+ });
472
+ }
473
+ const services = yield* Result.await(self.#api.listProjectServices(projectId, options.signal));
474
+ const serviceInfos = services.map((s) => ({
475
+ id: s.id,
476
+ name: s.name,
477
+ region: s.region.id,
478
+ projectId: s.projectId,
479
+ }));
480
+ if (!options.interaction?.selectService) {
481
+ return Result.err(new MissingArgumentError({ field: "serviceId" }));
482
+ }
483
+ const selectedServiceId = await options.interaction.selectService(serviceInfos);
484
+ if (selectedServiceId !== null) {
485
+ const service = services.find((s) => s.id === selectedServiceId);
486
+ if (!service) {
487
+ throw new Error("selectService returned service ID not in the list");
488
+ }
489
+ return Result.ok({
490
+ projectId,
491
+ serviceId: selectedServiceId,
492
+ serviceName: service.name,
493
+ region: service.region.id,
494
+ });
495
+ }
496
+ let serviceName = options.serviceName;
497
+ if (!serviceName) {
498
+ if (!options.interaction?.provideServiceName) {
499
+ return Result.err(new MissingArgumentError({ field: "serviceName" }));
500
+ }
501
+ serviceName = await options.interaction.provideServiceName();
502
+ }
503
+ let region = options.region;
504
+ if (!region) {
505
+ if (!options.interaction?.selectRegion) {
506
+ return Result.err(new MissingArgumentError({ field: "region" }));
507
+ }
508
+ region = await options.interaction.selectRegion(REGIONS);
509
+ }
510
+ const response = yield* Result.await(self.#api.createProjectService(projectId, {
511
+ displayName: serviceName,
512
+ regionId: region,
513
+ }, options.signal));
514
+ return Result.ok({
515
+ projectId,
516
+ serviceId: response.id,
517
+ serviceName: response.name,
518
+ region: response.region.id,
519
+ });
520
+ });
521
+ }
522
+ async #uploadArtifact(url, body) {
523
+ return Result.tryPromise({
524
+ try: async () => {
525
+ const res = await fetch(url, {
526
+ method: "PUT",
527
+ headers: { "content-type": "application/gzip" },
528
+ body,
529
+ });
530
+ if (!res.ok) {
531
+ let message = `Artifact upload failed with HTTP ${res.status}`;
532
+ try {
533
+ const json = (await res.json());
534
+ if (typeof json.error === "string" && json.error.length > 0) {
535
+ message = `Artifact upload failed: ${json.error}`;
536
+ }
537
+ }
538
+ catch {
539
+ // ignore body parse failures
540
+ }
541
+ throw new Error(message);
542
+ }
543
+ },
544
+ catch: (e) => new ArtifactError({
545
+ message: e instanceof Error ? e.message : String(e),
546
+ cause: e,
547
+ }),
548
+ });
549
+ }
550
+ }
551
+ /**
552
+ * Sort versions: running/provisioning first, then by createdAt descending.
553
+ */
554
+ function versionSortComparator(a, b) {
555
+ const statusPriority = (s) => s === "running" ? 0 : s === "provisioning" ? 1 : 2;
556
+ const aPriority = statusPriority(a.status);
557
+ const bPriority = statusPriority(b.status);
558
+ if (aPriority !== bPriority)
559
+ return aPriority - bPriority;
560
+ return b.createdAt.localeCompare(a.createdAt);
561
+ }
562
+ //# sourceMappingURL=compute-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute-client.js","sourceRoot":"","sources":["../src/compute-client.ts"],"names":[],"mappings":"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"}