@trillboards/edge-sdk 0.2.54 → 0.2.55

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,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OnvifClient = exports.OnvifError = void 0;
3
+ exports.OnvifClient = exports.ONVIF_DEVICE_SERVICE_PATHS = exports.OnvifError = void 0;
4
+ exports.parseDigestChallenge = parseDigestChallenge;
5
+ exports.buildDigestAuthorization = buildDigestAuthorization;
4
6
  exports.buildUsernameToken = buildUsernameToken;
5
7
  exports.escapeXml = escapeXml;
6
8
  exports.decodeXmlEntities = decodeXmlEntities;
@@ -15,6 +17,130 @@ class OnvifError extends Error {
15
17
  }
16
18
  }
17
19
  exports.OnvifError = OnvifError;
20
+ /** Quote a Digest parameter value per RFC 7616 §3.4. */
21
+ function quoteDigest(value) {
22
+ return String(value).replace(/([\\"])/g, '\\$1');
23
+ }
24
+ /** The hash for a Digest `algorithm`, or null when we do not implement it. */
25
+ function digestHashFor(algorithm) {
26
+ const base = String(algorithm || 'MD5').replace(/-sess$/i, '').toUpperCase();
27
+ // MD5 here is the PROTOCOL's mandated construction, not a security choice of
28
+ // ours: an ONVIF device that offers MD5 accepts nothing else.
29
+ if (base === 'MD5')
30
+ return (input) => (0, crypto_1.createHash)('md5').update(input, 'utf8').digest('hex');
31
+ if (base === 'SHA-256')
32
+ return (input) => (0, crypto_1.createHash)('sha256').update(input, 'utf8').digest('hex');
33
+ return null;
34
+ }
35
+ /**
36
+ * Parse a `WWW-Authenticate` header into the Digest challenge, or null when the
37
+ * server did not offer Digest.
38
+ *
39
+ * Tolerant on purpose: the header may arrive as an array (Node repeats it),
40
+ * values may be quoted or bare, and a server may offer several schemes in one
41
+ * header (`Basic realm="x", Digest realm="y", nonce="z"`). Parameters are
42
+ * FIRST-WINS from the point `Digest` appears, so a `Basic` section that follows
43
+ * cannot overwrite the Digest realm with its own.
44
+ */
45
+ function parseDigestChallenge(header) {
46
+ const raw = Array.isArray(header) ? header.join(', ') : header;
47
+ if (!raw)
48
+ return null;
49
+ const start = /(^|[\s,])Digest\s+/i.exec(raw);
50
+ if (!start)
51
+ return null;
52
+ const params = raw.slice(start.index + start[0].length);
53
+ const found = new Map();
54
+ const re = /([A-Za-z][A-Za-z0-9_-]*)\s*=\s*(?:"((?:[^"\\]|\\.)*)"|([^,\s]*))/g;
55
+ let m;
56
+ while ((m = re.exec(params)) !== null) {
57
+ const key = m[1].toLowerCase();
58
+ if (found.has(key))
59
+ continue; // first wins
60
+ const value = m[2] !== undefined ? m[2].replace(/\\(.)/g, '$1') : (m[3] ?? '');
61
+ found.set(key, value);
62
+ }
63
+ const realm = found.get('realm');
64
+ const nonce = found.get('nonce');
65
+ // A challenge without a nonce cannot be answered. Treat it as "no Digest
66
+ // offered" rather than inventing one — a wrong Authorization header would
67
+ // spend a login attempt to learn nothing.
68
+ if (realm === undefined || !nonce)
69
+ return null;
70
+ const offeredQop = (found.get('qop') ?? '')
71
+ .split(',')
72
+ .map((q) => q.trim().toLowerCase())
73
+ .filter(Boolean);
74
+ return {
75
+ realm,
76
+ nonce,
77
+ qop: offeredQop.includes('auth') ? 'auth' : null,
78
+ offeredQop,
79
+ opaque: found.get('opaque') ?? null,
80
+ algorithm: found.get('algorithm') ?? 'MD5',
81
+ };
82
+ }
83
+ /**
84
+ * The `Authorization: Digest …` value for one request, or null when the
85
+ * challenge asks for something we do not implement (an unknown algorithm, or
86
+ * `auth-int` as the only qop). Null is a REPORTABLE condition, never a silent
87
+ * skip — the caller turns it into a named auth error.
88
+ */
89
+ function buildDigestAuthorization(opts) {
90
+ const { challenge } = opts;
91
+ const hash = digestHashFor(challenge.algorithm);
92
+ if (!hash)
93
+ return null;
94
+ // The server offered qop values, but none we implement (e.g. only auth-int).
95
+ if (challenge.offeredQop.length > 0 && challenge.qop === null)
96
+ return null;
97
+ const nc = opts.nc ?? '00000001';
98
+ const cnonce = opts.cnonce ?? (0, crypto_1.randomBytes)(8).toString('hex');
99
+ const isSess = /-sess$/i.test(challenge.algorithm);
100
+ let ha1 = hash(`${opts.username}:${challenge.realm}:${opts.password}`);
101
+ if (isSess)
102
+ ha1 = hash(`${ha1}:${challenge.nonce}:${cnonce}`);
103
+ const ha2 = hash(`${opts.method}:${opts.uri}`);
104
+ const response = challenge.qop
105
+ ? hash(`${ha1}:${challenge.nonce}:${nc}:${cnonce}:${challenge.qop}:${ha2}`)
106
+ : hash(`${ha1}:${challenge.nonce}:${ha2}`);
107
+ const parts = [
108
+ `username="${quoteDigest(opts.username)}"`,
109
+ `realm="${quoteDigest(challenge.realm)}"`,
110
+ `nonce="${quoteDigest(challenge.nonce)}"`,
111
+ `uri="${quoteDigest(opts.uri)}"`,
112
+ `response="${response}"`,
113
+ ];
114
+ if (challenge.algorithm)
115
+ parts.push(`algorithm=${challenge.algorithm}`);
116
+ if (challenge.qop) {
117
+ parts.push(`qop=${challenge.qop}`, `nc=${nc}`, `cnonce="${quoteDigest(cnonce)}"`);
118
+ }
119
+ if (challenge.opaque !== null)
120
+ parts.push(`opaque="${quoteDigest(challenge.opaque)}"`);
121
+ return `Digest ${parts.join(', ')}`;
122
+ }
123
+ /** Read one header case-insensitively out of a poster response. */
124
+ function headerOf(headers, name) {
125
+ if (!headers)
126
+ return undefined;
127
+ const wanted = name.toLowerCase();
128
+ for (const key of Object.keys(headers)) {
129
+ if (key.toLowerCase() === wanted)
130
+ return headers[key];
131
+ }
132
+ return undefined;
133
+ }
134
+ /**
135
+ * ONVIF device-service paths, in the order they are tried.
136
+ *
137
+ * `/onvif/device_service` is the conventional path and stays FIRST so no
138
+ * working recorder changes behaviour. `/onvif/services` is what AXIS OS 12
139
+ * serves. The fallback is bounded by `canFallBackEndpoint` — it is spent only
140
+ * when the first path evaluated no credential, or evaluated one without ever
141
+ * telling us which scheme it wanted.
142
+ */
143
+ exports.ONVIF_DEVICE_SERVICE_PATHS = ['/onvif/device_service', '/onvif/services'];
18
144
  /** Build the WS-Security UsernameToken header (PasswordDigest per ONVIF core). */
19
145
  function buildUsernameToken(username, password, nonceRaw = (0, crypto_1.randomBytes)(16), created = new Date().toISOString()) {
20
146
  const digest = (0, crypto_1.createHash)('sha1')
@@ -79,6 +205,20 @@ class OnvifClient {
79
205
  constructor(options, poster) {
80
206
  /** Media service endpoint discovered via GetServices (falls back to device). */
81
207
  this.mediaXAddr = null;
208
+ /** Device-service path proven to answer on this device. Learned once. */
209
+ this.deviceServicePath = null;
210
+ /** Cached Digest challenge, so later calls authenticate in ONE request. */
211
+ this.digestChallenge = null;
212
+ /** Digest nonce-count, incremented per authenticated request per RFC 7616. */
213
+ this.digestNc = 0;
214
+ /**
215
+ * Whether this device has ever answered a request with a Digest challenge.
216
+ * Gates the endpoint fallback: once the device has told us its scheme and
217
+ * refused our answer, the credential is wrong and further paths are wasted
218
+ * login attempts against a lockout budget.
219
+ */
220
+ this.digestAttempted = false;
221
+ this.streamUriWarnings = [];
82
222
  this.host = options.host;
83
223
  this.port = options.port ?? 80;
84
224
  this.username = options.username;
@@ -86,21 +226,91 @@ class OnvifClient {
86
226
  this.timeoutMs = options.timeoutMs ?? 5000;
87
227
  this.poster = poster ?? AudienceAnalyzeClient_1.defaultHttpPoster;
88
228
  }
229
+ /** The device-service endpoint: the proven path, else the conventional one. */
89
230
  deviceEndpoint() {
90
- return `http://${this.host}:${this.port}/onvif/device_service`;
231
+ return this.endpointFor(this.deviceServicePath ?? exports.ONVIF_DEVICE_SERVICE_PATHS[0]);
91
232
  }
92
- async soap(endpoint, body) {
93
- let res;
233
+ endpointFor(path) {
234
+ return `http://${this.host}:${this.port}${path}`;
235
+ }
236
+ /**
237
+ * Things the device advertised that are true but unusable. Empty is the
238
+ * normal case; a caller reads this only to explain a failure it already has.
239
+ */
240
+ getStreamUriWarnings() {
241
+ return [...this.streamUriWarnings];
242
+ }
243
+ /** One POST, with WS-Security always and Digest when we hold a challenge. */
244
+ async post(endpoint, xml, authorization) {
245
+ const headers = {
246
+ 'Content-Type': 'application/soap+xml; charset=utf-8',
247
+ };
248
+ if (authorization)
249
+ headers.Authorization = authorization;
94
250
  try {
95
- res = await this.poster(endpoint, {
96
- method: 'POST',
97
- headers: { 'Content-Type': 'application/soap+xml; charset=utf-8' },
98
- timeoutMs: this.timeoutMs,
99
- }, envelope(buildUsernameToken(this.username, this.password), body));
251
+ return await this.poster(endpoint, { method: 'POST', headers, timeoutMs: this.timeoutMs }, xml);
100
252
  }
101
253
  catch (err) {
102
254
  throw new OnvifError('unreachable', `ONVIF ${endpoint} unreachable: ${err.message}`);
103
255
  }
256
+ }
257
+ /** Answer a challenge for `endpoint`, or null when we cannot satisfy it. */
258
+ authorizationFor(endpoint, challenge) {
259
+ let uri = endpoint;
260
+ try {
261
+ const u = new URL(endpoint);
262
+ uri = `${u.pathname}${u.search}`;
263
+ }
264
+ catch {
265
+ /* keep the raw endpoint — a device that gave us an unparseable one is
266
+ already broken, and a wrong uri only costs this one attempt */
267
+ }
268
+ this.digestNc += 1;
269
+ return buildDigestAuthorization({
270
+ username: this.username,
271
+ password: this.password,
272
+ method: 'POST',
273
+ uri,
274
+ challenge,
275
+ nc: this.digestNc.toString(16).padStart(8, '0'),
276
+ });
277
+ }
278
+ async soap(endpoint, body) {
279
+ // A fresh envelope per attempt: WS-Security carries a nonce and a
280
+ // `wsu:Created` timestamp, and replaying a stale one is itself a rejection.
281
+ const envelopeXml = () => envelope(buildUsernameToken(this.username, this.password), body);
282
+ // Pre-emptive Digest once the device has challenged us: without it EVERY
283
+ // call costs two round trips.
284
+ let authorization = this.digestChallenge
285
+ ? this.authorizationFor(endpoint, this.digestChallenge)
286
+ : null;
287
+ let res = await this.post(endpoint, envelopeXml(), authorization);
288
+ if (res.statusCode === 401) {
289
+ // Re-parse: the nonce rotates, and `stale=true` means precisely "retry
290
+ // with this new one". Both land here identically.
291
+ const challenge = parseDigestChallenge(headerOf(res.headers, 'www-authenticate'));
292
+ if (challenge) {
293
+ this.digestChallenge = challenge;
294
+ this.digestNc = 0;
295
+ this.digestAttempted = true;
296
+ authorization = this.authorizationFor(endpoint, challenge);
297
+ if (!authorization) {
298
+ const wanted = challenge.offeredQop.length
299
+ ? `qop=${challenge.offeredQop.join(',')} algorithm=${challenge.algorithm}`
300
+ : `algorithm=${challenge.algorithm}`;
301
+ throw new OnvifError('auth', `ONVIF requires an HTTP Digest form this connector does not implement (${wanted}). ` +
302
+ 'Supported: MD5, MD5-sess, SHA-256, SHA-256-sess with qop=auth or no qop.');
303
+ }
304
+ res = await this.post(endpoint, envelopeXml(), authorization);
305
+ }
306
+ else if (/\bBasic\b/i.test(String(headerOf(res.headers, 'www-authenticate') ?? ''))) {
307
+ // Answering this would put the password on the wire in cleartext —
308
+ // weaker than the UsernameToken digest already sent. Name it instead.
309
+ throw new OnvifError('auth', 'ONVIF auth rejected (HTTP 401). The device offers only HTTP Basic, which this ' +
310
+ 'connector will not use because it sends the password in cleartext. Enable ' +
311
+ 'Digest or WS-Security (ONVIF UsernameToken) on the device.');
312
+ }
313
+ }
104
314
  // 401/403 → bad creds. Many recorders return 400 + a NotAuthorized SOAP
105
315
  // fault instead — treat both as the auth circuit-breaker signal.
106
316
  if (res.statusCode === 401 || res.statusCode === 403) {
@@ -117,9 +327,52 @@ class OnvifClient {
117
327
  }
118
328
  return res.body;
119
329
  }
330
+ /**
331
+ * May we spend an attempt on the NEXT device-service path after `err`?
332
+ *
333
+ * The whole point is to not turn one rejected login into four. Two cases
334
+ * qualify, and nothing else:
335
+ * `not_onvif` — a non-2xx that never evaluated a credential (a 404 from a
336
+ * device that serves ONVIF somewhere else is exactly this).
337
+ * `auth` BEFORE any Digest challenge — the device refused us without ever
338
+ * saying which scheme it wanted, which is what AXIS OS 12 does to a
339
+ * WS-Security-only POST. The alternate path may negotiate properly.
340
+ *
341
+ * `auth` AFTER a challenge was answered means the CREDENTIAL is wrong, and no
342
+ * other path will change that. `unreachable` and `fault` are properties of the
343
+ * host and of a working endpoint respectively — neither is a wrong path.
344
+ */
345
+ canFallBackEndpoint(err) {
346
+ if (err.kind === 'not_onvif')
347
+ return true;
348
+ if (err.kind === 'auth')
349
+ return !this.digestAttempted;
350
+ return false;
351
+ }
352
+ /** A device-service call, trying the alternate ONVIF path when it is safe. */
353
+ async deviceSoap(body) {
354
+ if (this.deviceServicePath)
355
+ return this.soap(this.endpointFor(this.deviceServicePath), body);
356
+ let firstError = null;
357
+ for (const path of exports.ONVIF_DEVICE_SERVICE_PATHS) {
358
+ try {
359
+ const xml = await this.soap(this.endpointFor(path), body);
360
+ this.deviceServicePath = path; // learned: every later call goes straight here
361
+ return xml;
362
+ }
363
+ catch (err) {
364
+ const onvifErr = err instanceof OnvifError ? err : new OnvifError('fault', err.message);
365
+ if (!firstError)
366
+ firstError = onvifErr;
367
+ if (!this.canFallBackEndpoint(onvifErr))
368
+ throw onvifErr;
369
+ }
370
+ }
371
+ throw firstError ?? new OnvifError('not_onvif', 'ONVIF device service did not answer');
372
+ }
120
373
  /** Stable physical identity (the channelKey backbone). */
121
374
  async getDeviceInformation() {
122
- const xml = await this.soap(this.deviceEndpoint(), '<GetDeviceInformation xmlns="http://www.onvif.org/ver10/device/wsdl"/>');
375
+ const xml = await this.deviceSoap('<GetDeviceInformation xmlns="http://www.onvif.org/ver10/device/wsdl"/>');
123
376
  return {
124
377
  manufacturer: xmlTag(xml, 'Manufacturer'),
125
378
  model: xmlTag(xml, 'Model'),
@@ -132,7 +385,7 @@ class OnvifClient {
132
385
  if (this.mediaXAddr)
133
386
  return this.mediaXAddr;
134
387
  try {
135
- const xml = await this.soap(this.deviceEndpoint(), '<GetServices xmlns="http://www.onvif.org/ver10/device/wsdl"><IncludeCapability>false</IncludeCapability></GetServices>');
388
+ const xml = await this.deviceSoap('<GetServices xmlns="http://www.onvif.org/ver10/device/wsdl"><IncludeCapability>false</IncludeCapability></GetServices>');
136
389
  for (const svc of xmlTags(xml, 'Service')) {
137
390
  const ns = xmlTag(svc, 'Namespace') || '';
138
391
  if (ns.includes('/media/')) {
@@ -197,6 +450,7 @@ class OnvifClient {
197
450
  // Rewrite the advertised host (NAT-advertised internals) but keep path/port.
198
451
  try {
199
452
  const u = new URL(uri);
453
+ this.noteStreamUriPort(profileToken, u);
200
454
  u.hostname = this.host;
201
455
  return u.toString();
202
456
  }
@@ -204,6 +458,44 @@ class OnvifClient {
204
458
  return uri;
205
459
  }
206
460
  }
461
+ /**
462
+ * Record — never repair — an advertised RTSP port that cannot be right.
463
+ *
464
+ * A device reached through a port-forward advertises whatever its own config
465
+ * says, and a forwarder that maps HTTP and RTSP to different external ports
466
+ * makes that advertisement wrong. Measured on the Axis Virtual Loan Tool
467
+ * (2026-08-18): ONVIF was served on external port 12095 and the stream URI
468
+ * advertised `rtsp://…:12095/…`, while media was actually on 32095. The tell
469
+ * is exact — the advertised RTSP port EQUALS the port we are speaking ONVIF
470
+ * HTTP on, and one socket does not serve both protocols.
471
+ *
472
+ * We do not guess the real port. 32095 is not derivable from 12095, and a
473
+ * connector that silently sweeps ports is worse than one that says the
474
+ * advertised port did not serve media: the sweep turns one clear finding into
475
+ * a slow scan that can trip a recorder's rate limits and still be wrong. The
476
+ * URI is returned exactly as advertised; this note only lets the prober name
477
+ * the cause if that URI then produces nothing.
478
+ */
479
+ noteStreamUriPort(profileToken, u) {
480
+ if (!/^rtsps?:$/i.test(u.protocol))
481
+ return;
482
+ const advertisedPort = u.port ? Number(u.port) : 554;
483
+ if (!Number.isFinite(advertisedPort) || advertisedPort !== this.port)
484
+ return;
485
+ if (this.streamUriWarnings.some((w) => w.profileToken === profileToken))
486
+ return;
487
+ this.streamUriWarnings.push({
488
+ kind: 'rtsp_port_equals_onvif_http_port',
489
+ profileToken,
490
+ advertisedPort,
491
+ onvifHttpPort: this.port,
492
+ message: `ONVIF advertised RTSP on port ${advertisedPort}, which is the same port this device ` +
493
+ 'answers ONVIF HTTP on — one port cannot serve both. This is the signature of a ' +
494
+ 'port-forward (NAT, or a remote loan/demo tool) that maps HTTP and RTSP to different ' +
495
+ 'external ports, so the advertised port is the HTTP mapping. Enter the RTSP port ' +
496
+ 'explicitly; it cannot be derived from the HTTP one.',
497
+ });
498
+ }
207
499
  }
208
500
  exports.OnvifClient = OnvifClient;
209
501
  //# sourceMappingURL=OnvifClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OnvifClient.js","sourceRoot":"","sources":["../src/OnvifClient.ts"],"names":[],"mappings":";;;AA6DA,gDAoBC;AAED,8BAOC;AAcD,8CASC;AAGD,wBAGC;AAGD,0BASC;AAnID,mCAAiD;AACjD,mEAA6E;AA0C7E,MAAa,UAAW,SAAQ,KAAK;IAEnC,YAAY,IAAkB,EAAE,OAAe;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAND,gCAMC;AAWD,kFAAkF;AAClF,SAAgB,kBAAkB,CAChC,QAAgB,EAChB,QAAgB,EAChB,WAAmB,IAAA,oBAAW,EAAC,EAAE,CAAC,EAClC,UAAkB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAE1C,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,MAAM,CAAC;SAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;SAC9F,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,OAAO,CACL,gDAAgD;QAChD,iGAAiG;QACjG,iGAAiG;QACjG,sCAAsC,SAAS,CAAC,QAAQ,CAAC,kBAAkB;QAC3E,0HAA0H;QAC1H,GAAG,MAAM,kBAAkB;QAC3B,6HAA6H,QAAQ,eAAe;QACpJ,gBAAgB,OAAO,gEAAgE,CACxF,CAAC;AACJ,CAAC;AAED,SAAgB,SAAS,CAAC,CAAS;IACjC,OAAO,MAAM,CAAC,CAAC,CAAC;SACb,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,IAAY;IAC5C,OAAO,CACL,wCAAwC;QACxC,gEAAgE;QAChE,MAAM;QACN,WAAW,IAAI,wBAAwB,CACxC,CAAC;AACJ,CAAC;AAED;;qEAEqE;AACrE,SAAgB,iBAAiB,CAAC,CAAS;IACzC,OAAO,CAAC;SACL,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SAC/E,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SACrE,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,qCAAqC;AAClE,CAAC;AAED,+EAA+E;AAC/E,SAAgB,MAAM,CAAC,GAAW,EAAE,SAAiB;IACnD,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,uBAAuB,SAAS,0CAA0C,SAAS,GAAG,CAAC,CAAC,CAAC;IACxH,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,mEAAmE;AACnE,SAAgB,OAAO,CAAC,GAAW,EAAE,SAAiB;IACpD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,IAAI,MAAM,CACnB,uBAAuB,SAAS,gDAAgD,SAAS,GAAG,EAC5F,GAAG,CACJ,CAAC;IACF,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI;QAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,MAAM,CAAC,UAAkB,EAAE,IAAY;IAC9C,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzB,CAAC;AAED,MAAa,WAAW;IAUtB,YAAY,OAA2B,EAAE,MAAmB;QAH5D,gFAAgF;QACxE,eAAU,GAAkB,IAAI,CAAC;QAGvC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAK,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,yCAAiB,CAAC;IAC5C,CAAC;IAED,cAAc;QACZ,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,uBAAuB,CAAC;IACjE,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,IAAY;QAC/C,IAAI,GAAyC,CAAC;QAC9C,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CACrB,QAAQ,EACR;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,qCAAqC,EAAE;gBAClE,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,EACD,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CACjE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,UAAU,CAAC,aAAa,EAAE,SAAS,QAAQ,iBAAkB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,wEAAwE;QACxE,iEAAiE;QACjE,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YACrD,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,6BAA6B,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,uDAAuD,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,gDAAgD,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;YAClD,MAAM,IAAI,UAAU,CAAC,WAAW,EAAE,gCAAgC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,UAAU,CAAC,OAAO,EAAE,qBAAqB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,oBAAoB;QACxB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CACzB,IAAI,CAAC,cAAc,EAAE,EACrB,wEAAwE,CACzE,CAAC;QACF,OAAO;YACL,YAAY,EAAE,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC;YACzC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;YAC3B,YAAY,EAAE,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC;YACzC,eAAe,EAAE,MAAM,CAAC,GAAG,EAAE,iBAAiB,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,kFAAkF;IAC1E,KAAK,CAAC,iBAAiB;QAC7B,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CACzB,IAAI,CAAC,cAAc,EAAE,EACrB,wHAAwH,CACzH,CAAC;YACF,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC1C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;gBAC1C,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;oBACnC,IAAI,KAAK,EAAE,CAAC;wBACV,kEAAkE;wBAClE,yDAAyD;wBACzD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;wBAC1C,OAAO,IAAI,CAAC,UAAU,CAAC;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAAkB,CAAC,IAAI,KAAK,MAAM;gBAAE,MAAM,GAAG,CAAC,CAAC,kBAAkB;YACtE,2CAA2C;QAC7C,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,sBAAsB,CAAC;QACzE,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,CAAC,CAAC,IAAI;gBAAE,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,sBAAsB,CAAC;QAChE,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,WAAW;QACf,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,8DAA8D,CAAC,CAAC;QACnG,MAAM,GAAG,GAAmB,EAAE,CAAC;QAC/B,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/D,GAAG,CAAC,IAAI,CAAC;gBACP,KAAK;gBACL,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;gBACxB,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI;aAC9D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,oEAAoE;IACpE,KAAK,CAAC,YAAY,CAAC,YAAoB;QACrC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CACzB,KAAK,EACL,8DAA8D;YAC5D,qFAAqF;YACrF,0GAA0G;YAC1G,iBAAiB,SAAS,CAAC,YAAY,CAAC,gCAAgC,CAC3E,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,6EAA6E;QAC7E,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;CACF;AAnJD,kCAmJC"}
1
+ {"version":3,"file":"OnvifClient.js","sourceRoot":"","sources":["../src/OnvifClient.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ export interface DiagnosticReport {
31
31
  skipped: number;
32
32
  };
33
33
  }
34
- declare const SDK_VERSION = "0.2.54";
34
+ declare const SDK_VERSION = "0.2.55";
35
35
  declare function checkNodeVersion(): CheckResult;
36
36
  declare function checkPlatform(): CheckResult;
37
37
  declare function checkMemory(): CheckResult;
package/dist/diagnose.js CHANGED
@@ -63,7 +63,7 @@ const localNetworkAccess_1 = require("./localNetworkAccess");
63
63
  // ---------------------------------------------------------------------------
64
64
  // SDK version — mirrors package.json; kept in sync by CI
65
65
  // ---------------------------------------------------------------------------
66
- const SDK_VERSION = '0.2.54';
66
+ const SDK_VERSION = '0.2.55';
67
67
  exports._SDK_VERSION = SDK_VERSION;
68
68
  // ---------------------------------------------------------------------------
69
69
  // ANSI helpers (no external deps)
@@ -212,6 +212,56 @@ export interface SamplerConfig {
212
212
  * a machine we do not ship.
213
213
  */
214
214
  feedPhaseModel: 'uniform' | 'staggered';
215
+ /**
216
+ * Floor between two MOTION-triggered analyses of ONE feed, seconds — the
217
+ * `rate_limited` branch of `MotionGate.evaluate`, whose shipped value is
218
+ * `MIN_ANALYZE_INTERVAL_MS` (30 s).
219
+ *
220
+ * DEFAULT 0 (off), which is what every committed baseline was measured under,
221
+ * so this cannot silently move a pinned number.
222
+ *
223
+ * It was safe to omit while the only question was CATCH RATE: an event needs
224
+ * one analysis to be caught, and the first one is never rate-limited. It stops
225
+ * being safe the moment the question is CORROBORATION, because then the
226
+ * quantity of interest is how many analyses land inside one event, and this is
227
+ * the constraint that bounds it. A replay without it reports corroboration the
228
+ * shipped connector cannot deliver.
229
+ *
230
+ * The heartbeat is deliberately NOT subject to it: `heartbeatDue` returns from
231
+ * `MotionGate.evaluate` above the rate-limit branch, which is what lets a
232
+ * starved still feed keep qualifying.
233
+ */
234
+ minAnalyzeIntervalS: number;
235
+ /**
236
+ * Does an event with ongoing movement present a change to the gate on EVERY
237
+ * look, or only once?
238
+ *
239
+ * DEFAULT false — present once — which is the model every committed baseline
240
+ * uses, and it is the right one for catch rate: it refuses to invent analysis
241
+ * demand, and a second look at an event already analysed cannot catch it
242
+ * twice.
243
+ *
244
+ * For corroboration it is the wrong model and would understate the answer to
245
+ * zero. The detector is a frame-to-frame differ, so a person who is still
246
+ * MOVING changes the signature on every look and re-presents; the shipped
247
+ * `stationary` branch suppresses only a signature that has not changed since
248
+ * the last landed analysis. Turning this on together with
249
+ * `minAnalyzeIntervalS` is what reproduces the real thing: a moving event is
250
+ * re-analysed at the analyze floor, a still one only at the heartbeat.
251
+ */
252
+ motionRepresents: boolean;
253
+ /**
254
+ * How many analyses must land inside one event, within `confirmWindowS`,
255
+ * before the alert layer will speak for it — the replay's mirror of
256
+ * `sensing_routes.confirm_samples`.
257
+ *
258
+ * DEFAULT 1, i.e. no corroboration required, which makes `confirmRate` 1
259
+ * wherever the event was analysed at all and leaves `confirmedCatchRate`
260
+ * identical to `catchRate`. The committed baseline is unmoved.
261
+ */
262
+ confirmSamples: number;
263
+ /** Window those analyses must fall inside, seconds. Mirrors `confirm_window_seconds`. */
264
+ confirmWindowS: number;
215
265
  }
216
266
  export declare const DEFAULT_SAMPLER: Readonly<SamplerConfig>;
217
267
  /** Per-event replay outcome. */
@@ -237,6 +287,19 @@ export interface EventOutcome {
237
287
  * model_wrong — it reached the model and the model read it wrong.
238
288
  */
239
289
  lostTo: 'never_looked' | 'gate_dropped' | 'slot_starved' | 'buffer_expired' | 'model_wrong' | null;
290
+ /**
291
+ * How many analyses landed inside this event. 0 or 1 for almost everything
292
+ * unless `motionRepresents` is on — see that field for why the default model
293
+ * deliberately caps it at one.
294
+ */
295
+ analyses: number;
296
+ /**
297
+ * Were `confirmSamples` of those analyses inside one `confirmWindowS` window?
298
+ * This is the ALERT layer's question, not the sensing layer's: an event can be
299
+ * caught (the model read one frame right) and still be unconfirmable, which is
300
+ * exactly the trade the corroboration gate makes.
301
+ */
302
+ confirmed: boolean;
240
303
  /** Seconds from event start to the analysis landing. `null` if never. */
241
304
  latencyS: number | null;
242
305
  }
@@ -271,6 +334,24 @@ export interface ShapeReport {
271
334
  shapeId: string;
272
335
  group: ShapeGroup;
273
336
  events: number;
337
+ /**
338
+ * Of the events the model DID read correctly, the fraction that also produced
339
+ * `confirmSamples` readings inside one window — i.e. the share of real catches
340
+ * the corroboration gate is willing to speak for.
341
+ *
342
+ * This is the cost side of the gate, and it is reported as its own number
343
+ * rather than folded into the catch rate because they are different claims:
344
+ * catch rate is what the CONNECTOR sensed, this is what the ALERT layer will
345
+ * say out loud. A gate that suppressed everything would leave catch rate
346
+ * untouched and drive this to 0.
347
+ */
348
+ confirmRate: number;
349
+ /**
350
+ * `catchRate x confirmRate` — the fraction of events that both got read right
351
+ * AND could be corroborated. THE alert-layer number, and the one to compare
352
+ * against the pre-gate catch rate.
353
+ */
354
+ confirmedCatchRate: number;
274
355
  /** Fraction of events where a look landed inside. The ceiling. */
275
356
  lookRate: number;
276
357
  /** Fraction of events the model was actually asked about. */
@@ -335,6 +416,8 @@ export declare function reportByGroup(reports: readonly ShapeReport[]): Array<{
335
416
  falseTriggerRate: number | null;
336
417
  admissionFalseTriggerRate: number;
337
418
  lookRate: number;
419
+ confirmRate: number;
420
+ confirmedCatchRate: number;
338
421
  }>;
339
422
  /**
340
423
  * The look cadence a shape needs to reach `target`.
@@ -1 +1 @@
1
- {"version":3,"file":"sensingCatchRate.d.ts","sourceRoot":"","sources":["../src/sensingCatchRate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sensingCatchRate.d.ts","sourceRoot":"","sources":["../src/sensingCatchRate.ts"],"names":[],"mappings":"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"}