claude-use 5.1.0 → 5.2.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.
package/dist/index.cjs CHANGED
@@ -1828,12 +1828,283 @@ function recoveryDiagnostics(recovery, identity) {
1828
1828
  }
1829
1829
 
1830
1830
  // src/frontdoor/connect.ts
1831
+ var import_node_crypto3 = require("node:crypto");
1831
1832
  var fs = __toESM(require("node:fs"), 1);
1832
1833
  var http = __toESM(require("node:http"), 1);
1833
1834
  var https = __toESM(require("node:https"), 1);
1834
- var net = __toESM(require("node:net"), 1);
1835
+ var net2 = __toESM(require("node:net"), 1);
1835
1836
  var tls = __toESM(require("node:tls"), 1);
1836
- var import_node_forge = __toESM(require("node-forge"), 1);
1837
+
1838
+ // src/frontdoor/x509.ts
1839
+ var import_node_crypto2 = require("node:crypto");
1840
+ var import_node_net = __toESM(require("node:net"), 1);
1841
+ var TAG_BOOLEAN = 1;
1842
+ var TAG_INTEGER = 2;
1843
+ var TAG_BIT_STRING = 3;
1844
+ var TAG_OCTET_STRING = 4;
1845
+ var TAG_NULL = 5;
1846
+ var TAG_OID = 6;
1847
+ var TAG_UTF8_STRING = 12;
1848
+ var TAG_UTC_TIME = 23;
1849
+ var TAG_GENERALIZED_TIME = 24;
1850
+ var TAG_SEQUENCE = 48;
1851
+ var TAG_SET = 49;
1852
+ var TAG_VERSION = 160;
1853
+ var TAG_EXTENSIONS = 163;
1854
+ var TAG_GENERAL_NAME_DNS = 130;
1855
+ var TAG_GENERAL_NAME_IP = 135;
1856
+ var TAG_KEY_IDENTIFIER = 128;
1857
+ var OID_COMMON_NAME = "2.5.4.3";
1858
+ var OID_SHA256_WITH_RSA = "1.2.840.113549.1.1.11";
1859
+ var OID_SUBJECT_KEY_IDENTIFIER = "2.5.29.14";
1860
+ var OID_KEY_USAGE = "2.5.29.15";
1861
+ var OID_SUBJECT_ALT_NAME = "2.5.29.17";
1862
+ var OID_BASIC_CONSTRAINTS = "2.5.29.19";
1863
+ var OID_AUTHORITY_KEY_IDENTIFIER = "2.5.29.35";
1864
+ var OID_EXT_KEY_USAGE = "2.5.29.37";
1865
+ var OID_SERVER_AUTH = "1.3.6.1.5.5.7.3.1";
1866
+ var VERSION_3 = 2;
1867
+ var SERIAL_NUMBER_BYTES = 16;
1868
+ var RSA_MODULUS_BITS = 2048;
1869
+ var BITS_PER_BYTE = 8;
1870
+ var BYTE_MASK = 255;
1871
+ var HIGH_BIT = 128;
1872
+ var BASE_128_PAYLOAD_MASK = 127;
1873
+ var FIRST_ARC_WEIGHT = 40;
1874
+ var SHORT_FORM_MAX_LENGTH = 127;
1875
+ var MS_PER_SECOND = 1e3;
1876
+ var UTC_TIME_LAST_YEAR = 2049;
1877
+ var YEAR_DIGITS = 4;
1878
+ var TWO_DIGIT_YEAR_DIGITS = 2;
1879
+ var COMPACT_TIME_DIGITS = 14;
1880
+ var KEY_USAGE = { digitalSignature: 0, keyEncipherment: 2, keyCertSign: 5, cRLSign: 6 };
1881
+ function tlv(tag, content) {
1882
+ const length = content.length;
1883
+ if (length <= SHORT_FORM_MAX_LENGTH) {
1884
+ return Buffer.concat([Buffer.from([tag, length]), content]);
1885
+ }
1886
+ const lengthBytes = [];
1887
+ for (let remaining = length; remaining > 0; remaining = Math.floor(remaining / (BYTE_MASK + 1))) {
1888
+ lengthBytes.unshift(remaining & BYTE_MASK);
1889
+ }
1890
+ return Buffer.concat([Buffer.from([tag, HIGH_BIT | lengthBytes.length, ...lengthBytes]), content]);
1891
+ }
1892
+ function sequence(...parts) {
1893
+ return tlv(TAG_SEQUENCE, Buffer.concat(parts));
1894
+ }
1895
+ function unsignedInteger(magnitude) {
1896
+ let start = 0;
1897
+ while (start < magnitude.length - 1 && magnitude[start] === 0) {
1898
+ start += 1;
1899
+ }
1900
+ const trimmed = magnitude.subarray(start);
1901
+ const first = trimmed[0];
1902
+ const padded = first !== void 0 && (first & HIGH_BIT) !== 0 ? Buffer.concat([Buffer.from([0]), trimmed]) : Buffer.from(trimmed);
1903
+ return tlv(TAG_INTEGER, padded);
1904
+ }
1905
+ function smallInteger(value) {
1906
+ return unsignedInteger(Buffer.from([value]));
1907
+ }
1908
+ function oid(dotted) {
1909
+ const arcs = dotted.split(".").map(Number);
1910
+ const [first, second, ...rest] = arcs;
1911
+ if (first === void 0 || second === void 0 || arcs.some((arc) => !Number.isInteger(arc) || arc < 0)) {
1912
+ throw new Error(`invalid object identifier ${dotted}`);
1913
+ }
1914
+ const encoded = [];
1915
+ for (const arc of [first * FIRST_ARC_WEIGHT + second, ...rest]) {
1916
+ const groups = [arc & BASE_128_PAYLOAD_MASK];
1917
+ for (let remaining = Math.floor(arc / HIGH_BIT); remaining > 0; remaining = Math.floor(remaining / HIGH_BIT)) {
1918
+ groups.unshift(remaining & BASE_128_PAYLOAD_MASK | HIGH_BIT);
1919
+ }
1920
+ encoded.push(...groups);
1921
+ }
1922
+ return tlv(TAG_OID, Buffer.from(encoded));
1923
+ }
1924
+ function boolean(value) {
1925
+ return tlv(TAG_BOOLEAN, Buffer.from([value ? BYTE_MASK : 0]));
1926
+ }
1927
+ function octetString(content) {
1928
+ return tlv(TAG_OCTET_STRING, content);
1929
+ }
1930
+ function wholeBitString(content) {
1931
+ return tlv(TAG_BIT_STRING, Buffer.concat([Buffer.from([0]), content]));
1932
+ }
1933
+ function time(instant) {
1934
+ const iso = new Date(Math.floor(instant.getTime() / MS_PER_SECOND) * MS_PER_SECOND).toISOString();
1935
+ const compact = `${iso.replace(/[-:T]/g, "").slice(0, COMPACT_TIME_DIGITS)}Z`;
1936
+ if (instant.getUTCFullYear() > UTC_TIME_LAST_YEAR) {
1937
+ return tlv(TAG_GENERALIZED_TIME, Buffer.from(compact, "ascii"));
1938
+ }
1939
+ return tlv(TAG_UTC_TIME, Buffer.from(compact.slice(YEAR_DIGITS - TWO_DIGIT_YEAR_DIGITS), "ascii"));
1940
+ }
1941
+ function commonNameOnly(commonName) {
1942
+ return sequence(tlv(TAG_SET, sequence(oid(OID_COMMON_NAME), tlv(TAG_UTF8_STRING, Buffer.from(commonName, "utf8")))));
1943
+ }
1944
+ var SIGNATURE_ALGORITHM = sequence(oid(OID_SHA256_WITH_RSA), tlv(TAG_NULL, Buffer.alloc(0)));
1945
+ function extension(extensionOid, critical, value) {
1946
+ return sequence(oid(extensionOid), ...critical ? [boolean(true)] : [], octetString(value));
1947
+ }
1948
+ function keyUsageExtension(bits) {
1949
+ const highest = Math.max(...bits);
1950
+ const byteCount = Math.floor(highest / BITS_PER_BYTE) + 1;
1951
+ const bytes = Buffer.alloc(byteCount);
1952
+ for (const bit of bits) {
1953
+ const index = Math.floor(bit / BITS_PER_BYTE);
1954
+ bytes[index] = (bytes[index] ?? 0) | HIGH_BIT >> bit % BITS_PER_BYTE;
1955
+ }
1956
+ const unusedBits = BITS_PER_BYTE - 1 - highest % BITS_PER_BYTE;
1957
+ return extension(OID_KEY_USAGE, true, tlv(TAG_BIT_STRING, Buffer.concat([Buffer.from([unusedBits]), bytes])));
1958
+ }
1959
+ var IPV6_GROUPS = 8;
1960
+ var HEX_RADIX = 16;
1961
+ var BYTES_PER_IPV6_GROUP = 2;
1962
+ function ipv6Groups(address) {
1963
+ const [head = "", tail] = address.split("::");
1964
+ const split = (text) => text === "" ? [] : text.split(":");
1965
+ const expand = (groups) => groups.flatMap((group) => {
1966
+ if (!import_node_net.default.isIPv4(group)) {
1967
+ return [Number.parseInt(group, HEX_RADIX)];
1968
+ }
1969
+ const [a = 0, b = 0, c = 0, d = 0] = group.split(".").map(Number);
1970
+ return [a * (BYTE_MASK + 1) + b, c * (BYTE_MASK + 1) + d];
1971
+ });
1972
+ const before = expand(split(head));
1973
+ const after = tail === void 0 ? [] : expand(split(tail));
1974
+ const filler = tail === void 0 ? [] : Array.from({ length: IPV6_GROUPS - before.length - after.length }, () => 0);
1975
+ return [...before, ...filler, ...after];
1976
+ }
1977
+ function ipBytes(address) {
1978
+ if (import_node_net.default.isIPv4(address)) {
1979
+ return Buffer.from(address.split(".").map(Number));
1980
+ }
1981
+ if (!import_node_net.default.isIPv6(address)) {
1982
+ throw new Error(`${address} is not an IP address`);
1983
+ }
1984
+ const bytes = Buffer.alloc(IPV6_GROUPS * BYTES_PER_IPV6_GROUP);
1985
+ ipv6Groups(address).forEach((group, index) => {
1986
+ bytes.writeUInt16BE(group, index * BYTES_PER_IPV6_GROUP);
1987
+ });
1988
+ return bytes;
1989
+ }
1990
+ function keyIdentifier(publicKey) {
1991
+ return (0, import_node_crypto2.createHash)("sha1").update(publicKey.export({ type: "pkcs1", format: "der" })).digest();
1992
+ }
1993
+ function readElement(buffer, offset) {
1994
+ const tag = buffer[offset];
1995
+ const first = buffer[offset + 1];
1996
+ if (tag === void 0 || first === void 0) {
1997
+ throw new Error("truncated DER");
1998
+ }
1999
+ let length = first;
2000
+ let contentStart = offset + 2;
2001
+ if ((first & HIGH_BIT) !== 0) {
2002
+ const count = first & BASE_128_PAYLOAD_MASK;
2003
+ length = 0;
2004
+ for (let index = 0; index < count; index += 1) {
2005
+ length = length * (BYTE_MASK + 1) + (buffer[offset + 2 + index] ?? 0);
2006
+ }
2007
+ contentStart = offset + 2 + count;
2008
+ }
2009
+ return { tag, start: offset, contentStart, end: contentStart + length };
2010
+ }
2011
+ function subjectNameOf(certificateDer) {
2012
+ const certificate = readElement(certificateDer, 0);
2013
+ let cursor = readElement(certificateDer, certificate.contentStart);
2014
+ const tbsEnd = cursor.end;
2015
+ cursor = readElement(certificateDer, cursor.contentStart);
2016
+ if (cursor.tag === TAG_VERSION) {
2017
+ cursor = readElement(certificateDer, cursor.end);
2018
+ }
2019
+ const fieldsBeforeSubject = 4;
2020
+ for (let skipped = 1; skipped < fieldsBeforeSubject; skipped += 1) {
2021
+ cursor = readElement(certificateDer, cursor.end);
2022
+ }
2023
+ const subject = readElement(certificateDer, cursor.end);
2024
+ if (subject.end > tbsEnd) {
2025
+ throw new Error("certificate has no subject");
2026
+ }
2027
+ return Buffer.from(certificateDer.subarray(subject.start, subject.end));
2028
+ }
2029
+ function toPem(label, der) {
2030
+ const body = Buffer.from(der).toString("base64").match(/.{1,64}/g) ?? [];
2031
+ return `-----BEGIN ${label}-----
2032
+ ${body.join("\n")}
2033
+ -----END ${label}-----
2034
+ `;
2035
+ }
2036
+ function randomSerial() {
2037
+ const bytes = (0, import_node_crypto2.randomBytes)(SERIAL_NUMBER_BYTES);
2038
+ bytes[0] = (bytes[0] ?? 0) & BASE_128_PAYLOAD_MASK | HIGH_BIT >> 1;
2039
+ return bytes;
2040
+ }
2041
+ function assemble(spec) {
2042
+ const tbs = sequence(
2043
+ tlv(TAG_VERSION, smallInteger(VERSION_3)),
2044
+ unsignedInteger(randomSerial()),
2045
+ SIGNATURE_ALGORITHM,
2046
+ spec.issuerName,
2047
+ sequence(time(spec.notBefore), time(spec.notAfter)),
2048
+ spec.subjectName,
2049
+ spec.subjectPublicKey.export({ type: "spki", format: "der" }),
2050
+ tlv(TAG_EXTENSIONS, sequence(...spec.extensions))
2051
+ );
2052
+ const signature = (0, import_node_crypto2.sign)("sha256", tbs, spec.signingKey);
2053
+ return sequence(tbs, SIGNATURE_ALGORITHM, wholeBitString(signature));
2054
+ }
2055
+ function subjectKeyIdentifierExtension(publicKey) {
2056
+ return extension(OID_SUBJECT_KEY_IDENTIFIER, false, octetString(keyIdentifier(publicKey)));
2057
+ }
2058
+ function basicConstraintsExtension(isCa) {
2059
+ return extension(OID_BASIC_CONSTRAINTS, true, sequence(...isCa ? [boolean(true)] : []));
2060
+ }
2061
+ function rsaKeyPair() {
2062
+ return (0, import_node_crypto2.generateKeyPairSync)("rsa", { modulusLength: RSA_MODULUS_BITS });
2063
+ }
2064
+ function keyPem(privateKey) {
2065
+ return privateKey.export({ type: "pkcs8", format: "pem" });
2066
+ }
2067
+ function issueCaCertificate(commonName, notBefore, notAfter) {
2068
+ const { publicKey, privateKey } = rsaKeyPair();
2069
+ const name = commonNameOnly(commonName);
2070
+ const der = assemble({
2071
+ subjectPublicKey: publicKey,
2072
+ subjectName: name,
2073
+ issuerName: name,
2074
+ signingKey: privateKey,
2075
+ notBefore,
2076
+ notAfter,
2077
+ extensions: [basicConstraintsExtension(true), keyUsageExtension([KEY_USAGE.keyCertSign, KEY_USAGE.cRLSign]), subjectKeyIdentifierExtension(publicKey)]
2078
+ });
2079
+ return { certPem: toPem("CERTIFICATE", der), keyPem: keyPem(privateKey) };
2080
+ }
2081
+ function issueLeafCertificate(ca, names, notBefore, notAfter) {
2082
+ const [commonName] = names;
2083
+ if (commonName === void 0) {
2084
+ throw new Error("a leaf certificate needs at least one name");
2085
+ }
2086
+ const caCertificate = new import_node_crypto2.X509Certificate(ca.certPem);
2087
+ const caPrivateKey = (0, import_node_crypto2.createPrivateKey)(ca.keyPem);
2088
+ const { publicKey, privateKey } = rsaKeyPair();
2089
+ const generalNames = names.map((name) => import_node_net.default.isIP(name) === 0 ? tlv(TAG_GENERAL_NAME_DNS, Buffer.from(name, "ascii")) : tlv(TAG_GENERAL_NAME_IP, ipBytes(name)));
2090
+ const der = assemble({
2091
+ subjectPublicKey: publicKey,
2092
+ subjectName: commonNameOnly(commonName),
2093
+ issuerName: subjectNameOf(caCertificate.raw),
2094
+ signingKey: caPrivateKey,
2095
+ notBefore,
2096
+ notAfter,
2097
+ extensions: [
2098
+ basicConstraintsExtension(false),
2099
+ keyUsageExtension([KEY_USAGE.digitalSignature, KEY_USAGE.keyEncipherment]),
2100
+ extension(OID_EXT_KEY_USAGE, false, sequence(oid(OID_SERVER_AUTH))),
2101
+ extension(OID_SUBJECT_ALT_NAME, false, sequence(...generalNames)),
2102
+ subjectKeyIdentifierExtension(publicKey),
2103
+ extension(OID_AUTHORITY_KEY_IDENTIFIER, false, sequence(tlv(TAG_KEY_IDENTIFIER, keyIdentifier(caCertificate.publicKey))))
2104
+ ]
2105
+ });
2106
+ return { certPem: toPem("CERTIFICATE", der), keyPem: keyPem(privateKey) };
2107
+ }
1837
2108
 
1838
2109
  // src/frontdoor/capability.ts
1839
2110
  var CONNECT_PROXY_REALM = "claude-use front door";
@@ -2036,7 +2307,6 @@ var CONNECT_INTERCEPT_HOST = "api.anthropic.com";
2036
2307
  var ROUTED_PATH_PREFIX = "/v1/";
2037
2308
  var HTTPS_PORT = 443;
2038
2309
  var MAX_PORT = 65535;
2039
- var SERIAL_NUMBER_BYTES = 16;
2040
2310
  var HTTP_BAD_GATEWAY = 502;
2041
2311
  var CA_KEY_FILE_MODE = 384;
2042
2312
  var CONNECT_LINE_TOKENS = 3;
@@ -2108,50 +2378,10 @@ function forwardableHeaders(headers) {
2108
2378
  return result;
2109
2379
  }
2110
2380
  function generateCa(now) {
2111
- const keys = import_node_forge.default.pki.rsa.generateKeyPair({ bits: 2048 });
2112
- const cert = import_node_forge.default.pki.createCertificate();
2113
- cert.publicKey = keys.publicKey;
2114
- cert.serialNumber = import_node_forge.default.util.bytesToHex(import_node_forge.default.random.getBytesSync(SERIAL_NUMBER_BYTES));
2115
- cert.validity.notBefore = new Date(now.getTime() - MS_PER_DAY);
2116
- cert.validity.notAfter = new Date(now.getTime() + CA_VALIDITY_DAYS * MS_PER_DAY);
2117
- const subject = [{ name: "commonName", value: CA_SUBJECT_COMMON_NAME }];
2118
- cert.setSubject(subject);
2119
- cert.setIssuer(subject);
2120
- cert.setExtensions([
2121
- { name: "basicConstraints", cA: true, critical: true },
2122
- { name: "keyUsage", keyCertSign: true, cRLSign: true, critical: true },
2123
- { name: "subjectKeyIdentifier" }
2124
- ]);
2125
- cert.sign(keys.privateKey, import_node_forge.default.md.sha256.create());
2126
- return { certPem: import_node_forge.default.pki.certificateToPem(cert), keyPem: import_node_forge.default.pki.privateKeyToPem(keys.privateKey) };
2127
- }
2128
- var SAN_TYPE_DNS = 2;
2129
- var SAN_TYPE_IP = 7;
2381
+ return issueCaCertificate(CA_SUBJECT_COMMON_NAME, new Date(now.getTime() - MS_PER_DAY), new Date(now.getTime() + CA_VALIDITY_DAYS * MS_PER_DAY));
2382
+ }
2130
2383
  function mintLeaf(ca, names, now) {
2131
- const [commonName] = names;
2132
- if (commonName === void 0) {
2133
- throw new Error("a leaf certificate needs at least one name");
2134
- }
2135
- const caCert = import_node_forge.default.pki.certificateFromPem(ca.certPem);
2136
- const caKey = import_node_forge.default.pki.privateKeyFromPem(ca.keyPem);
2137
- const keys = import_node_forge.default.pki.rsa.generateKeyPair({ bits: 2048 });
2138
- const cert = import_node_forge.default.pki.createCertificate();
2139
- cert.publicKey = keys.publicKey;
2140
- cert.serialNumber = import_node_forge.default.util.bytesToHex(import_node_forge.default.random.getBytesSync(SERIAL_NUMBER_BYTES));
2141
- cert.validity.notBefore = new Date(now.getTime() - MS_PER_DAY);
2142
- cert.validity.notAfter = new Date(now.getTime() + LEAF_VALIDITY_DAYS * MS_PER_DAY);
2143
- cert.setSubject([{ name: "commonName", value: commonName }]);
2144
- cert.setIssuer(caCert.subject.attributes);
2145
- cert.setExtensions([
2146
- { name: "basicConstraints", cA: false, critical: true },
2147
- { name: "keyUsage", digitalSignature: true, keyEncipherment: true, critical: true },
2148
- { name: "extKeyUsage", serverAuth: true },
2149
- { name: "subjectAltName", altNames: names.map((name) => net.isIP(name) === 0 ? { type: SAN_TYPE_DNS, value: name } : { type: SAN_TYPE_IP, ip: name }) },
2150
- { name: "subjectKeyIdentifier" },
2151
- { name: "authorityKeyIdentifier", keyLocatorFields: [] }
2152
- ]);
2153
- cert.sign(caKey, import_node_forge.default.md.sha256.create());
2154
- return { certPem: import_node_forge.default.pki.certificateToPem(cert), keyPem: import_node_forge.default.pki.privateKeyToPem(keys.privateKey) };
2384
+ return issueLeafCertificate(ca, names, new Date(now.getTime() - MS_PER_DAY), new Date(now.getTime() + LEAF_VALIDITY_DAYS * MS_PER_DAY));
2155
2385
  }
2156
2386
  function createLeafCache(ca, now) {
2157
2387
  const cache = /* @__PURE__ */ new Map();
@@ -2176,8 +2406,8 @@ function ensureCa(store, generate) {
2176
2406
  }
2177
2407
  function caParses(ca) {
2178
2408
  try {
2179
- import_node_forge.default.pki.certificateFromPem(ca.certPem);
2180
- import_node_forge.default.pki.privateKeyFromPem(ca.keyPem);
2409
+ new import_node_crypto3.X509Certificate(ca.certPem);
2410
+ (0, import_node_crypto3.createPrivateKey)(ca.keyPem);
2181
2411
  return true;
2182
2412
  } catch {
2183
2413
  return false;
@@ -2383,7 +2613,7 @@ function realConnectEffects() {
2383
2613
  const tlsAgent = new https.Agent({ keepAlive: true });
2384
2614
  const listenOnce = async (port, onSocket) => await new Promise((resolve, reject) => {
2385
2615
  const accepted = /* @__PURE__ */ new Set();
2386
- const server = net.createServer((socket) => {
2616
+ const server = net2.createServer((socket) => {
2387
2617
  accepted.add(socket);
2388
2618
  socket.on("close", () => {
2389
2619
  accepted.delete(socket);
@@ -2456,7 +2686,7 @@ function realConnectEffects() {
2456
2686
  };
2457
2687
  },
2458
2688
  connectTcp: async (host, port) => await new Promise((resolve, reject) => {
2459
- const socket = net.connect({ host, port });
2689
+ const socket = net2.connect({ host, port });
2460
2690
  socket.once("connect", () => {
2461
2691
  resolve(socket);
2462
2692
  });
@@ -2521,8 +2751,8 @@ function realConnectCertStore(paths) {
2521
2751
  return {
2522
2752
  loadCa: () => {
2523
2753
  const certPem = read(paths.frontdoorCaCertFile);
2524
- const keyPem = read(paths.frontdoorCaKeyFile);
2525
- return certPem === void 0 || keyPem === void 0 ? void 0 : { certPem, keyPem };
2754
+ const keyPem2 = read(paths.frontdoorCaKeyFile);
2755
+ return certPem === void 0 || keyPem2 === void 0 ? void 0 : { certPem, keyPem: keyPem2 };
2526
2756
  },
2527
2757
  writeCa: (ca) => {
2528
2758
  fs.mkdirSync(paths.frontdoorCaDir, { recursive: true });
@@ -2534,10 +2764,10 @@ function realConnectCertStore(paths) {
2534
2764
  }
2535
2765
 
2536
2766
  // src/frontdoor/ensure.ts
2537
- var import_node_crypto3 = require("node:crypto");
2767
+ var import_node_crypto5 = require("node:crypto");
2538
2768
 
2539
2769
  // src/headroom/state.ts
2540
- var import_node_crypto2 = require("node:crypto");
2770
+ var import_node_crypto4 = require("node:crypto");
2541
2771
  var import_node_path6 = __toESM(require("node:path"), 1);
2542
2772
  var import_zod4 = require("zod");
2543
2773
  var HEADROOM_ANTHROPIC_UPSTREAM = "https://api.anthropic.com";
@@ -2599,7 +2829,7 @@ function headroomUpstreams(providers, frontDoorOrigin2) {
2599
2829
  return upstreams;
2600
2830
  }
2601
2831
  function hashAllowlist(allowlist) {
2602
- return (0, import_node_crypto2.createHash)("sha256").update(allowlist.join("\n")).digest("hex");
2832
+ return (0, import_node_crypto4.createHash)("sha256").update(allowlist.join("\n")).digest("hex");
2603
2833
  }
2604
2834
  function readAllProviders(fs2, providersDir) {
2605
2835
  const result = [];
@@ -2683,7 +2913,7 @@ function ensureFrontDoor(params) {
2683
2913
  if (state?.port !== void 0 && state.connectPort !== void 0) {
2684
2914
  const verdict = ports.verifyListener(state.port);
2685
2915
  if (verdict.ok) {
2686
- const token = (0, import_node_crypto3.randomUUID)();
2916
+ const token = (0, import_node_crypto5.randomUUID)();
2687
2917
  writeFrontDoorSession(ports.fs, paths.frontdoorSessionsDir, { pid: params.launcherPid, startedAt: ports.now(), token });
2688
2918
  return { port: state.port, connectPort: state.connectPort, token };
2689
2919
  }
@@ -2777,7 +3007,7 @@ function ensureHeadroom(params) {
2777
3007
  }
2778
3008
 
2779
3009
  // src/headroom/settings.ts
2780
- var import_node_crypto4 = require("node:crypto");
3010
+ var import_node_crypto6 = require("node:crypto");
2781
3011
  function settingsOf(config) {
2782
3012
  return {
2783
3013
  ...config.mode === void 0 ? {} : { mode: config.mode },
@@ -2802,7 +3032,7 @@ function settingsEnv(settings) {
2802
3032
  return settings.rolloutChannel === void 0 ? {} : { HEADROOM_ROLLOUT_CHANNEL: settings.rolloutChannel };
2803
3033
  }
2804
3034
  function hashSettings(settings) {
2805
- return (0, import_node_crypto4.createHash)("sha256").update(JSON.stringify([...settingsArgs(settings), JSON.stringify(settingsEnv(settings))])).digest("hex");
3035
+ return (0, import_node_crypto6.createHash)("sha256").update(JSON.stringify([...settingsArgs(settings), JSON.stringify(settingsEnv(settings))])).digest("hex");
2806
3036
  }
2807
3037
 
2808
3038
  // src/headroom/supervisor.ts