@camstack/addon-provider-rtsp 1.2.84 → 1.2.85

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/addon.js CHANGED
@@ -25419,6 +25419,59 @@ var IdentitySampleInfoSchema = object({
25419
25419
  deviceId: number().int().optional(),
25420
25420
  base64: string().optional()
25421
25421
  });
25422
+ /**
25423
+ * One enrolled sample, judged against the gallery it lives in.
25424
+ *
25425
+ * The gallery is the one input to recognition nobody re-reads: a sample
25426
+ * enrolled from the wrong face keeps voting forever, and because the matches it
25427
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
25428
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
25429
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
25430
+ * where every other cross-identity pair sits under 0.50.
25431
+ */
25432
+ var IdentitySampleAuditRowSchema = object({
25433
+ sampleId: string(),
25434
+ enrolledAt: number().int(),
25435
+ deviceId: number().int().optional(),
25436
+ source: _enum(["detected", "photo"]),
25437
+ /** The enrolled crop's media key, so the panel can show the evidence. */
25438
+ mediaKey: string().optional(),
25439
+ /**
25440
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
25441
+ * across feature spaces is a well-formed float with no meaning. Every number
25442
+ * below then says nothing — it must read as "cannot say", never as an
25443
+ * accusation and never as a clean bill: this list ends in a Remove button.
25444
+ */
25445
+ comparable: boolean(),
25446
+ /** Mean cosine against this person's other samples. Null when there are none
25447
+ * to compare with — never 0, which would read as "opposite". */
25448
+ selfMean: number().nullable(),
25449
+ /** The other person this sample looks most like, when it looks like one.
25450
+ * This is the half that convicts: not looking like yourself can be a hard
25451
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
25452
+ bestForeign: object({
25453
+ identityId: string(),
25454
+ name: string(),
25455
+ score: number()
25456
+ }).optional(),
25457
+ /** 0 = nothing to say. Higher = look at this one sooner. */
25458
+ suspicion: number()
25459
+ });
25460
+ var IdentitySampleAuditSchema = object({
25461
+ identityId: string(),
25462
+ name: string(),
25463
+ /** The cluster face model every comparison was made in. */
25464
+ modelId: string(),
25465
+ totalSamples: number().int(),
25466
+ comparableSamples: number().int(),
25467
+ flagged: number().int(),
25468
+ /** The bar `flagged` counts against, so the panel states the RULE and not
25469
+ * only its current result. */
25470
+ flagThreshold: number(),
25471
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
25472
+ * operator asked to see the gallery, not only its accusations. */
25473
+ rows: array(IdentitySampleAuditRowSchema).readonly()
25474
+ });
25422
25475
  var FaceInfoSchema = object({
25423
25476
  faceId: string(),
25424
25477
  deviceId: number().int(),
@@ -25570,7 +25623,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
25570
25623
  }), method(object({ id: string() }), _void(), {
25571
25624
  kind: "mutation",
25572
25625
  auth: "admin"
25573
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
25626
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
25574
25627
  identityId: string(),
25575
25628
  sampleId: string()
25576
25629
  }), _void(), {
@@ -36129,6 +36182,12 @@ Object.freeze({
36129
36182
  addonId: null,
36130
36183
  access: "create"
36131
36184
  },
36185
+ "faceGallery.auditIdentitySamples": {
36186
+ capName: "face-gallery",
36187
+ capScope: "system",
36188
+ addonId: null,
36189
+ access: "view"
36190
+ },
36132
36191
  "faceGallery.createIdentity": {
36133
36192
  capName: "face-gallery",
36134
36193
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -25395,6 +25395,59 @@ var IdentitySampleInfoSchema = object({
25395
25395
  deviceId: number().int().optional(),
25396
25396
  base64: string().optional()
25397
25397
  });
25398
+ /**
25399
+ * One enrolled sample, judged against the gallery it lives in.
25400
+ *
25401
+ * The gallery is the one input to recognition nobody re-reads: a sample
25402
+ * enrolled from the wrong face keeps voting forever, and because the matches it
25403
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
25404
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
25405
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
25406
+ * where every other cross-identity pair sits under 0.50.
25407
+ */
25408
+ var IdentitySampleAuditRowSchema = object({
25409
+ sampleId: string(),
25410
+ enrolledAt: number().int(),
25411
+ deviceId: number().int().optional(),
25412
+ source: _enum(["detected", "photo"]),
25413
+ /** The enrolled crop's media key, so the panel can show the evidence. */
25414
+ mediaKey: string().optional(),
25415
+ /**
25416
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
25417
+ * across feature spaces is a well-formed float with no meaning. Every number
25418
+ * below then says nothing — it must read as "cannot say", never as an
25419
+ * accusation and never as a clean bill: this list ends in a Remove button.
25420
+ */
25421
+ comparable: boolean(),
25422
+ /** Mean cosine against this person's other samples. Null when there are none
25423
+ * to compare with — never 0, which would read as "opposite". */
25424
+ selfMean: number().nullable(),
25425
+ /** The other person this sample looks most like, when it looks like one.
25426
+ * This is the half that convicts: not looking like yourself can be a hard
25427
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
25428
+ bestForeign: object({
25429
+ identityId: string(),
25430
+ name: string(),
25431
+ score: number()
25432
+ }).optional(),
25433
+ /** 0 = nothing to say. Higher = look at this one sooner. */
25434
+ suspicion: number()
25435
+ });
25436
+ var IdentitySampleAuditSchema = object({
25437
+ identityId: string(),
25438
+ name: string(),
25439
+ /** The cluster face model every comparison was made in. */
25440
+ modelId: string(),
25441
+ totalSamples: number().int(),
25442
+ comparableSamples: number().int(),
25443
+ flagged: number().int(),
25444
+ /** The bar `flagged` counts against, so the panel states the RULE and not
25445
+ * only its current result. */
25446
+ flagThreshold: number(),
25447
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
25448
+ * operator asked to see the gallery, not only its accusations. */
25449
+ rows: array(IdentitySampleAuditRowSchema).readonly()
25450
+ });
25398
25451
  var FaceInfoSchema = object({
25399
25452
  faceId: string(),
25400
25453
  deviceId: number().int(),
@@ -25546,7 +25599,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
25546
25599
  }), method(object({ id: string() }), _void(), {
25547
25600
  kind: "mutation",
25548
25601
  auth: "admin"
25549
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
25602
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
25550
25603
  identityId: string(),
25551
25604
  sampleId: string()
25552
25605
  }), _void(), {
@@ -36105,6 +36158,12 @@ Object.freeze({
36105
36158
  addonId: null,
36106
36159
  access: "create"
36107
36160
  },
36161
+ "faceGallery.auditIdentitySamples": {
36162
+ capName: "face-gallery",
36163
+ capScope: "system",
36164
+ addonId: null,
36165
+ access: "view"
36166
+ },
36108
36167
  "faceGallery.createIdentity": {
36109
36168
  capName: "face-gallery",
36110
36169
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-rtsp",
3
- "version": "1.2.84",
3
+ "version": "1.2.85",
4
4
  "description": "Generic RTSP camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",