@sapiom/tools 0.1.1 → 0.1.2

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 (64) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/_client/index.d.ts.map +1 -1
  3. package/dist/cjs/_client/index.js.map +1 -1
  4. package/dist/cjs/agent/index.d.ts +14 -2
  5. package/dist/cjs/agent/index.d.ts.map +1 -1
  6. package/dist/cjs/agent/index.js +23 -1
  7. package/dist/cjs/agent/index.js.map +1 -1
  8. package/dist/cjs/client.d.ts.map +1 -1
  9. package/dist/cjs/client.js.map +1 -1
  10. package/dist/cjs/dispatch.d.ts +27 -0
  11. package/dist/cjs/dispatch.d.ts.map +1 -0
  12. package/dist/cjs/dispatch.js +3 -0
  13. package/dist/cjs/dispatch.js.map +1 -0
  14. package/dist/cjs/index.d.ts +2 -0
  15. package/dist/cjs/index.d.ts.map +1 -1
  16. package/dist/cjs/index.js +4 -1
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/repositories/index.d.ts.map +1 -1
  19. package/dist/cjs/repositories/index.js +5 -1
  20. package/dist/cjs/repositories/index.js.map +1 -1
  21. package/dist/cjs/sandboxes/index.d.ts +54 -2
  22. package/dist/cjs/sandboxes/index.d.ts.map +1 -1
  23. package/dist/cjs/sandboxes/index.js +203 -15
  24. package/dist/cjs/sandboxes/index.js.map +1 -1
  25. package/dist/cjs/sandboxes/multipart.d.ts +82 -0
  26. package/dist/cjs/sandboxes/multipart.d.ts.map +1 -0
  27. package/dist/cjs/sandboxes/multipart.js +206 -0
  28. package/dist/cjs/sandboxes/multipart.js.map +1 -0
  29. package/dist/cjs/sandboxes/types.d.ts +47 -0
  30. package/dist/cjs/sandboxes/types.d.ts.map +1 -1
  31. package/dist/esm/_client/index.d.ts.map +1 -1
  32. package/dist/esm/_client/index.js.map +1 -1
  33. package/dist/esm/agent/index.d.ts +14 -2
  34. package/dist/esm/agent/index.d.ts.map +1 -1
  35. package/dist/esm/agent/index.js +22 -0
  36. package/dist/esm/agent/index.js.map +1 -1
  37. package/dist/esm/client.d.ts.map +1 -1
  38. package/dist/esm/client.js +1 -1
  39. package/dist/esm/client.js.map +1 -1
  40. package/dist/esm/dispatch.d.ts +27 -0
  41. package/dist/esm/dispatch.d.ts.map +1 -0
  42. package/dist/esm/dispatch.js +2 -0
  43. package/dist/esm/dispatch.js.map +1 -0
  44. package/dist/esm/index.d.ts +2 -0
  45. package/dist/esm/index.d.ts.map +1 -1
  46. package/dist/esm/index.js +2 -0
  47. package/dist/esm/index.js.map +1 -1
  48. package/dist/esm/repositories/index.d.ts.map +1 -1
  49. package/dist/esm/repositories/index.js +5 -1
  50. package/dist/esm/repositories/index.js.map +1 -1
  51. package/dist/esm/sandboxes/index.d.ts +54 -2
  52. package/dist/esm/sandboxes/index.d.ts.map +1 -1
  53. package/dist/esm/sandboxes/index.js +201 -14
  54. package/dist/esm/sandboxes/index.js.map +1 -1
  55. package/dist/esm/sandboxes/multipart.d.ts +82 -0
  56. package/dist/esm/sandboxes/multipart.d.ts.map +1 -0
  57. package/dist/esm/sandboxes/multipart.js +196 -0
  58. package/dist/esm/sandboxes/multipart.js.map +1 -0
  59. package/dist/esm/sandboxes/types.d.ts +47 -0
  60. package/dist/esm/sandboxes/types.d.ts.map +1 -1
  61. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  62. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  63. package/package.json +1 -1
  64. package/src/sandboxes/README.md +4 -2
@@ -13,6 +13,8 @@
13
13
  * await box.destroy();
14
14
  */
15
15
  import { defaultTransport } from "../_client/index.js";
16
+ import { DEFAULT_CONCURRENCY, DEFAULT_MAX_RETRIES, DEFAULT_PART_SIZE, DEFAULT_RETRY_BASE_DELAY_MS, ensureOk, planParts, runWithConcurrency, toBlob, withRetry, } from "./multipart.js";
17
+ export { SandboxHttpError } from "./multipart.js";
16
18
  /** Platform sandbox service. Host routing is an internal detail — override via `baseUrl` or SAPIOM_SANDBOX_URL. */
17
19
  const DEFAULT_BASE_URL = process.env.SAPIOM_SANDBOX_URL || "https://blaxel.services.sapiom.ai";
18
20
  const DEFAULT_POLL_INTERVAL = 1000;
@@ -35,6 +37,38 @@ function parseOutputLine(line) {
35
37
  return { stream: "stderr", data: line.slice(7) };
36
38
  return { stream: "stdout", data: line }; // unrecognized framing — keep, don't drop
37
39
  }
40
+ /**
41
+ * Process statuses that mean the process has finished. The Blaxel sandbox-api
42
+ * reports a non-zero exit as `"failed"` (enum: running/completed/failed/killed/
43
+ * stopped), so polling must treat all of these — not just `"completed"` — as
44
+ * done. Any unrecognized status keeps polling and ultimately hits the exec
45
+ * timeout, which is a loud, debuggable failure rather than a silent wrong result.
46
+ */
47
+ const TERMINAL_PROCESS_STATUSES = new Set([
48
+ "completed",
49
+ "failed",
50
+ "killed",
51
+ "stopped",
52
+ ]);
53
+ function isProcessTerminal(status) {
54
+ return status !== undefined && TERMINAL_PROCESS_STATUSES.has(status);
55
+ }
56
+ /**
57
+ * Resolve a process exit code. A non-`"completed"` terminal status
58
+ * (failed/killed/stopped) that omits `exitCode` must not report success, so it
59
+ * defaults to a non-zero code.
60
+ */
61
+ function terminalExitCode(s) {
62
+ return s.exitCode ?? (s.status === "completed" ? 0 : 1);
63
+ }
64
+ function toExecResult(pid, s) {
65
+ return {
66
+ pid,
67
+ exitCode: terminalExitCode(s),
68
+ stdout: s.stdout ?? "",
69
+ stderr: s.stderr ?? "",
70
+ };
71
+ }
38
72
  /** A live sandbox handle. Create via {@link create}; pass between steps to share state. */
39
73
  export class Sandbox {
40
74
  constructor(name, workspaceRoot, transport, baseUrl) {
@@ -78,7 +112,9 @@ export class Sandbox {
78
112
  }
79
113
  fileUrl(path) {
80
114
  assertRelativePath(path);
81
- const base = this.workspaceRoot.endsWith("/") ? this.workspaceRoot.slice(0, -1) : this.workspaceRoot;
115
+ const base = this.workspaceRoot.endsWith("/")
116
+ ? this.workspaceRoot.slice(0, -1)
117
+ : this.workspaceRoot;
82
118
  const rel = path.startsWith("/") ? path.slice(1) : path;
83
119
  const abs = `${base}/${rel}`.replace(/^\//, "");
84
120
  return `${this.baseUrl}/v1/sandboxes/${encodeURIComponent(this.name)}/filesystem/${encodePathSegments(abs)}`;
@@ -86,6 +122,9 @@ export class Sandbox {
86
122
  procUrl(suffix = "") {
87
123
  return `${this.baseUrl}/v1/sandboxes/${encodeURIComponent(this.name)}/process${suffix}`;
88
124
  }
125
+ multipartUrl(suffix) {
126
+ return `${this.baseUrl}/v1/sandboxes/${encodeURIComponent(this.name)}/filesystem/multipart${suffix}`;
127
+ }
89
128
  /** Write a file (path relative to the workspace root). */
90
129
  async writeFile(path, content) {
91
130
  const res = await this.transport.fetch(this.fileUrl(path), {
@@ -104,25 +143,157 @@ export class Sandbox {
104
143
  const data = (await res.json());
105
144
  return data.content;
106
145
  }
146
+ /**
147
+ * Upload a file using multipart upload. Handles the full initiate → part
148
+ * upload → complete lifecycle, with parallel part uploads and automatic abort
149
+ * on any failure (including `signal` aborts).
150
+ *
151
+ * Prefer this over {@link writeFile} for binary content or any file over a few
152
+ * MB — `writeFile` sends the whole body in one request and is bounded by the
153
+ * ingress body-size ceiling. `content` may be a Blob, Uint8Array, or string
154
+ * (strings are UTF-8 encoded).
155
+ */
156
+ async uploadFile(path, content, opts) {
157
+ assertRelativePath(path);
158
+ const blob = toBlob(content);
159
+ const partSize = opts?.partSize ?? DEFAULT_PART_SIZE;
160
+ const concurrency = opts?.concurrency ?? DEFAULT_CONCURRENCY;
161
+ const totalBytes = blob.size;
162
+ const plans = planParts(totalBytes, partSize);
163
+ const { uploadId } = await this.initiateMultipartUpload(path, {
164
+ permissions: opts?.permissions,
165
+ signal: opts?.signal,
166
+ });
167
+ try {
168
+ let partsUploaded = 0;
169
+ let bytesUploaded = 0;
170
+ const maxRetries = opts?.maxRetries ?? DEFAULT_MAX_RETRIES;
171
+ const retryBaseDelayMs = opts?.retryBaseDelayMs ?? DEFAULT_RETRY_BASE_DELAY_MS;
172
+ const uploaded = await runWithConcurrency(plans, concurrency, async (plan) => {
173
+ const slice = blob.slice(plan.start, plan.end);
174
+ const ack = await withRetry(() => this.uploadPart(uploadId, plan.partNumber, slice, {
175
+ signal: opts?.signal,
176
+ }), {
177
+ maxRetries,
178
+ retryBaseDelayMs,
179
+ signal: opts?.signal,
180
+ });
181
+ partsUploaded += 1;
182
+ bytesUploaded += ack.size;
183
+ opts?.onPartUploaded?.(ack, {
184
+ partsUploaded,
185
+ totalParts: plans.length,
186
+ bytesUploaded,
187
+ totalBytes,
188
+ });
189
+ return ack;
190
+ });
191
+ const parts = uploaded
192
+ .map(({ partNumber, etag }) => ({ partNumber, etag }))
193
+ .sort((a, b) => a.partNumber - b.partNumber);
194
+ await this.completeMultipartUpload(uploadId, parts, {
195
+ signal: opts?.signal,
196
+ });
197
+ }
198
+ catch (err) {
199
+ // Best-effort cleanup; don't mask the original error.
200
+ this.abortMultipartUpload(uploadId).catch(() => { });
201
+ throw err;
202
+ }
203
+ }
204
+ /**
205
+ * Initiate a multipart upload for a file path. Low-level: prefer
206
+ * {@link uploadFile} for the full lifecycle.
207
+ */
208
+ async initiateMultipartUpload(path, opts) {
209
+ assertRelativePath(path);
210
+ const cleanPath = path.startsWith("/") ? path.slice(1) : path;
211
+ const url = this.multipartUrl(`/initiate/${encodePathSegments(cleanPath)}`);
212
+ const body = {};
213
+ if (opts?.permissions !== undefined)
214
+ body.permissions = opts.permissions;
215
+ const res = await ensureOk(await this.transport.fetch(url, {
216
+ method: "POST",
217
+ headers: { "content-type": "application/json" },
218
+ body: JSON.stringify(body),
219
+ signal: opts?.signal,
220
+ }), `Failed to initiate multipart upload for '${path}'`);
221
+ return (await res.json());
222
+ }
223
+ /**
224
+ * Upload a single part of a multipart upload. Low-level: prefer
225
+ * {@link uploadFile} for the full lifecycle.
226
+ */
227
+ async uploadPart(uploadId, partNumber, part, opts) {
228
+ const url = this.multipartUrl(`/${encodeURIComponent(uploadId)}/part`) +
229
+ `?partNumber=${encodeURIComponent(String(partNumber))}`;
230
+ const form = new FormData();
231
+ form.append("file", part instanceof Blob ? part : new Blob([part]));
232
+ // Intentionally no Content-Type header — fetch sets the multipart boundary.
233
+ const res = await ensureOk(await this.transport.fetch(url, {
234
+ method: "PUT",
235
+ body: form,
236
+ signal: opts?.signal,
237
+ }), `Failed to upload part ${partNumber} for upload '${uploadId}'`);
238
+ return (await res.json());
239
+ }
240
+ /**
241
+ * Complete a multipart upload by committing the uploaded parts. Low-level:
242
+ * prefer {@link uploadFile} for the full lifecycle.
243
+ */
244
+ async completeMultipartUpload(uploadId, parts, opts) {
245
+ const url = this.multipartUrl(`/${encodeURIComponent(uploadId)}/complete`);
246
+ const res = await ensureOk(await this.transport.fetch(url, {
247
+ method: "POST",
248
+ headers: { "content-type": "application/json" },
249
+ body: JSON.stringify({ parts }),
250
+ signal: opts?.signal,
251
+ }), `Failed to complete multipart upload '${uploadId}'`);
252
+ return (await res.json());
253
+ }
254
+ /** Abort a multipart upload and clean up any uploaded parts on the server. */
255
+ async abortMultipartUpload(uploadId, opts) {
256
+ const url = this.multipartUrl(`/${encodeURIComponent(uploadId)}`);
257
+ await ensureOk(await this.transport.fetch(url, {
258
+ method: "DELETE",
259
+ signal: opts?.signal,
260
+ }), `Failed to abort multipart upload '${uploadId}'`);
261
+ }
262
+ /**
263
+ * List the parts already uploaded for a multipart upload. Useful for resumable
264
+ * uploads: after reconnecting, call this to see which part numbers remain.
265
+ */
266
+ async listMultipartParts(uploadId, opts) {
267
+ const url = this.multipartUrl(`/${encodeURIComponent(uploadId)}/parts`);
268
+ const res = await ensureOk(await this.transport.fetch(url, { signal: opts?.signal }), `Failed to list parts for multipart upload '${uploadId}'`);
269
+ const data = (await res.json());
270
+ return data.parts;
271
+ }
107
272
  /**
108
273
  * Execute a command. Waits for completion by default; set `waitForCompletion:
109
274
  * false` for fire-and-forget, or use {@link execStream} for real-time output.
110
275
  */
111
276
  async exec(command, opts) {
112
277
  const proc = await this.createProcess(command, opts);
113
- if (proc.status === "completed") {
114
- return { pid: proc.pid, exitCode: proc.exitCode ?? 0, stdout: proc.stdout ?? "", stderr: proc.stderr ?? "" };
278
+ // Process finished synchronously (any terminal status, incl. a non-zero exit).
279
+ if (isProcessTerminal(proc.status)) {
280
+ return toExecResult(proc.pid, proc);
115
281
  }
116
282
  if (opts?.waitForCompletion === false) {
117
- return { pid: proc.pid, exitCode: -1, stdout: proc.stdout ?? "", stderr: proc.stderr ?? "" };
283
+ return {
284
+ pid: proc.pid,
285
+ exitCode: -1,
286
+ stdout: proc.stdout ?? "",
287
+ stderr: proc.stderr ?? "",
288
+ };
118
289
  }
119
290
  return this.pollProcess(proc.pid, opts);
120
291
  }
121
292
  /** Execute a command and stream output lines in real time. `exitCode` populates after `output` drains. */
122
293
  async execStream(command, opts) {
123
294
  const proc = await this.createProcess(command, opts);
124
- if (proc.status === "completed") {
125
- const code = proc.exitCode ?? 0;
295
+ if (isProcessTerminal(proc.status)) {
296
+ const code = terminalExitCode(proc);
126
297
  const stdout = proc.stdout ?? "";
127
298
  const stderr = proc.stderr ?? "";
128
299
  const output = (async function* () {
@@ -131,7 +302,13 @@ export class Sandbox {
131
302
  if (stderr)
132
303
  yield { stream: "stderr", data: stderr };
133
304
  })();
134
- return { pid: proc.pid, get exitCode() { return code; }, output };
305
+ return {
306
+ pid: proc.pid,
307
+ get exitCode() {
308
+ return code;
309
+ },
310
+ output,
311
+ };
135
312
  }
136
313
  let finalExitCode = -1;
137
314
  const transport = this.transport;
@@ -167,11 +344,11 @@ export class Sandbox {
167
344
  reader.releaseLock();
168
345
  }
169
346
  let status = await readStatus();
170
- while (status.status !== "completed") {
347
+ while (!isProcessTerminal(status.status)) {
171
348
  await new Promise((r) => setTimeout(r, 1000));
172
349
  status = await readStatus();
173
350
  }
174
- finalExitCode = status.exitCode ?? 0;
351
+ finalExitCode = terminalExitCode(status);
175
352
  async function readStatus() {
176
353
  const s = await transport.fetch(statusUrl, { signal });
177
354
  if (!s.ok)
@@ -179,7 +356,13 @@ export class Sandbox {
179
356
  return (await s.json());
180
357
  }
181
358
  }
182
- return { pid: proc.pid, get exitCode() { return finalExitCode; }, output: streamOutput() };
359
+ return {
360
+ pid: proc.pid,
361
+ get exitCode() {
362
+ return finalExitCode;
363
+ },
364
+ output: streamOutput(),
365
+ };
183
366
  }
184
367
  /** Current status of a process by PID (useful for fire-and-forget execs). */
185
368
  async getProcess(pid) {
@@ -203,7 +386,9 @@ export class Sandbox {
203
386
  const body = { command };
204
387
  if (opts?.cwd !== undefined) {
205
388
  assertRelativePath(opts.cwd);
206
- const base = this.workspaceRoot.endsWith("/") ? this.workspaceRoot.slice(0, -1) : this.workspaceRoot;
389
+ const base = this.workspaceRoot.endsWith("/")
390
+ ? this.workspaceRoot.slice(0, -1)
391
+ : this.workspaceRoot;
207
392
  body.cwd = `${base}/${opts.cwd.startsWith("/") ? opts.cwd.slice(1) : opts.cwd}`;
208
393
  }
209
394
  if (opts?.env !== undefined)
@@ -226,12 +411,14 @@ export class Sandbox {
226
411
  const pollInterval = opts?.pollInterval ?? DEFAULT_POLL_INTERVAL;
227
412
  const deadline = Date.now() + (opts?.timeout ?? DEFAULT_EXEC_TIMEOUT);
228
413
  while (Date.now() < deadline) {
229
- const res = await this.transport.fetch(this.procUrl(`/${pid}`), { signal: opts?.signal });
414
+ const res = await this.transport.fetch(this.procUrl(`/${pid}`), {
415
+ signal: opts?.signal,
416
+ });
230
417
  if (!res.ok)
231
418
  throw new Error(`Failed to poll process ${pid}: ${res.status} ${await res.text()}`);
232
419
  const status = (await res.json());
233
- if (status.status === "completed") {
234
- return { pid, exitCode: status.exitCode ?? 0, stdout: status.stdout ?? "", stderr: status.stderr ?? "" };
420
+ if (isProcessTerminal(status.status)) {
421
+ return toExecResult(pid, status);
235
422
  }
236
423
  await new Promise((r) => setTimeout(r, pollInterval));
237
424
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sandboxes/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sandboxes/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Multipart-upload helpers for the sandbox filesystem. Transport-agnostic pure
3
+ * functions (part planning, bounded concurrency, retry/backoff) plus the
4
+ * `SandboxHttpError` carried out of HTTP calls so the retry loop can read the
5
+ * status + `Retry-After`. Ported verbatim from the legacy `@sapiom/sandbox`;
6
+ * the `Sandbox` methods that use these call through the `_client` transport.
7
+ */
8
+ /** Max parts allowed per multipart upload (Blaxel constraint). */
9
+ export declare const MAX_PARTS = 10000;
10
+ /** Default number of retries for a single failed part upload. */
11
+ export declare const DEFAULT_MAX_RETRIES = 3;
12
+ /** Default initial retry backoff in milliseconds. */
13
+ export declare const DEFAULT_RETRY_BASE_DELAY_MS = 50;
14
+ /**
15
+ * Error thrown by multipart HTTP methods when the server returns a non-2xx.
16
+ * Exposes `status` + `retryAfterMs` (parsed from `Retry-After`) so callers
17
+ * and the retry loop can make informed decisions.
18
+ */
19
+ export declare class SandboxHttpError extends Error {
20
+ readonly status: number;
21
+ readonly retryAfterMs?: number;
22
+ constructor(message: string, status: number, retryAfterMs?: number);
23
+ }
24
+ /**
25
+ * Parse a `Retry-After` header value. Supports both forms:
26
+ * - delta-seconds integer (e.g. `"30"`)
27
+ * - HTTP-date (e.g. `"Wed, 21 Oct 2015 07:28:00 GMT"`)
28
+ */
29
+ export declare function parseRetryAfter(header: string | null): number | undefined;
30
+ /**
31
+ * Wrap a `fetch` response: if non-2xx, throw a `SandboxHttpError` carrying
32
+ * the status + Retry-After, otherwise return the response for the caller to
33
+ * parse.
34
+ */
35
+ export declare function ensureOk(response: Response, errorPrefix: string): Promise<Response>;
36
+ export interface RetryOptions {
37
+ /** Max number of retry attempts after the initial try. @default 3 */
38
+ maxRetries?: number;
39
+ /** Initial backoff in ms. Doubles each retry with up to `base` ms jitter. @default 50 */
40
+ retryBaseDelayMs?: number;
41
+ /** AbortSignal to cancel the retry loop. */
42
+ signal?: AbortSignal;
43
+ }
44
+ /**
45
+ * Retry `fn` up to `maxRetries` times on retryable errors with jittered
46
+ * exponential backoff. Honors `Retry-After` when the server provides one.
47
+ * Respects `signal` for prompt cancellation during the backoff wait.
48
+ */
49
+ export declare function withRetry<T>(fn: (attempt: number) => Promise<T>, opts?: RetryOptions): Promise<T>;
50
+ /**
51
+ * Default part size: 5 MiB. Bottom of Blaxel's recommended 5–10 MB range
52
+ * and well clear of the Sapiom ingress 8 MiB body-size ceiling (with
53
+ * room left for multipart form-data overhead).
54
+ */
55
+ export declare const DEFAULT_PART_SIZE: number;
56
+ /** Default number of parallel part uploads. */
57
+ export declare const DEFAULT_CONCURRENCY = 4;
58
+ /** Default file permissions (Blaxel default). */
59
+ export declare const DEFAULT_PERMISSIONS = "0644";
60
+ /**
61
+ * Normalize any supported content type into a `Blob`.
62
+ * `Blob.slice()` gives us random-access + lazy reads, so large inputs don't
63
+ * have to sit materialized in memory.
64
+ */
65
+ export declare function toBlob(content: Blob | Uint8Array | string): Blob;
66
+ export interface PartPlan {
67
+ partNumber: number;
68
+ start: number;
69
+ end: number;
70
+ }
71
+ /**
72
+ * Split a byte range into part plans.
73
+ * Always emits at least one part (even for zero-byte inputs) so the caller
74
+ * still goes through the initiate/upload/complete handshake.
75
+ */
76
+ export declare function planParts(totalBytes: number, partSize: number): PartPlan[];
77
+ /**
78
+ * Run `worker` over `items` with at most `concurrency` promises in flight.
79
+ * Rejects on the first worker failure (and stops scheduling further items).
80
+ */
81
+ export declare function runWithConcurrency<T, R>(items: readonly T[], concurrency: number, worker: (item: T, index: number) => Promise<R>): Promise<R[]>;
82
+ //# sourceMappingURL=multipart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multipart.d.ts","sourceRoot":"","sources":["../../../src/sandboxes/multipart.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,kEAAkE;AAClE,eAAO,MAAM,SAAS,QAAS,CAAC;AAEhC,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,qDAAqD;AACrD,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAK9C;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;CAMnE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAOzE;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC,CASnB;AAED,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAcD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACnC,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,CAAC,CAAC,CAmBZ;AAoBD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAAkB,CAAC;AAEjD,+CAA+C;AAC/C,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,iDAAiD;AACjD,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,CAMhE;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CAsB1E;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAC3C,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,CAAC,EAAE,CAAC,CAqCd"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Multipart-upload helpers for the sandbox filesystem. Transport-agnostic pure
3
+ * functions (part planning, bounded concurrency, retry/backoff) plus the
4
+ * `SandboxHttpError` carried out of HTTP calls so the retry loop can read the
5
+ * status + `Retry-After`. Ported verbatim from the legacy `@sapiom/sandbox`;
6
+ * the `Sandbox` methods that use these call through the `_client` transport.
7
+ */
8
+ /** Max parts allowed per multipart upload (Blaxel constraint). */
9
+ export const MAX_PARTS = 10000;
10
+ /** Default number of retries for a single failed part upload. */
11
+ export const DEFAULT_MAX_RETRIES = 3;
12
+ /** Default initial retry backoff in milliseconds. */
13
+ export const DEFAULT_RETRY_BASE_DELAY_MS = 50;
14
+ /** HTTP status codes worth retrying. 4xx are user errors unless explicitly transient. */
15
+ const RETRYABLE_STATUS = new Set([408, 425, 429, 500, 502, 503, 504]);
16
+ /**
17
+ * Error thrown by multipart HTTP methods when the server returns a non-2xx.
18
+ * Exposes `status` + `retryAfterMs` (parsed from `Retry-After`) so callers
19
+ * and the retry loop can make informed decisions.
20
+ */
21
+ export class SandboxHttpError extends Error {
22
+ constructor(message, status, retryAfterMs) {
23
+ super(message);
24
+ this.name = "SandboxHttpError";
25
+ this.status = status;
26
+ if (retryAfterMs !== undefined)
27
+ this.retryAfterMs = retryAfterMs;
28
+ }
29
+ }
30
+ /**
31
+ * Parse a `Retry-After` header value. Supports both forms:
32
+ * - delta-seconds integer (e.g. `"30"`)
33
+ * - HTTP-date (e.g. `"Wed, 21 Oct 2015 07:28:00 GMT"`)
34
+ */
35
+ export function parseRetryAfter(header) {
36
+ if (!header)
37
+ return undefined;
38
+ const seconds = Number(header);
39
+ if (Number.isFinite(seconds) && seconds >= 0)
40
+ return seconds * 1000;
41
+ const date = Date.parse(header);
42
+ if (!Number.isNaN(date))
43
+ return Math.max(0, date - Date.now());
44
+ return undefined;
45
+ }
46
+ /**
47
+ * Wrap a `fetch` response: if non-2xx, throw a `SandboxHttpError` carrying
48
+ * the status + Retry-After, otherwise return the response for the caller to
49
+ * parse.
50
+ */
51
+ export async function ensureOk(response, errorPrefix) {
52
+ if (response.ok)
53
+ return response;
54
+ const text = await response.text().catch(() => "");
55
+ const retryAfterMs = parseRetryAfter(response.headers.get("Retry-After"));
56
+ throw new SandboxHttpError(`${errorPrefix}: ${response.status} ${text}`, response.status, retryAfterMs);
57
+ }
58
+ /** Whether this error is worth retrying. */
59
+ function isRetryable(err) {
60
+ if (err instanceof SandboxHttpError)
61
+ return RETRYABLE_STATUS.has(err.status);
62
+ // Network-level failures (fetch rejected): typically TypeError "fetch failed"
63
+ // or AbortError. Retry non-abort errors.
64
+ if (err instanceof Error) {
65
+ if (err.name === "AbortError")
66
+ return false;
67
+ return true;
68
+ }
69
+ return false;
70
+ }
71
+ /**
72
+ * Retry `fn` up to `maxRetries` times on retryable errors with jittered
73
+ * exponential backoff. Honors `Retry-After` when the server provides one.
74
+ * Respects `signal` for prompt cancellation during the backoff wait.
75
+ */
76
+ export async function withRetry(fn, opts) {
77
+ const maxRetries = opts?.maxRetries ?? DEFAULT_MAX_RETRIES;
78
+ const base = opts?.retryBaseDelayMs ?? DEFAULT_RETRY_BASE_DELAY_MS;
79
+ const signal = opts?.signal;
80
+ for (let attempt = 0;; attempt++) {
81
+ try {
82
+ return await fn(attempt);
83
+ }
84
+ catch (err) {
85
+ if (attempt >= maxRetries || !isRetryable(err) || signal?.aborted) {
86
+ throw err;
87
+ }
88
+ const backoff = err instanceof SandboxHttpError && err.retryAfterMs !== undefined
89
+ ? err.retryAfterMs
90
+ : base * 2 ** attempt + Math.random() * base;
91
+ await sleepWithSignal(backoff, signal);
92
+ }
93
+ }
94
+ }
95
+ function sleepWithSignal(ms, signal) {
96
+ return new Promise((resolve, reject) => {
97
+ if (signal?.aborted) {
98
+ reject(new DOMException("Aborted", "AbortError"));
99
+ return;
100
+ }
101
+ const timer = setTimeout(() => {
102
+ signal?.removeEventListener("abort", onAbort);
103
+ resolve();
104
+ }, ms);
105
+ const onAbort = () => {
106
+ clearTimeout(timer);
107
+ reject(new DOMException("Aborted", "AbortError"));
108
+ };
109
+ signal?.addEventListener("abort", onAbort, { once: true });
110
+ });
111
+ }
112
+ /**
113
+ * Default part size: 5 MiB. Bottom of Blaxel's recommended 5–10 MB range
114
+ * and well clear of the Sapiom ingress 8 MiB body-size ceiling (with
115
+ * room left for multipart form-data overhead).
116
+ */
117
+ export const DEFAULT_PART_SIZE = 5 * 1024 * 1024;
118
+ /** Default number of parallel part uploads. */
119
+ export const DEFAULT_CONCURRENCY = 4;
120
+ /** Default file permissions (Blaxel default). */
121
+ export const DEFAULT_PERMISSIONS = "0644";
122
+ /**
123
+ * Normalize any supported content type into a `Blob`.
124
+ * `Blob.slice()` gives us random-access + lazy reads, so large inputs don't
125
+ * have to sit materialized in memory.
126
+ */
127
+ export function toBlob(content) {
128
+ if (content instanceof Blob)
129
+ return content;
130
+ if (typeof content === "string") {
131
+ return new Blob([new TextEncoder().encode(content)]);
132
+ }
133
+ return new Blob([content]);
134
+ }
135
+ /**
136
+ * Split a byte range into part plans.
137
+ * Always emits at least one part (even for zero-byte inputs) so the caller
138
+ * still goes through the initiate/upload/complete handshake.
139
+ */
140
+ export function planParts(totalBytes, partSize) {
141
+ if (!Number.isFinite(partSize) || partSize <= 0) {
142
+ throw new Error(`partSize must be a positive integer (got ${partSize})`);
143
+ }
144
+ const count = totalBytes === 0 ? 1 : Math.ceil(totalBytes / partSize);
145
+ if (count > MAX_PARTS) {
146
+ const minPartSize = Math.ceil(totalBytes / MAX_PARTS);
147
+ throw new Error(`File of ${totalBytes} bytes would require ${count} parts at partSize=${partSize}, ` +
148
+ `but the server accepts at most ${MAX_PARTS}. Increase partSize to at least ${minPartSize}.`);
149
+ }
150
+ const plans = [];
151
+ for (let i = 0; i < count; i++) {
152
+ const start = i * partSize;
153
+ const end = Math.min(start + partSize, totalBytes);
154
+ plans.push({ partNumber: i + 1, start, end });
155
+ }
156
+ return plans;
157
+ }
158
+ /**
159
+ * Run `worker` over `items` with at most `concurrency` promises in flight.
160
+ * Rejects on the first worker failure (and stops scheduling further items).
161
+ */
162
+ export async function runWithConcurrency(items, concurrency, worker) {
163
+ if (!Number.isFinite(concurrency) || concurrency < 1) {
164
+ throw new Error(`concurrency must be >= 1 (got ${concurrency})`);
165
+ }
166
+ const results = new Array(items.length);
167
+ let next = 0;
168
+ let failed = false;
169
+ let firstError;
170
+ const limit = Math.min(concurrency, items.length);
171
+ const runners = [];
172
+ for (let slot = 0; slot < limit; slot++) {
173
+ runners.push((async () => {
174
+ while (!failed) {
175
+ const i = next++;
176
+ if (i >= items.length)
177
+ return;
178
+ try {
179
+ results[i] = await worker(items[i], i);
180
+ }
181
+ catch (err) {
182
+ if (!failed) {
183
+ failed = true;
184
+ firstError = err;
185
+ }
186
+ return;
187
+ }
188
+ }
189
+ })());
190
+ }
191
+ await Promise.all(runners);
192
+ if (failed)
193
+ throw firstError;
194
+ return results;
195
+ }
196
+ //# sourceMappingURL=multipart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multipart.js","sourceRoot":"","sources":["../../../src/sandboxes/multipart.ts"],"names":[],"mappings":"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"}