@camstack/addon-provider-hikvision 1.2.85 → 1.2.86

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
@@ -10825,12 +10825,30 @@ var BackupDestinationInfoSchema = object({
10825
10825
  lastSuccessAt: number().optional(),
10826
10826
  /** Newest-archive size from `manifests.json`, or undefined. */
10827
10827
  lastSuccessSizeBytes: number().optional(),
10828
- /** Per-destination cron expression. Empty = manual-only (no schedule). */
10828
+ /**
10829
+ * Cron cadence(s) of the ENABLED schedules that fan out to this
10830
+ * destination, comma-joined. Absent when no enabled schedule targets it
10831
+ * — a destination nothing is scheduled to write to must not advertise a
10832
+ * cadence (D384). This is never the `backup_destination_policies.cron`
10833
+ * column: that per-location cron has scheduled nothing since 2026-07-28
10834
+ * and reading it made a destination with a DISABLED schedule claim a
10835
+ * nightly run.
10836
+ */
10829
10837
  cron: string().optional(),
10830
- /** ms-epoch of next computed firing for this destination's cron, if any. */
10838
+ /** ms-epoch of the next firing across those schedules (earliest), if any. */
10831
10839
  nextRunAt: number().optional(),
10832
- /** ms-epoch of last successful scheduled run (mirrors policy.lastRunAt). */
10833
- lastRunAt: number().optional()
10840
+ /**
10841
+ * ms-epoch of the last time a run ATTEMPTED to write here — success or
10842
+ * failure. Never a success stamp: pair it with `lastSuccessAt` (the
10843
+ * newest archive that actually landed) and `lastError`.
10844
+ */
10845
+ lastAttemptAt: number().optional(),
10846
+ /**
10847
+ * Why the last attempt failed, verbatim. Absent when the last attempt
10848
+ * landed the archive. A destination that has never been written to has
10849
+ * neither this nor `lastAttemptAt`.
10850
+ */
10851
+ lastError: string().optional()
10834
10852
  });
10835
10853
  /**
10836
10854
  * Per-archive entry returned by `backup.listArchives({ destinationId })`.
@@ -10993,8 +11011,16 @@ var BackupScheduleSchema = object({
10993
11011
  retentionCount: number().int().min(1).max(1e3),
10994
11012
  /** Optional subset of source locations to include; omitted = all. */
10995
11013
  dataSources: array(string()).readonly().optional(),
10996
- /** ms-epoch of last successful run. */
10997
- lastRunAt: number().optional(),
11014
+ /**
11015
+ * ms-epoch of the last tick that FIRED this schedule. Stamped before the
11016
+ * archive runs (it is the dedupe anchor), so it says "attempted", never
11017
+ * "succeeded" — a run refused by every destination stamps it too.
11018
+ */
11019
+ lastAttemptAt: number().optional(),
11020
+ /** ms-epoch of the last run of this schedule that landed at ≥1 destination. */
11021
+ lastSuccessAt: number().optional(),
11022
+ /** Why the last fired run failed, verbatim. Absent when it succeeded. */
11023
+ lastError: string().optional(),
10998
11024
  /** ms-epoch of next computed firing (read-only, filled on list). */
10999
11025
  nextRunAt: number().optional()
11000
11026
  });
@@ -11043,14 +11069,7 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
11043
11069
  locationId: string(),
11044
11070
  enabled: boolean(),
11045
11071
  retentionCount: number().int().min(1).max(1e3),
11046
- label: string().optional(),
11047
- /**
11048
- * Per-destination cron expression. Empty string clears the
11049
- * schedule (manual-only). Validated server-side via croner;
11050
- * malformed expressions reject the upsert with an actionable
11051
- * message.
11052
- */
11053
- cron: string().optional()
11072
+ label: string().optional()
11054
11073
  }), _void(), {
11055
11074
  kind: "mutation",
11056
11075
  auth: "admin"
package/dist/addon.mjs CHANGED
@@ -10826,12 +10826,30 @@ var BackupDestinationInfoSchema = object({
10826
10826
  lastSuccessAt: number().optional(),
10827
10827
  /** Newest-archive size from `manifests.json`, or undefined. */
10828
10828
  lastSuccessSizeBytes: number().optional(),
10829
- /** Per-destination cron expression. Empty = manual-only (no schedule). */
10829
+ /**
10830
+ * Cron cadence(s) of the ENABLED schedules that fan out to this
10831
+ * destination, comma-joined. Absent when no enabled schedule targets it
10832
+ * — a destination nothing is scheduled to write to must not advertise a
10833
+ * cadence (D384). This is never the `backup_destination_policies.cron`
10834
+ * column: that per-location cron has scheduled nothing since 2026-07-28
10835
+ * and reading it made a destination with a DISABLED schedule claim a
10836
+ * nightly run.
10837
+ */
10830
10838
  cron: string().optional(),
10831
- /** ms-epoch of next computed firing for this destination's cron, if any. */
10839
+ /** ms-epoch of the next firing across those schedules (earliest), if any. */
10832
10840
  nextRunAt: number().optional(),
10833
- /** ms-epoch of last successful scheduled run (mirrors policy.lastRunAt). */
10834
- lastRunAt: number().optional()
10841
+ /**
10842
+ * ms-epoch of the last time a run ATTEMPTED to write here — success or
10843
+ * failure. Never a success stamp: pair it with `lastSuccessAt` (the
10844
+ * newest archive that actually landed) and `lastError`.
10845
+ */
10846
+ lastAttemptAt: number().optional(),
10847
+ /**
10848
+ * Why the last attempt failed, verbatim. Absent when the last attempt
10849
+ * landed the archive. A destination that has never been written to has
10850
+ * neither this nor `lastAttemptAt`.
10851
+ */
10852
+ lastError: string().optional()
10835
10853
  });
10836
10854
  /**
10837
10855
  * Per-archive entry returned by `backup.listArchives({ destinationId })`.
@@ -10994,8 +11012,16 @@ var BackupScheduleSchema = object({
10994
11012
  retentionCount: number().int().min(1).max(1e3),
10995
11013
  /** Optional subset of source locations to include; omitted = all. */
10996
11014
  dataSources: array(string()).readonly().optional(),
10997
- /** ms-epoch of last successful run. */
10998
- lastRunAt: number().optional(),
11015
+ /**
11016
+ * ms-epoch of the last tick that FIRED this schedule. Stamped before the
11017
+ * archive runs (it is the dedupe anchor), so it says "attempted", never
11018
+ * "succeeded" — a run refused by every destination stamps it too.
11019
+ */
11020
+ lastAttemptAt: number().optional(),
11021
+ /** ms-epoch of the last run of this schedule that landed at ≥1 destination. */
11022
+ lastSuccessAt: number().optional(),
11023
+ /** Why the last fired run failed, verbatim. Absent when it succeeded. */
11024
+ lastError: string().optional(),
10999
11025
  /** ms-epoch of next computed firing (read-only, filled on list). */
11000
11026
  nextRunAt: number().optional()
11001
11027
  });
@@ -11044,14 +11070,7 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
11044
11070
  locationId: string(),
11045
11071
  enabled: boolean(),
11046
11072
  retentionCount: number().int().min(1).max(1e3),
11047
- label: string().optional(),
11048
- /**
11049
- * Per-destination cron expression. Empty string clears the
11050
- * schedule (manual-only). Validated server-side via croner;
11051
- * malformed expressions reject the upsert with an actionable
11052
- * message.
11053
- */
11054
- cron: string().optional()
11073
+ label: string().optional()
11055
11074
  }), _void(), {
11056
11075
  kind: "mutation",
11057
11076
  auth: "admin"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-hikvision",
3
- "version": "1.2.85",
3
+ "version": "1.2.86",
4
4
  "description": "Hikvision camera device provider addon for CamStack — ISAPI over HTTP(S) with digest auth (snapshot, alarm stream, RTSP discovery)",
5
5
  "keywords": [
6
6
  "camstack",