@trillboards/edge-sdk 0.2.20 → 0.2.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/deploy/macos/scripts/setup-litertlm.sh +30 -0
  2. package/deploy/windows/e2e/test-enterprise-trust-store.ps1 +341 -0
  3. package/deploy/windows/setup-litertlm.ps1 +49 -1
  4. package/dist/AudienceAnalyzeClient.d.ts +32 -1
  5. package/dist/AudienceAnalyzeClient.d.ts.map +1 -1
  6. package/dist/AudienceAnalyzeClient.js +34 -5
  7. package/dist/AudienceAnalyzeClient.js.map +1 -1
  8. package/dist/CloudSensingManager.d.ts +40 -0
  9. package/dist/CloudSensingManager.d.ts.map +1 -1
  10. package/dist/CloudSensingManager.js +117 -1
  11. package/dist/CloudSensingManager.js.map +1 -1
  12. package/dist/EdgeAgent.js +1 -1
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +60 -0
  15. package/dist/cli.js.map +1 -1
  16. package/dist/diagnose.d.ts +37 -4
  17. package/dist/diagnose.d.ts.map +1 -1
  18. package/dist/diagnose.js +155 -6
  19. package/dist/diagnose.js.map +1 -1
  20. package/dist/enterpriseNetwork.d.ts +130 -0
  21. package/dist/enterpriseNetwork.d.ts.map +1 -0
  22. package/dist/enterpriseNetwork.js +568 -0
  23. package/dist/enterpriseNetwork.js.map +1 -0
  24. package/dist/enterpriseProxy.d.ts +73 -0
  25. package/dist/enterpriseProxy.d.ts.map +1 -0
  26. package/dist/enterpriseProxy.js +406 -0
  27. package/dist/enterpriseProxy.js.map +1 -0
  28. package/dist/enterpriseTrust.d.ts +188 -0
  29. package/dist/enterpriseTrust.d.ts.map +1 -0
  30. package/dist/enterpriseTrust.js +615 -0
  31. package/dist/enterpriseTrust.js.map +1 -0
  32. package/dist/index.d.ts +10 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +29 -1
  35. package/dist/index.js.map +1 -1
  36. package/dist/localNetworkAccess.d.ts +166 -0
  37. package/dist/localNetworkAccess.d.ts.map +1 -0
  38. package/dist/localNetworkAccess.js +490 -0
  39. package/dist/localNetworkAccess.js.map +1 -0
  40. package/dist/sensingRunMode.d.ts +36 -0
  41. package/dist/sensingRunMode.d.ts.map +1 -1
  42. package/dist/sensingRunMode.js +78 -1
  43. package/dist/sensingRunMode.js.map +1 -1
  44. package/dist/transportFailure.d.ts +118 -0
  45. package/dist/transportFailure.d.ts.map +1 -0
  46. package/dist/transportFailure.js +267 -0
  47. package/dist/transportFailure.js.map +1 -0
  48. package/package.json +1 -1
@@ -0,0 +1,615 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TRUST_CACHE_TTL_MS = void 0;
37
+ exports.extractPemBlocks = extractPemBlocks;
38
+ exports.readWindowsTrustAnchors = readWindowsTrustAnchors;
39
+ exports.parseDeniedTrustSubjects = parseDeniedTrustSubjects;
40
+ exports.readMacTrustAnchors = readMacTrustAnchors;
41
+ exports.readLinuxTrustAnchors = readLinuxTrustAnchors;
42
+ exports.readNodeExtraCaCerts = readNodeExtraCaCerts;
43
+ exports.readPlatformTrustAnchors = readPlatformTrustAnchors;
44
+ exports.resolveTrustAnchors = resolveTrustAnchors;
45
+ exports.invalidateTrustAnchorCache = invalidateTrustAnchorCache;
46
+ exports.peekTrustAnchorCache = peekTrustAnchorCache;
47
+ exports.buildCaBundle = buildCaBundle;
48
+ exports.describeTrustAnchors = describeTrustAnchors;
49
+ exports.trustStoreInstallHint = trustStoreInstallHint;
50
+ const fs = __importStar(require("fs"));
51
+ const os = __importStar(require("os"));
52
+ const path = __importStar(require("path"));
53
+ const tls = __importStar(require("tls"));
54
+ const child_process_1 = require("child_process");
55
+ /**
56
+ * enterpriseTrust — read the MACHINE's trust decision, and add it to ours.
57
+ *
58
+ * WHY THIS EXISTS
59
+ * ---------------
60
+ * Retail and restaurant chains run TLS-inspecting proxies: every outbound
61
+ * HTTPS connection is terminated by an appliance which re-signs it with a
62
+ * private enterprise root. That root is installed on the machine, so every
63
+ * browser on it works. Node does NOT read the platform trust store — it ships
64
+ * its own Mozilla-derived list and consults nothing else — so the connector was
65
+ * the one thing on the machine that could not talk to us.
66
+ *
67
+ * The failure had the worst possible shape. On a fresh install `uv` died first
68
+ * and the installer aborted blaming local AI; on the REPAIR path (where uv and
69
+ * litert-lm are already present, `setup-litertlm.ps1`'s `Test-LitertLmCli`
70
+ * short-circuit) the install COMPLETED and the connector then silently could
71
+ * not reach the API — a background process, no window, on a machine the
72
+ * customer believes is working.
73
+ *
74
+ * WHAT THIS IS NOT
75
+ * ----------------
76
+ * It is not a way to skip verification. There is no `rejectUnauthorized:false`
77
+ * here or anywhere in this tree and there must never be one — a connector that
78
+ * accepts any certificate is strictly worse than one that cannot connect,
79
+ * because it fails silently and in the customer's favour-looking direction.
80
+ * What we do is ADD the roots the machine's owner has already chosen to trust.
81
+ * Node's bundled list is always kept as the base (see `buildCaBundle`), so this
82
+ * can only ever widen trust to what this machine already trusts, never narrow
83
+ * it and never bypass it.
84
+ *
85
+ * RUNTIME RESOLUTION, NOT AN INSTALL-TIME EXPORT
86
+ * ----------------------------------------------
87
+ * The other design on the table was to export the machine roots to a .pem at
88
+ * install time and point `NODE_EXTRA_CA_CERTS` at it from the launcher. That is
89
+ * cheaper and it is wrong, for a reason specific to this product:
90
+ *
91
+ * - The normal order of operations is domain-join, then install, then IT
92
+ * ROTATES the inspection root (annually, or the day the appliance is
93
+ * replaced). An exported bundle is a snapshot: at the next rotation the
94
+ * connector breaks again with the exact same silent symptom.
95
+ * - Nothing would re-export it. There is no auto-update on Windows
96
+ * (cctv-connector-windows-gtm-readiness.md §5 — `install-update.ps1` is the
97
+ * installer's own in-place upgrade path and nothing polls), so a stale
98
+ * bundle would sit on the machine until the customer manually re-downloaded
99
+ * 2.6 GB.
100
+ * - `NODE_EXTRA_CA_CERTS` is read ONCE at process start, so even a correct
101
+ * file cannot be picked up without a restart.
102
+ *
103
+ * So we read the store at runtime, cache it for `TRUST_CACHE_TTL_MS`, and
104
+ * invalidate eagerly the moment a certificate-verification failure is
105
+ * classified (`invalidateTrustAnchorCache`, called from the transport). A root
106
+ * installed by IT while the connector is running is therefore picked up on the
107
+ * next cadence tick without a restart, which is the behaviour an operator on
108
+ * the phone with IT actually needs.
109
+ *
110
+ * `NODE_EXTRA_CA_CERTS` is still honoured — see `readNodeExtraCaCerts`. That
111
+ * matters more than it looks: passing `ca:` to a request REPLACES Node's
112
+ * resolved CA set, which silently disables `NODE_EXTRA_CA_CERTS` for that
113
+ * request. An admin who had already worked around this bug with that variable
114
+ * would have had their workaround broken by the fix. We read it ourselves.
115
+ */
116
+ /** How long a trust-store read is reused before being taken again. */
117
+ exports.TRUST_CACHE_TTL_MS = 30 * 60 * 1000;
118
+ /** Hard ceiling on the bytes we accept from a store reader, per source. */
119
+ const MAX_STORE_BYTES = 8 * 1024 * 1024;
120
+ /** Wall-clock budget for a store-reading subprocess. */
121
+ const STORE_READ_TIMEOUT_MS = 15000;
122
+ const PEM_BLOCK_RE = /-----BEGIN CERTIFICATE-----[\s\S]*?-----END CERTIFICATE-----/g;
123
+ function defaultExec(cmd, args) {
124
+ return (0, child_process_1.spawnSync)(cmd, args, {
125
+ encoding: 'utf-8',
126
+ timeout: STORE_READ_TIMEOUT_MS,
127
+ maxBuffer: MAX_STORE_BYTES,
128
+ windowsHide: true,
129
+ });
130
+ }
131
+ function defaultReadFile(p) {
132
+ return fs.readFileSync(p, 'utf-8');
133
+ }
134
+ /**
135
+ * Pull the PEM blocks out of arbitrary text.
136
+ *
137
+ * Deliberately a scan and not a parse: `security find-certificate -p` and
138
+ * `/etc/ssl/certs/ca-certificates.crt` both interleave human-readable headers
139
+ * between blocks, and OpenSSL is happy to be handed the blocks alone.
140
+ */
141
+ function extractPemBlocks(text) {
142
+ if (!text)
143
+ return [];
144
+ const matches = text.match(PEM_BLOCK_RE);
145
+ if (!matches)
146
+ return [];
147
+ // Normalise line endings so the same certificate read through PowerShell
148
+ // (CRLF) and through a file (LF) dedupes against itself.
149
+ return matches.map((m) => m.replace(/\r\n/g, '\n').trim());
150
+ }
151
+ /**
152
+ * Windows: read the two stores an enterprise inspection root is deployed into.
153
+ *
154
+ * `LocalMachine\Root` is where a GPO-pushed "Trusted Root Certification
155
+ * Authorities" entry lands; `CurrentUser\Root` is where a per-user deployment
156
+ * lands (and is the only one writable without elevation, which the connector's
157
+ * per-user install means we cannot assume we have).
158
+ *
159
+ * Deliberately ONLY the `Root` stores, not `CA`/`AuthRoot`. Windows itself
160
+ * requires a chain to terminate at a `Root` entry, and OpenSSL treats every
161
+ * entry of `ca:` as a trust ANCHOR — so feeding it the intermediate store would
162
+ * make each intermediate independently trusted, which is a wider trust
163
+ * statement than the machine actually makes. Intermediates come off the wire
164
+ * from the inspecting proxy, as they do for every browser on the same box.
165
+ *
166
+ * `-Command` and not `-File`: execution policy governs script FILES, so a
167
+ * machine under a GPO `AllSigned` (the estate this whole change targets — see
168
+ * cctv-connector-windows-gtm-readiness.md §1) still runs this. That is the one
169
+ * property that makes reading the store possible on exactly the machines that
170
+ * need it.
171
+ */
172
+ /** `[storeName, storeLocation]` pairs, as the .NET `X509Store` constructor takes them. */
173
+ const WINDOWS_TRUST_STORES = [
174
+ ['Root', 'LocalMachine'],
175
+ ['Root', 'CurrentUser'],
176
+ ];
177
+ /**
178
+ * The script that dumps the Root stores.
179
+ *
180
+ * Two deliberate choices, both made after the first version returned ZERO
181
+ * certificates on a real `windows-latest` host and reported nothing about why:
182
+ *
183
+ * 1. **`X509Store` directly, not the `Cert:` provider.** The provider is a
184
+ * PowerShell module; the .NET class is the API underneath it and depends on
185
+ * nothing being loaded.
186
+ * 2. **One raw base64 line per certificate, PEM armour added in Node.** The
187
+ * first version asked PowerShell to emit whole PEM blocks, which needs the
188
+ * `Base64FormattingOptions.InsertLineBreaks` overload — a string-to-enum
189
+ * coercion inside a `-Command` string, i.e. exactly the kind of thing that
190
+ * fails quietly. Node can wrap 64-character lines with no ambiguity at all.
191
+ *
192
+ * Errors are printed as `#ERR <store> <message>` rather than suppressed. A
193
+ * blanket `$ErrorActionPreference='SilentlyContinue'` is what turned the first
194
+ * failure into a silent empty result, and a store reader that cannot say why it
195
+ * read nothing is the same defect class this whole change exists to fix.
196
+ */
197
+ function windowsTrustScript() {
198
+ // Single line, ASCII only: it crosses CreateProcess as one argv entry.
199
+ const NS = 'System.Security.Cryptography.X509Certificates';
200
+ return [
201
+ `foreach($p in @(${WINDOWS_TRUST_STORES.map(([n, l]) => `@('${n}','${l}')`).join(',')})){`,
202
+ 'try{',
203
+ // Every enum is CAST, never coerced from a string. The first version of this
204
+ // reader leaned on one such coercion and returned zero certificates with no
205
+ // error at all on a real host; a cast either resolves or throws into the
206
+ // catch below, which is the whole difference.
207
+ `$st=New-Object ${NS}.X509Store $p[0],([${NS}.StoreLocation]$p[1]);`,
208
+ `$st.Open([${NS}.OpenFlags]::ReadOnly);`,
209
+ 'foreach($c in $st.Certificates){Write-Output ([Convert]::ToBase64String($c.RawData))}',
210
+ '$st.Close()',
211
+ '}catch{',
212
+ "Write-Output ('#ERR ' + $p[1] + '\\' + $p[0] + ' ' + $_.Exception.Message)",
213
+ '}}',
214
+ ].join('');
215
+ }
216
+ /** Wrap one raw base64 DER blob into a PEM block, 64 characters per line. */
217
+ function base64ToPem(base64) {
218
+ const body = base64.replace(/\s+/g, '').match(/.{1,64}/g)?.join('\n') ?? '';
219
+ return `-----BEGIN CERTIFICATE-----\n${body}\n-----END CERTIFICATE-----`;
220
+ }
221
+ function readWindowsTrustAnchors(opts = {}) {
222
+ const exec = opts.exec ?? defaultExec;
223
+ const warnings = [];
224
+ const result = exec('powershell.exe', [
225
+ '-NoProfile',
226
+ '-NonInteractive',
227
+ '-ExecutionPolicy',
228
+ 'Bypass',
229
+ '-Command',
230
+ windowsTrustScript(),
231
+ ]);
232
+ if (result.error) {
233
+ warnings.push(`Windows trust store: powershell.exe failed (${result.error.message})`);
234
+ return { certs: [], sources: [], warnings };
235
+ }
236
+ if (result.status !== 0) {
237
+ const stderr = (result.stderr || '').trim().slice(0, 200);
238
+ warnings.push(`Windows trust store: powershell.exe exited ${result.status}${stderr ? ` — ${stderr}` : ''}`);
239
+ return { certs: [], sources: [], warnings };
240
+ }
241
+ const certs = [];
242
+ for (const line of (result.stdout || '').split(/\r?\n/)) {
243
+ const value = line.trim();
244
+ if (!value)
245
+ continue;
246
+ if (value.startsWith('#ERR ')) {
247
+ warnings.push(`Windows trust store: ${value.slice(5)}`);
248
+ continue;
249
+ }
250
+ // Anything else is one certificate's DER, base64-encoded on a single line.
251
+ if (!/^[A-Za-z0-9+/=]+$/.test(value))
252
+ continue;
253
+ certs.push(base64ToPem(value));
254
+ }
255
+ if (certs.length === 0 && warnings.length === 0) {
256
+ // Never a bare "returned nothing": the first version of this reader did
257
+ // exactly that on a real host and the message said nothing usable.
258
+ const stderr = (result.stderr || '').trim().slice(0, 300);
259
+ warnings.push('Windows trust store: powershell.exe exited 0 but printed no certificate and no error' +
260
+ `${stderr ? ` — stderr: ${stderr}` : ' (stderr was empty)'}`);
261
+ }
262
+ // One aggregate source line: the script reads both Root stores in one pass and
263
+ // a per-store split would need a second subprocess for no operator value.
264
+ const label = WINDOWS_TRUST_STORES.map(([n, l]) => `Cert:\\${l}\\${n}`).join(' + ');
265
+ return {
266
+ certs,
267
+ sources: certs.length > 0 ? [{ name: label, count: certs.length }] : [],
268
+ warnings,
269
+ };
270
+ }
271
+ /**
272
+ * macOS: the admin-installed System keychain plus the Apple root keychain.
273
+ *
274
+ * An MDM- or admin-installed enterprise root lands in `/Library/Keychains/System.keychain`.
275
+ * The Apple root keychain is included so a chain that happens to terminate at an
276
+ * Apple-distributed root the Mozilla list omits still validates.
277
+ */
278
+ const MAC_KEYCHAINS = [
279
+ '/Library/Keychains/System.keychain',
280
+ '/System/Library/Keychains/SystemRootCertificates.keychain',
281
+ ];
282
+ /**
283
+ * Subjects the admin has explicitly set to "Never Trust" in the admin domain.
284
+ *
285
+ * `security find-certificate` lists what is STORED in a keychain, not what is
286
+ * TRUSTED — a certificate the admin has explicitly denied is still returned by
287
+ * it. Promoting one of those to a trust anchor would invert the machine
288
+ * owner's decision, which is the exact opposite of what this module exists to
289
+ * honour. `dump-trust-settings -d` is the admin-domain override list; each
290
+ * entry names a certificate and its result type.
291
+ *
292
+ * Parsed loosely on purpose: an unreadable or absent settings list must mean
293
+ * "no explicit overrides", never "drop everything". Exported for the fixture
294
+ * tests, which drive it with the real command's output shape.
295
+ */
296
+ function parseDeniedTrustSubjects(dump) {
297
+ const denied = new Set();
298
+ let current = null;
299
+ for (const line of (dump || '').split(/\r?\n/)) {
300
+ const cert = line.match(/^Cert\s+\d+\s*:\s*(.+?)\s*$/);
301
+ if (cert) {
302
+ current = cert[1];
303
+ continue;
304
+ }
305
+ if (/kSecTrustSettingsResultDeny/.test(line) && current)
306
+ denied.add(current);
307
+ }
308
+ return denied;
309
+ }
310
+ function readMacTrustAnchors(opts = {}) {
311
+ const exec = opts.exec ?? defaultExec;
312
+ const certs = [];
313
+ const sources = [];
314
+ const warnings = [];
315
+ // Admin-domain overrides first, so a denied root is dropped rather than
316
+ // promoted. A failure here is non-fatal: the anchors are still filtered to
317
+ // CA certificates by `readPlatformTrustAnchors`.
318
+ let denied = new Set();
319
+ const dump = exec('/usr/bin/security', ['dump-trust-settings', '-d']);
320
+ if (!dump.error && typeof dump.stdout === 'string') {
321
+ denied = parseDeniedTrustSubjects(dump.stdout);
322
+ }
323
+ for (const keychain of MAC_KEYCHAINS) {
324
+ const result = exec('/usr/bin/security', ['find-certificate', '-a', '-p', keychain]);
325
+ if (result.error) {
326
+ warnings.push(`macOS keychain ${keychain}: ${result.error.message}`);
327
+ continue;
328
+ }
329
+ if (result.status !== 0) {
330
+ warnings.push(`macOS keychain ${keychain}: security exited ${result.status}`);
331
+ continue;
332
+ }
333
+ const found = extractPemBlocks(result.stdout || '');
334
+ const kept = denied.size === 0 ? found : found.filter((pem) => !isDeniedSubject(pem, denied));
335
+ if (kept.length < found.length) {
336
+ warnings.push(`macOS keychain ${keychain}: skipped ${found.length - kept.length} certificate(s) ` +
337
+ 'the admin has set to Never Trust');
338
+ }
339
+ if (kept.length > 0) {
340
+ certs.push(...kept);
341
+ sources.push({ name: keychain, count: kept.length });
342
+ }
343
+ }
344
+ return { certs, sources, warnings };
345
+ }
346
+ /** Does this PEM's subject appear in the admin's deny list? */
347
+ function isDeniedSubject(pem, denied) {
348
+ const summary = summarizeCertificate(pem);
349
+ if (!summary)
350
+ return false;
351
+ for (const name of denied) {
352
+ if (summary.commonName === name || summary.subject.includes(name))
353
+ return true;
354
+ }
355
+ return false;
356
+ }
357
+ /**
358
+ * Parse a PEM far enough to answer "is this a CA, and what is its subject".
359
+ *
360
+ * Returns null when the certificate cannot be parsed at all, which is treated
361
+ * as "not admissible as an anchor" — an unparseable blob is not something to
362
+ * hand OpenSSL as a root.
363
+ */
364
+ function summarizeCertificate(pem) {
365
+ try {
366
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
367
+ const { X509Certificate } = require('crypto');
368
+ const cert = new X509Certificate(pem);
369
+ const subject = String(cert.subject || '');
370
+ const cn = subject.match(/^CN=(.+)$/m)?.[1]?.trim();
371
+ return { ca: cert.ca === true, subject, ...(cn ? { commonName: cn } : {}) };
372
+ }
373
+ catch {
374
+ return null;
375
+ }
376
+ }
377
+ /**
378
+ * An anchor must be a CA. Applied to every platform, not only macOS.
379
+ *
380
+ * A keychain or a certificate store holds whatever has been PUT there, which on
381
+ * macOS includes end-entity certificates a user once saved. Passing one of
382
+ * those in `ca:` makes it a trust ANCHOR — it would then validate for its own
383
+ * name with no issuer above it, which is a trust elevation nobody asked for.
384
+ * Filtering on `basicConstraints CA:TRUE` is a no-op on a Windows `Root` store
385
+ * and on a distro CA bundle (both hold only CAs) and closes the macOS case.
386
+ */
387
+ function keepOnlyCertificateAuthorities(certs) {
388
+ const kept = [];
389
+ let dropped = 0;
390
+ for (const pem of certs) {
391
+ const summary = summarizeCertificate(pem);
392
+ if (summary?.ca)
393
+ kept.push(pem);
394
+ else
395
+ dropped++;
396
+ }
397
+ return { kept, dropped };
398
+ }
399
+ /**
400
+ * Linux: the distro CA bundle, which Node also does not read.
401
+ *
402
+ * `SSL_CERT_FILE`/`SSL_CERT_DIR` are honoured first because they are the
403
+ * documented override on this platform and are what a container image or a
404
+ * hardened host sets. First existing bundle wins — they are copies of one
405
+ * another on any distro that ships more than one path.
406
+ */
407
+ const LINUX_CA_BUNDLES = [
408
+ '/etc/ssl/certs/ca-certificates.crt', // Debian, Ubuntu, Alpine
409
+ '/etc/pki/tls/certs/ca-bundle.crt', // RHEL, Fedora, Amazon Linux
410
+ '/etc/ssl/ca-bundle.pem', // SUSE
411
+ '/etc/ssl/cert.pem', // Alpine, some BSD-ish layouts
412
+ ];
413
+ function readLinuxTrustAnchors(opts = {}) {
414
+ const readFile = opts.readFile ?? defaultReadFile;
415
+ const env = opts.env ?? process.env;
416
+ const certs = [];
417
+ const sources = [];
418
+ const warnings = [];
419
+ const explicit = env.SSL_CERT_FILE;
420
+ const candidates = explicit ? [explicit, ...LINUX_CA_BUNDLES] : LINUX_CA_BUNDLES;
421
+ for (const candidate of candidates) {
422
+ let text;
423
+ try {
424
+ text = readFile(candidate);
425
+ }
426
+ catch {
427
+ continue;
428
+ }
429
+ const found = extractPemBlocks(text);
430
+ if (found.length > 0) {
431
+ certs.push(...found);
432
+ sources.push({ name: candidate, count: found.length });
433
+ break; // first readable bundle wins; the rest are copies
434
+ }
435
+ }
436
+ const certDir = env.SSL_CERT_DIR;
437
+ if (certDir) {
438
+ for (const dir of certDir.split(path.delimiter).filter(Boolean)) {
439
+ let entries = [];
440
+ try {
441
+ entries = fs.readdirSync(dir);
442
+ }
443
+ catch {
444
+ warnings.push(`SSL_CERT_DIR ${dir}: not readable`);
445
+ continue;
446
+ }
447
+ let dirCount = 0;
448
+ for (const entry of entries) {
449
+ if (!/\.(pem|crt|cer)$/i.test(entry))
450
+ continue;
451
+ try {
452
+ const found = extractPemBlocks(readFile(path.join(dir, entry)));
453
+ certs.push(...found);
454
+ dirCount += found.length;
455
+ }
456
+ catch {
457
+ /* one unreadable file must not lose the rest of the directory */
458
+ }
459
+ }
460
+ if (dirCount > 0)
461
+ sources.push({ name: dir, count: dirCount });
462
+ }
463
+ }
464
+ if (certs.length === 0) {
465
+ warnings.push(`Linux trust store: none of ${LINUX_CA_BUNDLES.join(', ')} was readable`);
466
+ }
467
+ return { certs, sources, warnings };
468
+ }
469
+ /**
470
+ * `NODE_EXTRA_CA_CERTS`, read EXPLICITLY.
471
+ *
472
+ * Node applies this variable to the default secure context. Passing `ca:` on a
473
+ * request replaces that context's CA set, so wiring an agent with `ca:` and
474
+ * nothing else would have silently disabled an admin's existing workaround for
475
+ * this very bug. We therefore read it ourselves and merge it in.
476
+ */
477
+ function readNodeExtraCaCerts(opts = {}) {
478
+ const env = opts.env ?? process.env;
479
+ const readFile = opts.readFile ?? defaultReadFile;
480
+ const target = env.NODE_EXTRA_CA_CERTS;
481
+ if (!target)
482
+ return { certs: [], sources: [], warnings: [] };
483
+ try {
484
+ const found = extractPemBlocks(readFile(target));
485
+ if (found.length === 0) {
486
+ return {
487
+ certs: [],
488
+ sources: [],
489
+ warnings: [`NODE_EXTRA_CA_CERTS=${target}: no PEM certificate found in it`],
490
+ };
491
+ }
492
+ return { certs: found, sources: [{ name: `NODE_EXTRA_CA_CERTS (${target})`, count: found.length }], warnings: [] };
493
+ }
494
+ catch (err) {
495
+ return {
496
+ certs: [],
497
+ sources: [],
498
+ warnings: [`NODE_EXTRA_CA_CERTS=${target}: not readable (${err.message})`],
499
+ };
500
+ }
501
+ }
502
+ /** Read every store this platform has. Uncached — see `resolveTrustAnchors`. */
503
+ function readPlatformTrustAnchors(opts = {}) {
504
+ const platform = opts.platform ?? process.platform;
505
+ let native;
506
+ if (platform === 'win32')
507
+ native = readWindowsTrustAnchors(opts);
508
+ else if (platform === 'darwin')
509
+ native = readMacTrustAnchors(opts);
510
+ else
511
+ native = readLinuxTrustAnchors(opts);
512
+ const extra = readNodeExtraCaCerts(opts);
513
+ const seen = new Set();
514
+ const deduped = [];
515
+ for (const pem of [...native.certs, ...extra.certs]) {
516
+ if (seen.has(pem))
517
+ continue;
518
+ seen.add(pem);
519
+ deduped.push(pem);
520
+ }
521
+ // An anchor must be a CA — see keepOnlyCertificateAuthorities. Applied AFTER
522
+ // the merge so it covers NODE_EXTRA_CA_CERTS too: an admin who points that at
523
+ // a leaf has made a mistake, and turning it into a root is not the fix.
524
+ const { kept, dropped } = keepOnlyCertificateAuthorities(deduped);
525
+ const warnings = [...native.warnings, ...extra.warnings];
526
+ if (dropped > 0) {
527
+ warnings.push(`skipped ${dropped} certificate(s) that are not certificate authorities — ` +
528
+ 'a trust anchor must carry basicConstraints CA:TRUE');
529
+ }
530
+ return {
531
+ certs: kept,
532
+ sources: [...native.sources, ...extra.sources],
533
+ warnings,
534
+ resolvedAtMs: Date.now(),
535
+ platform,
536
+ };
537
+ }
538
+ let cached = null;
539
+ /**
540
+ * The cached read. Callers on the request path use this; it costs one
541
+ * subprocess per TTL, not one per request.
542
+ *
543
+ * The cache holds ONE snapshot with no key, which is valid exactly while the
544
+ * platform and environment are process-wide constants — true in production, and
545
+ * NOT true when a caller injects them. An injected `platform`/`exec`/`readFile`/
546
+ * `env` therefore bypasses the cache in both directions: it neither reads a
547
+ * snapshot taken under a different environment nor publishes its own for
548
+ * someone else to read. (Same rule, same reason, as `resolveProxyCached`.)
549
+ */
550
+ function resolveTrustAnchors(opts = {}) {
551
+ const injected = Boolean(opts.platform || opts.exec || opts.readFile || opts.env);
552
+ if (injected)
553
+ return readPlatformTrustAnchors(opts);
554
+ const now = Date.now();
555
+ if (cached && now - cached.resolvedAtMs < exports.TRUST_CACHE_TTL_MS)
556
+ return cached;
557
+ cached = readPlatformTrustAnchors(opts);
558
+ return cached;
559
+ }
560
+ /**
561
+ * Drop the cache so the next resolve re-reads the store.
562
+ *
563
+ * Called when a certificate-verification failure is classified: the single most
564
+ * likely explanation for one is that IT has just deployed (or is about to
565
+ * deploy) the inspection root, and re-reading is how the connector recovers
566
+ * without the restart nobody is there to perform.
567
+ */
568
+ function invalidateTrustAnchorCache() {
569
+ cached = null;
570
+ }
571
+ /** For tests: the snapshot currently held, without taking a new one. */
572
+ function peekTrustAnchorCache() {
573
+ return cached;
574
+ }
575
+ /**
576
+ * The `ca` value to hand to TLS: Node's bundled roots FIRST, then the machine's.
577
+ *
578
+ * Including `tls.rootCertificates` is the load-bearing half. `ca:` REPLACES the
579
+ * default set rather than extending it, so passing only the machine anchors
580
+ * would have made a connector on a normal network stop trusting the public web
581
+ * PKI — turning a corporate-network bug into a fleet-wide outage. Returns
582
+ * `undefined` when there is nothing to add, so the default context is used
583
+ * untouched on the overwhelming majority of hosts.
584
+ */
585
+ function buildCaBundle(anchors) {
586
+ if (anchors.certs.length === 0)
587
+ return undefined;
588
+ return [...tls.rootCertificates, ...anchors.certs];
589
+ }
590
+ /** One operator-facing line describing what was resolved. */
591
+ function describeTrustAnchors(anchors) {
592
+ if (anchors.certs.length === 0) {
593
+ const why = anchors.warnings.length > 0 ? ` (${anchors.warnings[0]})` : '';
594
+ return `trust: Node bundled roots only — no platform trust store read${why}`;
595
+ }
596
+ const stores = anchors.sources.map((s) => `${s.name} x${s.count}`).join(', ');
597
+ return `trust: Node bundled roots + ${anchors.certs.length} from ${stores}`;
598
+ }
599
+ /** Platform-appropriate instruction for getting a root INTO the store. */
600
+ function trustStoreInstallHint(platform = process.platform) {
601
+ if (platform === 'win32') {
602
+ return ('Ask IT to install the inspection root into this machine\'s ' +
603
+ '"Trusted Root Certification Authorities" store (Local Machine or Current User). ' +
604
+ 'The connector re-reads that store automatically; no reinstall is needed.');
605
+ }
606
+ if (platform === 'darwin') {
607
+ return ('Ask IT to install the inspection root into the System keychain ' +
608
+ `(/Library/Keychains/System.keychain) on ${os.hostname()}. ` +
609
+ 'The connector re-reads it automatically; no reinstall is needed.');
610
+ }
611
+ return ('Install the inspection root into the system CA bundle ' +
612
+ '(e.g. /usr/local/share/ca-certificates + update-ca-certificates), or point ' +
613
+ 'NODE_EXTRA_CA_CERTS at a PEM file containing it.');
614
+ }
615
+ //# sourceMappingURL=enterpriseTrust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enterpriseTrust.js","sourceRoot":"","sources":["../src/enterpriseTrust.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,16 @@ export type { CommandContext, DeviceCommand, CommandResult } from './CommandRout
6
6
  export { runInit } from './init';
7
7
  export { runDiagnose } from './diagnose';
8
8
  export type { DiagnosticReport } from './diagnose';
9
+ export { installEnterpriseNetworking, describeNetworkPosture, getEnterpriseAgent, diagnoseTransportError, resetEnterpriseNetworkCaches, EnterpriseHttpsAgent, } from './enterpriseNetwork';
10
+ export type { NetworkPosture, EnterpriseNetworkOptions } from './enterpriseNetwork';
11
+ export { TransportFailure, classifyTransportError, formatTransportFailure, isTrustFailure, } from './transportFailure';
12
+ export type { TransportFailureClass } from './transportFailure';
13
+ export { resolveTrustAnchors, describeTrustAnchors } from './enterpriseTrust';
14
+ export type { TrustAnchorResolution } from './enterpriseTrust';
15
+ export { resolveProxyForUrl, describeProxy } from './enterpriseProxy';
16
+ export type { ProxyResolution } from './enterpriseProxy';
17
+ export { probeLocalNetworkAccess, decideLocalNetworkVerdict, LOCAL_NETWORK_DENIED_SUGGESTION, LOCAL_NETWORK_DENIED_SUMMARY, } from './localNetworkAccess';
18
+ export type { LocalNetworkVerdict, LocalNetworkProbeResult, LocalNetworkProbeEvidence, LocalNetworkProbeOptions, } from './localNetworkAccess';
9
19
  export { AudienceAnalyzeClient, defaultHttpPoster } from './AudienceAnalyzeClient';
10
20
  export type { AudienceAnalyzeClientOptions, AudienceAnalyzeRequest, AudienceAnalyzeResponse, CameraHealthFailureClass, CameraHealthReport, CameraHealthState, FrameDimensions, HttpPoster, } from './AudienceAnalyzeClient';
11
21
  export { CloudSensingManager, buildSensingLoops, buildTiledCameras, classifyRtspFailureClass, resolveFeeds, } from './CloudSensingManager';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACnF,YAAY,EACV,4BAA4B,EAC5B,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,UAAU,GACX,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,oCAAoC,GACrC,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAChF,YAAY,EACV,0BAA0B,EAC1B,eAAe,EACf,YAAY,GACb,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACpF,YAAY,EACV,YAAY,EACZ,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EACV,4BAA4B,EAC5B,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACrE,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,YAAY,EACV,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}