@chrismessina/raycast-downloader 0.1.0 → 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.
- package/README.md +20 -1
- package/dist/curl.d.ts +2 -0
- package/dist/curl.d.ts.map +1 -1
- package/dist/curl.js +32 -1
- package/dist/curl.js.map +1 -1
- package/dist/detach.d.ts +7 -0
- package/dist/detach.d.ts.map +1 -1
- package/dist/detach.js +2 -1
- package/dist/detach.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/paths.d.ts +29 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +85 -0
- package/dist/paths.js.map +1 -1
- package/dist/runner.bundle.js +176 -5
- package/dist/runner.js +59 -4
- package/dist/runner.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -33,7 +33,9 @@ watchStatus(ticket.id, {
|
|
|
33
33
|
|
|
34
34
|
**Survives:** Raycast dismissal, the command being unloaded, the parent process exiting.
|
|
35
35
|
|
|
36
|
-
**Does not survive** (without user action): machine sleep, power loss, unattended network drops.
|
|
36
|
+
**Does not survive** (without user action): machine sleep, power loss, unattended network drops. A partial file is retained so an interrupted transfer resumes via HTTP Range instead of starting over.
|
|
37
|
+
|
|
38
|
+
**One exception, and it is deliberate:** a partial is discarded when it cannot be proven safe to resume from. An unfollowed 3xx leaves the redirect body in the `.part` file; that tail is rolled back, and if the rollback cannot be verified the partial is deleted rather than kept. `curl -C -` appends from the file's current size, so resuming onto unverified bytes would splice the real file after redirect HTML and publish it under the user's filename. Progress is recoverable; a corrupt file is not. If the partial cannot be deleted either, the status records the failure and consumers must not resume that path.
|
|
37
39
|
|
|
38
40
|
This is stated narrowly on purpose. Detached spawn solves parent-process-exit — the problem Raycast creates. It is not a download supervisor.
|
|
39
41
|
|
|
@@ -119,8 +121,25 @@ Import from the root or from a subpath (`@chrismessina/raycast-downloader/paths`
|
|
|
119
121
|
|
|
120
122
|
## Notes for consumers
|
|
121
123
|
|
|
124
|
+
**A 3xx is never a successful download — including with redirects on.** Success is strictly 2xx. With redirects on (the default) curl follows the hops and reports the final 2xx, so the usual redirect is invisible to you; but `--location` only follows a response carrying a usable `Location`, so a **304** (you sent a conditional header) or a **300** ends the transfer as itself. Those now fail with `http_client` rather than publishing an empty or stale file. With `followRedirects: false`, curl writes the redirect *body* to the `.part` file and exits 0 — that stub is discarded and the download fails with "The server redirected (HTTP 302) but redirects are disabled." Expose the preference if your users need it; don't expect a 302 to still produce a file.
|
|
125
|
+
|
|
122
126
|
**Never put a signed URL in `meta`.** It is persisted to the status file. Store an identifier you can re-resolve from instead.
|
|
123
127
|
|
|
128
|
+
**Validating `outputPath` is yours.** Layer A writes to the path you hand it, and does not check that the path lands where you meant. That is deliberate — the user picks the download location, and a library that overrode it would be wrong more often than right — but it means a path you derived from anything untrusted is your problem, not the library's. A `Content-Disposition` filename, an API-supplied name, or a title pulled from a page can all contain `../` or a path separator, and a symlink in the destination directory can redirect the final rename after your own check passed.
|
|
129
|
+
|
|
130
|
+
`paths` exports the two pieces for this, and the only reason they are not applied for you is that doing so would constrain legitimate destinations:
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
import { isContained, sanitizeFilename } from "@chrismessina/raycast-downloader/paths";
|
|
134
|
+
|
|
135
|
+
const filename = sanitizeFilename(remoteName); // strips separators and traversal runs
|
|
136
|
+
const outputPath = join(downloadsDir, filename);
|
|
137
|
+
// Note the order: candidate first, root second.
|
|
138
|
+
if (!isContained(outputPath, downloadsDir)) throw new Error("refusing to write outside the download directory");
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
`isContained` is component-aware and resolves existing symlink ancestors, so it is doing more than a `startsWith` on the two strings.
|
|
142
|
+
|
|
124
143
|
**Retry policy is yours.** Consumers differ too much to share one: `DownloadError.retryable` gives you the signal, the loop stays in your code.
|
|
125
144
|
|
|
126
145
|
**`uniquePath` numbering starts where you say.** Existing extensions differ (`(1)` vs `(2)`); `startAt` preserves that, because unifying it silently renames files users already have.
|
package/dist/curl.d.ts
CHANGED
|
@@ -94,6 +94,8 @@ export interface ClassifyCurlInput {
|
|
|
94
94
|
stderrTail?: string;
|
|
95
95
|
/** True when the local process deliberately terminated curl. */
|
|
96
96
|
cancelled?: boolean;
|
|
97
|
+
/** Whether the request was made with redirects enabled. Default true. */
|
|
98
|
+
followRedirects?: boolean;
|
|
97
99
|
}
|
|
98
100
|
/**
|
|
99
101
|
* Turn a finished curl invocation into a typed error.
|
package/dist/curl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curl.d.ts","sourceRoot":"","sources":["../src/curl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,aAAa,EAA0B,KAAK,UAAU,EAAsB,MAAM,UAAU,CAAC;AAetG,wBAAgB,OAAO,IAAI,OAAO,CAWjC;AAED,yFAAyF;AACzF,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CA+ClE;AAuBD,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CA0BlE;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAW3E;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAQ/E;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAU1D;AAwBD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"curl.d.ts","sourceRoot":"","sources":["../src/curl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,aAAa,EAA0B,KAAK,UAAU,EAAsB,MAAM,UAAU,CAAC;AAetG,wBAAgB,OAAO,IAAI,OAAO,CAWjC;AAED,yFAAyF;AACzF,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CA+ClE;AAuBD,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CA0BlE;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAW3E;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAQ/E;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAU1D;AAwBD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yEAAyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,aAAa,CA4C3E"}
|
package/dist/curl.js
CHANGED
|
@@ -225,10 +225,26 @@ const EXIT_CODES = {
|
|
|
225
225
|
* "curl exited 22".
|
|
226
226
|
*/
|
|
227
227
|
function classifyCurlFailure(input) {
|
|
228
|
-
const { exitCode, signal, httpCode, stderrTail, cancelled } = input;
|
|
228
|
+
const { exitCode, signal, httpCode, stderrTail, cancelled, followRedirects = true } = input;
|
|
229
229
|
if (cancelled || signal === "SIGTERM" || signal === "SIGINT") {
|
|
230
230
|
return new errors_1.DownloadError("cancelled", "Download cancelled.", { exitCode, signal });
|
|
231
231
|
}
|
|
232
|
+
// A 3xx only reaches here when redirects were DISABLED: with `location` set,
|
|
233
|
+
// curl reports the status of the final hop, never the redirect itself. curl
|
|
234
|
+
// exits 0 for an unfollowed redirect, so without this branch the code falls
|
|
235
|
+
// past EXIT_CODES[0] into the last-resort message and reports
|
|
236
|
+
// "Download failed (curl exit 0)." for a perfectly explicable outcome.
|
|
237
|
+
// Gated on a CLEAN exit: curl exits 47 ("Too many redirects") while reporting
|
|
238
|
+
// a 3xx http_code, and that is a redirect loop, not an unfollowed redirect.
|
|
239
|
+
// Letting this branch win would relabel it.
|
|
240
|
+
if (exitCode === 0 && httpCode !== undefined && httpCode >= 300 && httpCode < 400) {
|
|
241
|
+
return new errors_1.DownloadError(
|
|
242
|
+
// `http_client`, not a new code: the request did not yield the body and
|
|
243
|
+
// the caller must change something (enable redirects, drop a conditional
|
|
244
|
+
// header, pass the final URL) — exactly the non-retryable bucket
|
|
245
|
+
// `http_client` names.
|
|
246
|
+
"http_client", unfollowedRedirectMessage(httpCode, followRedirects), { httpStatus: httpCode, exitCode, signal });
|
|
247
|
+
}
|
|
232
248
|
if (httpCode !== undefined && httpCode >= 400) {
|
|
233
249
|
const code = (0, errors_1.classifyHttpStatus)(httpCode);
|
|
234
250
|
return new errors_1.DownloadError(code, httpErrorMessage(httpCode), { httpStatus: httpCode, exitCode, signal });
|
|
@@ -241,6 +257,21 @@ function classifyCurlFailure(input) {
|
|
|
241
257
|
const detail = stderrTail?.trim().split("\n").pop()?.trim();
|
|
242
258
|
return new errors_1.DownloadError("unknown", detail ? `Download failed: ${detail}` : `Download failed (curl exit ${exitCode ?? "unknown"}).`, { exitCode, signal, httpStatus: httpCode });
|
|
243
259
|
}
|
|
260
|
+
/**
|
|
261
|
+
* Wording for a 3xx that curl exited 0 on.
|
|
262
|
+
*
|
|
263
|
+
* `location` does NOT guarantee the absence of a final 3xx: curl only follows a
|
|
264
|
+
* response that carries a usable `Location`. A 304 (the caller sent a
|
|
265
|
+
* conditional header) and a 300 (multiple choices, no `Location`) both end the
|
|
266
|
+
* transfer as themselves, with redirects fully enabled.
|
|
267
|
+
*/
|
|
268
|
+
function unfollowedRedirectMessage(status, followRedirects) {
|
|
269
|
+
if (status === 304)
|
|
270
|
+
return "The server reported the file as unchanged (HTTP 304) and sent no content.";
|
|
271
|
+
if (!followRedirects)
|
|
272
|
+
return `The server redirected (HTTP ${status}) but redirects are disabled.`;
|
|
273
|
+
return `The server returned a redirect that could not be followed (HTTP ${status}).`;
|
|
274
|
+
}
|
|
244
275
|
function httpErrorMessage(status) {
|
|
245
276
|
switch (status) {
|
|
246
277
|
case 401:
|
package/dist/curl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curl.js","sourceRoot":"","sources":["../src/curl.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AAiBH,0BAWC;AAwCD,0CA+CC;AA2CD,wCA0BC;AAGD,sCAWC;AAGD,8CAQC;AASD,sCAUC;
|
|
1
|
+
{"version":3,"file":"curl.js","sourceRoot":"","sources":["../src/curl.ts"],"names":[],"mappings":"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"}
|
package/dist/detach.d.ts
CHANGED
|
@@ -45,6 +45,13 @@ export interface StartDownloadOptions {
|
|
|
45
45
|
sizeCheck?: "strict" | "advisory";
|
|
46
46
|
/** Continue from an existing partial file via HTTP Range. Default true. */
|
|
47
47
|
resume?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Follow HTTP redirects (curl `--location`). Default true.
|
|
50
|
+
*
|
|
51
|
+
* Turning it off is a real choice, not a no-op: an unfollowed 3xx is then a
|
|
52
|
+
* FAILURE, because the body curl writes is the redirect stub, not the file.
|
|
53
|
+
*/
|
|
54
|
+
followRedirects?: boolean;
|
|
48
55
|
speedLimitBytes?: number;
|
|
49
56
|
stallSeconds?: number;
|
|
50
57
|
/** Cap transfer rate in bytes/sec. Actually slows the download. */
|
package/dist/detach.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detach.d.ts","sourceRoot":"","sources":["../src/detach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAUH,OAAO,EASL,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAClC,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACjF;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AA2DD;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAWnC;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"detach.d.ts","sourceRoot":"","sources":["../src/detach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAUH,OAAO,EASL,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAClC,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACjF;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AA2DD;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAWnC;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAuI1F;AAuBD,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,EACpC,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,OAAO,CAAC,CAoFlB;AAoCD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAEpF"}
|
package/dist/detach.js
CHANGED
|
@@ -115,7 +115,7 @@ function runnerSearchPaths() {
|
|
|
115
115
|
* status, so the caller can immediately watch a file that exists.
|
|
116
116
|
*/
|
|
117
117
|
async function startDownload(options) {
|
|
118
|
-
const { id = (0, node_crypto_1.randomUUID)(), url, outputPath, headers, expectedBytes, resume = true, speedLimitBytes, stallSeconds, limitRateBytes, sizeCheck = "strict", meta, statusDir = (0, status_1.statusDir)(), runnerPath: runnerOverride, notifyOnFinish, } = options;
|
|
118
|
+
const { id = (0, node_crypto_1.randomUUID)(), url, outputPath, headers, expectedBytes, resume = true, followRedirects = true, speedLimitBytes, stallSeconds, limitRateBytes, sizeCheck = "strict", meta, statusDir = (0, status_1.statusDir)(), runnerPath: runnerOverride, notifyOnFinish, } = options;
|
|
119
119
|
// Rejects an id that could escape statusDir via `join()`. Done before any
|
|
120
120
|
// path is built from it.
|
|
121
121
|
(0, status_1.assertSafeId)(id);
|
|
@@ -149,6 +149,7 @@ async function startDownload(options) {
|
|
|
149
149
|
headers,
|
|
150
150
|
expectedBytes,
|
|
151
151
|
resume,
|
|
152
|
+
followRedirects,
|
|
152
153
|
speedLimitBytes,
|
|
153
154
|
stallSeconds,
|
|
154
155
|
limitRateBytes,
|
package/dist/detach.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detach.js","sourceRoot":"","sources":["../src/detach.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;
|
|
1
|
+
{"version":3,"file":"detach.js","sourceRoot":"","sources":["../src/detach.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
* enforce it for history (opt-in; the default persists what you pass).
|
|
38
38
|
*/
|
|
39
39
|
export { DownloadError, isDownloadError, classifyHttpStatus, type DownloadErrorCode, type DownloadErrorDetail, } from "./errors";
|
|
40
|
-
export { expandHome, isContained, resolveDirectory, uniquePath, releaseReservation, sanitizeFilename, type ResolveDirectoryOptions, type UniquePathOptions, } from "./paths";
|
|
40
|
+
export { expandHome, isContained, resolveDirectory, uniquePath, releaseReservation, rollbackPartial, sanitizeFilename, type ResolveDirectoryOptions, type UniquePathOptions, } from "./paths";
|
|
41
41
|
export { formatBytes, formatSpeed, formatEta, formatProgressLine, createThrottle, type ProgressLineInput, } from "./progress";
|
|
42
42
|
export { createDownloadHistory, reconcileHistory, looksLikeSignedUrl, type HistoryUrlPolicy, type DownloadHistory, type DownloadRecord, type HistoryOptions, type HistoryStorage, type ReconcilableStatus, } from "./history";
|
|
43
43
|
export { statusDir, statusPath, writeStatus, readStatus, listStatuses, clearStatus, pruneStatuses, watchStatus, isAlive, isTerminal, isStalled, processStartTimeMs, canVerifyProcessIdentity, acquireLease, releaseLease, statusLockPath, withStatusLock, type DownloadStatus, type DownloadState, type StatusWatcher, type WatchOptions, } from "./status";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EACL,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,GACvB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,KAAK,iBAAiB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,EACX,OAAO,EACP,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,OAAO,EACP,eAAe,EACf,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,GACvB,MAAM,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EACL,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,GACvB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,KAAK,iBAAiB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,EACX,OAAO,EACP,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,OAAO,EACP,eAAe,EACf,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,GACvB,MAAM,QAAQ,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
* enforce it for history (opt-in; the default persists what you pass).
|
|
39
39
|
*/
|
|
40
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
-
exports.classifyCurlFailure = exports.parseWriteOut = exports.parseCurlDuration = exports.parseCurlSize = exports.parseCurlMeter = exports.buildCurlConfig = exports.hasCurl = exports.runnerSearchPaths = exports.runnerPath = exports.reconcile = exports.killDownload = exports.startDownload = exports.withStatusLock = exports.statusLockPath = exports.releaseLease = exports.acquireLease = exports.canVerifyProcessIdentity = exports.processStartTimeMs = exports.isStalled = exports.isTerminal = exports.isAlive = exports.watchStatus = exports.pruneStatuses = exports.clearStatus = exports.listStatuses = exports.readStatus = exports.writeStatus = exports.statusPath = exports.statusDir = exports.looksLikeSignedUrl = exports.reconcileHistory = exports.createDownloadHistory = exports.createThrottle = exports.formatProgressLine = exports.formatEta = exports.formatSpeed = exports.formatBytes = exports.sanitizeFilename = exports.releaseReservation = exports.uniquePath = exports.resolveDirectory = exports.isContained = exports.expandHome = exports.classifyHttpStatus = exports.isDownloadError = exports.DownloadError = void 0;
|
|
41
|
+
exports.classifyCurlFailure = exports.parseWriteOut = exports.parseCurlDuration = exports.parseCurlSize = exports.parseCurlMeter = exports.buildCurlConfig = exports.hasCurl = exports.runnerSearchPaths = exports.runnerPath = exports.reconcile = exports.killDownload = exports.startDownload = exports.withStatusLock = exports.statusLockPath = exports.releaseLease = exports.acquireLease = exports.canVerifyProcessIdentity = exports.processStartTimeMs = exports.isStalled = exports.isTerminal = exports.isAlive = exports.watchStatus = exports.pruneStatuses = exports.clearStatus = exports.listStatuses = exports.readStatus = exports.writeStatus = exports.statusPath = exports.statusDir = exports.looksLikeSignedUrl = exports.reconcileHistory = exports.createDownloadHistory = exports.createThrottle = exports.formatProgressLine = exports.formatEta = exports.formatSpeed = exports.formatBytes = exports.sanitizeFilename = exports.rollbackPartial = exports.releaseReservation = exports.uniquePath = exports.resolveDirectory = exports.isContained = exports.expandHome = exports.classifyHttpStatus = exports.isDownloadError = exports.DownloadError = void 0;
|
|
42
42
|
var errors_1 = require("./errors");
|
|
43
43
|
Object.defineProperty(exports, "DownloadError", { enumerable: true, get: function () { return errors_1.DownloadError; } });
|
|
44
44
|
Object.defineProperty(exports, "isDownloadError", { enumerable: true, get: function () { return errors_1.isDownloadError; } });
|
|
@@ -49,6 +49,7 @@ Object.defineProperty(exports, "isContained", { enumerable: true, get: function
|
|
|
49
49
|
Object.defineProperty(exports, "resolveDirectory", { enumerable: true, get: function () { return paths_1.resolveDirectory; } });
|
|
50
50
|
Object.defineProperty(exports, "uniquePath", { enumerable: true, get: function () { return paths_1.uniquePath; } });
|
|
51
51
|
Object.defineProperty(exports, "releaseReservation", { enumerable: true, get: function () { return paths_1.releaseReservation; } });
|
|
52
|
+
Object.defineProperty(exports, "rollbackPartial", { enumerable: true, get: function () { return paths_1.rollbackPartial; } });
|
|
52
53
|
Object.defineProperty(exports, "sanitizeFilename", { enumerable: true, get: function () { return paths_1.sanitizeFilename; } });
|
|
53
54
|
var progress_1 = require("./progress");
|
|
54
55
|
Object.defineProperty(exports, "formatBytes", { enumerable: true, get: function () { return progress_1.formatBytes; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;;;AAEH,mCAMkB;AALhB,uGAAA,aAAa,OAAA;AACb,yGAAA,eAAe,OAAA;AACf,4GAAA,kBAAkB,OAAA;AAKpB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;;;AAEH,mCAMkB;AALhB,uGAAA,aAAa,OAAA;AACb,yGAAA,eAAe,OAAA;AACf,4GAAA,kBAAkB,OAAA;AAKpB,iCAUiB;AATf,mGAAA,UAAU,OAAA;AACV,oGAAA,WAAW,OAAA;AACX,yGAAA,gBAAgB,OAAA;AAChB,mGAAA,UAAU,OAAA;AACV,2GAAA,kBAAkB,OAAA;AAClB,wGAAA,eAAe,OAAA;AACf,yGAAA,gBAAgB,OAAA;AAKlB,uCAOoB;AANlB,uGAAA,WAAW,OAAA;AACX,uGAAA,WAAW,OAAA;AACX,qGAAA,SAAS,OAAA;AACT,8GAAA,kBAAkB,OAAA;AAClB,0GAAA,cAAc,OAAA;AAIhB,qCAUmB;AATjB,gHAAA,qBAAqB,OAAA;AACrB,2GAAA,gBAAgB,OAAA;AAChB,6GAAA,kBAAkB,OAAA;AASpB,mCAsBkB;AArBhB,mGAAA,SAAS,OAAA;AACT,oGAAA,UAAU,OAAA;AACV,qGAAA,WAAW,OAAA;AACX,oGAAA,UAAU,OAAA;AACV,sGAAA,YAAY,OAAA;AACZ,qGAAA,WAAW,OAAA;AACX,uGAAA,aAAa,OAAA;AACb,qGAAA,WAAW,OAAA;AACX,iGAAA,OAAO,OAAA;AACP,oGAAA,UAAU,OAAA;AACV,mGAAA,SAAS,OAAA;AACT,4GAAA,kBAAkB,OAAA;AAClB,kHAAA,wBAAwB,OAAA;AACxB,sGAAA,YAAY,OAAA;AACZ,sGAAA,YAAY,OAAA;AACZ,wGAAA,cAAc,OAAA;AACd,wGAAA,cAAc,OAAA;AAOhB,mCASkB;AARhB,uGAAA,aAAa,OAAA;AACb,sGAAA,YAAY,OAAA;AACZ,mGAAA,SAAS,OAAA;AACT,oGAAA,UAAU,OAAA;AACV,2GAAA,iBAAiB,OAAA;AAMnB,+BAYgB;AAXd,+FAAA,OAAO,OAAA;AACP,uGAAA,eAAe,OAAA;AACf,sGAAA,cAAc,OAAA;AACd,qGAAA,aAAa,OAAA;AACb,yGAAA,iBAAiB,OAAA;AACjB,qGAAA,aAAa,OAAA;AACb,2GAAA,mBAAmB,OAAA"}
|
package/dist/paths.d.ts
CHANGED
|
@@ -114,4 +114,33 @@ export declare function sanitizeFilename(name: string, options?: {
|
|
|
114
114
|
maxLength?: number;
|
|
115
115
|
reserveBytes?: number;
|
|
116
116
|
}): string;
|
|
117
|
+
/**
|
|
118
|
+
* Roll a `.part` file back to a byte count that is known good.
|
|
119
|
+
*
|
|
120
|
+
* Used after an unfollowed 3xx: curl writes the redirect BODY into the partial,
|
|
121
|
+
* and on a RESUMED transfer the bytes before it are the user's real progress,
|
|
122
|
+
* so the tail is removed rather than the whole file.
|
|
123
|
+
*
|
|
124
|
+
* Returns false when the partial cannot be left in a state that is safe to
|
|
125
|
+
* resume from, and does everything it can to make it non-resumable first. A
|
|
126
|
+
* resume runs `curl -C -`, which appends from the file's CURRENT size, so a
|
|
127
|
+
* partial still carrying redirect HTML gets the real recording spliced onto the
|
|
128
|
+
* end of it and published under the user's filename. Losing progress is
|
|
129
|
+
* recoverable; a corrupt media file is not.
|
|
130
|
+
*
|
|
131
|
+
* Three things here are load-bearing:
|
|
132
|
+
*
|
|
133
|
+
* - **Every operation is bound to ONE open file descriptor.** Doing this by
|
|
134
|
+
* pathname across stat / truncate / re-stat is a TOCTOU: another attempt or
|
|
135
|
+
* an external actor can replace the file mid-sequence, and the cleanup then
|
|
136
|
+
* lands on a healthy partial belonging to someone else.
|
|
137
|
+
* - **The size is VERIFIED after truncating.** A truncate that throws is
|
|
138
|
+
* obvious; one that leaves the file longer than asked is not, and only the
|
|
139
|
+
* second corrupts the next resume.
|
|
140
|
+
* - **`keepBytes` is validated before anything destructive runs.** It is a
|
|
141
|
+
* caller-supplied number on an exported function, and a negative value
|
|
142
|
+
* reaches `ftruncateSync`, throws, and would otherwise fall through to the
|
|
143
|
+
* cleanup path — turning bad input into deleted progress.
|
|
144
|
+
*/
|
|
145
|
+
export declare function rollbackPartial(partPath: string, keepBytes: number): boolean;
|
|
117
146
|
//# sourceMappingURL=paths.d.ts.map
|
package/dist/paths.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAmBH;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAYpE;AA0BD,MAAM,WAAW,uBAAuB;IACtC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,GAAE,uBAA4B,GAAG,MAAM,CAwCzG;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,SAAU,GAAG,IAAI,CAOpF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAchE;AAQD,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,yDAAyD;AACzD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAyFjG;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1D,MAAM,CAoCR;AAuBD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CA4B5E"}
|
package/dist/paths.js
CHANGED
|
@@ -19,6 +19,7 @@ exports.releaseReservation = releaseReservation;
|
|
|
19
19
|
exports.writeSecretFile = writeSecretFile;
|
|
20
20
|
exports.uniquePath = uniquePath;
|
|
21
21
|
exports.sanitizeFilename = sanitizeFilename;
|
|
22
|
+
exports.rollbackPartial = rollbackPartial;
|
|
22
23
|
const node_fs_1 = require("node:fs");
|
|
23
24
|
const node_os_1 = require("node:os");
|
|
24
25
|
const node_path_1 = require("node:path");
|
|
@@ -325,4 +326,88 @@ function truncateToBytes(value, maxBytes) {
|
|
|
325
326
|
}
|
|
326
327
|
return result || value.slice(0, 1);
|
|
327
328
|
}
|
|
329
|
+
/**
|
|
330
|
+
* Roll a `.part` file back to a byte count that is known good.
|
|
331
|
+
*
|
|
332
|
+
* Used after an unfollowed 3xx: curl writes the redirect BODY into the partial,
|
|
333
|
+
* and on a RESUMED transfer the bytes before it are the user's real progress,
|
|
334
|
+
* so the tail is removed rather than the whole file.
|
|
335
|
+
*
|
|
336
|
+
* Returns false when the partial cannot be left in a state that is safe to
|
|
337
|
+
* resume from, and does everything it can to make it non-resumable first. A
|
|
338
|
+
* resume runs `curl -C -`, which appends from the file's CURRENT size, so a
|
|
339
|
+
* partial still carrying redirect HTML gets the real recording spliced onto the
|
|
340
|
+
* end of it and published under the user's filename. Losing progress is
|
|
341
|
+
* recoverable; a corrupt media file is not.
|
|
342
|
+
*
|
|
343
|
+
* Three things here are load-bearing:
|
|
344
|
+
*
|
|
345
|
+
* - **Every operation is bound to ONE open file descriptor.** Doing this by
|
|
346
|
+
* pathname across stat / truncate / re-stat is a TOCTOU: another attempt or
|
|
347
|
+
* an external actor can replace the file mid-sequence, and the cleanup then
|
|
348
|
+
* lands on a healthy partial belonging to someone else.
|
|
349
|
+
* - **The size is VERIFIED after truncating.** A truncate that throws is
|
|
350
|
+
* obvious; one that leaves the file longer than asked is not, and only the
|
|
351
|
+
* second corrupts the next resume.
|
|
352
|
+
* - **`keepBytes` is validated before anything destructive runs.** It is a
|
|
353
|
+
* caller-supplied number on an exported function, and a negative value
|
|
354
|
+
* reaches `ftruncateSync`, throws, and would otherwise fall through to the
|
|
355
|
+
* cleanup path — turning bad input into deleted progress.
|
|
356
|
+
*/
|
|
357
|
+
function rollbackPartial(partPath, keepBytes) {
|
|
358
|
+
// Reject bad input BEFORE any destructive step, and without cleanup: the
|
|
359
|
+
// partial is not known to be unsafe, the argument is.
|
|
360
|
+
if (!Number.isInteger(keepBytes) || keepBytes < 0)
|
|
361
|
+
return false;
|
|
362
|
+
let fd;
|
|
363
|
+
try {
|
|
364
|
+
fd = (0, node_fs_1.openSync)(partPath, "r+");
|
|
365
|
+
const stat = (0, node_fs_1.fstatSync)(fd);
|
|
366
|
+
// Only a regular file is ours to truncate; a symlink or device is not.
|
|
367
|
+
if (!stat.isFile())
|
|
368
|
+
return false;
|
|
369
|
+
if (stat.size <= keepBytes)
|
|
370
|
+
return true;
|
|
371
|
+
(0, node_fs_1.ftruncateSync)(fd, keepBytes);
|
|
372
|
+
if ((0, node_fs_1.fstatSync)(fd).size === keepBytes)
|
|
373
|
+
return true;
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
// Fall through: the partial is not known-safe, so it is neutralised below.
|
|
377
|
+
}
|
|
378
|
+
finally {
|
|
379
|
+
if (fd !== undefined) {
|
|
380
|
+
try {
|
|
381
|
+
(0, node_fs_1.closeSync)(fd);
|
|
382
|
+
}
|
|
383
|
+
catch {
|
|
384
|
+
/* nothing useful to do */
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
return neutralisePartial(partPath);
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Delete a partial that cannot be vouched for, and report that it is unsafe.
|
|
392
|
+
*
|
|
393
|
+
* Always returns false. Deletion is the only cleanup worth attempting: an
|
|
394
|
+
* earlier version also tried emptying the file, but that fallback cannot fire —
|
|
395
|
+
* any filesystem state permitting `truncate(path, 0)` also permits the
|
|
396
|
+
* `ftruncateSync` above, which would have succeeded and returned already.
|
|
397
|
+
*
|
|
398
|
+
* When deletion is denied too, the redirect body stays on disk and NOTHING here
|
|
399
|
+
* can change that. The return value is then the entire mitigation: the runner
|
|
400
|
+
* records it in the status so a consumer refuses to resume this path, because
|
|
401
|
+
* `curl -C -` would otherwise append the real recording after the HTML.
|
|
402
|
+
*/
|
|
403
|
+
function neutralisePartial(partPath) {
|
|
404
|
+
try {
|
|
405
|
+
(0, node_fs_1.unlinkSync)(partPath);
|
|
406
|
+
}
|
|
407
|
+
catch {
|
|
408
|
+
// Denied. The caller's `false` and the status it writes are what protect
|
|
409
|
+
// the next attempt now.
|
|
410
|
+
}
|
|
411
|
+
return false;
|
|
412
|
+
}
|
|
328
413
|
//# sourceMappingURL=paths.js.map
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
|
package/dist/runner.bundle.js
CHANGED
|
@@ -316,10 +316,26 @@ const EXIT_CODES = {
|
|
|
316
316
|
* "curl exited 22".
|
|
317
317
|
*/
|
|
318
318
|
function classifyCurlFailure(input) {
|
|
319
|
-
const { exitCode, signal, httpCode, stderrTail, cancelled } = input;
|
|
319
|
+
const { exitCode, signal, httpCode, stderrTail, cancelled, followRedirects = true } = input;
|
|
320
320
|
if (cancelled || signal === "SIGTERM" || signal === "SIGINT") {
|
|
321
321
|
return new errors_1.DownloadError("cancelled", "Download cancelled.", { exitCode, signal });
|
|
322
322
|
}
|
|
323
|
+
// A 3xx only reaches here when redirects were DISABLED: with `location` set,
|
|
324
|
+
// curl reports the status of the final hop, never the redirect itself. curl
|
|
325
|
+
// exits 0 for an unfollowed redirect, so without this branch the code falls
|
|
326
|
+
// past EXIT_CODES[0] into the last-resort message and reports
|
|
327
|
+
// "Download failed (curl exit 0)." for a perfectly explicable outcome.
|
|
328
|
+
// Gated on a CLEAN exit: curl exits 47 ("Too many redirects") while reporting
|
|
329
|
+
// a 3xx http_code, and that is a redirect loop, not an unfollowed redirect.
|
|
330
|
+
// Letting this branch win would relabel it.
|
|
331
|
+
if (exitCode === 0 && httpCode !== undefined && httpCode >= 300 && httpCode < 400) {
|
|
332
|
+
return new errors_1.DownloadError(
|
|
333
|
+
// `http_client`, not a new code: the request did not yield the body and
|
|
334
|
+
// the caller must change something (enable redirects, drop a conditional
|
|
335
|
+
// header, pass the final URL) — exactly the non-retryable bucket
|
|
336
|
+
// `http_client` names.
|
|
337
|
+
"http_client", unfollowedRedirectMessage(httpCode, followRedirects), { httpStatus: httpCode, exitCode, signal });
|
|
338
|
+
}
|
|
323
339
|
if (httpCode !== undefined && httpCode >= 400) {
|
|
324
340
|
const code = (0, errors_1.classifyHttpStatus)(httpCode);
|
|
325
341
|
return new errors_1.DownloadError(code, httpErrorMessage(httpCode), { httpStatus: httpCode, exitCode, signal });
|
|
@@ -332,6 +348,21 @@ function classifyCurlFailure(input) {
|
|
|
332
348
|
const detail = stderrTail?.trim().split("\n").pop()?.trim();
|
|
333
349
|
return new errors_1.DownloadError("unknown", detail ? `Download failed: ${detail}` : `Download failed (curl exit ${exitCode ?? "unknown"}).`, { exitCode, signal, httpStatus: httpCode });
|
|
334
350
|
}
|
|
351
|
+
/**
|
|
352
|
+
* Wording for a 3xx that curl exited 0 on.
|
|
353
|
+
*
|
|
354
|
+
* `location` does NOT guarantee the absence of a final 3xx: curl only follows a
|
|
355
|
+
* response that carries a usable `Location`. A 304 (the caller sent a
|
|
356
|
+
* conditional header) and a 300 (multiple choices, no `Location`) both end the
|
|
357
|
+
* transfer as themselves, with redirects fully enabled.
|
|
358
|
+
*/
|
|
359
|
+
function unfollowedRedirectMessage(status, followRedirects) {
|
|
360
|
+
if (status === 304)
|
|
361
|
+
return "The server reported the file as unchanged (HTTP 304) and sent no content.";
|
|
362
|
+
if (!followRedirects)
|
|
363
|
+
return `The server redirected (HTTP ${status}) but redirects are disabled.`;
|
|
364
|
+
return `The server returned a redirect that could not be followed (HTTP ${status}).`;
|
|
365
|
+
}
|
|
335
366
|
function httpErrorMessage(status) {
|
|
336
367
|
switch (status) {
|
|
337
368
|
case 401:
|
|
@@ -376,6 +407,7 @@ exports.releaseReservation = releaseReservation;
|
|
|
376
407
|
exports.writeSecretFile = writeSecretFile;
|
|
377
408
|
exports.uniquePath = uniquePath;
|
|
378
409
|
exports.sanitizeFilename = sanitizeFilename;
|
|
410
|
+
exports.rollbackPartial = rollbackPartial;
|
|
379
411
|
const node_fs_1 = require("node:fs");
|
|
380
412
|
const node_os_1 = require("node:os");
|
|
381
413
|
const node_path_1 = require("node:path");
|
|
@@ -682,6 +714,90 @@ function truncateToBytes(value, maxBytes) {
|
|
|
682
714
|
}
|
|
683
715
|
return result || value.slice(0, 1);
|
|
684
716
|
}
|
|
717
|
+
/**
|
|
718
|
+
* Roll a `.part` file back to a byte count that is known good.
|
|
719
|
+
*
|
|
720
|
+
* Used after an unfollowed 3xx: curl writes the redirect BODY into the partial,
|
|
721
|
+
* and on a RESUMED transfer the bytes before it are the user's real progress,
|
|
722
|
+
* so the tail is removed rather than the whole file.
|
|
723
|
+
*
|
|
724
|
+
* Returns false when the partial cannot be left in a state that is safe to
|
|
725
|
+
* resume from, and does everything it can to make it non-resumable first. A
|
|
726
|
+
* resume runs `curl -C -`, which appends from the file's CURRENT size, so a
|
|
727
|
+
* partial still carrying redirect HTML gets the real recording spliced onto the
|
|
728
|
+
* end of it and published under the user's filename. Losing progress is
|
|
729
|
+
* recoverable; a corrupt media file is not.
|
|
730
|
+
*
|
|
731
|
+
* Three things here are load-bearing:
|
|
732
|
+
*
|
|
733
|
+
* - **Every operation is bound to ONE open file descriptor.** Doing this by
|
|
734
|
+
* pathname across stat / truncate / re-stat is a TOCTOU: another attempt or
|
|
735
|
+
* an external actor can replace the file mid-sequence, and the cleanup then
|
|
736
|
+
* lands on a healthy partial belonging to someone else.
|
|
737
|
+
* - **The size is VERIFIED after truncating.** A truncate that throws is
|
|
738
|
+
* obvious; one that leaves the file longer than asked is not, and only the
|
|
739
|
+
* second corrupts the next resume.
|
|
740
|
+
* - **`keepBytes` is validated before anything destructive runs.** It is a
|
|
741
|
+
* caller-supplied number on an exported function, and a negative value
|
|
742
|
+
* reaches `ftruncateSync`, throws, and would otherwise fall through to the
|
|
743
|
+
* cleanup path — turning bad input into deleted progress.
|
|
744
|
+
*/
|
|
745
|
+
function rollbackPartial(partPath, keepBytes) {
|
|
746
|
+
// Reject bad input BEFORE any destructive step, and without cleanup: the
|
|
747
|
+
// partial is not known to be unsafe, the argument is.
|
|
748
|
+
if (!Number.isInteger(keepBytes) || keepBytes < 0)
|
|
749
|
+
return false;
|
|
750
|
+
let fd;
|
|
751
|
+
try {
|
|
752
|
+
fd = (0, node_fs_1.openSync)(partPath, "r+");
|
|
753
|
+
const stat = (0, node_fs_1.fstatSync)(fd);
|
|
754
|
+
// Only a regular file is ours to truncate; a symlink or device is not.
|
|
755
|
+
if (!stat.isFile())
|
|
756
|
+
return false;
|
|
757
|
+
if (stat.size <= keepBytes)
|
|
758
|
+
return true;
|
|
759
|
+
(0, node_fs_1.ftruncateSync)(fd, keepBytes);
|
|
760
|
+
if ((0, node_fs_1.fstatSync)(fd).size === keepBytes)
|
|
761
|
+
return true;
|
|
762
|
+
}
|
|
763
|
+
catch {
|
|
764
|
+
// Fall through: the partial is not known-safe, so it is neutralised below.
|
|
765
|
+
}
|
|
766
|
+
finally {
|
|
767
|
+
if (fd !== undefined) {
|
|
768
|
+
try {
|
|
769
|
+
(0, node_fs_1.closeSync)(fd);
|
|
770
|
+
}
|
|
771
|
+
catch {
|
|
772
|
+
/* nothing useful to do */
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
return neutralisePartial(partPath);
|
|
777
|
+
}
|
|
778
|
+
/**
|
|
779
|
+
* Delete a partial that cannot be vouched for, and report that it is unsafe.
|
|
780
|
+
*
|
|
781
|
+
* Always returns false. Deletion is the only cleanup worth attempting: an
|
|
782
|
+
* earlier version also tried emptying the file, but that fallback cannot fire —
|
|
783
|
+
* any filesystem state permitting `truncate(path, 0)` also permits the
|
|
784
|
+
* `ftruncateSync` above, which would have succeeded and returned already.
|
|
785
|
+
*
|
|
786
|
+
* When deletion is denied too, the redirect body stays on disk and NOTHING here
|
|
787
|
+
* can change that. The return value is then the entire mitigation: the runner
|
|
788
|
+
* records it in the status so a consumer refuses to resume this path, because
|
|
789
|
+
* `curl -C -` would otherwise append the real recording after the HTML.
|
|
790
|
+
*/
|
|
791
|
+
function neutralisePartial(partPath) {
|
|
792
|
+
try {
|
|
793
|
+
(0, node_fs_1.unlinkSync)(partPath);
|
|
794
|
+
}
|
|
795
|
+
catch {
|
|
796
|
+
// Denied. The caller's `false` and the status it writes are what protect
|
|
797
|
+
// the next attempt now.
|
|
798
|
+
}
|
|
799
|
+
return false;
|
|
800
|
+
}
|
|
685
801
|
//# sourceMappingURL=paths.js.map
|
|
686
802
|
},
|
|
687
803
|
"lock": function (exports, module) {
|
|
@@ -1618,12 +1734,14 @@ function main() {
|
|
|
1618
1734
|
// zero-byte or absent file makes curl error rather than start cleanly.
|
|
1619
1735
|
const existingBytes = (0, node_fs_1.existsSync)(payload.partPath) ? safeSize(payload.partPath) : 0;
|
|
1620
1736
|
const resume = Boolean(payload.resume) && existingBytes > 0;
|
|
1737
|
+
const followRedirects = payload.followRedirects ?? true;
|
|
1621
1738
|
let configPath;
|
|
1622
1739
|
try {
|
|
1623
1740
|
const config = (0, curl_1.buildCurlConfig)({
|
|
1624
1741
|
url: payload.url,
|
|
1625
1742
|
outputPath: payload.partPath,
|
|
1626
1743
|
headers: payload.headers,
|
|
1744
|
+
followRedirects,
|
|
1627
1745
|
resume,
|
|
1628
1746
|
speedLimitBytes: payload.speedLimitBytes,
|
|
1629
1747
|
stallSeconds: payload.stallSeconds,
|
|
@@ -1734,20 +1852,63 @@ function main() {
|
|
|
1734
1852
|
removeConfig();
|
|
1735
1853
|
const writeOut = (0, curl_1.parseWriteOut)(stdout);
|
|
1736
1854
|
const httpCode = writeOut.httpCode;
|
|
1737
|
-
|
|
1855
|
+
// Success is strictly 2xx. A 3xx is NEVER a downloaded file:
|
|
1856
|
+
//
|
|
1857
|
+
// - redirects off: curl writes the redirect BODY to the `.part` file and
|
|
1858
|
+
// exits 0, so accepting it renames a stub to the user's expected
|
|
1859
|
+
// filename and publishes it as a completed download;
|
|
1860
|
+
// - redirects ON: `location` only follows a response carrying a usable
|
|
1861
|
+
// `Location`, so a 304 (caller sent a conditional header) or a 300 is
|
|
1862
|
+
// still the final status. A 304 writes NO body, which on a resumed
|
|
1863
|
+
// transfer would publish the existing partial as if it were whole.
|
|
1864
|
+
//
|
|
1865
|
+
// When redirects were followed and the transfer really succeeded, curl
|
|
1866
|
+
// reports the 2xx of the final hop, so nothing legitimate is lost here.
|
|
1867
|
+
const httpOk = httpCode === undefined || (httpCode >= 200 && httpCode < 300);
|
|
1868
|
+
const succeeded = exitCode === 0 && httpOk;
|
|
1738
1869
|
if (!succeeded) {
|
|
1739
|
-
const error = (0, curl_1.classifyCurlFailure)({ exitCode, signal, httpCode, stderrTail: stderr });
|
|
1870
|
+
const error = (0, curl_1.classifyCurlFailure)({ exitCode, signal, httpCode, stderrTail: stderr, followRedirects });
|
|
1740
1871
|
// The .part file is retained so a retry can resume — but only when it
|
|
1741
1872
|
// holds something to resume FROM. curl creates the file on open, so a
|
|
1742
1873
|
// request that failed before its first byte (404, DNS, TLS) leaves a
|
|
1743
1874
|
// 0-byte file that can never be resumed and that the user has no way to
|
|
1744
1875
|
// account for sitting in their Downloads folder.
|
|
1745
|
-
|
|
1876
|
+
// …except whatever a 3xx wrote, which is never resumable content. curl
|
|
1877
|
+
// writes the redirect BODY to the `.part` file, so a later retry would
|
|
1878
|
+
// `continue-at` past that HTML and splice the real file onto it — the
|
|
1879
|
+
// exact silent corruption `fail` exists to prevent.
|
|
1880
|
+
//
|
|
1881
|
+
// Rolled back to `existingBytes` rather than deleted outright: on a
|
|
1882
|
+
// resumed transfer those bytes are the user's real progress and a 304
|
|
1883
|
+
// response in particular means the partial is still valid. Only the bytes
|
|
1884
|
+
// THIS attempt appended are garbage.
|
|
1885
|
+
const redirectStub = error.httpStatus !== undefined && error.httpStatus >= 300 && error.httpStatus < 400;
|
|
1886
|
+
// `rolledBack` is READ, not discarded. When the partial could not be made
|
|
1887
|
+
// safe — deletion denied AND emptying denied — the redirect body is still
|
|
1888
|
+
// on disk, and the next attempt would compute `existingBytes` from that
|
|
1889
|
+
// longer file and `curl -C -` the real recording onto the end of it. That
|
|
1890
|
+
// is precisely the corruption this branch exists to prevent, so it has to
|
|
1891
|
+
// reach the status: a consumer cannot see a cleanup failure any other way.
|
|
1892
|
+
let unsafePartial = false;
|
|
1893
|
+
if (redirectStub && existingBytes > 0)
|
|
1894
|
+
unsafePartial = !(0, paths_1.rollbackPartial)(payload.partPath, existingBytes);
|
|
1895
|
+
else if (redirectStub)
|
|
1896
|
+
discardPart(payload.partPath);
|
|
1897
|
+
else
|
|
1898
|
+
discardEmptyPart(payload.partPath);
|
|
1746
1899
|
const cancelled = error.code === "cancelled";
|
|
1900
|
+
const message = unsafePartial
|
|
1901
|
+
? `${error.message} The partial file could not be cleaned up and must not be resumed; delete it before retrying.`
|
|
1902
|
+
: error.message;
|
|
1747
1903
|
persist({
|
|
1748
1904
|
state: cancelled ? "cancelled" : "failed",
|
|
1749
1905
|
finishedAt: Date.now(),
|
|
1750
|
-
|
|
1906
|
+
// Conditional spread, NOT `unsafePartial ? 0 : undefined`: persist does
|
|
1907
|
+
// `{ ...status, ...next }`, so an explicit undefined would overwrite a
|
|
1908
|
+
// real byte count — and readStatusFile rejects a status whose
|
|
1909
|
+
// bytesDownloaded is not finite, making the whole file unreadable.
|
|
1910
|
+
...(unsafePartial ? { bytesDownloaded: 0 } : {}),
|
|
1911
|
+
error: { code: error.code, message, httpStatus: error.httpStatus },
|
|
1751
1912
|
});
|
|
1752
1913
|
// Cancellation is deliberately silent: the user performed it, so telling
|
|
1753
1914
|
// them it happened is noise. A genuine failure is the opposite — with the
|
|
@@ -1893,6 +2054,16 @@ function notify(payload, subtitle, message) {
|
|
|
1893
2054
|
* Only the empty case — where there is provably nothing to resume from — is
|
|
1894
2055
|
* safe to discard.
|
|
1895
2056
|
*/
|
|
2057
|
+
/** Roll a `.part` file back to the byte count it held before this attempt. */
|
|
2058
|
+
/** Remove a `.part` file outright, whatever it holds. */
|
|
2059
|
+
function discardPart(partPath) {
|
|
2060
|
+
try {
|
|
2061
|
+
(0, node_fs_1.unlinkSync)(partPath);
|
|
2062
|
+
}
|
|
2063
|
+
catch {
|
|
2064
|
+
// Best effort.
|
|
2065
|
+
}
|
|
2066
|
+
}
|
|
1896
2067
|
function discardEmptyPart(partPath) {
|
|
1897
2068
|
try {
|
|
1898
2069
|
if ((0, node_fs_1.existsSync)(partPath) && (0, node_fs_1.statSync)(partPath).size === 0)
|
package/dist/runner.js
CHANGED
|
@@ -93,12 +93,14 @@ function main() {
|
|
|
93
93
|
// zero-byte or absent file makes curl error rather than start cleanly.
|
|
94
94
|
const existingBytes = (0, node_fs_1.existsSync)(payload.partPath) ? safeSize(payload.partPath) : 0;
|
|
95
95
|
const resume = Boolean(payload.resume) && existingBytes > 0;
|
|
96
|
+
const followRedirects = payload.followRedirects ?? true;
|
|
96
97
|
let configPath;
|
|
97
98
|
try {
|
|
98
99
|
const config = (0, curl_1.buildCurlConfig)({
|
|
99
100
|
url: payload.url,
|
|
100
101
|
outputPath: payload.partPath,
|
|
101
102
|
headers: payload.headers,
|
|
103
|
+
followRedirects,
|
|
102
104
|
resume,
|
|
103
105
|
speedLimitBytes: payload.speedLimitBytes,
|
|
104
106
|
stallSeconds: payload.stallSeconds,
|
|
@@ -209,20 +211,63 @@ function main() {
|
|
|
209
211
|
removeConfig();
|
|
210
212
|
const writeOut = (0, curl_1.parseWriteOut)(stdout);
|
|
211
213
|
const httpCode = writeOut.httpCode;
|
|
212
|
-
|
|
214
|
+
// Success is strictly 2xx. A 3xx is NEVER a downloaded file:
|
|
215
|
+
//
|
|
216
|
+
// - redirects off: curl writes the redirect BODY to the `.part` file and
|
|
217
|
+
// exits 0, so accepting it renames a stub to the user's expected
|
|
218
|
+
// filename and publishes it as a completed download;
|
|
219
|
+
// - redirects ON: `location` only follows a response carrying a usable
|
|
220
|
+
// `Location`, so a 304 (caller sent a conditional header) or a 300 is
|
|
221
|
+
// still the final status. A 304 writes NO body, which on a resumed
|
|
222
|
+
// transfer would publish the existing partial as if it were whole.
|
|
223
|
+
//
|
|
224
|
+
// When redirects were followed and the transfer really succeeded, curl
|
|
225
|
+
// reports the 2xx of the final hop, so nothing legitimate is lost here.
|
|
226
|
+
const httpOk = httpCode === undefined || (httpCode >= 200 && httpCode < 300);
|
|
227
|
+
const succeeded = exitCode === 0 && httpOk;
|
|
213
228
|
if (!succeeded) {
|
|
214
|
-
const error = (0, curl_1.classifyCurlFailure)({ exitCode, signal, httpCode, stderrTail: stderr });
|
|
229
|
+
const error = (0, curl_1.classifyCurlFailure)({ exitCode, signal, httpCode, stderrTail: stderr, followRedirects });
|
|
215
230
|
// The .part file is retained so a retry can resume — but only when it
|
|
216
231
|
// holds something to resume FROM. curl creates the file on open, so a
|
|
217
232
|
// request that failed before its first byte (404, DNS, TLS) leaves a
|
|
218
233
|
// 0-byte file that can never be resumed and that the user has no way to
|
|
219
234
|
// account for sitting in their Downloads folder.
|
|
220
|
-
|
|
235
|
+
// …except whatever a 3xx wrote, which is never resumable content. curl
|
|
236
|
+
// writes the redirect BODY to the `.part` file, so a later retry would
|
|
237
|
+
// `continue-at` past that HTML and splice the real file onto it — the
|
|
238
|
+
// exact silent corruption `fail` exists to prevent.
|
|
239
|
+
//
|
|
240
|
+
// Rolled back to `existingBytes` rather than deleted outright: on a
|
|
241
|
+
// resumed transfer those bytes are the user's real progress and a 304
|
|
242
|
+
// response in particular means the partial is still valid. Only the bytes
|
|
243
|
+
// THIS attempt appended are garbage.
|
|
244
|
+
const redirectStub = error.httpStatus !== undefined && error.httpStatus >= 300 && error.httpStatus < 400;
|
|
245
|
+
// `rolledBack` is READ, not discarded. When the partial could not be made
|
|
246
|
+
// safe — deletion denied AND emptying denied — the redirect body is still
|
|
247
|
+
// on disk, and the next attempt would compute `existingBytes` from that
|
|
248
|
+
// longer file and `curl -C -` the real recording onto the end of it. That
|
|
249
|
+
// is precisely the corruption this branch exists to prevent, so it has to
|
|
250
|
+
// reach the status: a consumer cannot see a cleanup failure any other way.
|
|
251
|
+
let unsafePartial = false;
|
|
252
|
+
if (redirectStub && existingBytes > 0)
|
|
253
|
+
unsafePartial = !(0, paths_1.rollbackPartial)(payload.partPath, existingBytes);
|
|
254
|
+
else if (redirectStub)
|
|
255
|
+
discardPart(payload.partPath);
|
|
256
|
+
else
|
|
257
|
+
discardEmptyPart(payload.partPath);
|
|
221
258
|
const cancelled = error.code === "cancelled";
|
|
259
|
+
const message = unsafePartial
|
|
260
|
+
? `${error.message} The partial file could not be cleaned up and must not be resumed; delete it before retrying.`
|
|
261
|
+
: error.message;
|
|
222
262
|
persist({
|
|
223
263
|
state: cancelled ? "cancelled" : "failed",
|
|
224
264
|
finishedAt: Date.now(),
|
|
225
|
-
|
|
265
|
+
// Conditional spread, NOT `unsafePartial ? 0 : undefined`: persist does
|
|
266
|
+
// `{ ...status, ...next }`, so an explicit undefined would overwrite a
|
|
267
|
+
// real byte count — and readStatusFile rejects a status whose
|
|
268
|
+
// bytesDownloaded is not finite, making the whole file unreadable.
|
|
269
|
+
...(unsafePartial ? { bytesDownloaded: 0 } : {}),
|
|
270
|
+
error: { code: error.code, message, httpStatus: error.httpStatus },
|
|
226
271
|
});
|
|
227
272
|
// Cancellation is deliberately silent: the user performed it, so telling
|
|
228
273
|
// them it happened is noise. A genuine failure is the opposite — with the
|
|
@@ -368,6 +413,16 @@ function notify(payload, subtitle, message) {
|
|
|
368
413
|
* Only the empty case — where there is provably nothing to resume from — is
|
|
369
414
|
* safe to discard.
|
|
370
415
|
*/
|
|
416
|
+
/** Roll a `.part` file back to the byte count it held before this attempt. */
|
|
417
|
+
/** Remove a `.part` file outright, whatever it holds. */
|
|
418
|
+
function discardPart(partPath) {
|
|
419
|
+
try {
|
|
420
|
+
(0, node_fs_1.unlinkSync)(partPath);
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
// Best effort.
|
|
424
|
+
}
|
|
425
|
+
}
|
|
371
426
|
function discardEmptyPart(partPath) {
|
|
372
427
|
try {
|
|
373
428
|
if ((0, node_fs_1.existsSync)(partPath) && (0, node_fs_1.statSync)(partPath).size === 0)
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrismessina/raycast-downloader",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Downloads for Raycast extensions that survive the window closing: detached transfers, resumable via HTTP Range, with safe paths, progress and history",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|