Skip to content

Commit 940d33c

Browse files
committed
fix(scripts): clean package download temp files after stream abort
1 parent 698efb2 commit 940d33c

1 file changed

Lines changed: 8 additions & 4 deletions

File tree

scripts/resolve-openclaw-package-candidate.mjs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { spawn } from "node:child_process";
44
import { createHash } from "node:crypto";
55
import { lookup as dnsLookupCb } from "node:dns";
66
import { lookup as dnsLookup } from "node:dns/promises";
7+
import { once } from "node:events";
78
import { createWriteStream } from "node:fs";
89
import fs from "node:fs/promises";
910
import { request as httpsRequest } from "node:https";
@@ -1165,6 +1166,7 @@ async function* limitWebResponseBody(body, maxBytes, timeoutPromise) {
11651166
const size = typeof value === "string" ? Buffer.byteLength(value) : value.byteLength;
11661167
downloaded += size;
11671168
if (downloaded > maxBytes) {
1169+
await reader.cancel().catch(() => {});
11681170
throw new Error(`package_url exceeds maximum download size of ${maxBytes} bytes`);
11691171
}
11701172
yield value;
@@ -1199,6 +1201,7 @@ export async function downloadUrl(url, target, options = {}) {
11991201
options,
12001202
);
12011203
const tempTarget = `${target}.tmp`;
1204+
let output;
12021205
try {
12031206
if (!responseOk(response) || !response.body) {
12041207
throw new Error(`failed to download package_url: HTTP ${responseStatus(response)}`);
@@ -1210,10 +1213,8 @@ export async function downloadUrl(url, target, options = {}) {
12101213
throw new Error(`package_url exceeds maximum download size of ${maxBytes} bytes`);
12111214
}
12121215
await fs.rm(tempTarget, { force: true });
1213-
await pipeline(
1214-
limitResponseBody(response.body, maxBytes, timeoutPromise),
1215-
createWriteStream(tempTarget),
1216-
);
1216+
output = createWriteStream(tempTarget);
1217+
await pipeline(limitResponseBody(response.body, maxBytes, timeoutPromise), output);
12171218
await fs.rename(tempTarget, target);
12181219
} catch (error) {
12191220
if (error?.code === "ETIMEDOUT") {
@@ -1228,6 +1229,9 @@ export async function downloadUrl(url, target, options = {}) {
12281229
} finally {
12291230
clearTimeout(timeout);
12301231
await close();
1232+
if (output && !output.closed) {
1233+
await once(output, "close").catch(() => {});
1234+
}
12311235
await fs.rm(tempTarget, { force: true });
12321236
}
12331237
}

0 commit comments

Comments
 (0)