@camstack/addon-remote-storage 1.2.67 → 1.2.69

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-C0be_oZ_.js");
5
+ const require_shared = require("./shared-wJVLo41v.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-BBBl6gT_.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-C1oHNHV8.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-C0be_oZ_.js");
5
+ const require_shared = require("./shared-wJVLo41v.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-BBBl6gT_.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-C1oHNHV8.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
@@ -1,6 +1,6 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import * as path from "node:path";
3
- //#region ../types/dist/event-category-BZL-fdNj.mjs
3
+ //#region ../types/dist/event-category-zAv7pMUz.mjs
4
4
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
5
5
  EventCategory["SystemBoot"] = "system.boot";
6
6
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -372,6 +372,13 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
372
372
  */
373
373
  EventCategory["BatteryOnStatusChanged"] = "battery.onStatusChanged";
374
374
  /**
375
+ * Cap event fired by every device that registers the `network-link`
376
+ * capability. Mirrors the cap definition's `onStatusChanged`. Carries
377
+ * `{ deviceId, status: NetworkLinkStatus }` — a link switch or a signal
378
+ * reading that moved.
379
+ */
380
+ EventCategory["NetworkLinkOnStatusChanged"] = "network-link.onStatusChanged";
381
+ /**
375
382
  * Emitted by the battery cap provider WHEN `wakeForStream` enters the
376
383
  * "wake in progress" window — between the Baichuan wake-up issue and
377
384
  * the camera's first dialed-back RTP packet. The stream-broker
@@ -19006,6 +19013,33 @@ var RecentTracksQueryInput = object({
19006
19013
  */
19007
19014
  classes: array(string()).optional()
19008
19015
  });
19016
+ /**
19017
+ * A Summary (D359): the per-camera session envelope that references tracks.
19018
+ * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
19019
+ * served by the event-media plane by key), null until the first frame with a
19020
+ * member visible has been materialised.
19021
+ */
19022
+ var SummarySchema = object({
19023
+ id: string(),
19024
+ deviceId: number(),
19025
+ openedAt: number(),
19026
+ lastActiveAt: number(),
19027
+ sealedAt: number().nullable(),
19028
+ memberCount: number().int().nonnegative(),
19029
+ groupShotKey: string().nullable()
19030
+ });
19031
+ var SummariesQueryInput = object({
19032
+ deviceIds: array(number()).min(1),
19033
+ since: number().optional(),
19034
+ until: number().optional(),
19035
+ limit: number().int().min(1).max(200).default(50)
19036
+ });
19037
+ var SummariesPageSchema = object({ summaries: array(SummarySchema).readonly() });
19038
+ var SummaryDetailSchema = object({
19039
+ summary: SummarySchema,
19040
+ /** Member track ids, in absorption order. */
19041
+ trackIds: array(string()).readonly()
19042
+ });
19009
19043
  var RecentTracksPageSchema = object({
19010
19044
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
19011
19045
  tracks: array(TrackSchema).readonly(),
@@ -19406,7 +19440,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19406
19440
  * timeline would read as a camera that saw nothing.
19407
19441
  */
19408
19442
  classes: array(string()).optional()
19409
- }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
19443
+ }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
19410
19444
  kind: "mutation",
19411
19445
  auth: "admin"
19412
19446
  }), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({ deviceIds: array(number()).min(1).max(200) }), array(EventKindsForDeviceSchema).readonly()), method(object({
@@ -23199,6 +23233,39 @@ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, meth
23199
23233
  deviceId: number(),
23200
23234
  status: BatteryStatusSchema
23201
23235
  });
23236
+ /**
23237
+ * Network-link snapshot. Same shape for every provider (a Reolink wifi
23238
+ * camera, a Home Assistant device with a signal-strength sensor, a Tapo
23239
+ * plug): one slice under `device.runtimeState['network-link']`, one badge,
23240
+ * one Home Assistant projection.
23241
+ */
23242
+ var NetworkLinkStatusSchema = object({
23243
+ /** The link the device is on. `'unknown'` = not read yet, not "no link". */
23244
+ type: _enum([
23245
+ "wifi",
23246
+ "ethernet",
23247
+ "cellular",
23248
+ "unknown"
23249
+ ]),
23250
+ /**
23251
+ * Link quality, 0..100 inclusive, normalised by the provider from whatever
23252
+ * the firmware reports (bars, RSSI, a vendor scale). **`null` means NOT
23253
+ * KNOWN or NOT APPLICABLE** — a wired link has no signal, and a wireless
23254
+ * one whose reading has not landed must not be drawn at 0 %. Consumers
23255
+ * SKIP a null rather than coerce it.
23256
+ */
23257
+ signalPercent: number().min(0).max(100).nullable(),
23258
+ /** Raw received signal strength in dBm, when the firmware reports one. */
23259
+ rssiDbm: number().optional(),
23260
+ /** Network name of a wireless link, when the firmware reports it. */
23261
+ ssid: string().optional(),
23262
+ /** Ms epoch of the last observation. Lets consumers reason about freshness. */
23263
+ lastUpdated: number()
23264
+ });
23265
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.Light, DeviceType.Lock, DeviceType.Siren, object({
23266
+ deviceId: number(),
23267
+ status: NetworkLinkStatusSchema
23268
+ });
23202
23269
  object({
23203
23270
  on: boolean(),
23204
23271
  /** Ms epoch of the last transition. 0 if never observed. */
@@ -32421,6 +32488,12 @@ Object.freeze({
32421
32488
  addonId: null,
32422
32489
  access: "view"
32423
32490
  },
32491
+ "pipelineAnalytics.getSummary": {
32492
+ capName: "pipeline-analytics",
32493
+ capScope: "device",
32494
+ addonId: null,
32495
+ access: "view"
32496
+ },
32424
32497
  "pipelineAnalytics.getTrack": {
32425
32498
  capName: "pipeline-analytics",
32426
32499
  capScope: "device",
@@ -32499,6 +32572,12 @@ Object.freeze({
32499
32572
  addonId: null,
32500
32573
  access: "view"
32501
32574
  },
32575
+ "pipelineAnalytics.listSummaries": {
32576
+ capName: "pipeline-analytics",
32577
+ capScope: "device",
32578
+ addonId: null,
32579
+ access: "view"
32580
+ },
32502
32581
  "pipelineAnalytics.listTrackMedia": {
32503
32582
  capName: "pipeline-analytics",
32504
32583
  capScope: "device",
@@ -36194,6 +36273,11 @@ Object.freeze({
36194
36273
  form: "array",
36195
36274
  optional: true
36196
36275
  }],
36276
+ "pipelineAnalytics.listSummaries": [{
36277
+ name: "deviceIds",
36278
+ form: "array",
36279
+ optional: false
36280
+ }],
36197
36281
  "pipelineAnalytics.listTrackMedia": [{
36198
36282
  name: "deviceId",
36199
36283
  form: "single",
@@ -23,7 +23,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
23
23
  let node_crypto = require("node:crypto");
24
24
  let node_path = require("node:path");
25
25
  node_path = __toESM(node_path);
26
- //#region ../types/dist/event-category-BZL-fdNj.mjs
26
+ //#region ../types/dist/event-category-zAv7pMUz.mjs
27
27
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
28
28
  EventCategory["SystemBoot"] = "system.boot";
29
29
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -395,6 +395,13 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
395
395
  */
396
396
  EventCategory["BatteryOnStatusChanged"] = "battery.onStatusChanged";
397
397
  /**
398
+ * Cap event fired by every device that registers the `network-link`
399
+ * capability. Mirrors the cap definition's `onStatusChanged`. Carries
400
+ * `{ deviceId, status: NetworkLinkStatus }` — a link switch or a signal
401
+ * reading that moved.
402
+ */
403
+ EventCategory["NetworkLinkOnStatusChanged"] = "network-link.onStatusChanged";
404
+ /**
398
405
  * Emitted by the battery cap provider WHEN `wakeForStream` enters the
399
406
  * "wake in progress" window — between the Baichuan wake-up issue and
400
407
  * the camera's first dialed-back RTP packet. The stream-broker
@@ -19029,6 +19036,33 @@ var RecentTracksQueryInput = object({
19029
19036
  */
19030
19037
  classes: array(string()).optional()
19031
19038
  });
19039
+ /**
19040
+ * A Summary (D359): the per-camera session envelope that references tracks.
19041
+ * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
19042
+ * served by the event-media plane by key), null until the first frame with a
19043
+ * member visible has been materialised.
19044
+ */
19045
+ var SummarySchema = object({
19046
+ id: string(),
19047
+ deviceId: number(),
19048
+ openedAt: number(),
19049
+ lastActiveAt: number(),
19050
+ sealedAt: number().nullable(),
19051
+ memberCount: number().int().nonnegative(),
19052
+ groupShotKey: string().nullable()
19053
+ });
19054
+ var SummariesQueryInput = object({
19055
+ deviceIds: array(number()).min(1),
19056
+ since: number().optional(),
19057
+ until: number().optional(),
19058
+ limit: number().int().min(1).max(200).default(50)
19059
+ });
19060
+ var SummariesPageSchema = object({ summaries: array(SummarySchema).readonly() });
19061
+ var SummaryDetailSchema = object({
19062
+ summary: SummarySchema,
19063
+ /** Member track ids, in absorption order. */
19064
+ trackIds: array(string()).readonly()
19065
+ });
19032
19066
  var RecentTracksPageSchema = object({
19033
19067
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
19034
19068
  tracks: array(TrackSchema).readonly(),
@@ -19429,7 +19463,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19429
19463
  * timeline would read as a camera that saw nothing.
19430
19464
  */
19431
19465
  classes: array(string()).optional()
19432
- }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
19466
+ }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
19433
19467
  kind: "mutation",
19434
19468
  auth: "admin"
19435
19469
  }), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({ deviceIds: array(number()).min(1).max(200) }), array(EventKindsForDeviceSchema).readonly()), method(object({
@@ -23222,6 +23256,39 @@ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, meth
23222
23256
  deviceId: number(),
23223
23257
  status: BatteryStatusSchema
23224
23258
  });
23259
+ /**
23260
+ * Network-link snapshot. Same shape for every provider (a Reolink wifi
23261
+ * camera, a Home Assistant device with a signal-strength sensor, a Tapo
23262
+ * plug): one slice under `device.runtimeState['network-link']`, one badge,
23263
+ * one Home Assistant projection.
23264
+ */
23265
+ var NetworkLinkStatusSchema = object({
23266
+ /** The link the device is on. `'unknown'` = not read yet, not "no link". */
23267
+ type: _enum([
23268
+ "wifi",
23269
+ "ethernet",
23270
+ "cellular",
23271
+ "unknown"
23272
+ ]),
23273
+ /**
23274
+ * Link quality, 0..100 inclusive, normalised by the provider from whatever
23275
+ * the firmware reports (bars, RSSI, a vendor scale). **`null` means NOT
23276
+ * KNOWN or NOT APPLICABLE** — a wired link has no signal, and a wireless
23277
+ * one whose reading has not landed must not be drawn at 0 %. Consumers
23278
+ * SKIP a null rather than coerce it.
23279
+ */
23280
+ signalPercent: number().min(0).max(100).nullable(),
23281
+ /** Raw received signal strength in dBm, when the firmware reports one. */
23282
+ rssiDbm: number().optional(),
23283
+ /** Network name of a wireless link, when the firmware reports it. */
23284
+ ssid: string().optional(),
23285
+ /** Ms epoch of the last observation. Lets consumers reason about freshness. */
23286
+ lastUpdated: number()
23287
+ });
23288
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.Light, DeviceType.Lock, DeviceType.Siren, object({
23289
+ deviceId: number(),
23290
+ status: NetworkLinkStatusSchema
23291
+ });
23225
23292
  object({
23226
23293
  on: boolean(),
23227
23294
  /** Ms epoch of the last transition. 0 if never observed. */
@@ -32444,6 +32511,12 @@ Object.freeze({
32444
32511
  addonId: null,
32445
32512
  access: "view"
32446
32513
  },
32514
+ "pipelineAnalytics.getSummary": {
32515
+ capName: "pipeline-analytics",
32516
+ capScope: "device",
32517
+ addonId: null,
32518
+ access: "view"
32519
+ },
32447
32520
  "pipelineAnalytics.getTrack": {
32448
32521
  capName: "pipeline-analytics",
32449
32522
  capScope: "device",
@@ -32522,6 +32595,12 @@ Object.freeze({
32522
32595
  addonId: null,
32523
32596
  access: "view"
32524
32597
  },
32598
+ "pipelineAnalytics.listSummaries": {
32599
+ capName: "pipeline-analytics",
32600
+ capScope: "device",
32601
+ addonId: null,
32602
+ access: "view"
32603
+ },
32525
32604
  "pipelineAnalytics.listTrackMedia": {
32526
32605
  capName: "pipeline-analytics",
32527
32606
  capScope: "device",
@@ -36217,6 +36296,11 @@ Object.freeze({
36217
36296
  form: "array",
36218
36297
  optional: true
36219
36298
  }],
36299
+ "pipelineAnalytics.listSummaries": [{
36300
+ name: "deviceIds",
36301
+ form: "array",
36302
+ optional: false
36303
+ }],
36220
36304
  "pipelineAnalytics.listTrackMedia": [{
36221
36305
  name: "deviceId",
36222
36306
  form: "single",
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-C0be_oZ_.js");
5
+ const require_shared = require("./shared-wJVLo41v.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-BBBl6gT_.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, s as storageProviderCapability } from "./shared-C1oHNHV8.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-C0be_oZ_.js");
5
+ const require_shared = require("./shared-wJVLo41v.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-BBBl6gT_.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-C1oHNHV8.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.67",
3
+ "version": "1.2.69",
4
4
  "description": "Remote storage providers (SFTP, S3, WebDAV, SMB) — unifies remote backends behind the storage-provider cap",
5
5
  "keywords": [
6
6
  "camstack",