@camstack/addon-remote-storage 1.2.83 → 1.2.84

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/s3.addon.js CHANGED
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_shared = require("./shared-BW3uxISk.js");
5
+ const require_shared = require("./shared-GkmTwSS1.js");
6
6
  let node_stream = require("node:stream");
7
7
  let _aws_sdk_client_s3 = require("@aws-sdk/client-s3");
8
8
  let _aws_sdk_lib_storage = require("@aws-sdk/lib-storage");
package/dist/s3.addon.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-CxqHJ1Hd.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-Dd6Ix8wk.mjs";
2
2
  import { PassThrough } from "node:stream";
3
3
  import { DeleteObjectCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectsV2Command, PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
4
4
  import { Upload } from "@aws-sdk/lib-storage";
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_shared = require("./shared-BW3uxISk.js");
5
+ const require_shared = require("./shared-GkmTwSS1.js");
6
6
  let ssh2 = require("ssh2");
7
7
  let node_path = require("node:path");
8
8
  node_path = require_shared.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-CxqHJ1Hd.mjs";
1
+ import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-Dd6Ix8wk.mjs";
2
2
  import { Client } from "ssh2";
3
3
  import * as path from "node:path";
4
4
  //#region src/providers/sftp/sftp-config-schema.ts
@@ -24198,6 +24198,59 @@ var IdentitySampleInfoSchema = object({
24198
24198
  deviceId: number().int().optional(),
24199
24199
  base64: string().optional()
24200
24200
  });
24201
+ /**
24202
+ * One enrolled sample, judged against the gallery it lives in.
24203
+ *
24204
+ * The gallery is the one input to recognition nobody re-reads: a sample
24205
+ * enrolled from the wrong face keeps voting forever, and because the matches it
24206
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
24207
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
24208
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
24209
+ * where every other cross-identity pair sits under 0.50.
24210
+ */
24211
+ var IdentitySampleAuditRowSchema = object({
24212
+ sampleId: string(),
24213
+ enrolledAt: number().int(),
24214
+ deviceId: number().int().optional(),
24215
+ source: _enum(["detected", "photo"]),
24216
+ /** The enrolled crop's media key, so the panel can show the evidence. */
24217
+ mediaKey: string().optional(),
24218
+ /**
24219
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
24220
+ * across feature spaces is a well-formed float with no meaning. Every number
24221
+ * below then says nothing — it must read as "cannot say", never as an
24222
+ * accusation and never as a clean bill: this list ends in a Remove button.
24223
+ */
24224
+ comparable: boolean(),
24225
+ /** Mean cosine against this person's other samples. Null when there are none
24226
+ * to compare with — never 0, which would read as "opposite". */
24227
+ selfMean: number().nullable(),
24228
+ /** The other person this sample looks most like, when it looks like one.
24229
+ * This is the half that convicts: not looking like yourself can be a hard
24230
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
24231
+ bestForeign: object({
24232
+ identityId: string(),
24233
+ name: string(),
24234
+ score: number()
24235
+ }).optional(),
24236
+ /** 0 = nothing to say. Higher = look at this one sooner. */
24237
+ suspicion: number()
24238
+ });
24239
+ var IdentitySampleAuditSchema = object({
24240
+ identityId: string(),
24241
+ name: string(),
24242
+ /** The cluster face model every comparison was made in. */
24243
+ modelId: string(),
24244
+ totalSamples: number().int(),
24245
+ comparableSamples: number().int(),
24246
+ flagged: number().int(),
24247
+ /** The bar `flagged` counts against, so the panel states the RULE and not
24248
+ * only its current result. */
24249
+ flagThreshold: number(),
24250
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
24251
+ * operator asked to see the gallery, not only its accusations. */
24252
+ rows: array(IdentitySampleAuditRowSchema).readonly()
24253
+ });
24201
24254
  var FaceInfoSchema = object({
24202
24255
  faceId: string(),
24203
24256
  deviceId: number().int(),
@@ -24349,7 +24402,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
24349
24402
  }), method(object({ id: string() }), _void(), {
24350
24403
  kind: "mutation",
24351
24404
  auth: "admin"
24352
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
24405
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
24353
24406
  identityId: string(),
24354
24407
  sampleId: string()
24355
24408
  }), _void(), {
@@ -31576,6 +31629,12 @@ Object.freeze({
31576
31629
  addonId: null,
31577
31630
  access: "create"
31578
31631
  },
31632
+ "faceGallery.auditIdentitySamples": {
31633
+ capName: "face-gallery",
31634
+ capScope: "system",
31635
+ addonId: null,
31636
+ access: "view"
31637
+ },
31579
31638
  "faceGallery.createIdentity": {
31580
31639
  capName: "face-gallery",
31581
31640
  capScope: "system",
@@ -24221,6 +24221,59 @@ var IdentitySampleInfoSchema = object({
24221
24221
  deviceId: number().int().optional(),
24222
24222
  base64: string().optional()
24223
24223
  });
24224
+ /**
24225
+ * One enrolled sample, judged against the gallery it lives in.
24226
+ *
24227
+ * The gallery is the one input to recognition nobody re-reads: a sample
24228
+ * enrolled from the wrong face keeps voting forever, and because the matches it
24229
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
24230
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
24231
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
24232
+ * where every other cross-identity pair sits under 0.50.
24233
+ */
24234
+ var IdentitySampleAuditRowSchema = object({
24235
+ sampleId: string(),
24236
+ enrolledAt: number().int(),
24237
+ deviceId: number().int().optional(),
24238
+ source: _enum(["detected", "photo"]),
24239
+ /** The enrolled crop's media key, so the panel can show the evidence. */
24240
+ mediaKey: string().optional(),
24241
+ /**
24242
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
24243
+ * across feature spaces is a well-formed float with no meaning. Every number
24244
+ * below then says nothing — it must read as "cannot say", never as an
24245
+ * accusation and never as a clean bill: this list ends in a Remove button.
24246
+ */
24247
+ comparable: boolean(),
24248
+ /** Mean cosine against this person's other samples. Null when there are none
24249
+ * to compare with — never 0, which would read as "opposite". */
24250
+ selfMean: number().nullable(),
24251
+ /** The other person this sample looks most like, when it looks like one.
24252
+ * This is the half that convicts: not looking like yourself can be a hard
24253
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
24254
+ bestForeign: object({
24255
+ identityId: string(),
24256
+ name: string(),
24257
+ score: number()
24258
+ }).optional(),
24259
+ /** 0 = nothing to say. Higher = look at this one sooner. */
24260
+ suspicion: number()
24261
+ });
24262
+ var IdentitySampleAuditSchema = object({
24263
+ identityId: string(),
24264
+ name: string(),
24265
+ /** The cluster face model every comparison was made in. */
24266
+ modelId: string(),
24267
+ totalSamples: number().int(),
24268
+ comparableSamples: number().int(),
24269
+ flagged: number().int(),
24270
+ /** The bar `flagged` counts against, so the panel states the RULE and not
24271
+ * only its current result. */
24272
+ flagThreshold: number(),
24273
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
24274
+ * operator asked to see the gallery, not only its accusations. */
24275
+ rows: array(IdentitySampleAuditRowSchema).readonly()
24276
+ });
24224
24277
  var FaceInfoSchema = object({
24225
24278
  faceId: string(),
24226
24279
  deviceId: number().int(),
@@ -24372,7 +24425,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
24372
24425
  }), method(object({ id: string() }), _void(), {
24373
24426
  kind: "mutation",
24374
24427
  auth: "admin"
24375
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
24428
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
24376
24429
  identityId: string(),
24377
24430
  sampleId: string()
24378
24431
  }), _void(), {
@@ -31599,6 +31652,12 @@ Object.freeze({
31599
31652
  addonId: null,
31600
31653
  access: "create"
31601
31654
  },
31655
+ "faceGallery.auditIdentitySamples": {
31656
+ capName: "face-gallery",
31657
+ capScope: "system",
31658
+ addonId: null,
31659
+ access: "view"
31660
+ },
31602
31661
  "faceGallery.createIdentity": {
31603
31662
  capName: "face-gallery",
31604
31663
  capScope: "system",
package/dist/smb.addon.js CHANGED
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_shared = require("./shared-BW3uxISk.js");
5
+ const require_shared = require("./shared-GkmTwSS1.js");
6
6
  let node_crypto = require("node:crypto");
7
7
  let node_path = require("node:path");
8
8
  node_path = require_shared.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, s as storageProviderCapability } from "./shared-CxqHJ1Hd.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, s as storageProviderCapability } from "./shared-Dd6Ix8wk.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import * as path from "node:path";
4
4
  import * as fsp from "node:fs/promises";
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_shared = require("./shared-BW3uxISk.js");
5
+ const require_shared = require("./shared-GkmTwSS1.js");
6
6
  let node_stream = require("node:stream");
7
7
  let webdav = require("webdav");
8
8
  //#region src/providers/webdav/webdav-config-schema.ts
@@ -1,4 +1,4 @@
1
- import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-CxqHJ1Hd.mjs";
1
+ import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-Dd6Ix8wk.mjs";
2
2
  import { PassThrough } from "node:stream";
3
3
  import { AuthType, createClient } from "webdav";
4
4
  //#region src/providers/webdav/webdav-config-schema.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-remote-storage",
3
- "version": "1.2.83",
3
+ "version": "1.2.84",
4
4
  "description": "Remote storage providers (SFTP, S3, WebDAV, SMB) — unifies remote backends behind the storage-provider cap",
5
5
  "keywords": [
6
6
  "camstack",