@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.
- package/dist/AudienceAnalyzeClient.d.ts +12 -1
- package/dist/AudienceAnalyzeClient.d.ts.map +1 -1
- package/dist/AudienceAnalyzeClient.js +1 -0
- package/dist/AudienceAnalyzeClient.js.map +1 -1
- package/dist/ChannelProber.d.ts +22 -0
- package/dist/ChannelProber.d.ts.map +1 -1
- package/dist/ChannelProber.js +47 -3
- package/dist/ChannelProber.js.map +1 -1
- package/dist/CloudSensingManager.d.ts.map +1 -1
- package/dist/CloudSensingManager.js +8 -1
- package/dist/CloudSensingManager.js.map +1 -1
- package/dist/EdgeAgent.js +1 -1
- package/dist/OnvifClient.d.ts +135 -3
- package/dist/OnvifClient.d.ts.map +1 -1
- package/dist/OnvifClient.js +303 -11
- package/dist/OnvifClient.js.map +1 -1
- package/dist/diagnose.d.ts +1 -1
- package/dist/diagnose.js +1 -1
- package/dist/sensingCatchRate.d.ts +83 -0
- package/dist/sensingCatchRate.d.ts.map +1 -1
- package/dist/sensingCatchRate.js +63 -2
- package/dist/sensingCatchRate.js.map +1 -1
- package/package.json +1 -1
package/dist/OnvifClient.js
CHANGED
|
@@ -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
|
|
231
|
+
return this.endpointFor(this.deviceServicePath ?? exports.ONVIF_DEVICE_SERVICE_PATHS[0]);
|
|
91
232
|
}
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
package/dist/OnvifClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnvifClient.js","sourceRoot":"","sources":["../src/OnvifClient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OnvifClient.js","sourceRoot":"","sources":["../src/OnvifClient.ts"],"names":[],"mappings":";;;AAwIA,oDAuCC;AAQD,4DAwCC;AAoCD,gDAoBC;AAED,8BAOC;AAcD,8CASC;AAGD,wBAGC;AAGD,0BASC;AAzUD,mCAAiD;AACjD,mEAA6E;AAkD7E,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;AAsDD,wDAAwD;AACxD,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,8EAA8E;AAC9E,SAAS,aAAa,CAAC,SAAiB;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7E,6EAA6E;IAC7E,8DAA8D;IAC9D,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,mBAAU,EAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5F,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnG,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,oBAAoB,CAClC,MAA4C;IAE5C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/D,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,EAAE,GAAG,mEAAmE,CAAC;IAC/E,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,aAAa;QAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjC,yEAAyE;IACzE,0EAA0E;IAC1E,0CAA0C;IAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SACxC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAClC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,OAAO;QACL,KAAK;QACL,KAAK;QACL,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QAChD,UAAU;QACV,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI;QACnC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK;KAC3C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,wBAAwB,CAAC,IASxC;IACC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC3B,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,6EAA6E;IAC7E,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE3E,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,UAAU,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAA,oBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAEnD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvE,IAAI,MAAM;QAAE,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG;QAC5B,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,KAAK,IAAI,EAAE,IAAI,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3E,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG;QACZ,aAAa,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;QAC1C,UAAU,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG;QACzC,UAAU,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG;QACzC,QAAQ,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;QAChC,aAAa,QAAQ,GAAG;KACzB,CAAC;IACF,IAAI,SAAS,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IACxE,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvF,OAAO,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,mEAAmE;AACnE,SAAS,QAAQ,CACf,OAAkE,EAClE,IAAY;IAEZ,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACU,QAAA,0BAA0B,GAAG,CAAC,uBAAuB,EAAE,iBAAiB,CAAU,CAAC;AAWhG,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;IAwBtB,YAAY,OAA2B,EAAE,MAAmB;QAjB5D,gFAAgF;QACxE,eAAU,GAAkB,IAAI,CAAC;QACzC,yEAAyE;QACjE,sBAAiB,GAAkB,IAAI,CAAC;QAChD,2EAA2E;QACnE,oBAAe,GAA2B,IAAI,CAAC;QACvD,8EAA8E;QACtE,aAAQ,GAAG,CAAC,CAAC;QACrB;;;;;WAKG;QACK,oBAAe,GAAG,KAAK,CAAC;QACxB,sBAAiB,GAA4B,EAAE,CAAC;QAGtD,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,+EAA+E;IAC/E,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,IAAI,kCAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,oBAAoB;QAClB,OAAO,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,6EAA6E;IACrE,KAAK,CAAC,IAAI,CAChB,QAAgB,EAChB,GAAW,EACX,aAA4B;QAE5B,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,qCAAqC;SACtD,CAAC;QACF,IAAI,aAAa;YAAE,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;QACzD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;QAClG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,UAAU,CAAC,aAAa,EAAE,SAAS,QAAQ,iBAAkB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED,4EAA4E;IACpE,gBAAgB,CAAC,QAAgB,EAAE,SAA0B;QACnE,IAAI,GAAG,GAAG,QAAQ,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5B,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP;6EACiE;QACnE,CAAC;QACD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,wBAAwB,CAAC;YAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,MAAM;YACd,GAAG;YACH,SAAS;YACT,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,IAAY;QAC/C,kEAAkE;QAClE,4EAA4E;QAC5E,MAAM,WAAW,GAAG,GAAW,EAAE,CAC/B,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QAEnE,yEAAyE;QACzE,8BAA8B;QAC9B,IAAI,aAAa,GAAG,IAAI,CAAC,eAAe;YACtC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC;YACvD,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,aAAa,CAAC,CAAC;QAElE,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YAC3B,uEAAuE;YACvE,kDAAkD;YAClD,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;YAClF,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACjC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM;wBACxC,CAAC,CAAC,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,SAAS,CAAC,SAAS,EAAE;wBAC1E,CAAC,CAAC,aAAa,SAAS,CAAC,SAAS,EAAE,CAAC;oBACvC,MAAM,IAAI,UAAU,CAClB,MAAM,EACN,yEAAyE,MAAM,KAAK;wBAClF,0EAA0E,CAC7E,CAAC;gBACJ,CAAC;gBACD,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,aAAa,CAAC,CAAC;YAChE,CAAC;iBAAM,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACtF,mEAAmE;gBACnE,sEAAsE;gBACtE,MAAM,IAAI,UAAU,CAClB,MAAM,EACN,gFAAgF;oBAC9E,4EAA4E;oBAC5E,4DAA4D,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,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;;;;;;;;;;;;;;OAcG;IACK,mBAAmB,CAAC,GAAe;QACzC,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8EAA8E;IACtE,KAAK,CAAC,UAAU,CAAC,IAAY;QACnC,IAAI,IAAI,CAAC,iBAAiB;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAC;QAE7F,IAAI,UAAU,GAAsB,IAAI,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,kCAA0B,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC1D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,+CAA+C;gBAC9E,OAAO,GAAG,CAAC;YACb,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,QAAQ,GACZ,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;gBACpF,IAAI,CAAC,UAAU;oBAAE,UAAU,GAAG,QAAQ,CAAC;gBACvC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;oBAAE,MAAM,QAAQ,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,MAAM,UAAU,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;IACzF,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,oBAAoB;QACxB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAC/B,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,UAAU,CAC/B,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,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YACxC,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;IAED;;;;;;;;;;;;;;;;;OAiBG;IACK,iBAAiB,CAAC,YAAoB,EAAE,CAAM;QACpD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,OAAO;QAC3C,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,KAAK,IAAI,CAAC,IAAI;YAAE,OAAO;QAC7E,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC;YAAE,OAAO;QAChF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC1B,IAAI,EAAE,kCAAkC;YACxC,YAAY;YACZ,cAAc;YACd,aAAa,EAAE,IAAI,CAAC,IAAI;YACxB,OAAO,EACL,iCAAiC,cAAc,uCAAuC;gBACtF,iFAAiF;gBACjF,sFAAsF;gBACtF,kFAAkF;gBAClF,qDAAqD;SACxD,CAAC,CAAC;IACL,CAAC;CACF;AA/TD,kCA+TC"}
|
package/dist/diagnose.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ export interface DiagnosticReport {
|
|
|
31
31
|
skipped: number;
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
|
-
declare const SDK_VERSION = "0.2.
|
|
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.
|
|
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":"AAqEA;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;AAErE,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAAwD,CAAC;AAEvG;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,UAAU,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,eAAe,GAAG,oBAAoB,CAAC;IAC3F;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAuElD,CAAC;AAIH,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAE1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,GACtC,aAAa,GAAG,IAAI,CAOtB;AAMD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhG;AAMD,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,eAAe,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;;;;;;;OAiBG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;;;OASG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,cAAc,EAAE,SAAS,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sensingCatchRate.d.ts","sourceRoot":"","sources":["../src/sensingCatchRate.ts"],"names":[],"mappings":"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"}
|