hyperframes 0.8.163 → 0.8.164

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 (92) hide show
  1. package/dist/{add-Y7BGO2MK.js → add-5UR2S4ZU.js} +5 -5
  2. package/dist/{asset-OONPCZS5.js → asset-TB7K7OFL.js} +2 -2
  3. package/dist/{assetCataloger-YWJRJK23.js → assetCataloger-FE4K64GW.js} +25 -5
  4. package/dist/{audio-KPTXNHDC.js → audio-WH3XWV6N.js} +5 -5
  5. package/dist/{auth-UKXSZ4WA.js → auth-4BBOL3DI.js} +1 -1
  6. package/dist/{autoUpdate-4MRUONUQ.js → autoUpdate-7LARILUN.js} +2 -2
  7. package/dist/{backgroundChecks-X5M7Z6L7.js → backgroundChecks-5A5VAWOQ.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{beats-EQNT7OZE.js → beats-EVQOYYYQ.js} +4 -4
  10. package/dist/{benchmark-WXWALVZJ.js → benchmark-5KE22VUG.js} +5 -5
  11. package/dist/{browser-ZSNFVRC3.js → browser-BLGJSG23.js} +3 -3
  12. package/dist/{capture-TKWJBFGC.js → capture-KSXWVLT7.js} +306 -92
  13. package/dist/{capture-JFFYE7XM.js → capture-PR52XOEQ.js} +2 -2
  14. package/dist/{catalog-LK5MNUQY.js → catalog-W3AG6ISP.js} +5 -5
  15. package/dist/{catch-up-ISTWIF6K.js → catch-up-JLZUALKW.js} +4 -4
  16. package/dist/{check-YVEBXKNY.js → check-PGH3VCIR.js} +13 -13
  17. package/dist/{checkBrowser-OJAXYTRD.js → checkBrowser-MNJBUCZD.js} +9 -9
  18. package/dist/{chunk-HQMWZNO2.js → chunk-36CWAWB7.js} +1 -1
  19. package/dist/{chunk-OGGPNDGO.js → chunk-3XJVN7MR.js} +2 -2
  20. package/dist/{chunk-Z6P5OVCF.js → chunk-56RENSU4.js} +1 -1
  21. package/dist/{chunk-2ALJMIFW.js → chunk-57SASPYR.js} +12 -1
  22. package/dist/{chunk-NGKM64BP.js → chunk-5CTORVUM.js} +17 -2
  23. package/dist/{chunk-SQN7N27A.js → chunk-6DJLEE74.js} +2 -2
  24. package/dist/{chunk-OZUYK6IS.js → chunk-FTFWZHTZ.js} +1 -1
  25. package/dist/{chunk-VG3ZMY2H.js → chunk-G3QMPIFG.js} +2 -2
  26. package/dist/{chunk-WJVDUUH2.js → chunk-GJOW6ZFW.js} +2 -2
  27. package/dist/{chunk-M4237QMQ.js → chunk-HYRDV7AL.js} +1 -1
  28. package/dist/{chunk-JYR3YAAK.js → chunk-KR3M4GKH.js} +1 -1
  29. package/dist/{chunk-23IS5QVP.js → chunk-NOVAH7N4.js} +1 -1
  30. package/dist/{chunk-NU4PDQ6G.js → chunk-PRZDWAH3.js} +1 -1
  31. package/dist/{chunk-TQMJKZS5.js → chunk-Q4XFXAQ3.js} +1 -1
  32. package/dist/{chunk-OFD2XWIQ.js → chunk-SYOB5Y35.js} +178 -1
  33. package/dist/{chunk-QXAXCRK5.js → chunk-UF45OJ3N.js} +1 -1
  34. package/dist/{chunk-WMXOKTGO.js → chunk-UH4IL4K4.js} +2 -2
  35. package/dist/{chunk-2XIPB4MP.js → chunk-VEAKQW4X.js} +1 -1
  36. package/dist/{chunk-ZVOCFUPA.js → chunk-WE5X5AKF.js} +4 -4
  37. package/dist/{chunk-43H7XDO6.js → chunk-WLQII3K3.js} +2 -2
  38. package/dist/{chunk-LHETZ63N.js → chunk-WZSWLCEH.js} +1 -1
  39. package/dist/{chunk-54E2ELUA.js → chunk-XYDPJ3CQ.js} +4 -4
  40. package/dist/{clean-PGEA3UPT.js → clean-R7BXTAFB.js} +3 -3
  41. package/dist/cli.js +63 -55
  42. package/dist/{cloud-SAODZ2PK.js → cloud-IPXFPX7M.js} +4 -4
  43. package/dist/{compare-R7X7LXCX.js → compare-S3RMZBB4.js} +6 -6
  44. package/dist/{component-DTVCMTLX.js → component-VSOWEAK4.js} +3 -3
  45. package/dist/{compositions-UXS2ISGS.js → compositions-7LPCAY7M.js} +5 -5
  46. package/dist/{delete-LIGHRH4L.js → delete-L32WDJGO.js} +2 -2
  47. package/dist/{doctor-6VR5JUWZ.js → doctor-7TSVAIF2.js} +3 -3
  48. package/dist/{dotEnv-AECLXQSO.js → dotEnv-64S3VKGH.js} +3 -1
  49. package/dist/{events-ZQFIOH5Z.js → events-FDHKA6NV.js} +3 -3
  50. package/dist/{events-YP2MRCPP.js → events-RFABFHWU.js} +2 -2
  51. package/dist/{feedback-47UEIUOO.js → feedback-SDAJ2HAM.js} +4 -4
  52. package/dist/{figma-ZTHHEDY5.js → figma-KJBYCHXQ.js} +3 -3
  53. package/dist/fontLocalizeCli.js +1 -1
  54. package/dist/{get-EZGQNT7G.js → get-6Z3JCPJ6.js} +2 -2
  55. package/dist/{grade-compare-SEFOAA4E.js → grade-compare-HAQXCQSE.js} +6 -6
  56. package/dist/{help-WIZONGVE.js → help-WMMVG2PR.js} +1 -1
  57. package/dist/{history-PE45CSGA.js → history-5AQNASLD.js} +6 -6
  58. package/dist/hyperframes-player.global.js +1 -1
  59. package/dist/{info-WIRSMQKB.js → info-OUJ3HXTN.js} +5 -5
  60. package/dist/{init-N26RW4YN.js → init-NEEYHH7E.js} +6 -6
  61. package/dist/{inspect-XHQUASDV.js → inspect-ZWBDYWTY.js} +8 -8
  62. package/dist/{keyframes-RNTYYHMK.js → keyframes-BA5R5Q7G.js} +6 -6
  63. package/dist/{layout-YRCKPNAO.js → layout-GJVLRWIJ.js} +8 -8
  64. package/dist/{lint-HLOZHJVM.js → lint-FBH2BA2A.js} +6 -6
  65. package/dist/{list-X7NTQB32.js → list-XDZIX2PU.js} +2 -2
  66. package/dist/{login-S7PVNUEB.js → login-CUHIF5GP.js} +4 -4
  67. package/dist/{media-treatment-465Y6CWE.js → media-treatment-HZDD67IL.js} +5 -5
  68. package/dist/{motionShot-K6OBEZ2N.js → motionShot-D2C44I6P.js} +2 -2
  69. package/dist/{normalize-audio-VODIXLAC.js → normalize-audio-B6PKQGHV.js} +4 -4
  70. package/dist/{open-K5OZGYJ7.js → open-EIN2FH4D.js} +4 -4
  71. package/dist/{play-QOXKOZ6L.js → play-KLOHE5XH.js} +4 -4
  72. package/dist/{present-7CVCJIS3.js → present-4K53KZ3P.js} +4 -4
  73. package/dist/{preview-HX5F6RGT.js → preview-PSALQBNR.js} +5 -5
  74. package/dist/{render-TRU75TVB.js → render-2QY3DTYM.js} +8 -8
  75. package/dist/{render-XS22VQHC.js → render-NAJFHWUG.js} +5 -5
  76. package/dist/{skills-RKDR4AXV.js → skills-ETYVJOLG.js} +5 -5
  77. package/dist/{skillsUpdateCheck-QWIERB7M.js → skillsUpdateCheck-6P4VCFZZ.js} +3 -3
  78. package/dist/{snapshot-SSSF334Y.js → snapshot-P3RZFXUC.js} +8 -8
  79. package/dist/studio/assets/{hyperframes-player-oCk9rjq9.js → hyperframes-player-CQX9TDla.js} +1 -1
  80. package/dist/studio/assets/{index-BOQPXBQ0.js → index-BnU7S7oM.js} +1 -1
  81. package/dist/studio/assets/{index-DK2wgdLx.js → index-DHqUZqg6.js} +4 -4
  82. package/dist/studio/index.html +1 -1
  83. package/dist/{studioServer-KWNULEM4.js → studioServer-HF6ZCYQO.js} +7 -7
  84. package/dist/{telemetry-4G6CD3X7.js → telemetry-ASFTF5YV.js} +3 -3
  85. package/dist/{timeline-TKPBJ4EP.js → timeline-H7Q2K6ZQ.js} +5 -5
  86. package/dist/{tokens-TX7THSB7.js → tokens-LWCXLQCR.js} +2 -2
  87. package/dist/{transcribe-7DBONX4C.js → transcribe-X2GOG3HZ.js} +3 -3
  88. package/dist/{updateCheck-64D7B73Z.js → updateCheck-EA7X36NI.js} +2 -2
  89. package/dist/{upgrade-MXQDGGYO.js → upgrade-Y6H3ZEEJ.js} +2 -2
  90. package/dist/{validate-5ZNGP5QO.js → validate-TZAB2PVX.js} +8 -8
  91. package/dist/{video-62JJK3XL.js → video-LNLD2PKZ.js} +1 -1
  92. package/package.json +1 -1
@@ -116,7 +116,7 @@ var capture_default = defineCommand({
116
116
  // fallow-ignore-next-line complexity
117
117
  async run({ args }) {
118
118
  if (args.video) {
119
- const { runVideoMode } = await import("./video-62JJK3XL.js");
119
+ const { runVideoMode } = await import("./video-LNLD2PKZ.js");
120
120
  await runVideoMode({
121
121
  project: args.video,
122
122
  index: args.index ?? null,
@@ -173,7 +173,7 @@ var capture_default = defineCommand({
173
173
  }
174
174
  console.log();
175
175
  }
176
- const { captureWebsite } = await import("./capture-TKWJBFGC.js");
176
+ const { captureWebsite } = await import("./capture-KSXWVLT7.js");
177
177
  let captureFailed = false;
178
178
  try {
179
179
  const result = await captureWebsite(
@@ -6,8 +6,8 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  runAdd
9
- } from "./chunk-WMXOKTGO.js";
10
- import "./chunk-M4237QMQ.js";
9
+ } from "./chunk-UH4IL4K4.js";
10
+ import "./chunk-HYRDV7AL.js";
11
11
  import {
12
12
  DEFAULT_PROJECT_CONFIG,
13
13
  loadProjectConfig
@@ -25,8 +25,8 @@ import {
25
25
  import "./chunk-AWDFDFI3.js";
26
26
  import "./chunk-P6LJ4Y32.js";
27
27
  import "./chunk-GMECXFAN.js";
28
- import "./chunk-HQMWZNO2.js";
29
- import "./chunk-2XIPB4MP.js";
28
+ import "./chunk-36CWAWB7.js";
29
+ import "./chunk-VEAKQW4X.js";
30
30
  import "./chunk-VWG7OQKU.js";
31
31
  import "./chunk-QWQ6GQTI.js";
32
32
  import {
@@ -54,7 +54,7 @@ import {
54
54
  isAttendedTerminal
55
55
  } from "./chunk-WERLJGIC.js";
56
56
  import "./chunk-ISN5GRYI.js";
57
- import "./chunk-VG3ZMY2H.js";
57
+ import "./chunk-G3QMPIFG.js";
58
58
  import {
59
59
  installedOptionalPackageVersion,
60
60
  loadInstalledOptionalPackage,
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveProject
9
- } from "./chunk-NU4PDQ6G.js";
9
+ } from "./chunk-PRZDWAH3.js";
10
10
  import "./chunk-K2FLNJVB.js";
11
11
  import {
12
12
  filesChangedSince,
@@ -14,8 +14,8 @@ import {
14
14
  readSeen,
15
15
  unseenTurns
16
16
  } from "./chunk-DCAI5DBR.js";
17
- import "./chunk-HQMWZNO2.js";
18
- import "./chunk-2XIPB4MP.js";
17
+ import "./chunk-36CWAWB7.js";
18
+ import "./chunk-VEAKQW4X.js";
19
19
  import "./chunk-VWG7OQKU.js";
20
20
  import "./chunk-QWQ6GQTI.js";
21
21
  import {
@@ -30,7 +30,7 @@ import "./chunk-K4WIOZFP.js";
30
30
  import "./chunk-XUXGIA7H.js";
31
31
  import "./chunk-WERLJGIC.js";
32
32
  import "./chunk-ISN5GRYI.js";
33
- import "./chunk-VG3ZMY2H.js";
33
+ import "./chunk-G3QMPIFG.js";
34
34
  import "./chunk-EOVYQ3IG.js";
35
35
  import "./chunk-XT6MXC7A.js";
36
36
  import "./chunk-JYVGYKXG.js";
@@ -20,15 +20,15 @@ import {
20
20
  } from "./chunk-QABAVWEX.js";
21
21
  import {
22
22
  captureArtifactRevision
23
- } from "./chunk-JYR3YAAK.js";
24
- import "./chunk-LHETZ63N.js";
23
+ } from "./chunk-KR3M4GKH.js";
24
+ import "./chunk-WZSWLCEH.js";
25
25
  import "./chunk-X7MTZ4T2.js";
26
26
  import {
27
27
  loadProducer
28
28
  } from "./chunk-ULAB77ZO.js";
29
29
  import {
30
30
  trackLintRun
31
- } from "./chunk-WJVDUUH2.js";
31
+ } from "./chunk-GJOW6ZFW.js";
32
32
  import {
33
33
  assertionTargets,
34
34
  buildLayoutSampleTimes,
@@ -47,18 +47,18 @@ import {
47
47
  mergeSampleTimes,
48
48
  parseAt,
49
49
  readMotionSpec
50
- } from "./chunk-54E2ELUA.js";
51
- import "./chunk-QXAXCRK5.js";
50
+ } from "./chunk-XYDPJ3CQ.js";
51
+ import "./chunk-UF45OJ3N.js";
52
52
  import {
53
53
  BrowserCleanupError,
54
54
  closeManagedBrowser
55
- } from "./chunk-2ALJMIFW.js";
55
+ } from "./chunk-57SASPYR.js";
56
56
  import "./chunk-FH7WODJH.js";
57
57
  import "./chunk-H3JGPRWA.js";
58
58
  import "./chunk-WPNE5NEP.js";
59
59
  import {
60
60
  resolveProject
61
- } from "./chunk-NU4PDQ6G.js";
61
+ } from "./chunk-PRZDWAH3.js";
62
62
  import "./chunk-K2FLNJVB.js";
63
63
  import "./chunk-AXATVUCD.js";
64
64
  import "./chunk-X7MTZ4T2.js";
@@ -92,8 +92,8 @@ import "./chunk-5CS4T6C6.js";
92
92
  import {
93
93
  trackCheckReport,
94
94
  trackCommandFailure
95
- } from "./chunk-HQMWZNO2.js";
96
- import "./chunk-2XIPB4MP.js";
95
+ } from "./chunk-36CWAWB7.js";
96
+ import "./chunk-VEAKQW4X.js";
97
97
  import "./chunk-VWG7OQKU.js";
98
98
  import "./chunk-QWQ6GQTI.js";
99
99
  import {
@@ -118,12 +118,12 @@ import "./chunk-TJSTGSAW.js";
118
118
  import "./chunk-Q5X2B5WT.js";
119
119
  import {
120
120
  withMeta
121
- } from "./chunk-Z6P5OVCF.js";
121
+ } from "./chunk-56RENSU4.js";
122
122
  import "./chunk-K4WIOZFP.js";
123
123
  import "./chunk-XUXGIA7H.js";
124
124
  import "./chunk-WERLJGIC.js";
125
125
  import "./chunk-ISN5GRYI.js";
126
- import "./chunk-VG3ZMY2H.js";
126
+ import "./chunk-G3QMPIFG.js";
127
127
  import "./chunk-EOVYQ3IG.js";
128
128
  import "./chunk-XT6MXC7A.js";
129
129
  import {
@@ -1555,7 +1555,7 @@ function resolveMotionSpec(projectDir) {
1555
1555
  };
1556
1556
  }
1557
1557
  async function runBrowserCheck(project, options, motion, deadline) {
1558
- const module = await import("./checkBrowser-OJAXYTRD.js");
1558
+ const module = await import("./checkBrowser-MNJBUCZD.js");
1559
1559
  return module.runBrowserCheck(project, options, motion, runAuditGrid, deadline);
1560
1560
  }
1561
1561
  async function writeSnapshot(projectDir, index, time, pngBase64) {
@@ -1567,7 +1567,7 @@ async function writeSnapshot(projectDir, index, time, pngBase64) {
1567
1567
  return relative(projectDir, path);
1568
1568
  }
1569
1569
  async function captureFindingCrops(project, options, requests, deadline) {
1570
- const module = await import("./checkBrowser-OJAXYTRD.js");
1570
+ const module = await import("./checkBrowser-MNJBUCZD.js");
1571
1571
  return module.captureFindingCrops(project, options, requests, deadline);
1572
1572
  }
1573
1573
  var DEFAULT_DEPENDENCIES2 = {
@@ -8,7 +8,7 @@ import {
8
8
  auditClipDurations,
9
9
  shouldIgnoreHttpError,
10
10
  shouldIgnoreRequestFailure
11
- } from "./chunk-ZVOCFUPA.js";
11
+ } from "./chunk-WE5X5AKF.js";
12
12
  import {
13
13
  checkSnapshotDirectory,
14
14
  rectToBbox
@@ -17,7 +17,7 @@ import "./chunk-X7MTZ4T2.js";
17
17
  import {
18
18
  ambiguousIssue,
19
19
  loadBrowserScript
20
- } from "./chunk-54E2ELUA.js";
20
+ } from "./chunk-XYDPJ3CQ.js";
21
21
  import {
22
22
  AUDIT_SEEK_OPTIONS,
23
23
  DEFAULT_ZOOM_PADDING_PX,
@@ -29,15 +29,15 @@ import {
29
29
  resolveCliChromeGpuMode,
30
30
  seekCompositionTimeline,
31
31
  waitForPreferredSeekTarget
32
- } from "./chunk-QXAXCRK5.js";
32
+ } from "./chunk-UF45OJ3N.js";
33
33
  import {
34
34
  BrowserCleanupError,
35
35
  closeManagedBrowser
36
- } from "./chunk-2ALJMIFW.js";
36
+ } from "./chunk-57SASPYR.js";
37
37
  import "./chunk-FH7WODJH.js";
38
38
  import "./chunk-H3JGPRWA.js";
39
39
  import "./chunk-WPNE5NEP.js";
40
- import "./chunk-NU4PDQ6G.js";
40
+ import "./chunk-PRZDWAH3.js";
41
41
  import "./chunk-K2FLNJVB.js";
42
42
  import {
43
43
  serveStaticProjectHtml
@@ -73,8 +73,8 @@ import "./chunk-AWDFDFI3.js";
73
73
  import "./chunk-P6LJ4Y32.js";
74
74
  import "./chunk-GMECXFAN.js";
75
75
  import "./chunk-5CS4T6C6.js";
76
- import "./chunk-HQMWZNO2.js";
77
- import "./chunk-2XIPB4MP.js";
76
+ import "./chunk-36CWAWB7.js";
77
+ import "./chunk-VEAKQW4X.js";
78
78
  import "./chunk-VWG7OQKU.js";
79
79
  import "./chunk-QWQ6GQTI.js";
80
80
  import "./chunk-S3S4TGEH.js";
@@ -84,12 +84,12 @@ import "./chunk-ZTZA4UWZ.js";
84
84
  import "./chunk-KLIKCX6Q.js";
85
85
  import "./chunk-EOOEC32M.js";
86
86
  import "./chunk-TJSTGSAW.js";
87
- import "./chunk-Z6P5OVCF.js";
87
+ import "./chunk-56RENSU4.js";
88
88
  import "./chunk-K4WIOZFP.js";
89
89
  import "./chunk-XUXGIA7H.js";
90
90
  import "./chunk-WERLJGIC.js";
91
91
  import "./chunk-ISN5GRYI.js";
92
- import "./chunk-VG3ZMY2H.js";
92
+ import "./chunk-G3QMPIFG.js";
93
93
  import "./chunk-EOVYQ3IG.js";
94
94
  import "./chunk-XT6MXC7A.js";
95
95
  import "./chunk-A356JY2J.js";
@@ -8,7 +8,7 @@ import {
8
8
  flush,
9
9
  shouldTrack,
10
10
  trackEvent
11
- } from "./chunk-2XIPB4MP.js";
11
+ } from "./chunk-VEAKQW4X.js";
12
12
  import {
13
13
  getPowerState
14
14
  } from "./chunk-QWQ6GQTI.js";
@@ -20,7 +20,7 @@ import {
20
20
  typeDirPath,
21
21
  updateRecord,
22
22
  withFigmaErrors
23
- } from "./chunk-OZUYK6IS.js";
23
+ } from "./chunk-FTFWZHTZ.js";
24
24
  import {
25
25
  defineCommand
26
26
  } from "./chunk-S3S4TGEH.js";
@@ -229,7 +229,7 @@ var asset_default = defineCommand({
229
229
  rendered > 0 ? `(${results.length} nodes, ${rendered} rendered in 1 figma request)` : `(${results.length} nodes, all reused from cache \u2014 no figma request)`
230
230
  );
231
231
  }
232
- const { trackFigmaImport } = await import("./telemetry-4G6CD3X7.js");
232
+ const { trackFigmaImport } = await import("./telemetry-ASFTF5YV.js");
233
233
  trackFigmaImport({
234
234
  phase: "asset",
235
235
  reused: results.every((r) => r.reused),
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-ISN5GRYI.js";
18
18
  import {
19
19
  VERSION
20
- } from "./chunk-VG3ZMY2H.js";
20
+ } from "./chunk-G3QMPIFG.js";
21
21
 
22
22
  // src/utils/updateCheck.ts
23
23
  import { existsSync, readFileSync } from "fs";
@@ -23,6 +23,7 @@ var BrowserCleanupError = class extends AggregateError {
23
23
  var browsers = /* @__PURE__ */ new Set();
24
24
  var closing = /* @__PURE__ */ new WeakMap();
25
25
  var pending = /* @__PURE__ */ new Map();
26
+ var sessionCleanups = /* @__PURE__ */ new Set();
26
27
  var CLOSE_GRACE_MS = 1e3;
27
28
  var EXIT_POLL_MS = 50;
28
29
  var listening = false;
@@ -90,7 +91,16 @@ async function launchManagedBrowser(puppeteer, options) {
90
91
  async function closeManagedBrowsers() {
91
92
  for (const abort of pending.values()) abort.abort();
92
93
  await Promise.allSettled(pending.keys());
93
- await Promise.all([...browsers].map(closeManagedBrowser));
94
+ const results = await Promise.allSettled([...browsers].map(closeManagedBrowser));
95
+ results.push(...await Promise.allSettled([...sessionCleanups].map((cleanup) => cleanup())));
96
+ const errors = results.flatMap((result) => result.status === "rejected" ? [result.reason] : []);
97
+ if (errors.length) throw new AggregateError(errors, "Browser session shutdown failed.");
98
+ }
99
+ function registerBrowserSessionCleanup(cleanup) {
100
+ if (shutdown) throw new Error("The CLI is stopping; no browser session can start.");
101
+ ownSignals();
102
+ sessionCleanups.add(cleanup);
103
+ return () => sessionCleanups.delete(cleanup);
94
104
  }
95
105
  function closeManagedBrowser(browser) {
96
106
  const existing = closing.get(browser);
@@ -151,6 +161,7 @@ export {
151
161
  BrowserCleanupError,
152
162
  resolveManagedGpuMode,
153
163
  launchManagedBrowser,
164
+ registerBrowserSessionCleanup,
154
165
  closeManagedBrowser,
155
166
  rethrowAfterBrowserCleanup
156
167
  };
@@ -9,6 +9,18 @@ import {
9
9
  } from "./chunk-IGLEPPTN.js";
10
10
 
11
11
  // src/utils/dotEnv.ts
12
+ var CAPTURE_ENV_KEYS = [
13
+ "OPENROUTER_API_KEY",
14
+ "GEMINI_API_KEY",
15
+ "GOOGLE_API_KEY",
16
+ "HYPERFRAMES_VERTEX_PROJECT_ID",
17
+ "HYPERFRAMES_VERTEX_SERVICE_ACCOUNT",
18
+ "HYPERFRAMES_VERTEX_LOCATION",
19
+ "HYPERFRAMES_VERTEX_MODEL",
20
+ "HYPERFRAMES_OPENROUTER_MODEL",
21
+ "HYPERFRAMES_GEMINI_MODEL",
22
+ "HYPERFRAMES_VISION_TIMEOUT_MS"
23
+ ];
12
24
  function valueOf(raw) {
13
25
  const quote = raw.charAt(0);
14
26
  if (quote === '"' || quote === "'") {
@@ -26,14 +38,17 @@ function entryOf(rawLine) {
26
38
  if (eq < 1) return null;
27
39
  return [line.slice(0, eq).trim(), valueOf(line.slice(eq + 1).trim())];
28
40
  }
29
- function applyDotEnv(content, env) {
41
+ function applyDotEnv(content, env, allowedKeys) {
42
+ const allowed = allowedKeys === void 0 ? void 0 : new Set(allowedKeys);
30
43
  for (const entry of content.split("\n").map(entryOf)) {
31
44
  if (!entry) continue;
32
45
  const [key, value] = entry;
33
- if (key && key.toUpperCase() !== FEEDBACK_EMAIL_ENV && !(key in env)) env[key] = value;
46
+ if (key && key.toUpperCase() !== FEEDBACK_EMAIL_ENV && (allowed === void 0 || allowed.has(key)) && !(key in env))
47
+ env[key] = value;
34
48
  }
35
49
  }
36
50
 
37
51
  export {
52
+ CAPTURE_ENV_KEYS,
38
53
  applyDotEnv
39
54
  };
@@ -32,14 +32,14 @@ import {
32
32
  import {
33
33
  getUpdateMeta,
34
34
  withMeta
35
- } from "./chunk-Z6P5OVCF.js";
35
+ } from "./chunk-56RENSU4.js";
36
36
  import {
37
37
  CONFIG_PATH,
38
38
  withFileLock
39
39
  } from "./chunk-XUXGIA7H.js";
40
40
  import {
41
41
  VERSION
42
- } from "./chunk-VG3ZMY2H.js";
42
+ } from "./chunk-G3QMPIFG.js";
43
43
  import {
44
44
  OPTIONAL_PACKAGES,
45
45
  installedOptionalPackageVersion
@@ -1278,7 +1278,7 @@ async function withFigmaErrors(command, fn) {
1278
1278
  } catch (err) {
1279
1279
  if (err instanceof Error) {
1280
1280
  try {
1281
- const { trackCommandFailure } = await import("./events-ZQFIOH5Z.js");
1281
+ const { trackCommandFailure } = await import("./events-FDHKA6NV.js");
1282
1282
  trackCommandFailure(
1283
1283
  command,
1284
1284
  err,
@@ -6,8 +6,8 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
 
8
8
  // src/version.ts
9
- var VERSION = true ? "0.8.163" : "0.0.0-dev";
10
- var PRODUCER_VERSION = true ? "0.8.163" : "0.0.0-dev";
9
+ var VERSION = true ? "0.8.164" : "0.0.0-dev";
10
+ var PRODUCER_VERSION = true ? "0.8.164" : "0.0.0-dev";
11
11
 
12
12
  export {
13
13
  VERSION,
@@ -7,10 +7,10 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  trackLintReport,
9
9
  trackLintRuleStreak
10
- } from "./chunk-HQMWZNO2.js";
10
+ } from "./chunk-36CWAWB7.js";
11
11
  import {
12
12
  shouldTrack
13
- } from "./chunk-2XIPB4MP.js";
13
+ } from "./chunk-VEAKQW4X.js";
14
14
  import {
15
15
  LINT_RULE_COUNT,
16
16
  LINT_RULE_GROUP_COUNTS
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  VERSION
9
- } from "./chunk-VG3ZMY2H.js";
9
+ } from "./chunk-G3QMPIFG.js";
10
10
 
11
11
  // src/registry/compatibility.ts
12
12
  import { compareVersions } from "compare-versions";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  withOwner
9
- } from "./chunk-LHETZ63N.js";
9
+ } from "./chunk-WZSWLCEH.js";
10
10
  import {
11
11
  beginArtifactCapture
12
12
  } from "./chunk-JGYHWVXQ.js";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  shouldTrack
9
- } from "./chunk-2XIPB4MP.js";
9
+ } from "./chunk-VEAKQW4X.js";
10
10
 
11
11
  // src/telemetry/renderObservability.ts
12
12
  function renderObservabilityTelemetryPayload(observability) {
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-K2FLNJVB.js";
10
10
  import {
11
11
  trackCommandFailure
12
- } from "./chunk-HQMWZNO2.js";
12
+ } from "./chunk-36CWAWB7.js";
13
13
  import {
14
14
  failCommand
15
15
  } from "./chunk-PBN6GBJE.js";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  updateNoticesSuppressed
9
- } from "./chunk-Z6P5OVCF.js";
9
+ } from "./chunk-56RENSU4.js";
10
10
  import {
11
11
  hostAnswers
12
12
  } from "./chunk-K4WIOZFP.js";
@@ -23,6 +23,180 @@ import {
23
23
  // src/capture/userAgent.ts
24
24
  var CAPTURE_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36";
25
25
 
26
+ // src/capture/publicNetwork.ts
27
+ import { lookup } from "dns/promises";
28
+ import { isIP } from "net";
29
+ import { request as httpRequest } from "http";
30
+ import { request as httpsRequest } from "https";
31
+ function ipv4Number(address) {
32
+ return address.split(".").reduce((value, octet) => value * 256 + Number(octet), 0);
33
+ }
34
+ var NON_PUBLIC_IPV4 = [
35
+ ["0.0.0.0", 8],
36
+ ["10.0.0.0", 8],
37
+ ["100.64.0.0", 10],
38
+ ["127.0.0.0", 8],
39
+ ["169.254.0.0", 16],
40
+ ["172.16.0.0", 12],
41
+ ["192.0.0.0", 16],
42
+ ["192.88.99.0", 24],
43
+ ["192.168.0.0", 16],
44
+ ["198.18.0.0", 15],
45
+ ["198.51.100.0", 24],
46
+ ["203.0.113.0", 24],
47
+ ["224.0.0.0", 3]
48
+ ];
49
+ var NON_PUBLIC_RANGES = NON_PUBLIC_IPV4.map(([network, prefix]) => ({
50
+ start: ipv4Number(network),
51
+ end: ipv4Number(network) + 2 ** (32 - prefix)
52
+ }));
53
+ function isPublicIPv4(address) {
54
+ if (isIP(address) !== 4) return false;
55
+ const value = ipv4Number(address);
56
+ return !NON_PUBLIC_RANGES.some(({ start, end }) => value >= start && value < end);
57
+ }
58
+ async function resolvePublicAddress(hostname) {
59
+ const host = hostname.toLowerCase().replace(/\.$/, "");
60
+ if (isIP(host) === 4) {
61
+ if (!isPublicIPv4(host)) throw new Error("Capture requires a public IPv4 address");
62
+ return host;
63
+ }
64
+ if (!host.includes(".") || !/^[a-z0-9.-]+$/.test(host) || /(?:^|\.)(?:localhost|local|internal|home|lan|test|invalid|example)$/.test(host) || host.split(".").some((label) => !label || label.startsWith("-") || label.endsWith("-"))) {
65
+ throw new Error("Capture requires a public hostname");
66
+ }
67
+ let timer;
68
+ try {
69
+ const answers = await Promise.race([
70
+ lookup(host, { all: true, family: 4, verbatim: true }),
71
+ new Promise((_resolve, reject) => {
72
+ timer = setTimeout(() => reject(new Error("Capture DNS timed out")), 1e4);
73
+ timer.unref();
74
+ })
75
+ ]);
76
+ if (!answers[0] || answers.some((answer) => answer.family !== 4 || !isPublicIPv4(answer.address))) {
77
+ throw new Error("Capture DNS returned a non-public address");
78
+ }
79
+ const first = answers[0];
80
+ if (!first) throw new Error("Capture DNS returned no address");
81
+ return first.address;
82
+ } finally {
83
+ clearTimeout(timer);
84
+ }
85
+ }
86
+ async function publicRequest(url, init = {}) {
87
+ const target = new URL(url);
88
+ if (!["http:", "https:"].includes(target.protocol) || target.username || target.password) {
89
+ throw new Error("Capture requires an HTTP(S) URL without credentials");
90
+ }
91
+ const method = (init.method ?? "GET").toUpperCase();
92
+ if (!["GET", "HEAD"].includes(method) || init.body != null) {
93
+ throw new Error("Capture asset requests support only GET and HEAD without a body");
94
+ }
95
+ const signal = init.signal ?? AbortSignal.timeout(3e4);
96
+ signal.throwIfAborted();
97
+ const address = await new Promise((resolve, reject) => {
98
+ const onAbort = () => reject(signal.reason);
99
+ signal.addEventListener("abort", onAbort, { once: true });
100
+ resolvePublicAddress(target.hostname).then(resolve, reject).finally(() => signal.removeEventListener("abort", onAbort));
101
+ });
102
+ signal.throwIfAborted();
103
+ const headers = new Headers(init.headers);
104
+ for (const name of [
105
+ "connection",
106
+ "proxy-authorization",
107
+ "proxy-connection",
108
+ "transfer-encoding",
109
+ "upgrade",
110
+ "content-length"
111
+ ])
112
+ headers.delete(name);
113
+ headers.set("host", target.host);
114
+ headers.set("accept-encoding", "identity");
115
+ return new Promise((resolve, reject) => {
116
+ const request = target.protocol === "https:" ? httpsRequest : httpRequest;
117
+ const req = request(
118
+ {
119
+ protocol: target.protocol,
120
+ hostname: address,
121
+ port: target.port || void 0,
122
+ path: `${target.pathname}${target.search}`,
123
+ method,
124
+ headers: Object.fromEntries(headers),
125
+ agent: false,
126
+ servername: target.hostname,
127
+ rejectUnauthorized: true,
128
+ signal
129
+ },
130
+ (incoming) => {
131
+ try {
132
+ resolve(assetResponse(incoming, req, method));
133
+ } catch (error) {
134
+ incoming.destroy();
135
+ reject(error);
136
+ }
137
+ }
138
+ );
139
+ req.once("error", reject);
140
+ req.end();
141
+ });
142
+ }
143
+ function responseHeaders(incoming) {
144
+ const headers = new Headers();
145
+ for (const [name, value] of Object.entries(incoming.headers)) {
146
+ if (value === void 0) continue;
147
+ for (const item of Array.isArray(value) ? value : [value]) headers.append(name, item);
148
+ }
149
+ return headers;
150
+ }
151
+ function assetResponse(incoming, req, method) {
152
+ incoming.on("error", () => {
153
+ });
154
+ const headers = responseHeaders(incoming);
155
+ const encoding = headers.get("content-encoding")?.toLowerCase();
156
+ if (encoding && encoding !== "identity") {
157
+ throw new Error("Capture server ignored identity content encoding");
158
+ }
159
+ const status = incoming.statusCode ?? 502;
160
+ if (method === "HEAD" || [204, 205, 304].includes(status)) {
161
+ incoming.resume();
162
+ return new Response(null, { status, headers });
163
+ }
164
+ return new Response(responseBody(incoming, req), { status, headers });
165
+ }
166
+ function responseBody(incoming, req) {
167
+ let finished = false;
168
+ return new ReadableStream({
169
+ start(controller) {
170
+ incoming.on("data", (chunk) => {
171
+ if (finished) return;
172
+ controller.enqueue(chunk);
173
+ incoming.pause();
174
+ });
175
+ incoming.once("end", () => {
176
+ if (finished) return;
177
+ finished = true;
178
+ controller.close();
179
+ });
180
+ const fail = (error) => {
181
+ if (finished) return;
182
+ finished = true;
183
+ controller.error(error);
184
+ };
185
+ incoming.once("error", fail);
186
+ incoming.once("aborted", () => fail(new Error("Capture response aborted")));
187
+ incoming.pause();
188
+ },
189
+ pull() {
190
+ incoming.resume();
191
+ },
192
+ cancel() {
193
+ finished = true;
194
+ incoming.destroy();
195
+ req.destroy();
196
+ }
197
+ });
198
+ }
199
+
26
200
  // src/capture/assetDownloader.ts
27
201
  import { join, extname } from "path";
28
202
  import { createHash as createHash2 } from "crypto";
@@ -781,10 +955,12 @@ async function safeFetch(url, init) {
781
955
  let current = url;
782
956
  for (let hop = 0; hop <= MAX_FETCH_REDIRECTS; hop++) {
783
957
  if (isPrivateUrl(current)) return null;
784
- const res = await fetch(current, { ...init, redirect: "manual" });
958
+ const res = await publicRequest(current, { ...init, redirect: "manual" });
785
959
  if (res.status >= 300 && res.status < 400) {
786
960
  const loc = res.headers.get("location");
787
961
  if (!loc) return res;
962
+ await res.body?.cancel().catch(() => {
963
+ });
788
964
  try {
789
965
  current = new URL(loc, current).toString();
790
966
  } catch {
@@ -852,6 +1028,7 @@ function deriveAssetName(parsedUrl, catalog, isPoster, idx, usedNames) {
852
1028
  }
853
1029
 
854
1030
  export {
1031
+ resolvePublicAddress,
855
1032
  CAPTURE_USER_AGENT,
856
1033
  noDrops,
857
1034
  mergeDrops,
@@ -8,7 +8,7 @@ import {
8
8
  launchManagedBrowser,
9
9
  resolveManagedGpuMode,
10
10
  rethrowAfterBrowserCleanup
11
- } from "./chunk-2ALJMIFW.js";
11
+ } from "./chunk-57SASPYR.js";
12
12
  import {
13
13
  resolveCompositionViewportFromHtml
14
14
  } from "./chunk-FH7WODJH.js";
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  RegistryCompatibilityError,
9
9
  gateRegistryItemsCompatibility
10
- } from "./chunk-M4237QMQ.js";
10
+ } from "./chunk-HYRDV7AL.js";
11
11
  import {
12
12
  DEFAULT_PROJECT_CONFIG,
13
13
  createProjectConfig,
@@ -29,7 +29,7 @@ import {
29
29
  } from "./chunk-H45RC6HN.js";
30
30
  import {
31
31
  trackRegistryItemAdded
32
- } from "./chunk-HQMWZNO2.js";
32
+ } from "./chunk-36CWAWB7.js";
33
33
  import {
34
34
  defineCommand
35
35
  } from "./chunk-S3S4TGEH.js";