@velarscript/desktop 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;QAC/B,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,8BAA8B,CAAC;QACnD,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;QACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;CACzC;AAED,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;AA4D9D;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoBzG;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,kBAAkB,EAC1B,aAAa,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACxD,OAAO,CAAC,kBAAkB,CAAC,CA0F7B"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;QAC/B,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,8BAA8B,CAAC;QACnD,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;QACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;CACzC;AAED,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;AA4D9D;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoBzG;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,kBAAkB,EAC1B,aAAa,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACxD,OAAO,CAAC,kBAAkB,CAAC,CA0F7B"}
package/dist/build.js CHANGED
@@ -3,6 +3,7 @@ import { spawn } from "node:child_process";
3
3
  import { chmod, cp, mkdir, mkdtemp, readFile, readdir, realpath, rename, rm, stat, writeFile } from "node:fs/promises";
4
4
  import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
+ import { byCodeUnit } from "./stable-order.js";
6
7
  const desktopPackageTemplateEnvironment = "VELAR_DESKTOP_PACKAGE_TEMPLATE_ROOT";
7
8
  /**
8
9
  * A packaged Desktop build has no TypeScript checkout or Swift sources. The
@@ -280,7 +281,7 @@ async function treeSize(root) {
280
281
  async function hashTree(root) {
281
282
  const hash = createHash("sha256");
282
283
  const visit = async (directory) => {
283
- const entries = (await readdir(directory, { withFileTypes: true })).sort((left, right) => left.name.localeCompare(right.name));
284
+ const entries = (await readdir(directory, { withFileTypes: true })).sort((left, right) => byCodeUnit(left.name, right.name));
284
285
  for (const entry of entries) {
285
286
  const path = join(directory, entry.name);
286
287
  const name = relative(root, path).replaceAll("\\", "/");
package/dist/build.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAsD/C,MAAM,iCAAiC,GAAG,qCAAqC,CAAC;AAEhF;;;;;;GAMG;AACH,KAAK,UAAU,qBAAqB;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC7D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,GAAG,iCAAiC,oDAAoD,CAAC,CAAC;IAC5G,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,QAAQ,GAA0B;QACtC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,kBAAkB,CAAC;QACjD,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC;QAC5C,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC;KAC1C,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,SAAS,EAAE,CAAC,CAAC;IACrH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxH,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAwB;IACrD,OAAO;QACL,EAAE,KAAK,EAAE,6BAA6B,EAAE,KAAK,EAAE,KAAK,CAAC,mBAAmB,EAAE,SAAS,EAAE,IAAI,EAAE;QAC3F,EAAE,KAAK,EAAE,gCAAgC,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE;QACrF,EAAE,KAAK,EAAE,wCAAwC,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE;QACjG,EAAE,KAAK,EAAE,kDAAkD,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE;KAC5G,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAwB,EAAE,eAAuB;IACxF,IAAI,KAAK,CAAC,UAAU,IAAI,eAAe;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,UAAU,GAAG,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACrG,MAAM,cAAc,GAAG,UAAU;SAC9B,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC;SAC1C,MAAM,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1G,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAO;QACL,qBAAqB,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,UAAU,yBAAyB;cACrG,GAAG,kBAAkB,CAAC,eAAe,CAAC,KAAK,eAAe,wBAAwB;cAClF,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,GAAG,eAAe,CAAC,KAAK,KAAK,CAAC,UAAU,GAAG,eAAe,SAAS;QAC3G,cAAc;QACd,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;cAC1H,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC/F,wCAAwC,kBAAkB,CAAC,cAAc,CAAC,KAAK,cAAc,WAAW,KAAK,CAAC,cAAc,CAAC,kBAAkB;cAC7I,oHAAoH;QACtH,wBAAwB,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;QACjI,mDAAmD,KAAK,CAAC,UAAU,iFAAiF;KACrJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACnE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,WAAmB,EACnB,MAA0B,EAC1B,aAAyD;IAEzD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACpI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACnC,MAAM,mBAAmB,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC9F,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACxC,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IACpF,MAAM,eAAe,GAAG,GAAG,MAAM,CAAC,WAAW,MAAM,CAAC;IACpD,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5G,MAAM,cAAc,GAAG,MAAM,qBAAqB,EAAE,CAAC;QACrD,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACpD,MAAM,EAAE,CAAC,cAAc,EAAE,MAAM,IAAI,uBAAuB,EAAE,EAAE,UAAU,CAAC,CAAC;QAC1E,MAAM,EAAE,CAAC,cAAc,EAAE,IAAI,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,kCAAkC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACnJ,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;QAC/D,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QAClF,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YACjE,eAAe,EAAE,CAAC;YAClB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO;YACP,gBAAgB,EAAE,EAAE;YACpB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEzB,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,mBAAmB,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1D,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,mBAAmB,CAAC;QACnF,MAAM,aAAa,GAAG,wBAAwB,CAAC;YAC7C,SAAS;YACT,aAAa;YACb,mBAAmB;YACnB,aAAa;YACb,UAAU;SACX,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACjC,IAAI,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAyB,MAAM,CAAC,MAAM,CAAC;YACnD,aAAa,EAAE,CAAC;YAChB,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO;YACP,QAAQ,EAAE,OAAO;YACjB,YAAY,EAAE,OAAO,CAAC,IAAI;YAC1B,mBAAmB,EAAE,CAAC;YACtB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,EAAW,EAAE,SAAS,EAAE,8BAAuC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACjJ,iBAAiB,EAAE,eAAe;YAClC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe;YAC7C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;gBACnB,SAAS;gBACT,aAAa;gBACb,mBAAmB;gBACnB,aAAa;gBACb,UAAU;aACX,CAAC;YACF,MAAM,EAAE,MAAM,QAAQ,CAAC,iBAAiB,CAAC;SAC1C,CAAC,CAAC;QACH,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7G,MAAM,EAAE,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,eAAe;YACf,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC;YACzD,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,0BAA0B,CAAC;YAC/D,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAc;IAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,wCAAwC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjG,MAAM,UAAU,CAAC,iBAAiB,EAAE;QAClC,QAAQ,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,GAAG,EAAE,mBAAmB;QAClF,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;KACpE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACpB,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,UAA6B,EAAE,GAAW;IACnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACrF,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE;QACpE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,0BAA0B,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvI,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAY;IACxC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,WAAW,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qDAAqD,CAAC,CAAC;IAC3I,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IACzD,MAAM,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IACvH,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,KAAa;IAC9C,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE;gBAAE,OAAO,SAAS,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;gBAAE,MAAM,KAAK,CAAC;QAC3F,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM;QAChC,SAAS,GAAG,MAAM,CAAC;IACrB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,6DAA6D,KAAK,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa,EAAE,KAAa;IAC7D,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,mCAAmC,CAAC,CAAC;IACrF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1I,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,oCAAoC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,MAA0B,EAAE,OAAe;IAC5D,OAAO;;;;0CAIiC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;;yCAExB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;;;mCAG5B,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;;iDAET,GAAG,CAAC,OAAO,CAAC;sCACvB,GAAG,CAAC,OAAO,CAAC;;;;CAIjD,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,QAAiC,EAAE,IAAY;IACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0EAA0E,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,cAAc,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACrH,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,KAAK,IAAI,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;aAClD,IAAI,KAAK,CAAC,MAAM,EAAE;YAAE,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,EAAE,SAAiB,EAAiB,EAAE;QACvD,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7H,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;iBACtC,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3F,CAAC;;gBAAM,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,GAAG,CAAC,CAAC;QAChF,CAAC;IACH,CAAC,CAAC;IACF,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,GAAG,CAAC,KAAa;IACxB,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAClH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,iBAAiB,EAAuD,MAAM,uBAAuB,CAAC;AAstChI,eAAO,MAAM,sBAAsB,EAAE,iBA2CnC,CAAC;AAEH,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,iBAAiB,EAAuD,MAAM,uBAAuB,CAAC;AAgvChI,eAAO,MAAM,sBAAsB,EAAE,iBA2CnC,CAAC;AAEH,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
package/dist/compiler.js CHANGED
@@ -613,6 +613,25 @@ function argumentsOf(value) {
613
613
  function recordOf(value, name, allowed) {
614
614
  return __velarProcessRecord(value, name, allowed);
615
615
  }
616
+ // An executable grant is only as narrow as that executable's own environment
617
+ // surface: many granted programs take a command, an interpreter option, or a
618
+ // loader path from their environment, so those names are not caller data. The
619
+ // identical predicate is duplicated host-side as reservedEnvironmentName in
620
+ // packages/desktop/native/node/worker.js; the two must not drift. PATH keeps
621
+ // its own longer-standing message. The bare spellings matter as much as the
622
+ // prefixed ones: git commit runs EDITOR, git log runs PAGER, and HOME moves the
623
+ // whole configuration surface — including the .gitconfig whose own core.editor
624
+ // runs a command — into a directory the caller chooses. The host's base
625
+ // environment snapshot owns HOME, SHELL and TMPDIR, so those are not caller
626
+ // data either.
627
+ const processReservedEnvironmentNames = /^(?:PATH|HOME|USERPROFILE|SHELL|TMPDIR|IFS|ENV|BASH_ENV|SHELLOPTS|BASHOPTS|PS4|EDITOR|VISUAL|PAGER|MANPAGER|MANOPT|BROWSER|SSH_ASKPASS|SUDO_ASKPASS|NODE_OPTIONS|NODE_REPL_EXTERNAL_MODULE)$/iu;
628
+ const processReservedEnvironmentPrefixes = /^(?:LD_|DYLD_|GIT_|XDG_|PYTHON|PERL|RUBY|LESS)/iu;
629
+ const processReservedEnvironmentSuffixes = /(?:_COMMAND|_EDITOR|_PAGER|_OPTS)$/iu;
630
+ function __velarProcessReservedEnvironmentName(name) {
631
+ return __velarProcessCall(__velarProcessRegExpTest, processReservedEnvironmentNames, [name])
632
+ || __velarProcessCall(__velarProcessRegExpTest, processReservedEnvironmentPrefixes, [name])
633
+ || __velarProcessCall(__velarProcessRegExpTest, processReservedEnvironmentSuffixes, [name]);
634
+ }
616
635
  function mapEntries(value) {
617
636
  if (value == null) return null;
618
637
  const snapshot = __velarProcessMapSnapshot(value);
@@ -625,6 +644,9 @@ function mapEntries(value) {
625
644
  if (!__velarProcessEnvironmentName(name) || name === "PATH" || typeof item !== "string" || __velarProcessIncludes(item, "\0")) {
626
645
  throw new __velarProcessNativeTypeError("Desktop process env must contain valid string variables and cannot replace PATH");
627
646
  }
647
+ if (__velarProcessReservedEnvironmentName(name)) {
648
+ throw new __velarProcessNativeTypeError("Process env cannot set the transport- or interpreter-controlled variable '" + name + "'");
649
+ }
628
650
  units += name.length + item.length;
629
651
  if (units > 1024 * 1024) throw new __velarProcessNativeRangeError("Process env cannot exceed 1 MiB");
630
652
  output[output.length] = [name, item];
@@ -904,14 +926,14 @@ export class HttpTransportError extends Error {
904
926
  super(message); this.name = "HttpTransportError"; this.phase = phase;
905
927
  }
906
928
  }
907
- export class HttpError extends Error {
929
+ export class HttpResponseError extends Error {
908
930
  constructor(message, status, url, body = null) {
909
931
  if (typeof message !== "string") throw new TypeError("HTTP error message must be text");
910
932
  if (message.length > 65536) throw new RangeError("HTTP error messages cannot exceed 64 KiB");
911
933
  if (!Number.isInteger(status) || status < 100 || status > 599) throw new RangeError("HTTP error status must be an integer from 100 through 599");
912
934
  if (typeof url !== "string") throw new TypeError("HTTP error URL must be text");
913
935
  if (url.length > 2 * 1024 * 1024) throw new RangeError("HTTP error URLs cannot exceed 2 MiB");
914
- super(message); this.name = "HttpError"; this.status = status; this.url = url; this.body = body;
936
+ super(message); this.name = "HttpResponseError"; this.status = status; this.url = url; this.body = body;
915
937
  }
916
938
  }
917
939
  function headersOf(value) {
@@ -1075,9 +1097,8 @@ function chunkOf(value) {
1075
1097
  return {done: done.value, text: text.value};
1076
1098
  }
1077
1099
  class DesktopResponse {
1078
- constructor(value, request) {
1079
- const response = responseOf(value);
1080
- this.ok = response.ok; this.status = response.status; this.statusText = response.statusText; this.url = response.url;
1100
+ constructor(response, request) {
1101
+ this.status = response.status; this.statusText = response.statusText; this.url = response.url;
1081
1102
  this.headers = response.headers; this.body = response.body; this.request = request; this.cachedText = null; this.textPending = null; this.consuming = false;
1082
1103
  if (!this.body) request.finish();
1083
1104
  Object.seal(this);
@@ -1168,13 +1189,18 @@ class DesktopRequest {
1168
1189
  throw bridgeTransportError(error, HttpTransportPhase.request) ?? error;
1169
1190
  }
1170
1191
  if (this.abortError) throw this.abortError;
1171
- const response = new DesktopResponse(value, this);
1172
- if (!response.ok) {
1192
+ const snapshot = responseOf(value);
1193
+ const response = new DesktopResponse(snapshot, this);
1194
+ // D90 R20: the 2xx question is asked here and nowhere else. The
1195
+ // transport snapshot still carries ok; the response an author holds
1196
+ // does not, because by the time it is returned the answer is always
1197
+ // yes.
1198
+ if (!snapshot.ok) {
1173
1199
  const text = await response.text();
1174
1200
  let body = text;
1175
1201
  try { body = text ? parseJsonText(text) : null; } catch {}
1176
1202
  const errorUrl = response.url || this.url;
1177
- throw new HttpError("HTTP " + response.status + " for " + errorUrl, response.status, errorUrl, body);
1203
+ throw new HttpResponseError("HTTP " + response.status + " for " + errorUrl, response.status, errorUrl, body);
1178
1204
  }
1179
1205
  return response;
1180
1206
  } catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -29,4 +29,5 @@ export declare const velarProjectExtension: Readonly<{
29
29
  manifestKey: "desktop";
30
30
  parse(value: unknown, manifestPath: string): VelarDesktopConfig;
31
31
  }>;
32
+ export declare function desktopExternalNavigationPermitted(config: VelarDesktopConfig, url: string): boolean;
32
33
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAIhD,eAAO,MAAM,iCAAiC,QAAmB,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;KAClC,CAAC;CACH;AAED,eAAO,MAAM,qBAAqB;;;iBAGnB,OAAO,gBAAgB,MAAM,GAAG,kBAAkB;EAG/D,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAIhD,eAAO,MAAM,iCAAiC,QAAmB,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;KAClC,CAAC;CACH;AAED,eAAO,MAAM,qBAAqB;;;iBAGnB,OAAO,gBAAgB,MAAM,GAAG,kBAAkB;EAG/D,CAAC;AA2EH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAInG"}
package/dist/config.js CHANGED
@@ -84,6 +84,31 @@ function permissionConfig(value, manifestPath) {
84
84
  }
85
85
  return Object.freeze({ files: files, processes, network, environment, secrets });
86
86
  }
87
+ // Handing a renderer URL to the system browser is the same question
88
+ // `desktop.permissions.network` already answers: may this application reach
89
+ // this host. An origin that was never granted is cancelled rather than opened,
90
+ // and only `https` is ever a candidate — every other scheme stays cancelled, as
91
+ // it is in the native host. Matching is exact on scheme, host and port; a
92
+ // suffix or substring rule is how allowlists get bypassed.
93
+ export function desktopExternalNavigationPermitted(config, url) {
94
+ const candidate = permissionOrigin(url);
95
+ if (candidate === null)
96
+ return false;
97
+ return config.permissions.network.some((origin) => permissionOrigin(origin) === candidate);
98
+ }
99
+ // `https` is read off the parsed URL rather than off the origin text, because a
100
+ // nested scheme such as `blob:https://host/id` reports an `https` origin while
101
+ // naming a scheme the host never opens.
102
+ function permissionOrigin(value) {
103
+ let parsed;
104
+ try {
105
+ parsed = new URL(value);
106
+ }
107
+ catch {
108
+ return null;
109
+ }
110
+ return parsed.protocol === "https:" ? parsed.origin : null;
111
+ }
87
112
  function buildConfig(value, manifestPath) {
88
113
  const build = value === undefined ? {} : objectField(value, "desktop.build", manifestPath);
89
114
  knownFields(build, new Set(["outDir", "sizeBudgetBytes"]), "desktop.build", manifestPath);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { VELAR_DESKTOP_API_VERSION } from "./config.ts";
1
+ export { VELAR_DESKTOP_API_VERSION, desktopExternalNavigationPermitted } from "./config.ts";
2
2
  export type { DesktopPermissionConfig, DesktopWindowConfig, VelarDesktopConfig } from "./config.ts";
3
3
  export declare const VELAR_DESKTOP_MODULES: readonly ["velar/desktop", "velar/desktop-test", "velar/fs", "velar/path", "velar/process", "velar/http", "velar/env"];
4
4
  export declare const velarDesktopFramework: Readonly<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEpG,eAAO,MAAM,qBAAqB,wHAQvB,CAAC;AAEZ,eAAO,MAAM,qBAAqB;;;;sBAId,gBAAgB;cACxB,kBAAkB;oBACZ,mBAAmB;EACnC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,kCAAkC,EAAE,MAAM,aAAa,CAAC;AAC5F,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEpG,eAAO,MAAM,qBAAqB,wHAQvB,CAAC;AAEZ,eAAO,MAAM,qBAAqB;;;;sBAId,gBAAgB;cACxB,kBAAkB;oBACZ,mBAAmB;EACnC,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { VELAR_DESKTOP_API_VERSION } from "./config.js";
2
- export { VELAR_DESKTOP_API_VERSION } from "./config.js";
2
+ export { VELAR_DESKTOP_API_VERSION, desktopExternalNavigationPermitted } from "./config.js";
3
3
  export const VELAR_DESKTOP_MODULES = Object.freeze([
4
4
  "velar/desktop",
5
5
  "velar/desktop-test",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAGxD,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC;IACjD,eAAe;IACf,oBAAoB;IACpB,UAAU;IACV,YAAY;IACZ,eAAe;IACf,YAAY;IACZ,WAAW;CACH,CAAC,CAAC;AAEZ,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,sBAAsB;IAC5B,UAAU,EAAE,yBAAyB;IACrC,OAAO,EAAE,qBAAqB;IAC9B,gBAAgB,EAAE,gBAAyB;IAC3C,QAAQ,EAAE,kBAA2B;IACrC,cAAc,EAAE,mBAA4B;CAC7C,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,yBAAyB,EAAE,kCAAkC,EAAE,MAAM,aAAa,CAAC;AAG5F,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC;IACjD,eAAe;IACf,oBAAoB;IACpB,UAAU;IACV,YAAY;IACZ,eAAe;IACf,YAAY;IACZ,WAAW;CACH,CAAC,CAAC;AAEZ,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,sBAAsB;IAC5B,UAAU,EAAE,yBAAyB;IACrC,OAAO,EAAE,qBAAqB;IAC9B,gBAAgB,EAAE,gBAAyB;IAC3C,QAAQ,EAAE,kBAA2B;IACrC,cAAc,EAAE,mBAA4B;CAC7C,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * UTF-16 code-unit order — what `<` and `>` compare, and what
3
+ * `Array.prototype.sort` gives with no comparator. It differs from true code
4
+ * point order only for astral characters, and it is deliberately this order
5
+ * rather than that one, so a producer agrees with any consumer that reorders
6
+ * the same names with a bare `.sort()`.
7
+ *
8
+ * D90 R3(a) rules the locale dependence out at the root: `localeCompare`
9
+ * follows the collation the process environment selects, so any list ordered
10
+ * with it reorders when the machine's `LC_ALL` changes. Desktop walks a build
11
+ * tree in this order to hash it, so the build receipt a packaged application
12
+ * carries is the same on two machines that differ only in `LC_ALL`.
13
+ */
14
+ export declare function byCodeUnit(left: string, right: string): number;
15
+ //# sourceMappingURL=stable-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stable-order.d.ts","sourceRoot":"","sources":["../src/stable-order.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9D"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * UTF-16 code-unit order — what `<` and `>` compare, and what
3
+ * `Array.prototype.sort` gives with no comparator. It differs from true code
4
+ * point order only for astral characters, and it is deliberately this order
5
+ * rather than that one, so a producer agrees with any consumer that reorders
6
+ * the same names with a bare `.sort()`.
7
+ *
8
+ * D90 R3(a) rules the locale dependence out at the root: `localeCompare`
9
+ * follows the collation the process environment selects, so any list ordered
10
+ * with it reorders when the machine's `LC_ALL` changes. Desktop walks a build
11
+ * tree in this order to hash it, so the build receipt a packaged application
12
+ * carries is the same on two machines that differ only in `LC_ALL`.
13
+ */
14
+ export function byCodeUnit(left, right) {
15
+ return left < right ? -1 : left > right ? 1 : 0;
16
+ }
17
+ //# sourceMappingURL=stable-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stable-order.js","sourceRoot":"","sources":["../src/stable-order.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,KAAa;IACpD,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC"}
package/dist/worker.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import {createRequire as __velarCreateRequire} from "node:module"; import {fileURLToPath as __velarFileURLToPath} from "node:url"; import {dirname as __velarDirname} from "node:path"; const require = __velarCreateRequire(import.meta.url); const __filename = __velarFileURLToPath(import.meta.url); const __dirname = __velarDirname(__filename);
2
- import{constants as lt,watch as ut}from"node:fs";import{access as ft,appendFile as dt,copyFile as wt,lstat as $,mkdir as je,readFile as Ee,readdir as ht,realpath as F,rename as $e,rm as he,stat as C,writeFile as pe}from"node:fs/promises";import{createInterface as pt}from"node:readline";import{basename as Q,dirname as ae,isAbsolute as Z,relative as mt,resolve as E}from"node:path";import{spawn as yt}from"node:child_process";import{StringDecoder as ke}from"node:string_decoder";var We=128*1024*1024,v=16*1024*1024,Tt=2*1024*1024,ze=64*1024*1024,gt=1e6,Ie=20,re=4096,Ue=128,Et=4096,xt=2*1024*1024,bt=20,Ae=5e3,He=5e3,Pt=8e3,Le=Object.freeze({}),Oe=Object.freeze({}),J=Object.freeze({}),Me=Object.getOwnPropertyDescriptor(String.prototype,"charCodeAt")?.value,Ne=Object.getOwnPropertyDescriptor(Reflect,"apply")?.value,[Ge,qe,xe]=process.argv.slice(2);if(!Ge||!qe||!xe)throw new Error("Velar Desktop worker requires config, app-data, and launch roots");var j=JSON.parse(await Ee(Ge,"utf8"));if(j.protocolVersion!==1||!j.permissions||typeof j.permissions!="object")throw new Error("Invalid Velar Desktop worker configuration");var be=new Set(j.permissions.files??[]),Dt=new Set(j.permissions.processes??[]),Rt=new Set(j.permissions.network??[]),vt=new Set(j.permissions.secrets??[]),x=new Map,St=1,S=new Map,O=new Map,Y=new Map,k=new Map,_e=1,ee=1,Fe=!1,T=null,b=[],U=[],me=null,ye=null,G=null,ne=null,Te=Promise.resolve(),K=class extends Error{constructor(t){super(t==="request"?"HTTP request transport failed":"HTTP response transport failed"),this.name="HttpTransportError",this.phase=t}},Xe=await F(xe);if(be.has("app-data")){let e=E(qe,"data");await je(e,{recursive:!0}),ye=e,me=await F(e)}be.has("project")&&(ne=E(xe),G=Xe);Ke();var oe=pt({input:process.stdin,crlfDelay:1/0,terminal:!1});oe.once("close",()=>{T!==null&&ge(T);for(let e of k.values())N(e,new Error("Desktop capability host closed"));for(let e of O.values())ce(e)});oe.on("line",async e=>{let t=0,r=null;try{if(Buffer.byteLength(e,"utf8")>We)throw new RangeError("Desktop request exceeds its 128 MiB transport bound");let n=JSON.parse(e);if(n?.hostCommand!==void 0){await kt(n);return}if(t=n.id,n.protocolVersion!==1||!Number.isSafeInteger(t)||t<1||typeof n.capability!="string"||typeof n.operation!="string"||!Array.isArray(n.args)||!Ve(n.owner)||n.owner!==T)throw new TypeError("Invalid Desktop worker request");if(O.has(t))throw new Error("Desktop worker request identity is already active");r={owner:n.owner,cancelled:!1,cancel:null},O.set(t,r);let o=await It(n.capability,n.operation,n.args,n.owner,r);if(r.cancelled)throw new Error("Desktop host request was cancelled");if(n.owner!==T)throw new Error("Desktop document generation is no longer active");X({id:t,ok:!0,value:o})}catch(n){X({id:t,ok:!1,error:st(n)})}finally{r!==null&&O.get(t)===r&&O.delete(t)}});async function kt(e){if(e.protocolVersion!==1||!Ve(e.owner))throw new TypeError("Invalid Desktop host command");if(e.hostCommand==="owner-activate"){if(Object.keys(e).some(t=>!["protocolVersion","hostCommand","owner"].includes(t)))throw new TypeError("Invalid Desktop host command");T!==null&&T!==e.owner&&ge(T),T=e.owner;return}if(e.hostCommand==="owner-retire"){if(Object.keys(e).some(t=>!["protocolVersion","hostCommand","owner"].includes(t)))throw new TypeError("Invalid Desktop host command");ge(e.owner);return}if(e.hostCommand==="request-cancel"){if(Object.keys(e).some(r=>!["protocolVersion","hostCommand","owner","requestID"].includes(r))||!Number.isSafeInteger(e.requestID)||e.requestID<1)throw new TypeError("Invalid Desktop host command");let t=O.get(e.requestID);t&&t.owner===e.owner&&ce(t);return}if(e.hostCommand==="project-root-set"){if(Object.keys(e).some(r=>!["protocolVersion","hostCommand","owner","commandID","path"].includes(r))||e.owner!==T||!Number.isSafeInteger(e.commandID)||e.commandID<1||typeof e.path!="string"||!Z(e.path)||e.path.length===0||e.path.length>re||e.path.includes("\0")||!be.has("project"))throw new TypeError("Invalid Desktop project-root command");let t=Te.then(()=>At(e.path));Te=t.catch(()=>{});try{await t,X({protocolVersion:1,hostEvent:"project-root-settled",owner:e.owner,commandID:e.commandID,ok:!0})}catch(r){X({protocolVersion:1,hostEvent:"project-root-settled",owner:e.owner,commandID:e.commandID,ok:!1,error:st(r)})}return}throw new TypeError("Unknown Desktop host command")}function ce(e){if(!e.cancelled){e.cancelled=!0;try{e.cancel?.()}catch{}}}function Pe(e,t){e.cancel=t,e.cancelled&&t()}function Ve(e){return typeof e=="string"&&/^[0-9a-f]{32}$/u.test(e)}async function It(e,t,r,n,o){if(await Te,e==="fs")return Bt(t,r,n,o);if(e==="process"){if(t==="run")return Wt(r,n,o);if(t==="start")return Je(r,n,o);if(t==="read")return Ut(r,n);if(t==="wait")return Ye(r,n);if(t==="stop")return et(r,n)}if(e==="http"){if(t==="request")return Kt(r,n,o);if(t==="read")return Jt(r,n);if(t==="cancel")return Yt(r,n)}throw new Error(`Unknown Desktop capability '${e}.${t}'`)}function Ke(){b.length=0,U.length=0,me!==null&&ye!==null&&(b.push(me),U.push(ye)),G!==null&&ne!==null&&(b.push(G),U.push(ne))}async function At(e){let t=await F(e);if(!(await C(t)).isDirectory())throw new TypeError("Desktop project grant must identify a directory");for(let n of k.values())N(n,new Error("Desktop project grant changed"));for(let n of O.values())ce(n);for(let[n,o]of x)ie(n,o);for(let[n,o]of S)o.controller.abort(new Error("Desktop project grant changed")),o.reader?.cancel().catch(()=>{}),M(n,o);ne=E(e),G=t,Ke()}function Ht(){let e=_e;for(let t=0;t<=Ue;t+=1){if(!k.has(e))return _e=e>=Number.MAX_SAFE_INTEGER?1:e+1,e;e=e>=Number.MAX_SAFE_INTEGER?1:e+1}throw new RangeError("Desktop file watcher handle space is unavailable")}function N(e,t=null){if(e.closed)return!1;e.closed=!0,e.timer!==null&&(clearTimeout(e.timer),e.timer=null);try{e.watcher.close()}catch{}if(k.delete(e.handle),e.pending!==null){let r=e.pending;e.pending=null,r.activity.cancel=null,t===null?r.resolve(null):r.reject(t)}return!0}function Qe(e){if(e.rescan)return e.rescan=!1,e.paths.clear(),e.units=0,{paths:[],rescan:!0};let t=[...e.paths].sort();return e.paths.clear(),e.units=0,{paths:t,rescan:!1}}function Ze(e){e.pending===null||e.timer!==null||e.failure!==null||!e.rescan&&e.paths.size===0||(e.timer=setTimeout(()=>{if(e.timer=null,e.pending===null||e.closed)return;let t=e.pending;e.pending=null,t.activity.cancel=null,t.resolve(Qe(e))},bt))}function fe(e){e.rescan=!0,e.paths.clear(),e.units=0,Ze(e)}function Lt(e,t){if(e.closed||e.failure!==null||e.rescan)return;let r;if(!e.directory)r=e.root;else{if(typeof t!="string"||t.length===0||t.length>re||t.includes("\0")||Z(t)){fe(e);return}if(r=E(e.root,t),!ue(e.root,r)||r.length>re){fe(e);return}}if(!e.paths.has(r)){if(e.paths.size>=Et||e.units+r.length>xt){fe(e);return}e.paths.add(r),e.units+=r.length}Ze(e)}function Ot(e,t){if(!(e.closed||e.failure!==null)){e.failure=t instanceof Error?t:new Error("Desktop file watcher failed"),e.timer!==null&&(clearTimeout(e.timer),e.timer=null);try{e.watcher.close()}catch{}e.pending!==null&&N(e,e.failure)}}async function Mt(e,t){if(e.length!==2||typeof e[1]!="boolean")throw new TypeError("watchStart arguments are invalid");if(k.size>=Ue)throw new RangeError("Desktop host cannot own more than 128 file watchers");let r=await A(e[0]),n=await C(r),o=n.isDirectory();if(!o&&!n.isFile())throw new TypeError("watchFiles requires a file or directory path");if(e[1]&&!o)throw new TypeError("recursive watchFiles requires a directory path");let i=Ht(),a={handle:i,owner:t,root:r,directory:o,watcher:null,paths:new Set,units:0,rescan:!1,pending:null,timer:null,failure:null,closed:!1};return a.watcher=ut(r,{recursive:e[1],encoding:"utf8",persistent:!0},(c,l)=>Lt(a,l)),a.watcher.once("error",c=>Ot(a,c)),k.set(i,a),i}function Nt(e,t){let r=_(e,1,Number.MAX_SAFE_INTEGER,"Desktop file watcher handle"),n=k.get(r);if(!n)throw new Error("Desktop file watcher handle is unknown or already released");if(n.owner!==t)throw new Error("Desktop file watcher belongs to another document generation");return n}function _t(e,t,r){if(e.length!==1)throw new TypeError("watchNext arguments are invalid");let n=Nt(e[0],t);if(n.pending!==null)throw new Error("FileWatcher.next already has an active pull");if(n.failure!==null){let o=n.failure;throw N(n),o}return n.rescan||n.paths.size>0?Qe(n):new Promise((o,i)=>{let a={resolve:o,reject:i,activity:r};n.pending=a,Pe(r,()=>{n.pending===a&&N(n,new Error("Desktop file watcher pull was cancelled"))})})}function Ft(e,t){if(e.length!==1)throw new TypeError("watchClose arguments are invalid");let r=_(e[0],1,Number.MAX_SAFE_INTEGER,"Desktop file watcher handle"),n=k.get(r);if(!n)return!1;if(n.owner!==t)throw new Error("Desktop file watcher belongs to another document generation");return N(n)}async function Bt(e,t,r,n){if(e==="watchStart")return Mt(t,r);if(e==="watchNext")return _t(t,r,n);if(e==="watchClose")return Ft(t,r);if(e==="readText"){let[o,i=v]=t,a=await Ct(o,i,"readText");return new TextDecoder("utf-8",{fatal:!0}).decode(a)}if(e==="exists")try{return await A(t[0]),!0}catch(o){if(o?.code==="ENOENT")return!1;throw o}if(e==="list"){let o=_(t[1]??1e5,1,1e5,"list maxItems"),i=await ht(await A(t[0]));if(i.length>o)throw new RangeError("list result exceeds maxItems");let a=0;for(let c of i)if(a+=c.length,a>Tt)throw new RangeError("list result cannot exceed 2 MiB of text");return i.sort()}if(e==="info"){let o;try{o=await te(t[0])}catch(a){if(a?.code==="ENOENT")return null;throw a}let i=await $(o);return{name:Q(o),kind:i.isFile()?"file":i.isDirectory()?"directory":i.isSymbolicLink()?"symlink":"other",size:i.size,modifiedAt:i.mtimeMs}}if(e==="canonical")return A(t[0]);if(e==="makeDirectory")return await je(await jt(t[0]),{recursive:!0}),null;if(e==="createText"){let o=await de(t[0]),i=V(t[1],"createText text",v);return z([o],async()=>{try{await pe(o,i,{encoding:"utf8",flag:"wx"})}catch(a){throw a?.code==="EEXIST"?new Error("createText target already exists"):a}return null})}if(e==="replaceTextIfMatches"){let o=await A(t[0]),i=Buffer.from(V(t[1],"replaceTextIfMatches expected text",v),"utf8"),a=Buffer.from(V(t[2],"replaceTextIfMatches replacement text",v),"utf8");return z([o],async()=>{let c=await C(o);if(!c.isFile())throw new TypeError("replaceTextIfMatches requires a file path");if(c.size>v)throw new RangeError("replaceTextIfMatches file exceeds 16 MiB");let l=await Ee(o);if(l.byteLength>v)throw new RangeError("replaceTextIfMatches file exceeds 16 MiB");return l.equals(i)?(await $t(o,a,c.mode),!0):!1})}if(e==="writeText"||e==="appendText"){let o=await de(t[0]),i=V(t[1],`${e} text`,v);return z([o],async()=>{let a=await C(o).catch(c=>c?.code==="ENOENT"?null:Promise.reject(c));if(a&&!a.isFile())throw new TypeError(`${e} requires a file path`);if(e==="writeText")await pe(o,i,"utf8");else{if(a&&a.size+Buffer.byteLength(i,"utf8")>v)throw new RangeError("appendText result cannot exceed 16 MiB");await dt(o,i,"utf8")}return null})}if(e==="copyFile"){let o=await A(t[0]);if(!(await C(o)).isFile())throw new TypeError("copyFile requires a regular file source");let i=await de(t[1]);return z([i],async()=>(t[2]!==!0&&await Be(i,"copyFile"),await wt(o,i),null))}if(e==="move"){let o=await te(t[0]);if(b.includes(o))throw new Error("move refuses a granted Desktop file root");let i=await te(t[1],!0);return z([o,i],async()=>(t[2]!==!0?await Be(i,"move"):await he(i,{force:!0,recursive:!1}),await $e(o,i),null))}if(e==="removeFile"){let o=await te(t[0]);return z([o],async()=>{if((await $(o)).isDirectory())throw new TypeError("removeFile refuses directories");return await he(o,{recursive:!1,force:!1}),null})}throw new Error(`Unknown filesystem operation '${e}'`)}async function Ct(e,t,r){t=_(t,1,v,`${r} maxBytes`),e=await A(e);let n=await C(e);if(!n.isFile())throw new TypeError(`${r} requires a file path`);if(n.size>t)throw new RangeError(`${r} file exceeds maxBytes`);let o=await Ee(e);if(o.byteLength>t)throw new RangeError(`${r} file exceeds maxBytes`);return o}async function A(e){let t=le(e);De(t);let r=await F(t);return q(r),r}async function de(e){let t=le(e);try{return await A(t)}catch(r){if(r?.code!=="ENOENT")throw r;try{throw await $(t),new Error("Filesystem write target cannot be a dangling symbolic link")}catch(o){if(o?.code!=="ENOENT")throw o}let n=await F(ae(t));return q(n),E(n,Q(t))}}async function te(e,t=!1){let r=le(e);De(r);for(let i=0;i<U.length;i+=1)if(r===U[i]||r===b[i])return t||await $(b[i]),b[i];let n=await F(ae(r));q(n);let o=E(n,Q(r));return q(o),t||await $(o),o}async function jt(e){let t=le(e);De(t);let r=[],n=t;for(;;)try{if((await $(n)).isSymbolicLink()&&r.length===0)throw new TypeError("makeDirectory refuses a symbolic-link target");let i=await F(n);if(q(i),!(await C(i)).isDirectory())throw new TypeError("makeDirectory requires every existing ancestor to be a directory");let a=i;for(let c=r.length-1;c>=0;c-=1)a=E(a,r[c]);return q(a),a}catch(o){if(o?.code!=="ENOENT")throw o;let i=ae(n);if(i===n)throw o;r.push(Q(n)),n=i}}function le(e){if(typeof e!="string"||e.length===0||e.length>re||e.includes("\0"))throw new TypeError("Filesystem operation requires a bounded path");let t=G??b[0];if(!t)throw new Error("Desktop application has no granted filesystem scope");return Z(e)?E(e):E(t,e)}function q(e){if(!b.some(t=>ue(t,e)))throw new Error("Filesystem path is outside granted Desktop file roots")}function De(e){if(![...U,...b].some(t=>ue(t,e)))throw new Error("Filesystem path is outside granted Desktop file roots")}function ue(e,t){let r=mt(e,t);return r===""||r!==".."&&!r.startsWith("../")&&!Z(r)}async function Be(e,t){try{await $(e)}catch(r){if(r?.code==="ENOENT")return;throw r}throw new Error(`${t} target already exists`)}async function z(e,t){let n=[...new Set(e.map(o=>E(o)))].sort().map(o=>{let i=Y.get(o)??null,a,c=new Promise(l=>{a=l});return Y.set(o,c),{identity:o,previous:i,release:a,tail:c}});await Promise.all(n.map(o=>o.previous));try{return await t()}finally{for(let o of n)o.release(),Y.get(o.identity)===o.tail&&Y.delete(o.identity)}}async function $t(e,t,r){let n=null;for(let o=0;o<1024;o+=1){let i=ee;ee=ee>=Number.MAX_SAFE_INTEGER?1:ee+1;let a=E(ae(e),`.velar-replace-${i}.tmp`);try{await pe(a,t,{flag:"wx",mode:r}),n=a;break}catch(c){if(c?.code!=="EEXIST")throw c}}if(n===null)throw new Error("replaceTextIfMatches could not allocate a temporary file");try{await $e(n,e)}finally{await he(n,{force:!0,recursive:!1})}}async function Wt(e,t,r){let n=await Je(e,t,r),o=await Ye([n.handle],t);if(o.retained)throw zt(n.handle,t),se(o.error);if(o.error)throw se(o.error);return o.result}function zt(e,t){let r=()=>{et([e],t).catch(()=>{setTimeout(r,1e3)})};setTimeout(r,0)}async function Je(e,t,r){if(x.size>=128)throw new RangeError("Desktop process handle limit reached");if(r.cancelled)throw new Error("Desktop host request was cancelled");let n=St++,o=null;if(Pe(r,()=>{o!==null&&ie(n,o)}),o=await qt(e,()=>X({protocolVersion:1,hostEvent:"process-settled",owner:t,handle:n})),o.owner=t,o.kind="process",x.set(n,o),X({protocolVersion:1,hostEvent:"process-owned",owner:t,handle:n,pid:o.pid}),o.result.catch(()=>{}),r.cancelled||t!==T)throw ie(n,o),new Error("Desktop document generation is no longer active");return{handle:n,pid:o.pid}}async function Ye(e,t){let[r,n]=tt(e[0],t);if(n.reading)throw new Error("Process wait() cannot run while next() is pending");n.waitStarted=!0,n.waitRetained&&!n.settled&&L(n.child,"SIGKILL");let o=await Re(n);return n.waitRetained=o.retained,o.retained||x.delete(r),o}async function Ut(e,t){let[,r]=tt(e[0],t);return r.next()}async function et(e,t){let r=ot(e[0]),n=x.get(r);if(!n)return{result:null,error:null};if(n.kind!=="process")throw new Error("Desktop process handle is unknown or already released");if(n.owner!==t)throw new Error("Desktop process handle belongs to another document generation");n.stop();let o=await Re(n);if(o.retained)throw se(o.error);return x.delete(r),{result:o.result,error:o.error}}function tt(e,t){let r=ot(e),n=x.get(r);if(!n||n.kind!=="process")throw new Error("Desktop process handle is unknown or already released");if(n.owner!==t)throw new Error("Desktop process handle belongs to another document generation");return[r,n]}function ie(e,t){if(t.retirementStarted)return;t.retirementStarted=!0,t.stop();let r=async()=>{try{let n=await Re(t);if(n.retained)throw se(n.error);x.get(e)===t&&x.delete(e)}catch{setTimeout(r,1e3)}};r()}function ge(e){T===e&&(T=null);for(let t of k.values())t.owner===e&&N(t,new Error("Desktop document generation retired"));for(let t of O.values())t.owner===e&&ce(t);for(let[t,r]of x)r.owner===e&&ie(t,r);for(let[t,r]of S)r.owner===e&&(r.controller.abort(new Error("Desktop document generation retired")),r.reader?.cancel().catch(()=>{}),M(t,r))}async function rt(){if(Fe)return;Fe=!0,oe.removeAllListeners("line"),oe.close();for(let r of k.values())N(r,new Error("Desktop capability host failed"));let e=Array.from(x.values());for(let r of e)r.stop();for(let r of S.values())r.controller.abort(new Error("Desktop capability host failed"));let t=null;try{await Promise.race([Promise.allSettled(e.map(r=>r.result)),new Promise(r=>{t=setTimeout(r,Pt)})])}finally{t!==null&&clearTimeout(t);for(let r of e)r.settled||L(r.child,"SIGKILL");process.exit(1)}}function nt(e){let t=e instanceof TypeError?"TypeError":e instanceof RangeError?"RangeError":"Error",r=e instanceof Error?e.message:"Desktop process failed";return(typeof r!="string"||r.length===0)&&(r="Desktop process failed"),r.length>65536&&(r=r.slice(0,65536)),{name:t,message:r}}function se(e){return e.name==="TypeError"?new TypeError(e.message):e.name==="RangeError"?new RangeError(e.message):new Error(e.message)}function Gt(e){return e.result.then(t=>({result:t,error:null,retained:!1}),t=>({result:null,error:nt(t),retained:!1}))}async function we(e){let t=null,r=new Error(`Process termination could not be confirmed within ${Ae} milliseconds`);try{return await Promise.race([e,new Promise(n=>{t=setTimeout(()=>n({result:null,error:nt(r),retained:!0}),Ae)})])}finally{t!==null&&clearTimeout(t)}}async function Re(e){let t=Gt(e);if(!e.terminationRequested){let i=await Promise.race([t,e.termination.then(()=>Le)]);if(i!==Le)return i}if(e.rootExited&&!e.stopping){let i=await Promise.race([t,e.stopRequest.then(()=>J)]);return i!==J?i:await we(t)}let r=we(t),n=await Promise.race([t,r,e.stopping?new Promise(()=>{}):e.rootExit.then(()=>Oe)]);if(n!==Oe)return n;if(e.stopping)return await r;let o=await Promise.race([t,e.stopRequest.then(()=>J)]);return o!==J?o:await we(t)}function ot(e){if(!Number.isSafeInteger(e)||e<1)throw new TypeError("Desktop process handle is invalid");return e}async function qt(e,t){let[r,n=[],o={}]=e;if(typeof r!="string"||!Dt.has(r)||r!==Q(r))throw new Error(`Process '${String(r)}' is not granted by desktop.permissions.processes`);if(!Array.isArray(n)||n.length>1e3)throw new TypeError("Process args must be a bounded List<string>");let i=0;for(let u of n){if(typeof u!="string"||u.length===0||u.includes("\0")||u.length>1024*1024)throw new TypeError("Process args must be a bounded List<string>");if(i+=u.length,i>1024*1024)throw new RangeError("Process arguments cannot exceed 1 MiB")}if(!o||typeof o!="object"||Array.isArray(o))throw new TypeError("Process options must be a record");let a=new Set(["cwd","env","stdin","timeout","maxOutputBytes"]);for(let u of Object.keys(o))if(!a.has(u))throw new TypeError(`Process options has unknown field '${u}'`);let c=_(o.timeout??12e4,0,6e5,"Process timeout"),l=_(o.maxOutputBytes??4*1024*1024,1,16*1024*1024,"Process maxOutputBytes"),f=o.cwd==null?G??Xe:await A(o.cwd),P=o.stdin??"";V(P,"Process stdin",16*1024*1024);let w=Object.create(null);for(let u of["HOME","LANG","LC_ALL","PATH","SHELL","TERM","TMPDIR","USER"])typeof process.env[u]=="string"&&(w[u]=process.env[u]);if(o.env!=null){if(!Array.isArray(o.env)||o.env.length>1e3)throw new TypeError("Process env must be Map<string, string>");let u=0;for(let h of o.env){if(!Array.isArray(h)||h.length!==2||typeof h[0]!="string"||!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(h[0])||h[0]==="PATH"||typeof h[1]!="string"||h[1].includes("\0"))throw new TypeError("Process env must contain valid string variables and cannot replace PATH");if(u+=h[0].length+h[1].length,u>1024*1024)throw new RangeError("Process env cannot exceed 1 MiB");w[h[0]]=h[1]}}let D=await Vt(r,w.PATH??"");return Xt(D,n,{cwd:f,environment:w,stdin:P,timeout:c,maxOutputBytes:l},t)}async function Xt(e,t,r,n){let{cwd:o,environment:i,stdin:a,timeout:c,maxOutputBytes:l}=r,f=yt(e,t,{cwd:o,env:i,shell:!1,windowsHide:!0,detached:process.platform!=="win32",stdio:["pipe","pipe","pipe"]}),P,w=new Promise(p=>{P=p}),D,u=new Promise(p=>{D=p}),h,H=new Promise(p=>{h=p}),s={child:f,pid:f.pid??0,settled:!1,stopping:!1,terminationRequested:!1,termination:w,rootExited:!1,rootExit:u,stopRequest:H,stdout:[],stderr:[],bytes:0,outputChunks:0,outputQueue:[],outputWaiter:null,reading:!1,waitStarted:!1,waitRetained:!1,stdoutDecoder:new ke("utf8"),stderrDecoder:new ke("utf8"),failure:null,timer:null,exitTimer:null,result:null,terminate(p,m){if(p&&!s.failure&&(s.failure=p),s.terminationRequested||(s.terminationRequested=!0,P()),s.outputWaiter){let d=s.outputWaiter;s.outputWaiter=null,d.reject(s.failure??new Error("Process output is unavailable after stop()"))}L(f,m)},stop(){if(!s.settled){if(s.stopping){L(f,"SIGKILL");return}s.stopping=!0,h(),s.exitTimer&&(clearTimeout(s.exitTimer),s.exitTimer=null),s.terminate(null,"SIGTERM"),setTimeout(()=>{s.settled||L(f,"SIGKILL")},2e3).unref()}},async next(){if(s.waitStarted)throw new Error("Process output must be consumed before wait()");if(s.stopping)throw new Error("Process output is unavailable after stop()");if(s.terminationRequested)throw s.failure??new Error("Process output is unavailable after termination");if(s.reading)throw new Error("Process.next() allows only one active pull");s.reading=!0;try{if(s.outputQueue.length>0)return s.outputQueue.shift();if(s.settled){if(s.failure)throw s.failure;return null}return await new Promise((p,m)=>{s.outputWaiter={resolve:p,reject:m}})}finally{s.reading=!1}}};return s.result=new Promise((p,m)=>{let d=(y,R)=>{if(R.length===0||s.failure)return;if(s.outputChunks+=1,s.outputChunks>1e6){s.terminate(new RangeError("Process output cannot exceed 1000000 chunks"),"SIGKILL");return}let g=Object.freeze({channel:y,text:R});if(s.outputWaiter){let B=s.outputWaiter;s.outputWaiter=null,B.resolve(g)}else s.outputQueue.push(g)},I=(y,R,g,B)=>{if(s.failure)return;if(s.bytes+=B.byteLength,s.bytes>l){s.terminate(new RangeError("Process output exceeded maxOutputBytes"),"SIGKILL");return}let W=Buffer.from(B);y.push(W),d(g,R.write(W))};f.stdout.on("data",y=>I(s.stdout,s.stdoutDecoder,"stdout",y)),f.stderr.on("data",y=>I(s.stderr,s.stderrDecoder,"stderr",y)),f.once("error",y=>{s.terminate(y,"SIGKILL")}),f.once("exit",()=>{s.rootExited=!0,D(),s.stopping||(L(f,"SIGTERM"),setTimeout(()=>{s.settled||L(f,"SIGKILL")},2e3).unref(),s.exitTimer=setTimeout(()=>{s.settled||(s.failure||(s.failure=new Error(`Process output streams did not close within ${He} milliseconds after process exit`)),f.stdout.destroy(),f.stderr.destroy())},He),s.exitTimer.unref())}),f.once("close",(y,R)=>{if(s.settled=!0,s.timer&&clearTimeout(s.timer),s.exitTimer&&clearTimeout(s.exitTimer),d("stdout",s.stdoutDecoder.end()),d("stderr",s.stderrDecoder.end()),s.outputWaiter){let g=s.outputWaiter;s.outputWaiter=null,s.outputQueue.length>0?g.resolve(s.outputQueue.shift()):s.failure?g.reject(s.failure):g.resolve(null)}s.failure?m(s.failure):p({code:y,signal:R,stdout:Buffer.concat(s.stdout).toString("utf8"),stderr:Buffer.concat(s.stderr).toString("utf8")}),n()})}),s.timer=c===0?null:setTimeout(()=>{s.settled||s.terminate(new Error(`Process timed out after ${c} milliseconds`),"SIGKILL")},c),f.stdin.end(a),s}function L(e,t){if(e.pid){if(process.platform==="win32"){try{e.kill(t)}catch{}return}try{process.kill(-e.pid,t)}catch{try{e.kill(t)}catch{}}}}async function Vt(e,t){for(let r of t.split(process.platform==="win32"?";":":")){if(!r||!Z(r))continue;let n=E(r,e);try{await ft(n,lt.X_OK);let o=await F(n);if(b.some(i=>ue(i,o)))throw new Error(`Process '${e}' resolves inside a writable Desktop file root`);return o}catch(o){if(o instanceof Error&&o.message.includes("writable Desktop file root"))throw o}}throw new Error(`Granted process '${e}' was not found on the trusted executable path`)}async function Kt(e,t,r){if(r.cancelled)throw new Error("Desktop host request was cancelled");let[n,o,i,a={}]=e,c=ve(n);if(S.has(c))throw new Error("Desktop HTTP handle is already active");if(S.size>=128)throw new RangeError("Desktop HTTP handle limit reached");if(typeof o!="string")throw new TypeError("HTTP method must be text");let l=o.toUpperCase();if(l.length===0||l.length>32||!/^[!#$%&'*+.^_\x60|~0-9A-Z-]+$/u.test(l)||["CONNECT","TRACE","TRACK"].includes(l))throw new TypeError("HTTP method is invalid or forbidden");let f=it(i);if(!a||typeof a!="object"||Array.isArray(a))throw new TypeError("HTTP options must be a record");let P=new Set(["headers","secretHeaders","body","timeout","maxBytes"]);for(let d of Object.keys(a))if(!P.has(d))throw new TypeError(`HTTP options has an unknown field '${d}'`);let w=_(a.timeout??12e4,0,6e5,"HTTP timeout"),D=_(a.maxBytes??16*1024*1024,1,ze,"HTTP maxBytes"),u=new Headers;if(a.headers!=null){if(!Array.isArray(a.headers)||a.headers.length>100)throw new TypeError("HTTP headers must be Map<string, string>");for(let d of a.headers){if(!Array.isArray(d)||d.length!==2||typeof d[0]!="string"||typeof d[1]!="string"||/[\r\n]/u.test(d[1]))throw new TypeError("HTTP headers are invalid");u.append(d[0],d[1])}}let h=Qt(a.secretHeaders,u),H=a.body??null;if(H!==null&&typeof H!="string")throw new TypeError("Desktop HTTP body must be validated text");if(H!==null&&Buffer.byteLength(H,"utf8")>v)throw new RangeError("HTTP body cannot exceed 16 MiB");if((l==="GET"||l==="HEAD")&&H!==null)throw new TypeError(`${l} requests cannot have a body`);let s=new AbortController;Pe(r,()=>s.abort(new Error("Desktop host request was cancelled")));let p={owner:t,controller:s,reader:null,decoder:new TextDecoder("utf-8",{fatal:!0}),maxBytes:D,bytes:0,chunks:0,declaredTooLarge:!1,timer:w===0?null:setTimeout(()=>s.abort(new Error("HTTP request timed out")),w)};S.set(c,p),r.cancelled&&s.abort(new Error("Desktop host request was cancelled"));let m=null;try{if(m=await Zt(f,l,u,h,H,s.signal),t!==T)throw new Error("Desktop document generation is no longer active");let d=m.ok,I=m.status,y=m.statusText,R=m.url;if(typeof d!="boolean"||!Number.isInteger(I)||I<100||I>599||d!==(I>=200&&I<=299))throw new TypeError("Fetch returned invalid HTTP response metadata");if(typeof y!="string")throw new TypeError("HTTP response status text must be text");if(y.length>65536)throw new RangeError("HTTP response status text cannot exceed 64 KiB");if(typeof R!="string")throw new TypeError("HTTP response URL must be text");if(R.length>2*1024*1024)throw new RangeError("HTTP response URLs cannot exceed 2 MiB");let g=[...m.headers.entries()],B=0;if(g.length>100)throw new RangeError("HTTP response headers cannot exceed 100 fields");for(let[at,ct]of g)if(B+=at.length+ct.length,B>65536)throw new RangeError("HTTP response headers cannot exceed 64 KiB");let W=m.body!==null,Se=er(m.headers.get("content-length"));return p.declaredTooLarge=W&&Se!==null&&Se>D,p.reader=m.body?.getReader()??null,W||M(c,p),{ok:d,status:I,statusText:y,url:R,headers:g,body:W}}catch(d){try{await m?.body?.cancel(d)}catch{}throw M(c,p),d}}function Qt(e,t){if(e==null)return new Set;if(!Array.isArray(e)||e.length>16)throw new TypeError("HTTP secretHeaders must be a List with at most 16 entries");let r=new Set(["connection","content-length","cookie","cookie2","host","proxy-authorization","te","trailer","transfer-encoding","upgrade"]),n=new Set;for(let i of e){if(!i||typeof i!="object"||Array.isArray(i)||Object.keys(i).some(f=>!["name","environment","prefix"].includes(f))||typeof i.name!="string"||!/^[!#$%&'*+.^_|~0-9A-Za-z-]+$/u.test(i.name)||typeof i.environment!="string"||!/^[A-Z_][A-Z0-9_]{0,127}$/u.test(i.environment)||typeof i.prefix!="string"||i.prefix.length>256||/[\r\n]/u.test(i.prefix))throw new TypeError("HTTP secret header descriptor is invalid");let a=i.name.toLowerCase();if(r.has(a))throw new TypeError("HTTP secret header name is transport-controlled");if(!vt.has(i.environment))throw new Error(`Secret '${i.environment}' is not granted by desktop.permissions.secrets`);if(t.has(i.name)||n.has(a))throw new TypeError("HTTP secret header conflicts with another header");let c=process.env[i.environment];if(c===void 0)throw new Error(`Granted Desktop secret '${i.environment}' is unavailable`);let l=i.prefix+c;if(/\r|\n/u.test(l)||Buffer.byteLength(l,"utf8")>65536)throw new RangeError("HTTP secret header value is outside the supported bounds");t.set(i.name,l),n.add(a)}if([...t].length>100)throw new RangeError("HTTP headers cannot exceed 100 fields");let o=0;for(let[i,a]of t)if(o+=i.length+a.length,o>65536)throw new RangeError("HTTP headers cannot exceed 64 KiB");return n}async function Zt(e,t,r,n,o,i){let a=e,c=t,l=r,f=o;for(let P=0;;P+=1){Ce(a);let w;try{w=await fetch(a,{method:c,headers:l,body:f,signal:i,redirect:"manual"})}catch(h){throw i.aborted?h:new K("request")}if(![301,302,303,307,308].includes(w.status))return w;let D=w.headers.get("location");if(D===null)return w;if(P>=Ie){try{await w.body?.cancel()}catch{}throw new Error(`HTTP redirect limit of ${Ie} was exceeded`)}let u;try{u=it(new URL(D,a).href),Ce(u)}finally{try{await w.body?.cancel()}catch{}}if(u.origin!==a.origin){l=new Headers(l);for(let h of["authorization","proxy-authorization","cookie","cookie2",...n])l.delete(h)}(w.status===303&&c!=="HEAD"||(w.status===301||w.status===302)&&c==="POST")&&(c="GET",f=null,l=new Headers(l),l.delete("content-encoding"),l.delete("content-language"),l.delete("content-location"),l.delete("content-type")),a=u}}function it(e){if(typeof e!="string"||e.length===0||e.length>2*1024*1024)throw new TypeError("HTTP URL must be bounded text");let t;try{t=new URL(e)}catch{throw new TypeError("HTTP URL must be absolute")}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new TypeError("HTTP URL must use http or https");if(t.username||t.password)throw new TypeError("HTTP URL credentials are not allowed");return t}function Ce(e){if(!Rt.has(e.origin))throw new Error(`Network origin '${e.origin}' is not granted by desktop.permissions.network`)}async function Jt(e,t){let r=ve(e[0]),n=S.get(r);if(!n)throw new Error("Desktop HTTP handle is unknown or already released");if(n.owner!==t)throw new Error("Desktop HTTP handle belongs to another document generation");try{if(n.declaredTooLarge)throw new RangeError("HTTP response exceeds maxBytes");if(!n.reader){let i=n.decoder.decode();return M(r,n),{done:!0,text:i}}let o;try{o=await n.reader.read()}catch(i){throw n.controller.signal.aborted?i:new K("response")}if(t!==T)throw new Error("Desktop document generation is no longer active");if(o.done){let i=n.decoder.decode();return M(r,n),{done:!0,text:i}}if(!(o.value instanceof Uint8Array))throw new TypeError("HTTP response yielded a non-byte chunk");if(n.bytes+=o.value.byteLength,n.chunks+=1,n.bytes>n.maxBytes)throw new RangeError("HTTP response exceeds maxBytes");if(n.chunks>gt)throw new RangeError("HTTP responses cannot exceed 1000000 chunks");return{done:!1,text:n.decoder.decode(o.value,{stream:!0})}}catch(o){try{await n.reader?.cancel(o)}catch{}throw M(r,n),o}}async function Yt(e,t){let r=ve(e[0]),n=S.get(r);if(!n)return null;if(n.owner!==t)throw new Error("Desktop HTTP handle belongs to another document generation");n.controller.abort(new Error("HTTP request cancelled"));try{await n.reader?.cancel()}catch{}return M(r,n),null}function ve(e){if(!Number.isSafeInteger(e)||e<1)throw new TypeError("Desktop HTTP handle is invalid");return e}function M(e,t){let r=S.get(e);!r||r!==t||(r.timer&&clearTimeout(r.timer),S.delete(e))}function _(e,t,r,n){if(!Number.isSafeInteger(e)||e<t||e>r)throw new RangeError(`${n} must be an integer from ${t} through ${r}`);return e}function er(e){if(typeof e!="string"||e.length===0)return null;if(typeof Me!="function"||typeof Ne!="function")throw new TypeError("The host transport sizing intrinsics are unavailable");let t=0;for(let r=0;r<e.length;r+=1){let n=Ne(Me,e,[r]);if(n<48||n>57)return null;if(t>900719925474099||(t=t*10+n-48,t>9007199254740991))return 1/0}return t}function V(e,t,r){if(typeof e!="string"||e.includes("\0")||Buffer.byteLength(e,"utf8")>r)throw new RangeError(`${t} is outside the supported bounds`);return e}function st(e){return e instanceof K?{kind:"http-transport",message:e.message,phase:e.phase}:e instanceof Error&&typeof e.message=="string"?e.message.slice(0,4096):"Desktop capability failed"}function X(e){let t=JSON.stringify(e);Buffer.byteLength(t,"utf8")>ze+We?process.stdout.write(`${JSON.stringify({id:e.id,ok:!1,error:"Desktop response exceeds its transport bound"})}
2
+ import{constants as ct,watch as lt}from"node:fs";import{access as ut,appendFile as ft,copyFile as dt,lstat as j,mkdir as $e,readFile as ge,readdir as wt,realpath as F,rename as je,rm as he,stat as C,writeFile as pe}from"node:fs/promises";import{createInterface as ht}from"node:readline";import{basename as Q,dirname as ae,isAbsolute as Y,relative as pt,resolve as g}from"node:path";import{spawn as mt}from"node:child_process";import{StringDecoder as Ie}from"node:string_decoder";var yt=128*1024*1024,S=16*1024*1024,Et=2*1024*1024,Ue=64*1024*1024,Tt=1e6,ve=20,re=4096,We=128,gt=4096,xt=2*1024*1024,bt=20,He=5e3,ke=5e3,Pt=8e3,Oe=Object.freeze({}),Le=Object.freeze({}),Z=Object.freeze({}),Ne=Object.getOwnPropertyDescriptor(String.prototype,"charCodeAt")?.value,_e=Object.getOwnPropertyDescriptor(Reflect,"apply")?.value,[ze,Ge,xe]=process.argv.slice(2);if(!ze||!Ge||!xe)throw new Error("Velar Desktop worker requires config, app-data, and launch roots");var $=JSON.parse(await ge(ze,"utf8"));if($.protocolVersion!==1||!$.permissions||typeof $.permissions!="object")throw new Error("Invalid Velar Desktop worker configuration");var be=new Set($.permissions.files??[]),Rt=new Set($.permissions.processes??[]),Dt=new Set($.permissions.network??[]),St=new Set($.permissions.secrets??[]),x=new Map,At=1,A=new Map,L=new Map,J=new Map,I=new Map,Me=1,ee=1,Fe=!1,E=null,b=[],z=[],me=null,ye=null,G=null,ne=null,Ee=Promise.resolve(),K=class extends Error{constructor(t){super(t==="request"?"HTTP request transport failed":"HTTP response transport failed"),this.name="HttpTransportError",this.phase=t}},Ve=await F(xe);if(be.has("app-data")){let e=g(Ge,"data");await $e(e,{recursive:!0}),ye=e,me=await F(e)}be.has("project")&&(ne=g(xe),G=Ve);qe();var oe=ht({input:process.stdin,crlfDelay:1/0,terminal:!1});oe.once("close",()=>{E!==null&&Te(E);for(let e of I.values())_(e,new Error("Desktop capability host closed"));for(let e of L.values())ce(e)});oe.on("line",async e=>{let t=0,r=null;try{if(Buffer.byteLength(e,"utf8")>yt)throw new RangeError("Desktop request exceeds its 128 MiB transport bound");let n=JSON.parse(e);if(n?.hostCommand!==void 0){await It(n);return}if(t=n.id,n.protocolVersion!==1||!Number.isSafeInteger(t)||t<1||typeof n.capability!="string"||typeof n.operation!="string"||!Array.isArray(n.args)||!Xe(n.owner)||n.owner!==E)throw new TypeError("Invalid Desktop worker request");if(L.has(t))throw new Error("Desktop worker request identity is already active");r={owner:n.owner,cancelled:!1,cancel:null},L.set(t,r);let o=await vt(n.capability,n.operation,n.args,n.owner,r);if(r.cancelled)throw new Error("Desktop host request was cancelled");if(n.owner!==E)throw new Error("Desktop document generation is no longer active");X({id:t,ok:!0,value:o})}catch(n){X({id:t,ok:!1,error:it(n)})}finally{r!==null&&L.get(t)===r&&L.delete(t)}});async function It(e){if(e.protocolVersion!==1||!Xe(e.owner))throw new TypeError("Invalid Desktop host command");if(e.hostCommand==="owner-activate"){if(Object.keys(e).some(t=>!["protocolVersion","hostCommand","owner"].includes(t)))throw new TypeError("Invalid Desktop host command");E!==null&&E!==e.owner&&Te(E),E=e.owner;return}if(e.hostCommand==="owner-retire"){if(Object.keys(e).some(t=>!["protocolVersion","hostCommand","owner"].includes(t)))throw new TypeError("Invalid Desktop host command");Te(e.owner);return}if(e.hostCommand==="request-cancel"){if(Object.keys(e).some(r=>!["protocolVersion","hostCommand","owner","requestID"].includes(r))||!Number.isSafeInteger(e.requestID)||e.requestID<1)throw new TypeError("Invalid Desktop host command");let t=L.get(e.requestID);t&&t.owner===e.owner&&ce(t);return}if(e.hostCommand==="project-root-set"){if(Object.keys(e).some(r=>!["protocolVersion","hostCommand","owner","commandID","path"].includes(r))||e.owner!==E||!Number.isSafeInteger(e.commandID)||e.commandID<1||typeof e.path!="string"||!Y(e.path)||e.path.length===0||e.path.length>re||e.path.includes("\0")||!be.has("project"))throw new TypeError("Invalid Desktop project-root command");let t=Ee.then(()=>Ht(e.path));Ee=t.catch(()=>{});try{await t,X({protocolVersion:1,hostEvent:"project-root-settled",owner:e.owner,commandID:e.commandID,ok:!0})}catch(r){X({protocolVersion:1,hostEvent:"project-root-settled",owner:e.owner,commandID:e.commandID,ok:!1,error:it(r)})}return}throw new TypeError("Unknown Desktop host command")}function ce(e){if(!e.cancelled){e.cancelled=!0;try{e.cancel?.()}catch{}}}function Pe(e,t){e.cancel=t,e.cancelled&&t()}function Xe(e){return typeof e=="string"&&/^[0-9a-f]{32}$/u.test(e)}async function vt(e,t,r,n,o){if(await Ee,e==="fs")return Bt(t,r,n,o);if(e==="process"){if(t==="run")return Ut(r,n,o);if(t==="start")return Ye(r,n,o);if(t==="read")return zt(r,n);if(t==="wait")return Ze(r,n);if(t==="stop")return Je(r,n)}if(e==="http"){if(t==="request")return Jt(r,n,o);if(t==="read")return rr(r,n);if(t==="cancel")return nr(r,n)}throw new Error(`Unknown Desktop capability '${e}.${t}'`)}function qe(){b.length=0,z.length=0,me!==null&&ye!==null&&(b.push(me),z.push(ye)),G!==null&&ne!==null&&(b.push(G),z.push(ne))}async function Ht(e){let t=await F(e);if(!(await C(t)).isDirectory())throw new TypeError("Desktop project grant must identify a directory");for(let n of I.values())_(n,new Error("Desktop project grant changed"));for(let n of L.values())ce(n);for(let[n,o]of x)ie(n,o);for(let[n,o]of A)o.controller.abort(new Error("Desktop project grant changed")),o.reader?.cancel().catch(()=>{}),N(n,o);ne=g(e),G=t,qe()}function kt(){let e=Me;for(let t=0;t<=We;t+=1){if(!I.has(e))return Me=e>=Number.MAX_SAFE_INTEGER?1:e+1,e;e=e>=Number.MAX_SAFE_INTEGER?1:e+1}throw new RangeError("Desktop file watcher handle space is unavailable")}function _(e,t=null){if(e.closed)return!1;e.closed=!0,e.timer!==null&&(clearTimeout(e.timer),e.timer=null);try{e.watcher.close()}catch{}if(I.delete(e.handle),e.pending!==null){let r=e.pending;e.pending=null,r.activity.cancel=null,t===null?r.resolve(null):r.reject(t)}return!0}function Ke(e){if(e.rescan)return e.rescan=!1,e.paths.clear(),e.units=0,{paths:[],rescan:!0};let t=[...e.paths].sort();return e.paths.clear(),e.units=0,{paths:t,rescan:!1}}function Qe(e){e.pending===null||e.timer!==null||e.failure!==null||!e.rescan&&e.paths.size===0||(e.timer=setTimeout(()=>{if(e.timer=null,e.pending===null||e.closed)return;let t=e.pending;e.pending=null,t.activity.cancel=null,t.resolve(Ke(e))},bt))}function fe(e){e.rescan=!0,e.paths.clear(),e.units=0,Qe(e)}function Ot(e,t){if(e.closed||e.failure!==null||e.rescan)return;let r;if(!e.directory)r=e.root;else{if(typeof t!="string"||t.length===0||t.length>re||t.includes("\0")||Y(t)){fe(e);return}if(r=g(e.root,t),!ue(e.root,r)||r.length>re){fe(e);return}}if(!e.paths.has(r)){if(e.paths.size>=gt||e.units+r.length>xt){fe(e);return}e.paths.add(r),e.units+=r.length}Qe(e)}function Lt(e,t){if(!(e.closed||e.failure!==null)){e.failure=t instanceof Error?t:new Error("Desktop file watcher failed"),e.timer!==null&&(clearTimeout(e.timer),e.timer=null);try{e.watcher.close()}catch{}e.pending!==null&&_(e,e.failure)}}async function Nt(e,t){if(e.length!==2||typeof e[1]!="boolean")throw new TypeError("watchStart arguments are invalid");if(I.size>=We)throw new RangeError("Desktop host cannot own more than 128 file watchers");let r=await H(e[0]),n=await C(r),o=n.isDirectory();if(!o&&!n.isFile())throw new TypeError("watchFiles requires a file or directory path");if(e[1]&&!o)throw new TypeError("recursive watchFiles requires a directory path");let i=kt(),a={handle:i,owner:t,root:r,directory:o,watcher:null,paths:new Set,units:0,rescan:!1,pending:null,timer:null,failure:null,closed:!1};return a.watcher=lt(r,{recursive:e[1],encoding:"utf8",persistent:!0},(c,l)=>Ot(a,l)),a.watcher.once("error",c=>Lt(a,c)),I.set(i,a),i}function _t(e,t){let r=M(e,1,Number.MAX_SAFE_INTEGER,"Desktop file watcher handle"),n=I.get(r);if(!n)throw new Error("Desktop file watcher handle is unknown or already released");if(n.owner!==t)throw new Error("Desktop file watcher belongs to another document generation");return n}function Mt(e,t,r){if(e.length!==1)throw new TypeError("watchNext arguments are invalid");let n=_t(e[0],t);if(n.pending!==null)throw new Error("FileWatcher.next already has an active pull");if(n.failure!==null){let o=n.failure;throw _(n),o}return n.rescan||n.paths.size>0?Ke(n):new Promise((o,i)=>{let a={resolve:o,reject:i,activity:r};n.pending=a,Pe(r,()=>{n.pending===a&&_(n,new Error("Desktop file watcher pull was cancelled"))})})}function Ft(e,t){if(e.length!==1)throw new TypeError("watchClose arguments are invalid");let r=M(e[0],1,Number.MAX_SAFE_INTEGER,"Desktop file watcher handle"),n=I.get(r);if(!n)return!1;if(n.owner!==t)throw new Error("Desktop file watcher belongs to another document generation");return _(n)}async function Bt(e,t,r,n){if(e==="watchStart")return Nt(t,r);if(e==="watchNext")return Mt(t,r,n);if(e==="watchClose")return Ft(t,r);if(e==="readText"){let[o,i=S]=t,a=await Ct(o,i,"readText");return new TextDecoder("utf-8",{fatal:!0}).decode(a)}if(e==="exists")try{return await H(t[0]),!0}catch(o){if(o?.code==="ENOENT")return!1;throw o}if(e==="list"){let o=M(t[1]??1e5,1,1e5,"list maxItems"),i=await wt(await H(t[0]));if(i.length>o)throw new RangeError("list result exceeds maxItems");let a=0;for(let c of i)if(a+=c.length,a>Et)throw new RangeError("list result cannot exceed 2 MiB of text");return i.sort()}if(e==="info"){let o;try{o=await te(t[0])}catch(a){if(a?.code==="ENOENT")return null;throw a}let i=await j(o);return{name:Q(o),kind:i.isFile()?"file":i.isDirectory()?"directory":i.isSymbolicLink()?"symlink":"other",size:i.size,modifiedAt:i.mtimeMs}}if(e==="canonical")return H(t[0]);if(e==="makeDirectory")return await $e(await $t(t[0]),{recursive:!0}),null;if(e==="createText"){let o=await de(t[0]),i=q(t[1],"createText text",S);return W([o],async()=>{try{await pe(o,i,{encoding:"utf8",flag:"wx"})}catch(a){throw a?.code==="EEXIST"?new Error("createText target already exists"):a}return null})}if(e==="replaceTextIfMatches"){let o=await H(t[0]),i=Buffer.from(q(t[1],"replaceTextIfMatches expected text",S),"utf8"),a=Buffer.from(q(t[2],"replaceTextIfMatches replacement text",S),"utf8");return W([o],async()=>{let c=await C(o);if(!c.isFile())throw new TypeError("replaceTextIfMatches requires a file path");if(c.size>S)throw new RangeError("replaceTextIfMatches file exceeds 16 MiB");let l=await ge(o);if(l.byteLength>S)throw new RangeError("replaceTextIfMatches file exceeds 16 MiB");return l.equals(i)?(await jt(o,a,c.mode),!0):!1})}if(e==="writeText"||e==="appendText"){let o=await de(t[0]),i=q(t[1],`${e} text`,S);return W([o],async()=>{let a=await C(o).catch(c=>c?.code==="ENOENT"?null:Promise.reject(c));if(a&&!a.isFile())throw new TypeError(`${e} requires a file path`);if(e==="writeText")await pe(o,i,"utf8");else{if(a&&a.size+Buffer.byteLength(i,"utf8")>S)throw new RangeError("appendText result cannot exceed 16 MiB");await ft(o,i,"utf8")}return null})}if(e==="copyFile"){let o=await H(t[0]);if(!(await C(o)).isFile())throw new TypeError("copyFile requires a regular file source");let i=await de(t[1]);return W([i],async()=>(t[2]!==!0&&await Be(i,"copyFile"),await dt(o,i),null))}if(e==="move"){let o=await te(t[0]);if(b.includes(o))throw new Error("move refuses a granted Desktop file root");let i=await te(t[1],!0);return W([o,i],async()=>(t[2]!==!0?await Be(i,"move"):await he(i,{force:!0,recursive:!1}),await je(o,i),null))}if(e==="removeFile"){let o=await te(t[0]);return W([o],async()=>{if((await j(o)).isDirectory())throw new TypeError("removeFile refuses directories");return await he(o,{recursive:!1,force:!1}),null})}throw new Error(`Unknown filesystem operation '${e}'`)}async function Ct(e,t,r){t=M(t,1,S,`${r} maxBytes`),e=await H(e);let n=await C(e);if(!n.isFile())throw new TypeError(`${r} requires a file path`);if(n.size>t)throw new RangeError(`${r} file exceeds maxBytes`);let o=await ge(e);if(o.byteLength>t)throw new RangeError(`${r} file exceeds maxBytes`);return o}async function H(e){let t=le(e);Re(t);let r=await F(t);return V(r),r}async function de(e){let t=le(e);try{return await H(t)}catch(r){if(r?.code!=="ENOENT")throw r;try{throw await j(t),new Error("Filesystem write target cannot be a dangling symbolic link")}catch(o){if(o?.code!=="ENOENT")throw o}let n=await F(ae(t));return V(n),g(n,Q(t))}}async function te(e,t=!1){let r=le(e);Re(r);for(let i=0;i<z.length;i+=1)if(r===z[i]||r===b[i])return t||await j(b[i]),b[i];let n=await F(ae(r));V(n);let o=g(n,Q(r));return V(o),t||await j(o),o}async function $t(e){let t=le(e);Re(t);let r=[],n=t;for(;;)try{if((await j(n)).isSymbolicLink()&&r.length===0)throw new TypeError("makeDirectory refuses a symbolic-link target");let i=await F(n);if(V(i),!(await C(i)).isDirectory())throw new TypeError("makeDirectory requires every existing ancestor to be a directory");let a=i;for(let c=r.length-1;c>=0;c-=1)a=g(a,r[c]);return V(a),a}catch(o){if(o?.code!=="ENOENT")throw o;let i=ae(n);if(i===n)throw o;r.push(Q(n)),n=i}}function le(e){if(typeof e!="string"||e.length===0||e.length>re||e.includes("\0"))throw new TypeError("Filesystem operation requires a bounded path");let t=G??b[0];if(!t)throw new Error("Desktop application has no granted filesystem scope");return Y(e)?g(e):g(t,e)}function V(e){if(!b.some(t=>ue(t,e)))throw new Error("Filesystem path is outside granted Desktop file roots")}function Re(e){if(![...z,...b].some(t=>ue(t,e)))throw new Error("Filesystem path is outside granted Desktop file roots")}function ue(e,t){let r=pt(e,t);return r===""||r!==".."&&!r.startsWith("../")&&!Y(r)}async function Be(e,t){try{await j(e)}catch(r){if(r?.code==="ENOENT")return;throw r}throw new Error(`${t} target already exists`)}async function W(e,t){let n=[...new Set(e.map(o=>g(o)))].sort().map(o=>{let i=J.get(o)??null,a,c=new Promise(l=>{a=l});return J.set(o,c),{identity:o,previous:i,release:a,tail:c}});await Promise.all(n.map(o=>o.previous));try{return await t()}finally{for(let o of n)o.release(),J.get(o.identity)===o.tail&&J.delete(o.identity)}}async function jt(e,t,r){let n=null;for(let o=0;o<1024;o+=1){let i=ee;ee=ee>=Number.MAX_SAFE_INTEGER?1:ee+1;let a=g(ae(e),`.velar-replace-${i}.tmp`);try{await pe(a,t,{flag:"wx",mode:r}),n=a;break}catch(c){if(c?.code!=="EEXIST")throw c}}if(n===null)throw new Error("replaceTextIfMatches could not allocate a temporary file");try{await je(n,e)}finally{await he(n,{force:!0,recursive:!1})}}async function Ut(e,t,r){let n=await Ye(e,t,r),o=await Ze([n.handle],t);if(o.retained)throw Wt(n.handle,t),se(o.error);if(o.error)throw se(o.error);return o.result}function Wt(e,t){let r=()=>{Je([e],t).catch(()=>{setTimeout(r,1e3)})};setTimeout(r,0)}async function Ye(e,t,r){if(x.size>=128)throw new RangeError("Desktop process handle limit reached");if(r.cancelled)throw new Error("Desktop host request was cancelled");let n=At++,o=null;if(Pe(r,()=>{o!==null&&ie(n,o)}),o=await Qt(e,()=>X({protocolVersion:1,hostEvent:"process-settled",owner:t,handle:n})),o.owner=t,o.kind="process",x.set(n,o),X({protocolVersion:1,hostEvent:"process-owned",owner:t,handle:n,pid:o.pid}),o.result.catch(()=>{}),r.cancelled||t!==E)throw ie(n,o),new Error("Desktop document generation is no longer active");return{handle:n,pid:o.pid}}async function Ze(e,t){let[r,n]=et(e[0],t);if(n.reading)throw new Error("Process wait() cannot run while next() is pending");n.waitStarted=!0,n.waitRetained&&!n.settled&&O(n.child,"SIGKILL");let o=await De(n);return n.waitRetained=o.retained,o.retained||x.delete(r),o}async function zt(e,t){let[,r]=et(e[0],t);return r.next()}async function Je(e,t){let r=nt(e[0]),n=x.get(r);if(!n)return{result:null,error:null};if(n.kind!=="process")throw new Error("Desktop process handle is unknown or already released");if(n.owner!==t)throw new Error("Desktop process handle belongs to another document generation");n.stop();let o=await De(n);if(o.retained)throw se(o.error);return x.delete(r),{result:o.result,error:o.error}}function et(e,t){let r=nt(e),n=x.get(r);if(!n||n.kind!=="process")throw new Error("Desktop process handle is unknown or already released");if(n.owner!==t)throw new Error("Desktop process handle belongs to another document generation");return[r,n]}function ie(e,t){if(t.retirementStarted)return;t.retirementStarted=!0,t.stop();let r=async()=>{try{let n=await De(t);if(n.retained)throw se(n.error);x.get(e)===t&&x.delete(e)}catch{setTimeout(r,1e3)}};r()}function Te(e){E===e&&(E=null);for(let t of I.values())t.owner===e&&_(t,new Error("Desktop document generation retired"));for(let t of L.values())t.owner===e&&ce(t);for(let[t,r]of x)r.owner===e&&ie(t,r);for(let[t,r]of A)r.owner===e&&(r.controller.abort(new Error("Desktop document generation retired")),r.reader?.cancel().catch(()=>{}),N(t,r))}async function tt(){if(Fe)return;Fe=!0,oe.removeAllListeners("line"),oe.close();for(let r of I.values())_(r,new Error("Desktop capability host failed"));let e=Array.from(x.values());for(let r of e)r.stop();for(let r of A.values())r.controller.abort(new Error("Desktop capability host failed"));let t=null;try{await Promise.race([Promise.allSettled(e.map(r=>r.result)),new Promise(r=>{t=setTimeout(r,Pt)})])}finally{t!==null&&clearTimeout(t);for(let r of e)r.settled||O(r.child,"SIGKILL");process.exit(1)}}function rt(e){let t=e instanceof TypeError?"TypeError":e instanceof RangeError?"RangeError":"Error",r=e instanceof Error?e.message:"Desktop process failed";return(typeof r!="string"||r.length===0)&&(r="Desktop process failed"),r.length>65536&&(r=r.slice(0,65536)),{name:t,message:r}}function se(e){return e.name==="TypeError"?new TypeError(e.message):e.name==="RangeError"?new RangeError(e.message):new Error(e.message)}function Gt(e){return e.result.then(t=>({result:t,error:null,retained:!1}),t=>({result:null,error:rt(t),retained:!1}))}async function we(e){let t=null,r=new Error(`Process termination could not be confirmed within ${He} milliseconds`);try{return await Promise.race([e,new Promise(n=>{t=setTimeout(()=>n({result:null,error:rt(r),retained:!0}),He)})])}finally{t!==null&&clearTimeout(t)}}async function De(e){let t=Gt(e);if(!e.terminationRequested){let i=await Promise.race([t,e.termination.then(()=>Oe)]);if(i!==Oe)return i}if(e.rootExited&&!e.stopping){let i=await Promise.race([t,e.stopRequest.then(()=>Z)]);return i!==Z?i:await we(t)}let r=we(t),n=await Promise.race([t,r,e.stopping?new Promise(()=>{}):e.rootExit.then(()=>Le)]);if(n!==Le)return n;if(e.stopping)return await r;let o=await Promise.race([t,e.stopRequest.then(()=>Z)]);return o!==Z?o:await we(t)}function nt(e){if(!Number.isSafeInteger(e)||e<1)throw new TypeError("Desktop process handle is invalid");return e}var Vt=/^(?:PATH|HOME|USERPROFILE|SHELL|TMPDIR|IFS|ENV|BASH_ENV|SHELLOPTS|BASHOPTS|PS4|EDITOR|VISUAL|PAGER|MANPAGER|MANOPT|BROWSER|SSH_ASKPASS|SUDO_ASKPASS|NODE_OPTIONS|NODE_REPL_EXTERNAL_MODULE)$/iu,Xt=/^(?:LD_|DYLD_|GIT_|XDG_|PYTHON|PERL|RUBY|LESS)/iu,qt=/(?:_COMMAND|_EDITOR|_PAGER|_OPTS)$/iu;function Kt(e){return Vt.test(e)||Xt.test(e)||qt.test(e)}async function Qt(e,t){let[r,n=[],o={}]=e;if(typeof r!="string"||!Rt.has(r)||r!==Q(r))throw new Error(`Process '${String(r)}' is not granted by desktop.permissions.processes`);if(!Array.isArray(n)||n.length>1e3)throw new TypeError("Process args must be a bounded List<string>");let i=0;for(let u of n){if(typeof u!="string"||u.length===0||u.includes("\0")||u.length>1024*1024)throw new TypeError("Process args must be a bounded List<string>");if(i+=u.length,i>1024*1024)throw new RangeError("Process arguments cannot exceed 1 MiB")}if(!o||typeof o!="object"||Array.isArray(o))throw new TypeError("Process options must be a record");let a=new Set(["cwd","env","stdin","timeout","maxOutputBytes"]);for(let u of Object.keys(o))if(!a.has(u))throw new TypeError(`Process options has unknown field '${u}'`);let c=M(o.timeout??12e4,0,6e5,"Process timeout"),l=M(o.maxOutputBytes??4*1024*1024,1,16*1024*1024,"Process maxOutputBytes"),f=o.cwd==null?G??Ve:await H(o.cwd),P=o.stdin??"";q(P,"Process stdin",16*1024*1024);let h=Object.create(null);for(let u of["HOME","LANG","LC_ALL","PATH","SHELL","TERM","TMPDIR","USER"])typeof process.env[u]=="string"&&(h[u]=process.env[u]);if(o.env!=null){if(!Array.isArray(o.env)||o.env.length>1e3)throw new TypeError("Process env must be Map<string, string>");let u=0;for(let w of o.env){if(!Array.isArray(w)||w.length!==2||typeof w[0]!="string"||!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(w[0])||w[0]==="PATH"||typeof w[1]!="string"||w[1].includes("\0"))throw new TypeError("Process env must contain valid string variables and cannot replace PATH");if(Kt(w[0]))throw new TypeError(`Process env cannot set the transport- or interpreter-controlled variable '${w[0]}'`);if(u+=w[0].length+w[1].length,u>1024*1024)throw new RangeError("Process env cannot exceed 1 MiB");h[w[0]]=w[1]}}let R=await Zt(r,h.PATH??"");return Yt(R,n,{cwd:f,environment:h,stdin:P,timeout:c,maxOutputBytes:l},t)}async function Yt(e,t,r,n){let{cwd:o,environment:i,stdin:a,timeout:c,maxOutputBytes:l}=r,f=mt(e,t,{cwd:o,env:i,shell:!1,windowsHide:!0,detached:process.platform!=="win32",stdio:["pipe","pipe","pipe"]}),P,h=new Promise(p=>{P=p}),R,u=new Promise(p=>{R=p}),w,k=new Promise(p=>{w=p}),s={child:f,pid:f.pid??0,settled:!1,stopping:!1,terminationRequested:!1,termination:h,rootExited:!1,rootExit:u,stopRequest:k,stdout:[],stderr:[],bytes:0,outputChunks:0,outputQueue:[],outputWaiter:null,reading:!1,waitStarted:!1,waitRetained:!1,stdoutDecoder:new Ie("utf8"),stderrDecoder:new Ie("utf8"),failure:null,timer:null,exitTimer:null,result:null,terminate(p,m){if(p&&!s.failure&&(s.failure=p),s.terminationRequested||(s.terminationRequested=!0,P()),s.outputWaiter){let d=s.outputWaiter;s.outputWaiter=null,d.reject(s.failure??new Error("Process output is unavailable after stop()"))}O(f,m)},stop(){if(!s.settled){if(s.stopping){O(f,"SIGKILL");return}s.stopping=!0,w(),s.exitTimer&&(clearTimeout(s.exitTimer),s.exitTimer=null),s.terminate(null,"SIGTERM"),setTimeout(()=>{s.settled||O(f,"SIGKILL")},2e3).unref()}},async next(){if(s.waitStarted)throw new Error("Process output must be consumed before wait()");if(s.stopping)throw new Error("Process output is unavailable after stop()");if(s.terminationRequested)throw s.failure??new Error("Process output is unavailable after termination");if(s.reading)throw new Error("Process.next() allows only one active pull");s.reading=!0;try{if(s.outputQueue.length>0)return s.outputQueue.shift();if(s.settled){if(s.failure)throw s.failure;return null}return await new Promise((p,m)=>{s.outputWaiter={resolve:p,reject:m}})}finally{s.reading=!1}}};return s.result=new Promise((p,m)=>{let d=(y,D)=>{if(D.length===0||s.failure)return;if(s.outputChunks+=1,s.outputChunks>1e6){s.terminate(new RangeError("Process output cannot exceed 1000000 chunks"),"SIGKILL");return}let T=Object.freeze({channel:y,text:D});if(s.outputWaiter){let B=s.outputWaiter;s.outputWaiter=null,B.resolve(T)}else s.outputQueue.push(T)},v=(y,D,T,B)=>{if(s.failure)return;if(s.bytes+=B.byteLength,s.bytes>l){s.terminate(new RangeError("Process output exceeded maxOutputBytes"),"SIGKILL");return}let U=Buffer.from(B);y.push(U),d(T,D.write(U))};f.stdout.on("data",y=>v(s.stdout,s.stdoutDecoder,"stdout",y)),f.stderr.on("data",y=>v(s.stderr,s.stderrDecoder,"stderr",y)),f.once("error",y=>{s.terminate(y,"SIGKILL")}),f.once("exit",()=>{s.rootExited=!0,R(),s.stopping||(O(f,"SIGTERM"),setTimeout(()=>{s.settled||O(f,"SIGKILL")},2e3).unref(),s.exitTimer=setTimeout(()=>{s.settled||(s.failure||(s.failure=new Error(`Process output streams did not close within ${ke} milliseconds after process exit`)),f.stdout.destroy(),f.stderr.destroy())},ke),s.exitTimer.unref())}),f.once("close",(y,D)=>{if(s.settled=!0,s.timer&&clearTimeout(s.timer),s.exitTimer&&clearTimeout(s.exitTimer),d("stdout",s.stdoutDecoder.end()),d("stderr",s.stderrDecoder.end()),s.outputWaiter){let T=s.outputWaiter;s.outputWaiter=null,s.outputQueue.length>0?T.resolve(s.outputQueue.shift()):s.failure?T.reject(s.failure):T.resolve(null)}s.failure?m(s.failure):p({code:y,signal:D,stdout:Buffer.concat(s.stdout).toString("utf8"),stderr:Buffer.concat(s.stderr).toString("utf8")}),n()})}),s.timer=c===0?null:setTimeout(()=>{s.settled||s.terminate(new Error(`Process timed out after ${c} milliseconds`),"SIGKILL")},c),f.stdin.end(a),s}function O(e,t){if(e.pid){if(process.platform==="win32"){try{e.kill(t)}catch{}return}try{process.kill(-e.pid,t)}catch{try{e.kill(t)}catch{}}}}async function Zt(e,t){for(let r of t.split(process.platform==="win32"?";":":")){if(!r||!Y(r))continue;let n=g(r,e);try{await ut(n,ct.X_OK);let o=await F(n);if(b.some(i=>ue(i,o)))throw new Error(`Process '${e}' resolves inside a writable Desktop file root`);return o}catch(o){if(o instanceof Error&&o.message.includes("writable Desktop file root"))throw o}}throw new Error(`Granted process '${e}' was not found on the trusted executable path`)}async function Jt(e,t,r){if(r.cancelled)throw new Error("Desktop host request was cancelled");let[n,o,i,a={}]=e,c=Se(n);if(A.has(c))throw new Error("Desktop HTTP handle is already active");if(A.size>=128)throw new RangeError("Desktop HTTP handle limit reached");if(typeof o!="string")throw new TypeError("HTTP method must be text");let l=o.toUpperCase();if(l.length===0||l.length>32||!/^[!#$%&'*+.^_\x60|~0-9A-Z-]+$/u.test(l)||["CONNECT","TRACE","TRACK"].includes(l))throw new TypeError("HTTP method is invalid or forbidden");let f=ot(i);if(!a||typeof a!="object"||Array.isArray(a))throw new TypeError("HTTP options must be a record");let P=new Set(["headers","secretHeaders","body","timeout","maxBytes"]);for(let d of Object.keys(a))if(!P.has(d))throw new TypeError(`HTTP options has an unknown field '${d}'`);let h=M(a.timeout??12e4,0,6e5,"HTTP timeout"),R=M(a.maxBytes??16*1024*1024,1,Ue,"HTTP maxBytes"),u=new Headers;if(a.headers!=null){if(!Array.isArray(a.headers)||a.headers.length>100)throw new TypeError("HTTP headers must be Map<string, string>");for(let d of a.headers){if(!Array.isArray(d)||d.length!==2||typeof d[0]!="string"||typeof d[1]!="string"||/[\r\n]/u.test(d[1]))throw new TypeError("HTTP headers are invalid");u.append(d[0],d[1])}}let w=er(a.secretHeaders,u),k=a.body??null;if(k!==null&&typeof k!="string")throw new TypeError("Desktop HTTP body must be validated text");if(k!==null&&Buffer.byteLength(k,"utf8")>S)throw new RangeError("HTTP body cannot exceed 16 MiB");if((l==="GET"||l==="HEAD")&&k!==null)throw new TypeError(`${l} requests cannot have a body`);let s=new AbortController;Pe(r,()=>s.abort(new Error("Desktop host request was cancelled")));let p={owner:t,controller:s,reader:null,decoder:new TextDecoder("utf-8",{fatal:!0}),maxBytes:R,bytes:0,chunks:0,declaredTooLarge:!1,timer:h===0?null:setTimeout(()=>s.abort(new Error("HTTP request timed out")),h)};A.set(c,p),r.cancelled&&s.abort(new Error("Desktop host request was cancelled"));let m=null;try{if(m=await tr(f,l,u,w,k,s.signal),t!==E)throw new Error("Desktop document generation is no longer active");let d=m.ok,v=m.status,y=m.statusText,D=m.url;if(typeof d!="boolean"||!Number.isInteger(v)||v<100||v>599||d!==(v>=200&&v<=299))throw new TypeError("Fetch returned invalid HTTP response metadata");if(typeof y!="string")throw new TypeError("HTTP response status text must be text");if(y.length>65536)throw new RangeError("HTTP response status text cannot exceed 64 KiB");if(typeof D!="string")throw new TypeError("HTTP response URL must be text");if(D.length>2*1024*1024)throw new RangeError("HTTP response URLs cannot exceed 2 MiB");let T=[...m.headers.entries()],B=0;if(T.length>100)throw new RangeError("HTTP response headers cannot exceed 100 fields");for(let[st,at]of T)if(B+=st.length+at.length,B>65536)throw new RangeError("HTTP response headers cannot exceed 64 KiB");let U=m.body!==null,Ae=or(m.headers.get("content-length"));return p.declaredTooLarge=U&&Ae!==null&&Ae>R,p.reader=m.body?.getReader()??null,U||N(c,p),{ok:d,status:v,statusText:y,url:D,headers:T,body:U}}catch(d){try{await m?.body?.cancel(d)}catch{}throw N(c,p),d}}function er(e,t){if(e==null)return new Set;if(!Array.isArray(e)||e.length>16)throw new TypeError("HTTP secretHeaders must be a List with at most 16 entries");let r=new Set(["connection","content-length","cookie","cookie2","host","proxy-authorization","te","trailer","transfer-encoding","upgrade"]),n=new Set;for(let i of e){if(!i||typeof i!="object"||Array.isArray(i)||Object.keys(i).some(f=>!["name","environment","prefix"].includes(f))||typeof i.name!="string"||!/^[!#$%&'*+.^_|~0-9A-Za-z-]+$/u.test(i.name)||typeof i.environment!="string"||!/^[A-Z_][A-Z0-9_]{0,127}$/u.test(i.environment)||typeof i.prefix!="string"||i.prefix.length>256||/[\r\n]/u.test(i.prefix))throw new TypeError("HTTP secret header descriptor is invalid");let a=i.name.toLowerCase();if(r.has(a))throw new TypeError("HTTP secret header name is transport-controlled");if(!St.has(i.environment))throw new Error(`Secret '${i.environment}' is not granted by desktop.permissions.secrets`);if(t.has(i.name)||n.has(a))throw new TypeError("HTTP secret header conflicts with another header");let c=process.env[i.environment];if(c===void 0)throw new Error(`Granted Desktop secret '${i.environment}' is unavailable`);let l=i.prefix+c;if(/\r|\n/u.test(l)||Buffer.byteLength(l,"utf8")>65536)throw new RangeError("HTTP secret header value is outside the supported bounds");t.set(i.name,l),n.add(a)}if([...t].length>100)throw new RangeError("HTTP headers cannot exceed 100 fields");let o=0;for(let[i,a]of t)if(o+=i.length+a.length,o>65536)throw new RangeError("HTTP headers cannot exceed 64 KiB");return n}async function tr(e,t,r,n,o,i){let a=e,c=t,l=r,f=o;for(let P=0;;P+=1){Ce(a);let h;try{h=await fetch(a,{method:c,headers:l,body:f,signal:i,redirect:"manual"})}catch(w){throw i.aborted?w:new K("request")}if(![301,302,303,307,308].includes(h.status))return h;let R=h.headers.get("location");if(R===null)return h;if(P>=ve){try{await h.body?.cancel()}catch{}throw new Error(`HTTP redirect limit of ${ve} was exceeded`)}let u;try{u=ot(new URL(R,a).href),Ce(u)}finally{try{await h.body?.cancel()}catch{}}if(u.origin!==a.origin){l=new Headers(l);for(let w of["authorization","proxy-authorization","cookie","cookie2",...n])l.delete(w)}(h.status===303&&c!=="HEAD"||(h.status===301||h.status===302)&&c==="POST")&&(c="GET",f=null,l=new Headers(l),l.delete("content-encoding"),l.delete("content-language"),l.delete("content-location"),l.delete("content-type")),a=u}}function ot(e){if(typeof e!="string"||e.length===0||e.length>2*1024*1024)throw new TypeError("HTTP URL must be bounded text");let t;try{t=new URL(e)}catch{throw new TypeError("HTTP URL must be absolute")}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new TypeError("HTTP URL must use http or https");if(t.username||t.password)throw new TypeError("HTTP URL credentials are not allowed");return t}function Ce(e){if(!Dt.has(e.origin))throw new Error(`Network origin '${e.origin}' is not granted by desktop.permissions.network`)}async function rr(e,t){let r=Se(e[0]),n=A.get(r);if(!n)throw new Error("Desktop HTTP handle is unknown or already released");if(n.owner!==t)throw new Error("Desktop HTTP handle belongs to another document generation");try{if(n.declaredTooLarge)throw new RangeError("HTTP response exceeds maxBytes");if(!n.reader){let i=n.decoder.decode();return N(r,n),{done:!0,text:i}}let o;try{o=await n.reader.read()}catch(i){throw n.controller.signal.aborted?i:new K("response")}if(t!==E)throw new Error("Desktop document generation is no longer active");if(o.done){let i=n.decoder.decode();return N(r,n),{done:!0,text:i}}if(!(o.value instanceof Uint8Array))throw new TypeError("HTTP response yielded a non-byte chunk");if(n.bytes+=o.value.byteLength,n.chunks+=1,n.bytes>n.maxBytes)throw new RangeError("HTTP response exceeds maxBytes");if(n.chunks>Tt)throw new RangeError("HTTP responses cannot exceed 1000000 chunks");return{done:!1,text:n.decoder.decode(o.value,{stream:!0})}}catch(o){try{await n.reader?.cancel(o)}catch{}throw N(r,n),o}}async function nr(e,t){let r=Se(e[0]),n=A.get(r);if(!n)return null;if(n.owner!==t)throw new Error("Desktop HTTP handle belongs to another document generation");n.controller.abort(new Error("HTTP request cancelled"));try{await n.reader?.cancel()}catch{}return N(r,n),null}function Se(e){if(!Number.isSafeInteger(e)||e<1)throw new TypeError("Desktop HTTP handle is invalid");return e}function N(e,t){let r=A.get(e);!r||r!==t||(r.timer&&clearTimeout(r.timer),A.delete(e))}function M(e,t,r,n){if(!Number.isSafeInteger(e)||e<t||e>r)throw new RangeError(`${n} must be an integer from ${t} through ${r}`);return e}function or(e){if(typeof e!="string"||e.length===0)return null;if(typeof Ne!="function"||typeof _e!="function")throw new TypeError("The host transport sizing intrinsics are unavailable");let t=0;for(let r=0;r<e.length;r+=1){let n=_e(Ne,e,[r]);if(n<48||n>57)return null;if(t>900719925474099||(t=t*10+n-48,t>9007199254740991))return 1/0}return t}function q(e,t,r){if(typeof e!="string"||e.includes("\0")||Buffer.byteLength(e,"utf8")>r)throw new RangeError(`${t} is outside the supported bounds`);return e}function it(e){return e instanceof K?{kind:"http-transport",message:e.message,phase:e.phase}:e instanceof Error&&typeof e.message=="string"?e.message.slice(0,4096):"Desktop capability failed"}function X(e){let t=JSON.stringify(e);Buffer.byteLength(t,"utf8")>Ue?process.stdout.write(`${JSON.stringify({id:e.id,ok:!1,error:"Desktop response exceeds its transport bound"})}
3
3
  `):process.stdout.write(`${t}
4
- `)}process.once("exit",()=>{for(let e of x.values())L(e.child,"SIGKILL")});process.on("uncaughtException",()=>{rt()});process.on("unhandledRejection",()=>{rt()});
4
+ `)}process.once("exit",()=>{for(let e of x.values())O(e.child,"SIGKILL")});process.on("uncaughtException",()=>{tt()});process.on("unhandledRejection",()=>{tt()});
@@ -228,6 +228,7 @@ private struct HostConfiguration: Decodable {
228
228
 
229
229
  private struct PermissionConfiguration: Decodable {
230
230
  let files: [String]
231
+ let network: [String]
231
232
  let environment: [String]
232
233
  let secrets: [String]
233
234
  }
@@ -646,6 +647,11 @@ private final class NodeCapabilityHost {
646
647
  while let newline = buffer.firstIndex(of: 0x0A) {
647
648
  let line = buffer.prefix(upTo: newline)
648
649
  buffer.removeSubrange(...newline)
650
+ // A line past this bound is a terminal host failure, so the worker
651
+ // keeps its own response line strictly below it: MAX_RESPONSE_BYTES
652
+ // is 64 MiB in packages/desktop/native/node/worker.js, and an
653
+ // oversized response is reported there as a per-request error. The
654
+ // two bounds must not drift back together.
649
655
  guard line.count <= 65 * 1024 * 1024,
650
656
  let value = try? JSONSerialization.jsonObject(with: line),
651
657
  let object = value as? [String: Any] else {
@@ -1068,10 +1074,25 @@ private final class DesktopBridge: NSObject, WKScriptMessageHandler {
1068
1074
  }
1069
1075
  }
1070
1076
 
1077
+ // Handing a renderer URL to the system browser is the same question
1078
+ // `desktop.permissions.network` already answers, so the granted origins govern
1079
+ // it: an origin that was never granted is cancelled rather than opened. The
1080
+ // match is exact on scheme, host and port, and mirrors
1081
+ // `desktopExternalNavigationPermitted` in packages/desktop/src/config.ts.
1082
+ private func navigationOrigin(_ url: URL) -> String? {
1083
+ guard url.scheme?.lowercased() == "https", let host = url.host?.lowercased(), !host.isEmpty else { return nil }
1084
+ if let port = url.port, port != 443 { return "https://\(host):\(port)" }
1085
+ return "https://\(host)"
1086
+ }
1087
+
1071
1088
  private final class NavigationPolicy: NSObject, WKNavigationDelegate {
1072
1089
  private weak var bridge: DesktopBridge?
1090
+ private let externalOrigins: Set<String>
1073
1091
 
1074
- init(bridge: DesktopBridge) { self.bridge = bridge }
1092
+ init(bridge: DesktopBridge, network: [String]) {
1093
+ self.bridge = bridge
1094
+ self.externalOrigins = Set(network.compactMap { URL(string: $0).flatMap(navigationOrigin) })
1095
+ }
1075
1096
 
1076
1097
  func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
1077
1098
  bridge?.retireDocument()
@@ -1081,7 +1102,7 @@ private final class NavigationPolicy: NSObject, WKNavigationDelegate {
1081
1102
  guard let url = action.request.url else { decisionHandler(.cancel); return }
1082
1103
  if url.scheme == "velar-app" && url.host == "app" {
1083
1104
  decisionHandler(.allow)
1084
- } else if url.scheme == "https" {
1105
+ } else if let origin = navigationOrigin(url), externalOrigins.contains(origin) {
1085
1106
  NSWorkspace.shared.open(url)
1086
1107
  decisionHandler(.cancel)
1087
1108
  } else {
@@ -1134,7 +1155,7 @@ private final class ApplicationDelegate: NSObject, NSApplicationDelegate {
1134
1155
  projectFilesGranted: projectFilesGranted,
1135
1156
  worker: nodeHost
1136
1157
  )
1137
- let navigationPolicy = NavigationPolicy(bridge: bridge)
1158
+ let navigationPolicy = NavigationPolicy(bridge: bridge, network: host.permissions.network)
1138
1159
  let webConfiguration = WKWebViewConfiguration()
1139
1160
  webConfiguration.setURLSchemeHandler(schemeHandler, forURLScheme: "velar-app")
1140
1161
  let projectDirectoryData = try JSONSerialization.data(withJSONObject: launchDirectory, options: [.fragmentsAllowed])
@@ -8,6 +8,11 @@ import { StringDecoder } from "node:string_decoder";
8
8
  const MAX_MESSAGE_BYTES = 128 * 1024 * 1024;
9
9
  const MAX_FILE_BYTES = 16 * 1024 * 1024;
10
10
  const MAX_LIST_TEXT_UNITS = 2 * 1024 * 1024;
11
+ // The native host reads one JSON line per response and refuses any line
12
+ // over 65 MiB terminally (packages/desktop/native/macos/VelarDesktopHost.swift
13
+ // `consume`). This bound is the worker's own line bound and must stay strictly
14
+ // below the host's, so an oversized response is a per-request error here
15
+ // instead of a fatal host failure there.
11
16
  const MAX_RESPONSE_BYTES = 64 * 1024 * 1024;
12
17
  const MAX_HTTP_CHUNKS = 1000000;
13
18
  const MAX_HTTP_REDIRECTS = 20;
@@ -811,6 +816,25 @@ function processHandle(value) {
811
816
  return value;
812
817
  }
813
818
 
819
+ // An executable grant is only as narrow as that executable's own environment
820
+ // surface: many granted programs take a command, an interpreter option, or a
821
+ // loader path from their environment, so those names are not caller data. The
822
+ // identical predicate is duplicated renderer-side as
823
+ // `__velarProcessReservedEnvironmentName` in packages/desktop/src/compiler.ts;
824
+ // the two must not drift. `PATH` keeps its own longer-standing message.
825
+ // The bare spellings matter as much as the prefixed ones: `git commit` runs
826
+ // `EDITOR`, `git log` runs `PAGER`, and `HOME` moves the whole configuration
827
+ // surface — including the `.gitconfig` whose own `core.editor` runs a command —
828
+ // into a directory the caller chooses. The base snapshot below owns HOME,
829
+ // SHELL and TMPDIR, so a caller cannot replace them either.
830
+ const RESERVED_ENVIRONMENT_NAMES = /^(?:PATH|HOME|USERPROFILE|SHELL|TMPDIR|IFS|ENV|BASH_ENV|SHELLOPTS|BASHOPTS|PS4|EDITOR|VISUAL|PAGER|MANPAGER|MANOPT|BROWSER|SSH_ASKPASS|SUDO_ASKPASS|NODE_OPTIONS|NODE_REPL_EXTERNAL_MODULE)$/iu;
831
+ const RESERVED_ENVIRONMENT_PREFIXES = /^(?:LD_|DYLD_|GIT_|XDG_|PYTHON|PERL|RUBY|LESS)/iu;
832
+ const RESERVED_ENVIRONMENT_SUFFIXES = /(?:_COMMAND|_EDITOR|_PAGER|_OPTS)$/iu;
833
+
834
+ function reservedEnvironmentName(name) {
835
+ return RESERVED_ENVIRONMENT_NAMES.test(name) || RESERVED_ENVIRONMENT_PREFIXES.test(name) || RESERVED_ENVIRONMENT_SUFFIXES.test(name);
836
+ }
837
+
814
838
  async function launchProcess(args, settled) {
815
839
  const [command, commandArgs = [], options = {}] = args;
816
840
  if (typeof command !== "string" || !allowedProcesses.has(command) || command !== basename(command)) throw new Error(`Process '${String(command)}' is not granted by desktop.permissions.processes`);
@@ -836,6 +860,7 @@ async function launchProcess(args, settled) {
836
860
  let environmentUnits = 0;
837
861
  for (const pair of options.env) {
838
862
  if (!Array.isArray(pair) || pair.length !== 2 || typeof pair[0] !== "string" || !/^[A-Za-z_][A-Za-z0-9_]*$/u.test(pair[0]) || pair[0] === "PATH" || typeof pair[1] !== "string" || pair[1].includes("\0")) throw new TypeError("Process env must contain valid string variables and cannot replace PATH");
863
+ if (reservedEnvironmentName(pair[0])) throw new TypeError(`Process env cannot set the transport- or interpreter-controlled variable '${pair[0]}'`);
839
864
  environmentUnits += pair[0].length + pair[1].length;
840
865
  if (environmentUnits > 1024 * 1024) throw new RangeError("Process env cannot exceed 1 MiB");
841
866
  environment[pair[0]] = pair[1];
@@ -1296,7 +1321,7 @@ function safeError(error) {
1296
1321
 
1297
1322
  function respond(value) {
1298
1323
  const line = JSON.stringify(value);
1299
- if (Buffer.byteLength(line, "utf8") > MAX_RESPONSE_BYTES + MAX_MESSAGE_BYTES) {
1324
+ if (Buffer.byteLength(line, "utf8") > MAX_RESPONSE_BYTES) {
1300
1325
  process.stdout.write(`${JSON.stringify({ id: value.id, ok: false, error: "Desktop response exceeds its transport bound" })}\n`);
1301
1326
  } else {
1302
1327
  process.stdout.write(`${line}\n`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velarscript/desktop",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "The optional single-project VelarScript Desktop application framework backed by Web, Node capabilities, and system WebViews.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -38,9 +38,9 @@
38
38
  }
39
39
  },
40
40
  "dependencies": {
41
- "@velarscript/compiler": "0.12.0",
42
- "@velarscript/node": "0.12.0",
43
- "@velarscript/web": "0.12.0"
41
+ "@velarscript/compiler": "0.13.0",
42
+ "@velarscript/node": "0.13.0",
43
+ "@velarscript/web": "0.13.0"
44
44
  },
45
45
  "exports": {
46
46
  ".": {