@pipelex/sdk 0.23.0 → 0.24.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.
package/dist/runs.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { RunFailedError, RunTimeoutError } from "./errors.js";
2
+ import { MAX_TIMER_DELAY_MS } from "./timers.js";
2
3
  const TERMINAL_RUN_STATUSES = new Set([
3
4
  "COMPLETED",
4
5
  "FAILED",
@@ -17,6 +18,18 @@ export function isSuccessRunStatus(status) {
17
18
  // ── Poll loop ───────────────────────────────────────────────────────
18
19
  export const DEFAULT_POLL_INTERVAL_MS = 2_000;
19
20
  export const DEFAULT_WAIT_TIMEOUT_MS = 1_200_000; // 20 min — matches the runner's blocking execute ceiling.
21
+ /**
22
+ * Refuse wait options no poll loop can honour. A NaN would reach the sleep's timer as a
23
+ * 1 ms delay and poll in a tight loop. `startAndWaitForResult` calls this before it starts
24
+ * the run, so a bad option never leaves a started run the caller holds no id for.
25
+ */
26
+ export function assertWaitOptions(options = {}) {
27
+ const { intervalMs, timeoutMs } = options;
28
+ if (Number.isNaN(intervalMs) || Number.isNaN(timeoutMs)) {
29
+ throw new RangeError(`"intervalMs" and "timeoutMs" must be numbers, got ${String(intervalMs)} and ` +
30
+ `${String(timeoutMs)}.`);
31
+ }
32
+ }
20
33
  /**
21
34
  * Poll a single-shot result lookup (`fetchOnce`) until the run reaches a
22
35
  * terminal state. Returns the artifacts on `COMPLETED`, throws `RunFailedError`
@@ -27,6 +40,7 @@ export const DEFAULT_WAIT_TIMEOUT_MS = 1_200_000; // 20 min — matches the runn
27
40
  * delegates here, so the behavior can never drift.
28
41
  */
29
42
  export async function pollUntilResult(fetchOnce, runId, options = {}) {
43
+ assertWaitOptions(options);
30
44
  const intervalMs = options.intervalMs ?? DEFAULT_POLL_INTERVAL_MS;
31
45
  const timeoutMs = options.timeoutMs ?? DEFAULT_WAIT_TIMEOUT_MS;
32
46
  const startedAt = Date.now();
@@ -75,10 +89,12 @@ function sleep(ms, signal) {
75
89
  clearTimeout(timer);
76
90
  reject(abortError(signal));
77
91
  };
92
+ // Clamped, since a longer delay overflows the timer and would fire at once: a sleep
93
+ // past the cap ends at the cap, and the loop simply polls again.
78
94
  const timer = setTimeout(() => {
79
95
  signal?.removeEventListener("abort", onAbort);
80
96
  resolve();
81
- }, ms);
97
+ }, Math.min(ms, MAX_TIMER_DELAY_MS));
82
98
  if (signal) {
83
99
  if (signal.aborted) {
84
100
  clearTimeout(timer);
package/dist/runs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"runs.js","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runs.js","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The bound every caller-supplied delay is checked against before it reaches a timer.
3
+ * This module imports nothing, so the browser-safe `@pipelex/sdk/upload` entry can use it.
4
+ */
5
+ /**
6
+ * The longest delay `setTimeout` honours, in milliseconds. A longer one overflows, and
7
+ * Node and browsers alike then fire the timer almost at once.
8
+ */
9
+ export declare const MAX_TIMER_DELAY_MS = 2147483647;
10
+ /** Whether `value` is a delay a timer honours: a positive, finite number no larger than the cap. */
11
+ export declare function isTimerDelay(value: number): boolean;
package/dist/timers.js ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The bound every caller-supplied delay is checked against before it reaches a timer.
3
+ * This module imports nothing, so the browser-safe `@pipelex/sdk/upload` entry can use it.
4
+ */
5
+ /**
6
+ * The longest delay `setTimeout` honours, in milliseconds. A longer one overflows, and
7
+ * Node and browsers alike then fire the timer almost at once.
8
+ */
9
+ export const MAX_TIMER_DELAY_MS = 2_147_483_647;
10
+ /** Whether `value` is a delay a timer honours: a positive, finite number no larger than the cap. */
11
+ export function isTimerDelay(value) {
12
+ return Number.isFinite(value) && value > 0 && value <= MAX_TIMER_DELAY_MS;
13
+ }
14
+ //# sourceMappingURL=timers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timers.js","sourceRoot":"","sources":["../src/timers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAC;AAEhD,oGAAoG;AACpG,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,kBAAkB,CAAC;AAC5E,CAAC"}
@@ -7,21 +7,31 @@
7
7
  *
8
8
  * **This module is the browser-safe entry, `@pipelex/sdk/upload`.** Its runtime
9
9
  * import graph must never reach a Node builtin, `undici` or the client: a page
10
- * bundles it as is, with nothing marked external. It imports the error classes
11
- * and the wire types only, and `tests/upload-grant.test.ts` bundles it for the
12
- * browser with esbuild to hold it to that.
10
+ * bundles it as is, with nothing marked external. It imports the error classes,
11
+ * the timer bound in `timers.ts` and the wire types only, and
12
+ * `tests/upload-grant.test.ts` bundles it for the browser with esbuild to hold it
13
+ * to that.
13
14
  */
14
15
  import type { UploadGrant } from "./product-models.js";
15
16
  export type { UploadGrant, UploadGrantInput } from "./product-models.js";
16
17
  export { InputPreparationError, RejectedAssetError, UploadTransportError } from "./errors.js";
17
- export type { RejectedAssetCode } from "./errors.js";
18
+ export type { RejectedAssetCode, UploadTransportCode } from "./errors.js";
18
19
  /** Per-call options for {@link uploadWithGrant}. */
19
20
  export interface UploadWithGrantOptions {
20
21
  /**
21
22
  * Cancels the upload. A caller's abort propagates as the signal's own reason,
22
- * never wrapped, so it stays distinguishable from a failure.
23
+ * never wrapped, so it stays distinguishable from a failure. It ends the upload
24
+ * whenever it fires, so it can shorten the time limit but never lengthen it.
23
25
  */
24
26
  signal?: AbortSignal;
27
+ /**
28
+ * The time limit on the whole exchange with storage, in milliseconds, replacing
29
+ * the default of 60 s plus 1 s for every started 128 KiB of the file — about
30
+ * 1 Mbit/s, so 460 s for a 50 MiB file. Pass a longer one for a slower link. It
31
+ * must be a positive number no larger than 2147483647, the longest delay a timer
32
+ * honours.
33
+ */
34
+ timeoutMs?: number;
25
35
  }
26
36
  /** What a successful {@link uploadWithGrant} stored. */
27
37
  export interface GrantedUpload {
@@ -44,17 +54,30 @@ export interface GrantedUpload {
44
54
  * (`unsigned_header`), or when the grant has expired (`grant_expired`); any other
45
55
  * `4xx` (`store_refused`). Each asks for a new grant, or for the file the grant
46
56
  * was requested for.
47
- * - `UploadTransportError` (`status` is storage's when it answered) — storage
48
- * unreachable, a `5xx`, storage timing out on the body (`400 RequestTimeout`,
49
- * which wrote nothing), or a redirect, which is refused rather than followed. In a
50
- * browser a refused cross-origin request looks like an unreachable host, so the
51
- * message names that too. A grant whose `url` is not an absolute `http(s)` URL
52
- * free of user info is refused the same way, before anything is sent.
57
+ * - `UploadTransportError` (`status` is storage's when it answered, `code` says
58
+ * which) — the time limit running out (`timeout`), storage unreachable
59
+ * (`unreachable`), a `5xx` (`server_error`), storage timing out on the body
60
+ * (`storage_timeout`, a `400 RequestTimeout`, which wrote nothing), another upload
61
+ * with the same grant still in progress (`conflict`, a `409
62
+ * ConditionalRequestConflict`), or a redirect, which is refused rather than
63
+ * followed (`redirected`). In a browser a refused cross-origin request looks like
64
+ * an unreachable host, so the message names that too. A grant whose `url` is not
65
+ * an absolute `http(s)` URL free of user info is refused the same way, before
66
+ * anything is sent (`invalid_grant_url`).
67
+ *
68
+ * The whole exchange runs under a time limit: `timeoutMs` when given, else 60 s plus
69
+ * 1 s for every started 128 KiB of the file. A caller's `signal` can end it sooner,
70
+ * and its abort propagates as the signal's own reason, unwrapped, even when the time
71
+ * limit ran out too. Only the first 16 KiB of storage's error body are read, and when
72
+ * the limit runs out while that body is still arriving, storage has already answered:
73
+ * the call settles as that answer, classified from its status and whatever part of the
74
+ * body arrived.
53
75
  *
54
- * A `5xx` leaves it unknown whether the object was written: retrying with the same
55
- * grant either stores it or answers the `412` of a used grant, and then the grant's
56
- * `uri` may already name the file. The grant is a bearer capability: nothing here
57
- * logs it, and no error this throws carries its URL, storage's error body or a
76
+ * A timeout, a `5xx`, a conflict and a connection lost after the file went out leave
77
+ * it unknown whether the object was written: retrying with the same grant before it
78
+ * expires either stores it or answers the `412` of a used grant, and then the
79
+ * grant's `uri` already names the file. The grant is a bearer capability: nothing
80
+ * here logs it, and no error this throws carries its URL, storage's error body or a
58
81
  * runtime error that could hold either.
59
82
  */
60
83
  export declare function uploadWithGrant(grant: UploadGrant, file: Blob, options?: UploadWithGrantOptions): Promise<GrantedUpload>;
@@ -7,13 +7,29 @@
7
7
  *
8
8
  * **This module is the browser-safe entry, `@pipelex/sdk/upload`.** Its runtime
9
9
  * import graph must never reach a Node builtin, `undici` or the client: a page
10
- * bundles it as is, with nothing marked external. It imports the error classes
11
- * and the wire types only, and `tests/upload-grant.test.ts` bundles it for the
12
- * browser with esbuild to hold it to that.
10
+ * bundles it as is, with nothing marked external. It imports the error classes,
11
+ * the timer bound in `timers.ts` and the wire types only, and
12
+ * `tests/upload-grant.test.ts` bundles it for the browser with esbuild to hold it
13
+ * to that.
13
14
  */
14
- import { RejectedAssetError, UploadTransportError } from "./errors.js";
15
+ import { InputPreparationError, RejectedAssetError, UploadTransportError } from "./errors.js";
16
+ import { MAX_TIMER_DELAY_MS, isTimerDelay } from "./timers.js";
15
17
  // The classes `uploadWithGrant` raises, so a page can branch on them without the main entry.
16
18
  export { InputPreparationError, RejectedAssetError, UploadTransportError } from "./errors.js";
19
+ /**
20
+ * The default time limit on the `PUT`: a minute to open the exchange and hear back,
21
+ * plus a second for every started 128 KiB of the file, about 1 Mbit/s — 460 s at the
22
+ * 50 MiB cap. The grant's expiry bounds nothing here: storage checks the signature
23
+ * when the request starts, not when it ends.
24
+ */
25
+ const DEFAULT_TIMEOUT_BASE_MS = 60_000;
26
+ const DEFAULT_TIMEOUT_BYTES_PER_SECOND = 128 * 1024;
27
+ /**
28
+ * How much of storage's error body is read. S3 writes `<Code>` and `<Message>` first,
29
+ * and the longest document this meets, a signature mismatch echoing the canonical
30
+ * request, runs to a few kilobytes after them.
31
+ */
32
+ const ERROR_BODY_MAX_BYTES = 16 * 1024;
17
33
  /**
18
34
  * `PUT` a file to storage with an upload grant, and return the reference it now
19
35
  * carries. The file goes as the raw body with the grant's signed headers
@@ -30,85 +46,202 @@ export { InputPreparationError, RejectedAssetError, UploadTransportError } from
30
46
  * (`unsigned_header`), or when the grant has expired (`grant_expired`); any other
31
47
  * `4xx` (`store_refused`). Each asks for a new grant, or for the file the grant
32
48
  * was requested for.
33
- * - `UploadTransportError` (`status` is storage's when it answered) — storage
34
- * unreachable, a `5xx`, storage timing out on the body (`400 RequestTimeout`,
35
- * which wrote nothing), or a redirect, which is refused rather than followed. In a
36
- * browser a refused cross-origin request looks like an unreachable host, so the
37
- * message names that too. A grant whose `url` is not an absolute `http(s)` URL
38
- * free of user info is refused the same way, before anything is sent.
49
+ * - `UploadTransportError` (`status` is storage's when it answered, `code` says
50
+ * which) — the time limit running out (`timeout`), storage unreachable
51
+ * (`unreachable`), a `5xx` (`server_error`), storage timing out on the body
52
+ * (`storage_timeout`, a `400 RequestTimeout`, which wrote nothing), another upload
53
+ * with the same grant still in progress (`conflict`, a `409
54
+ * ConditionalRequestConflict`), or a redirect, which is refused rather than
55
+ * followed (`redirected`). In a browser a refused cross-origin request looks like
56
+ * an unreachable host, so the message names that too. A grant whose `url` is not
57
+ * an absolute `http(s)` URL free of user info is refused the same way, before
58
+ * anything is sent (`invalid_grant_url`).
59
+ *
60
+ * The whole exchange runs under a time limit: `timeoutMs` when given, else 60 s plus
61
+ * 1 s for every started 128 KiB of the file. A caller's `signal` can end it sooner,
62
+ * and its abort propagates as the signal's own reason, unwrapped, even when the time
63
+ * limit ran out too. Only the first 16 KiB of storage's error body are read, and when
64
+ * the limit runs out while that body is still arriving, storage has already answered:
65
+ * the call settles as that answer, classified from its status and whatever part of the
66
+ * body arrived.
39
67
  *
40
- * A `5xx` leaves it unknown whether the object was written: retrying with the same
41
- * grant either stores it or answers the `412` of a used grant, and then the grant's
42
- * `uri` may already name the file. The grant is a bearer capability: nothing here
43
- * logs it, and no error this throws carries its URL, storage's error body or a
68
+ * A timeout, a `5xx`, a conflict and a connection lost after the file went out leave
69
+ * it unknown whether the object was written: retrying with the same grant before it
70
+ * expires either stores it or answers the `412` of a used grant, and then the
71
+ * grant's `uri` already names the file. The grant is a bearer capability: nothing
72
+ * here logs it, and no error this throws carries its URL, storage's error body or a
44
73
  * runtime error that could hold either.
45
74
  */
46
75
  export async function uploadWithGrant(grant, file, options = {}) {
47
76
  const label = fileLabel(grant, file);
48
- const { signal } = options;
49
- // A caller's abort wins over a grant this would refuse, as it does over a failed request.
77
+ const { signal, timeoutMs } = options;
78
+ // A caller's abort wins over a grant or an option this would refuse, as it does over a
79
+ // failed request.
50
80
  if (signal?.aborted)
51
81
  throw signal.reason;
82
+ if (timeoutMs !== undefined)
83
+ requireTimeout(timeoutMs);
84
+ const limitMs = timeoutMs ?? defaultTimeoutMs(file.size);
52
85
  const target = storageTarget(grant, label);
53
- let response;
86
+ // The call's own controller carries both ways the exchange can be cut short: the
87
+ // caller's signal, forwarded into it, and the time limit, which also covers reading
88
+ // storage's error body.
89
+ const controller = new AbortController();
90
+ let timedOut = false;
91
+ const timer = setTimeout(() => {
92
+ timedOut = true;
93
+ controller.abort(new DOMException("The upload timed out.", "TimeoutError"));
94
+ }, limitMs);
95
+ const onCallerAbort = () => controller.abort(signal?.reason);
96
+ signal?.addEventListener("abort", onCallerAbort, { once: true });
54
97
  try {
55
- response = await fetch(grant.url, {
56
- method: "PUT",
57
- headers: grant.headers,
58
- body: file,
59
- // A presigned URL signs its host, so a redirect could never succeed; refusing
60
- // it keeps the file from being sent anywhere the grant did not name.
61
- redirect: "manual",
62
- signal,
63
- });
64
- }
65
- catch (error) {
66
- // The signal's reason, not the runtime's error: some runtimes reject with a
67
- // generic AbortError instead of the caller's own reason.
98
+ let response;
99
+ try {
100
+ response = await fetch(grant.url, {
101
+ method: "PUT",
102
+ headers: grant.headers,
103
+ body: file,
104
+ // A presigned URL signs its host, so a redirect could never succeed; refusing
105
+ // it keeps the file from being sent anywhere the grant did not name.
106
+ redirect: "manual",
107
+ signal: controller.signal,
108
+ });
109
+ }
110
+ catch (error) {
111
+ // The signals' outcome, not the runtime's error: some runtimes reject with a generic
112
+ // AbortError instead of the reason. A caller's abort wins over the time limit, since
113
+ // it is the one the caller can see and act on.
114
+ if (signal?.aborted)
115
+ throw signal.reason;
116
+ if (timedOut)
117
+ throw timeoutError(label, limitMs, grant);
118
+ // Neither the runtime's message nor the error itself is kept: either can carry the
119
+ // request URL, and with it the grant's credential (Bun puts it on the error's `path`).
120
+ throw new UploadTransportError(`Upload of "${label}" could not reach storage at ${target.origin} ` +
121
+ `(${describeNetworkFailure(error)}). In a browser, a refused cross-origin request ` +
122
+ "looks the same: check that the page may connect to the storage origin (its CSP " +
123
+ "connect-src). If the connection failed after the file went out, storage may have " +
124
+ `stored it anyway. ${sameGrantRetry(grant)}`, { code: "unreachable" });
125
+ }
126
+ // A body is cancelled, never awaited: a stream's cancel can outlive any time limit.
127
+ if (response.status >= 200 && response.status < 300) {
128
+ void response.body?.cancel().catch(() => undefined);
129
+ return { uri: grant.uri };
130
+ }
131
+ // A browser reports a refused redirect as an opaque response with status 0.
132
+ if (response.type === "opaqueredirect" || (response.status >= 300 && response.status < 400)) {
133
+ void response.body?.cancel().catch(() => undefined);
134
+ throw new UploadTransportError(`Upload of "${label}" was redirected by storage, and the redirect was refused: a ` +
135
+ "presigned upload is valid only at the URL it was signed for.",
136
+ // A refused redirect in a browser is opaque, with status 0: no status reached us.
137
+ { status: response.status || undefined, code: "redirected" });
138
+ }
139
+ // Only the error's code and message are kept, never the body: S3 echoes the
140
+ // canonical request on a signature mismatch, and with it the grant's credential.
141
+ const body = await readErrorPrefix(response, ERROR_BODY_MAX_BYTES, controller.signal);
142
+ // A caller's abort while the body streams stays the caller's, unwrapped. The time limit
143
+ // running out then is no timeout: storage has answered, and its status says what
144
+ // happened, read with whatever part of the body arrived.
68
145
  if (signal?.aborted)
69
146
  throw signal.reason;
70
- // Neither the runtime's message nor the error itself is kept: either can carry the
71
- // request URL, and with it the grant's credential (Bun puts it on the error's `path`).
72
- throw new UploadTransportError(`Upload of "${label}" could not reach storage at ${target.origin} ` +
73
- `(${describeNetworkFailure(error)}). In a browser, a refused cross-origin request ` +
74
- "looks the same: check that the page may connect to the storage origin (its CSP " +
75
- "connect-src).");
147
+ const refusal = parseStorageError(body);
148
+ const status = response.status;
149
+ if (status === 400 && refusal.code === "RequestTimeout") {
150
+ throw new UploadTransportError(`Upload of "${label}" timed out at storage (${describeStatus(response, refusal)}): ` +
151
+ "storage stopped waiting for the file's bytes and wrote nothing. Retry with the same " +
152
+ `grant before it expires at ${grant.expires_at}, or with a new one.`, { status, code: "storage_timeout" });
153
+ }
154
+ // S3 answers this when two create-only PUTs for one key overlap, and documents it as
155
+ // retryable: it says nothing about this file, so it is no refusal of it.
156
+ if (status === 409 && refusal.code === "ConditionalRequestConflict") {
157
+ throw new UploadTransportError(`Upload of "${label}" met another upload with the same grant still in progress at ` +
158
+ `storage (${describeStatus(response, refusal)}), so whether the file was stored is ` +
159
+ `unknown. Send a grant once at a time. ${sameGrantRetry(grant)}`, { status, code: "conflict" });
160
+ }
161
+ if (status >= 400 && status < 500) {
162
+ const { code, advice } = classifyRefusal(status, refusal, grant);
163
+ throw new RejectedAssetError(`Storage refused the upload of "${label}" (${describeStatus(response, refusal)}): ${advice}`, label, status, { code });
164
+ }
165
+ throw new UploadTransportError(`Upload of "${label}" failed at storage (${describeStatus(response, refusal)})` +
166
+ (refusal.message ? `: ${withoutFinalPeriod(refusal.message)}` : "") +
167
+ `. Whether the file was stored is unknown. ${sameGrantRetry(grant)}`, { status, code: status >= 500 ? "server_error" : "unexpected" });
76
168
  }
77
- if (response.status >= 200 && response.status < 300) {
78
- await response.body?.cancel().catch(() => undefined);
79
- return { uri: grant.uri };
169
+ finally {
170
+ clearTimeout(timer);
171
+ signal?.removeEventListener("abort", onCallerAbort);
80
172
  }
81
- // A browser reports a refused redirect as an opaque response with status 0.
82
- if (response.type === "opaqueredirect" || (response.status >= 300 && response.status < 400)) {
83
- await response.body?.cancel().catch(() => undefined);
84
- throw new UploadTransportError(`Upload of "${label}" was redirected by storage, and the redirect was refused: a ` +
85
- "presigned upload is valid only at the URL it was signed for.",
86
- // A refused redirect in a browser is opaque, with status 0: no status reached us.
87
- { status: response.status || undefined });
173
+ }
174
+ /** The default time limit for a file of `size` bytes, capped at what a timer honours. */
175
+ function defaultTimeoutMs(size) {
176
+ const seconds = Math.ceil(size / DEFAULT_TIMEOUT_BYTES_PER_SECOND);
177
+ return Math.min(DEFAULT_TIMEOUT_BASE_MS + seconds * 1_000, MAX_TIMER_DELAY_MS);
178
+ }
179
+ /** A caller's `timeoutMs`, refused before anything is sent when no timer could honour it. */
180
+ function requireTimeout(timeoutMs) {
181
+ if (!isTimerDelay(timeoutMs)) {
182
+ throw new InputPreparationError(`"timeoutMs" must be a positive number no larger than ${MAX_TIMER_DELAY_MS}, got ` +
183
+ `${String(timeoutMs)}.`);
88
184
  }
89
- // Only the error's code and message are kept, never the body: S3 echoes the
90
- // canonical request on a signature mismatch, and with it the grant's credential.
91
- const body = await response.text().catch(() => {
92
- // A caller's abort errors the body stream too, and stays the caller's, unwrapped.
93
- // Chrome and Firefox error it with a generic AbortError, so the reason is the signal's.
94
- if (signal?.aborted)
95
- throw signal.reason;
185
+ }
186
+ function timeoutError(label, limitMs, grant) {
187
+ return new UploadTransportError(`Upload of "${label}" did not finish within the ${formatSeconds(limitMs)} s allowed, so ` +
188
+ "whether storage stored the file is unknown. On a slow link, pass a longer timeoutMs. " +
189
+ sameGrantRetry(grant), { code: "timeout" });
190
+ }
191
+ /** What to do when the upload may have been stored: the grant itself tells, on a retry. */
192
+ function sameGrantRetry(grant) {
193
+ return (`Retrying with the same grant before it expires at ${grant.expires_at} either stores ` +
194
+ "the file or reports the grant as used, and then the grant's uri already names the file.");
195
+ }
196
+ function formatSeconds(ms) {
197
+ return String(Number((ms / 1_000).toFixed(3)));
198
+ }
199
+ /** A message whose own final period would double the one the sentence adds after it. */
200
+ function withoutFinalPeriod(message) {
201
+ return message.replace(/\.\s*$/, "");
202
+ }
203
+ /**
204
+ * The first `maxBytes` of storage's error body as text: whatever arrived before the body
205
+ * ended, failed, reached the cap or was cut short by `abort`, since even a partial body
206
+ * may carry S3's code. The rest is cancelled unread, and the cancellation is never
207
+ * awaited, since a stream's cancel can outlive any time limit.
208
+ */
209
+ async function readErrorPrefix(response, maxBytes, abort) {
210
+ if (response.body === null)
96
211
  return "";
97
- });
98
- const refusal = parseStorageError(body);
99
- const status = response.status;
100
- if (status === 400 && refusal.code === "RequestTimeout") {
101
- throw new UploadTransportError(`Upload of "${label}" timed out at storage (${describeStatus(response, refusal)}): ` +
102
- "storage stopped waiting for the file's bytes and wrote nothing. Retry with the same " +
103
- `grant before it expires at ${grant.expires_at}, or with a new one.`, { status });
212
+ const reader = response.body.getReader();
213
+ // Cancelled explicitly on abort, on top of the request's own abort, so a stalled body
214
+ // never holds the read past the time limit: a cancel ends a pending read at once.
215
+ const cancel = () => {
216
+ void reader.cancel().catch(() => undefined);
217
+ };
218
+ if (abort.aborted) {
219
+ cancel();
220
+ return "";
221
+ }
222
+ abort.addEventListener("abort", cancel, { once: true });
223
+ const decoder = new TextDecoder();
224
+ let text = "";
225
+ let received = 0;
226
+ try {
227
+ while (received < maxBytes) {
228
+ const chunk = await reader.read();
229
+ if (chunk.done)
230
+ break;
231
+ const bytes = chunk.value.subarray(0, maxBytes - received);
232
+ received += bytes.byteLength;
233
+ text += decoder.decode(bytes, { stream: true });
234
+ }
235
+ if (received >= maxBytes)
236
+ cancel();
237
+ }
238
+ catch {
239
+ // The body failed mid-stream, or a runtime errored it on abort: what arrived stands.
104
240
  }
105
- if (status >= 400 && status < 500) {
106
- const { code, advice } = classifyRefusal(status, refusal, grant);
107
- throw new RejectedAssetError(`Storage refused the upload of "${label}" (${describeStatus(response, refusal)}): ${advice}`, label, status, { code });
241
+ finally {
242
+ abort.removeEventListener("abort", cancel);
108
243
  }
109
- throw new UploadTransportError(`Upload of "${label}" failed at storage (${describeStatus(response, refusal)})` +
110
- (refusal.message ? `: ${refusal.message}` : "") +
111
- ". Retrying with the same grant either stores the file or reports the grant as used.", { status });
244
+ return text + decoder.decode();
112
245
  }
113
246
  /**
114
247
  * The grant's URL, parsed before anything is sent. A runtime that cannot build a request
@@ -131,7 +264,7 @@ function storageTarget(grant, label) {
131
264
  target.password !== "") {
132
265
  throw new UploadTransportError(`Upload of "${label}" was not sent: the grant's url is not an absolute http(s) URL ` +
133
266
  "free of user info, so it is not the one requestUploadGrant returned. Pass the grant " +
134
- "on unchanged.");
267
+ "on unchanged.", { code: "invalid_grant_url" });
135
268
  }
136
269
  return target;
137
270
  }
@@ -1 +1 @@
1
- {"version":3,"file":"upload-grant.js","sourceRoot":"","sources":["../src/upload-grant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload-grant.js","sourceRoot":"","sources":["../src/upload-grant.ts"],"names":[],"mappings":"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"}
package/dist/upload.js CHANGED
@@ -135,11 +135,17 @@ function mapUploadError(error, filename) {
135
135
  return new UnsupportedUploadCapabilityError("The configured Pipelex deployment does not support file upload (no /v1/upload route). " +
136
136
  "Upload is a hosted Pipelex capability.", { cause: error });
137
137
  default:
138
- return new UploadTransportError(`Upload of "${filename}" failed (${error.status}): ${error.serverMessage ?? error.statusText}.`, { cause: error, status: error.status });
138
+ return new UploadTransportError(`Upload of "${filename}" failed (${error.status}): ${error.serverMessage ?? error.statusText}.`, {
139
+ cause: error,
140
+ status: error.status,
141
+ code: error.status >= 500 ? "server_error" : "unexpected",
142
+ });
139
143
  }
140
144
  }
141
145
  if (error instanceof ApiUnreachableError) {
142
- return new UploadTransportError(`Upload of "${filename}" could not reach the Pipelex API (${error.code ?? "unreachable"}).`, { cause: error });
146
+ return new UploadTransportError(`Upload of "${filename}" could not reach the Pipelex API (${error.code ?? "unreachable"}).`,
147
+ // The client's own request timeout surfaces as an unreachable host with this code.
148
+ { cause: error, code: error.code === "ABORT_TIMEOUT" ? "timeout" : "unreachable" });
143
149
  }
144
150
  // Only errors thrown by the `client.upload()` call reach here — the local-source
145
151
  // and asset-type failures are raised in `toAssetBytes`, before this try block. Any
@@ -149,6 +155,7 @@ function mapUploadError(error, filename) {
149
155
  const detail = error instanceof Error ? error.message : String(error);
150
156
  return new UploadTransportError(`Upload of "${filename}" failed unexpectedly: ${detail}.`, {
151
157
  cause: error,
158
+ code: "unexpected",
152
159
  });
153
160
  }
154
161
  //# sourceMappingURL=upload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.js","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,gCAAgC,GACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAmCpE,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AACxD,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAEtC,MAAM,cAAc,GAA2B;IAC7C,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,kBAAkB;CACzB,CAAC;AAEF,kEAAkE;AAClE,MAAM,UAAU,aAAa;IAC3B,OAAO,CACL,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAC5F,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACzC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,oBAAoB,CAAC;IACxE,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAClD,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,oBAAoB,CAAC;AACrD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,MAAM,IAAI,uBAAuB,CAC/B,+BAA+B,IAAI,+CAA+C;YAChF,+FAA+F,EACjG,IAAI,CACL,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACtD,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,uBAAuB,CAC/B,+BAA+B,IAAI,MAAO,KAA2B,CAAC,IAAI,IAAI,YAAY,IAAI,EAC9F,IAAI,EACJ,EAAE,KAAK,EAAE,CACV,CAAC;IACJ,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,kDAAkD;IACxE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,EAAE,CAAC;QACzD,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AASD,6EAA6E;AAC7E,KAAK,UAAU,YAAY,CACzB,KAAsB,EACtB,OAA0B;IAE1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7F,CAAC;IACD,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,oBAAoB,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IACD,0DAA0D;IAC1D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAK,KAAc,CAAC,IAAI,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACnE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAiB,EAAE,OAA0B;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IACtD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAA2B,EAC3B,KAAsB,EACtB,UAA6B,EAAE;IAE/B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,QAA2C,CAAC;IAChD,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAC7F,CAAC;AAED,sFAAsF;AACtF,SAAS,cAAc,CAAC,KAAc,EAAE,QAAgB;IACtD,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;QACtC,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG;gBACN,OAAO,IAAI,kBAAkB,CAC3B,wBAAwB,QAAQ,MAAM,KAAK,CAAC,aAAa,IAAI,sCAAsC,GAAG,EACtG,QAAQ,EACR,KAAK,CAAC,MAAM,EACZ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CACpC,CAAC;YACJ,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,OAAO,IAAI,yBAAyB,CAClC,cAAc,QAAQ,yBAAyB,KAAK,CAAC,MAAM,0CAA0C,EACrG,KAAK,CAAC,MAAM,EACZ,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,KAAK,GAAG;gBACN,OAAO,IAAI,gCAAgC,CACzC,wFAAwF;oBACtF,wCAAwC,EAC1C,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ;gBACE,OAAO,IAAI,oBAAoB,CAC7B,cAAc,QAAQ,aAAa,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,UAAU,GAAG,EAC/F,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CACvC,CAAC;QACN,CAAC;IACH,CAAC;IACD,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,OAAO,IAAI,oBAAoB,CAC7B,cAAc,QAAQ,sCAAsC,KAAK,CAAC,IAAI,IAAI,aAAa,IAAI,EAC3F,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;IACD,iFAAiF;IACjF,mFAAmF;IACnF,qFAAqF;IACrF,kFAAkF;IAClF,2EAA2E;IAC3E,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,OAAO,IAAI,oBAAoB,CAAC,cAAc,QAAQ,0BAA0B,MAAM,GAAG,EAAE;QACzF,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -3,4 +3,4 @@
3
3
  * `User-Agent` without importing the public barrel. Kept in sync with
4
4
  * `package.json` — enforced by `tests/index.test.ts`.
5
5
  */
6
- export declare const SDK_VERSION = "0.23.0";
6
+ export declare const SDK_VERSION = "0.24.0";
package/dist/version.js CHANGED
@@ -3,5 +3,5 @@
3
3
  * `User-Agent` without importing the public barrel. Kept in sync with
4
4
  * `package.json` — enforced by `tests/index.test.ts`.
5
5
  */
6
- export const SDK_VERSION = "0.23.0";
6
+ export const SDK_VERSION = "0.24.0";
7
7
  //# sourceMappingURL=version.js.map