@hyperframes/engine 0.7.71 → 0.7.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/index.d.ts +3 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/services/audioMixer.d.ts.map +1 -1
  6. package/dist/services/audioMixer.js +187 -28
  7. package/dist/services/audioMixer.js.map +1 -1
  8. package/dist/services/audioMixer.types.d.ts +12 -0
  9. package/dist/services/audioMixer.types.d.ts.map +1 -1
  10. package/dist/services/captureWarning.d.ts +5 -0
  11. package/dist/services/captureWarning.d.ts.map +1 -0
  12. package/dist/services/captureWarning.js +22 -0
  13. package/dist/services/captureWarning.js.map +1 -0
  14. package/dist/services/chunkEncoder.d.ts +2 -0
  15. package/dist/services/chunkEncoder.d.ts.map +1 -1
  16. package/dist/services/chunkEncoder.js +6 -1
  17. package/dist/services/chunkEncoder.js.map +1 -1
  18. package/dist/services/frameCapture.d.ts.map +1 -1
  19. package/dist/services/frameCapture.js +6 -9
  20. package/dist/services/frameCapture.js.map +1 -1
  21. package/dist/services/screenshotService.d.ts.map +1 -1
  22. package/dist/services/screenshotService.js +10 -2
  23. package/dist/services/screenshotService.js.map +1 -1
  24. package/dist/services/videoFrameExtractor.d.ts +52 -4
  25. package/dist/services/videoFrameExtractor.d.ts.map +1 -1
  26. package/dist/services/videoFrameExtractor.js +257 -27
  27. package/dist/services/videoFrameExtractor.js.map +1 -1
  28. package/dist/services/videoFrameInjector.d.ts.map +1 -1
  29. package/dist/services/videoFrameInjector.js +0 -15
  30. package/dist/services/videoFrameInjector.js.map +1 -1
  31. package/dist/types.d.ts +4 -0
  32. package/dist/types.d.ts.map +1 -1
  33. package/dist/utils/ffprobe.d.ts.map +1 -1
  34. package/dist/utils/ffprobe.js +44 -17
  35. package/dist/utils/ffprobe.js.map +1 -1
  36. package/dist/utils/urlDownloader.d.ts +8 -1
  37. package/dist/utils/urlDownloader.d.ts.map +1 -1
  38. package/dist/utils/urlDownloader.js +283 -74
  39. package/dist/utils/urlDownloader.js.map +1 -1
  40. package/package.json +3 -3
@@ -1,42 +1,116 @@
1
- import { createWriteStream, existsSync, mkdirSync } from "fs";
1
+ import { closeSync, createWriteStream, existsSync, fsyncSync, mkdtempSync, mkdirSync, lstatSync, openSync, renameSync, rmSync, statSync, } from "fs";
2
2
  import { createHash } from "crypto";
3
- import { join, extname } from "path";
3
+ import { BlockList, isIP } from "node:net";
4
+ import { dirname, extname, join } from "path";
4
5
  import { Readable } from "stream";
5
- import { finished } from "stream/promises";
6
- const downloadPathCache = new Map();
6
+ import { pipeline } from "stream/promises";
7
7
  const inFlightDownloads = new Map();
8
- // SSRF guard: these prefixes identify non-public address space that
9
- // compositions (customer-supplied) must never be able to reach via the
10
- // download path. Blocks AWS IMDS (169.254.169.254), loopback, RFC1918,
11
- // and unspecified addresses. All comparisons are on the raw hostname
12
- // string; DNS resolution is NOT performed here, so DNS-rebinding bypasses
13
- // are not closed by this check — that gap is acceptable for the risk level.
14
- const BLOCKED_HOST_PREFIXES = [
15
- "169.254.", // link-local / AWS IMDS
16
- "127.", // loopback IPv4
17
- "10.", // RFC1918
18
- "192.168.", // RFC1918
19
- "0.", // unspecified
20
- "[::1]", // loopback IPv6
21
- "[fc", // RFC4193 unique-local IPv6
22
- "[fd", // RFC4193 unique-local IPv6
23
- ];
24
- // 172.16.0.0 – 172.31.255.255 (RFC1918)
25
- const BLOCKED_172_RANGE = { min: 16, max: 31 };
8
+ const signalScopes = new WeakMap();
9
+ let nextSignalScope = 1;
10
+ function signalScopeKey(signal) {
11
+ if (!signal)
12
+ return "none";
13
+ let scope = signalScopes.get(signal);
14
+ if (scope === undefined) {
15
+ scope = nextSignalScope;
16
+ nextSignalScope += 1;
17
+ signalScopes.set(signal, scope);
18
+ }
19
+ return String(scope);
20
+ }
21
+ export class UrlDownloadError extends Error {
22
+ kind;
23
+ retryable;
24
+ status;
25
+ constructor(kind, retryable, message, status) {
26
+ super(message);
27
+ this.kind = kind;
28
+ this.retryable = retryable;
29
+ this.status = status;
30
+ this.name = "UrlDownloadError";
31
+ }
32
+ }
33
+ function classifyHttpFailure(status, statusText) {
34
+ const message = `HTTP ${status}: ${statusText}`;
35
+ if (status === 404 || status === 410) {
36
+ return new UrlDownloadError("http_not_found", false, message, status);
37
+ }
38
+ if (status === 408 || status === 429 || status >= 500) {
39
+ return new UrlDownloadError("http_transient", true, message, status);
40
+ }
41
+ return new UrlDownloadError("http_rejected", false, message, status);
42
+ }
43
+ function classifyDownloadFailure(error) {
44
+ if (error instanceof UrlDownloadError)
45
+ return error;
46
+ const message = error instanceof Error ? error.message : String(error);
47
+ let current = error;
48
+ // Undici often wraps a mid-body socket failure as `TypeError: terminated`
49
+ // with the actionable `UND_ERR_*` code on `cause`.
50
+ for (let depth = 0; current && depth < 4; depth += 1) {
51
+ if (isRetryableNetworkCause(current)) {
52
+ return new UrlDownloadError("network", true, `Download failed: ${message}`);
53
+ }
54
+ current =
55
+ typeof current === "object" && current !== null && "cause" in current
56
+ ? current.cause
57
+ : undefined;
58
+ }
59
+ return new UrlDownloadError("filesystem", false, `Download failed: ${message}`);
60
+ }
61
+ const RETRYABLE_NETWORK_CODES = new Set(["ECONNRESET", "ECONNREFUSED", "ETIMEDOUT", "EAI_AGAIN"]);
62
+ function isRetryableNetworkCause(error) {
63
+ const message = error instanceof Error ? error.message : String(error);
64
+ const code = typeof error === "object" && error !== null && "code" in error && typeof error.code === "string"
65
+ ? error.code
66
+ : "";
67
+ return (RETRYABLE_NETWORK_CODES.has(code) ||
68
+ code.startsWith("UND_ERR_") ||
69
+ /fetch failed|network|socket|connection reset|terminated/i.test(message));
70
+ }
71
+ const NON_PUBLIC_IPV4_ADDRESSES = new BlockList();
72
+ for (const [network, prefix] of [
73
+ ["0.0.0.0", 8],
74
+ ["10.0.0.0", 8],
75
+ ["100.64.0.0", 10],
76
+ ["127.0.0.0", 8],
77
+ ["169.254.0.0", 16],
78
+ ["172.16.0.0", 12],
79
+ ["192.0.0.0", 24],
80
+ ["192.0.2.0", 24],
81
+ ["192.88.99.0", 24],
82
+ ["192.168.0.0", 16],
83
+ ["198.18.0.0", 15],
84
+ ["198.51.100.0", 24],
85
+ ["203.0.113.0", 24],
86
+ ["224.0.0.0", 4],
87
+ ["240.0.0.0", 4],
88
+ ]) {
89
+ NON_PUBLIC_IPV4_ADDRESSES.addSubnet(network, prefix, "ipv4");
90
+ }
91
+ const NON_PUBLIC_IPV6_ADDRESSES = new BlockList();
92
+ for (const [network, prefix] of [
93
+ ["::", 128],
94
+ ["::1", 128],
95
+ ["::ffff:0:0", 96],
96
+ ["fc00::", 7],
97
+ ["fe80::", 10],
98
+ ["fec0::", 10],
99
+ ["ff00::", 8],
100
+ ["2001:db8::", 32],
101
+ ]) {
102
+ NON_PUBLIC_IPV6_ADDRESSES.addSubnet(network, prefix, "ipv6");
103
+ }
26
104
  function isBlockedHost(hostname) {
27
- const h = hostname.toLowerCase();
105
+ const h = hostname.toLowerCase().replace(/^\[|\]$/g, "");
28
106
  if (h === "localhost")
29
107
  return true;
30
- if (BLOCKED_HOST_PREFIXES.some((p) => h.startsWith(p)))
31
- return true;
32
- // 172.16–172.31
33
- const m = h.match(/^172\.(\d{1,3})\./);
34
- if (m) {
35
- const octet = parseInt(m[1] ?? "0", 10);
36
- if (octet >= BLOCKED_172_RANGE.min && octet <= BLOCKED_172_RANGE.max)
37
- return true;
38
- }
39
- return false;
108
+ const addressType = isIP(h);
109
+ if (addressType === 0)
110
+ return false;
111
+ return addressType === 4
112
+ ? NON_PUBLIC_IPV4_ADDRESSES.check(h, "ipv4")
113
+ : NON_PUBLIC_IPV6_ADDRESSES.check(h, "ipv6");
40
114
  }
41
115
  /**
42
116
  * Validate that a URL is safe to fetch on behalf of customer-supplied
@@ -64,16 +138,179 @@ function getFilenameFromUrl(url) {
64
138
  const ext = extname(urlObj.pathname) || ".mp4";
65
139
  return `download_${hash}${ext}`;
66
140
  }
67
- export async function downloadToTemp(url, destDir, timeoutMs = 300000) {
141
+ function hasCompleteFile(path) {
142
+ if (!existsSync(path))
143
+ return false;
144
+ const entry = lstatSync(path);
145
+ if (entry.isFile() && entry.size > 0)
146
+ return true;
147
+ // Old versions could leave an empty file behind. Never trust that stale
148
+ // cache entry—or a symlink/special entry planted at the final path.
149
+ rmSync(path, { recursive: entry.isDirectory(), force: true });
150
+ return false;
151
+ }
152
+ const REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);
153
+ const MAX_REDIRECTS = 5;
154
+ function assertAllowedDownloadUrl(url, redirect) {
155
+ try {
156
+ assertPublicHttpsUrl(url);
157
+ }
158
+ catch {
159
+ throw new UrlDownloadError("http_rejected", false, redirect ? "Download redirect target is not permitted" : "Download URL is not permitted");
160
+ }
161
+ }
162
+ async function cancelResponseBody(response) {
163
+ try {
164
+ await response.body?.cancel();
165
+ }
166
+ catch {
167
+ // Redirect validation remains authoritative if teardown also fails.
168
+ }
169
+ }
170
+ function resolveRedirectUrl(response, currentUrl, redirects) {
171
+ if (redirects >= MAX_REDIRECTS) {
172
+ throw new UrlDownloadError("http_rejected", false, "Download exceeded redirect limit");
173
+ }
174
+ const location = response.headers.get("location");
175
+ if (!location) {
176
+ throw new UrlDownloadError("http_rejected", false, "Download redirect omitted a Location header");
177
+ }
178
+ try {
179
+ return new URL(location, currentUrl).toString();
180
+ }
181
+ catch {
182
+ throw new UrlDownloadError("http_rejected", false, "Download redirect Location is invalid");
183
+ }
184
+ }
185
+ async function fetchWithValidatedRedirects(initialUrl, controller) {
186
+ let currentUrl = initialUrl;
187
+ for (let redirects = 0;; redirects += 1) {
188
+ assertAllowedDownloadUrl(currentUrl, redirects > 0);
189
+ // lgtm[js/file-access-to-http] — every redirect hop is fetched manually
190
+ // only after the HTTPS/private-host guard above; automatic redirect
191
+ // following is disabled so an allowed host cannot bounce into IMDS.
192
+ const response = await fetch(currentUrl, {
193
+ signal: controller.signal,
194
+ redirect: "manual",
195
+ });
196
+ if (!REDIRECT_STATUSES.has(response.status))
197
+ return response;
198
+ await cancelResponseBody(response);
199
+ currentUrl = resolveRedirectUrl(response, currentUrl, redirects);
200
+ }
201
+ }
202
+ async function fetchToPartial(url, partialPath, controller) {
203
+ const response = await fetchWithValidatedRedirects(url, controller);
204
+ if (!response.ok) {
205
+ // Do not leave a streaming error response holding an Undici connection
206
+ // while the bounded retry starts.
207
+ try {
208
+ await response.body?.cancel();
209
+ }
210
+ catch {
211
+ // The HTTP status remains the useful failure if teardown also fails.
212
+ }
213
+ throw classifyHttpFailure(response.status, response.statusText);
214
+ }
215
+ if (!response.body) {
216
+ throw new UrlDownloadError("empty_body", true, "Download response body is empty");
217
+ }
218
+ const fileStream = createWriteStream(partialPath, { flags: "wx" });
219
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
220
+ const readableStream = Readable.fromWeb(response.body);
221
+ await pipeline(readableStream, fileStream);
222
+ if (statSync(partialPath).size === 0) {
223
+ throw new UrlDownloadError("empty_body", true, "Download response body contained zero bytes");
224
+ }
225
+ }
226
+ function syncAndPublishPartial(partialPath, localPath) {
227
+ // Windows rejects fsync on a read-only handle (EPERM); the partial is ours
228
+ // and writable, so r+ preserves the same flush semantics cross-platform.
229
+ const fd = openSync(partialPath, "r+");
230
+ try {
231
+ fsyncSync(fd);
232
+ }
233
+ finally {
234
+ closeSync(fd);
235
+ }
236
+ // Different cancellation scopes intentionally do not share a physical
237
+ // request. If another complete attempt won the final-path race, reuse it.
238
+ if (hasCompleteFile(localPath))
239
+ return;
240
+ try {
241
+ renameSync(partialPath, localPath);
242
+ }
243
+ catch (error) {
244
+ if (!hasCompleteFile(localPath))
245
+ throw error;
246
+ }
247
+ }
248
+ async function runDownloadAttempt(url, localPath, timeoutMs, signal) {
249
+ // A private, unguessable directory prevents symlink planting and keeps the
250
+ // partial on the destination filesystem so the final rename stays atomic.
251
+ const attemptDir = mkdtempSync(join(dirname(localPath), ".hf-download-"));
252
+ const partialPath = join(attemptDir, "payload");
253
+ const controller = new AbortController();
254
+ let timedOut = false;
255
+ let callerAborted = signal?.aborted ?? false;
256
+ const onCallerAbort = () => {
257
+ callerAborted = true;
258
+ controller.abort();
259
+ };
260
+ signal?.addEventListener("abort", onCallerAbort, { once: true });
261
+ const timeoutId = setTimeout(() => {
262
+ timedOut = true;
263
+ controller.abort();
264
+ }, timeoutMs);
265
+ try {
266
+ if (callerAborted) {
267
+ throw new UrlDownloadError("cancelled", false, "Download cancelled");
268
+ }
269
+ await fetchToPartial(url, partialPath, controller);
270
+ syncAndPublishPartial(partialPath, localPath);
271
+ return localPath;
272
+ }
273
+ catch (error) {
274
+ if (callerAborted) {
275
+ throw new UrlDownloadError("cancelled", false, "Download cancelled");
276
+ }
277
+ if (timedOut) {
278
+ throw new UrlDownloadError("timeout", true, `Download timeout after ${timeoutMs / 1000}s`);
279
+ }
280
+ throw classifyDownloadFailure(error);
281
+ }
282
+ finally {
283
+ clearTimeout(timeoutId);
284
+ signal?.removeEventListener("abort", onCallerAbort);
285
+ controller.abort();
286
+ rmSync(attemptDir, { recursive: true, force: true });
287
+ }
288
+ }
289
+ async function downloadWithRetry(url, localPath, timeoutMs, signal, onTransientRetry) {
290
+ const maxTransientRetries = 1;
291
+ for (let attempt = 0;; attempt += 1) {
292
+ try {
293
+ return await runDownloadAttempt(url, localPath, timeoutMs, signal);
294
+ }
295
+ catch (error) {
296
+ const classified = classifyDownloadFailure(error);
297
+ if (!classified.retryable || attempt >= maxTransientRetries)
298
+ throw classified;
299
+ onTransientRetry?.(classified);
300
+ }
301
+ }
302
+ }
303
+ export async function downloadToTemp(url, destDir, timeoutMs = 300000, signal, onTransientRetry) {
68
304
  // Reject non-HTTPS URLs and private/reserved address ranges before
69
305
  // touching the cache or filesystem — customer-supplied compositions must
70
306
  // not be able to trigger outbound fetches to internal infrastructure.
71
307
  assertPublicHttpsUrl(url);
72
- const cachedPath = downloadPathCache.get(url);
73
- if (cachedPath && existsSync(cachedPath)) {
74
- return cachedPath;
75
- }
76
- const inFlight = inFlightDownloads.get(url);
308
+ const cacheKey = `${url}\0${destDir}`;
309
+ // The physical request may be shared only by callers with the same
310
+ // cancellation scope and deadline. Otherwise the first caller's abort or
311
+ // timeout would incorrectly own every waiter.
312
+ const inFlightKey = `${cacheKey}\0${timeoutMs}\0${signalScopeKey(signal)}`;
313
+ const inFlight = inFlightDownloads.get(inFlightKey);
77
314
  if (inFlight) {
78
315
  return inFlight;
79
316
  }
@@ -82,42 +319,14 @@ export async function downloadToTemp(url, destDir, timeoutMs = 300000) {
82
319
  }
83
320
  const filename = getFilenameFromUrl(url);
84
321
  const localPath = join(destDir, filename);
85
- if (existsSync(localPath)) {
86
- downloadPathCache.set(url, localPath);
322
+ if (hasCompleteFile(localPath))
87
323
  return localPath;
88
- }
89
- const downloadPromise = (async () => {
90
- try {
91
- const controller = new AbortController();
92
- const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
93
- const response = await fetch(url, { signal: controller.signal });
94
- clearTimeout(timeoutId);
95
- if (!response.ok) {
96
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
97
- }
98
- if (!response.body) {
99
- throw new Error("Response body is empty");
100
- }
101
- const fileStream = createWriteStream(localPath);
102
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
103
- const readableStream = Readable.fromWeb(response.body);
104
- await finished(readableStream.pipe(fileStream));
105
- downloadPathCache.set(url, localPath);
106
- return localPath;
107
- }
108
- catch (err) {
109
- const message = err instanceof Error ? err.message : String(err);
110
- if (message.includes("aborted")) {
111
- throw new Error(`[URLDownloader] Download timeout after ${timeoutMs / 1000}s: ${url}`);
112
- }
113
- throw new Error(`[URLDownloader] Download failed: ${message}`);
114
- }
115
- finally {
116
- inFlightDownloads.delete(url);
117
- }
118
- })();
119
- inFlightDownloads.set(url, downloadPromise);
120
- return downloadPromise;
324
+ const downloadPromise = downloadWithRetry(url, localPath, timeoutMs, signal, onTransientRetry);
325
+ const trackedDownload = downloadPromise.finally(() => {
326
+ inFlightDownloads.delete(inFlightKey);
327
+ });
328
+ inFlightDownloads.set(inFlightKey, trackedDownload);
329
+ return trackedDownload;
121
330
  }
122
331
  export function isHttpUrl(path) {
123
332
  return path.startsWith("http://") || path.startsWith("https://");
@@ -1 +1 @@
1
- {"version":3,"file":"urlDownloader.js","sourceRoot":"","sources":["../../src/utils/urlDownloader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"urlDownloader.js","sourceRoot":"","sources":["../../src/utils/urlDownloader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperframes/engine",
3
- "version": "0.7.71",
3
+ "version": "0.7.73",
4
4
  "description": "Seekable web page to video rendering engine (Puppeteer + FFmpeg)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -38,8 +38,8 @@
38
38
  "linkedom": "^0.18.12",
39
39
  "puppeteer": "^25.2.1",
40
40
  "puppeteer-core": "^25.2.1",
41
- "@hyperframes/core": "^0.7.71",
42
- "@hyperframes/parsers": "^0.7.71"
41
+ "@hyperframes/core": "^0.7.73",
42
+ "@hyperframes/parsers": "^0.7.73"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "^25.0.10",