@camstack/addon-provider-petkit 0.2.77 → 0.2.78

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
@@ -11651,12 +11651,30 @@ var BackupDestinationInfoSchema = object({
11651
11651
  lastSuccessAt: number().optional(),
11652
11652
  /** Newest-archive size from `manifests.json`, or undefined. */
11653
11653
  lastSuccessSizeBytes: number().optional(),
11654
- /** Per-destination cron expression. Empty = manual-only (no schedule). */
11654
+ /**
11655
+ * Cron cadence(s) of the ENABLED schedules that fan out to this
11656
+ * destination, comma-joined. Absent when no enabled schedule targets it
11657
+ * — a destination nothing is scheduled to write to must not advertise a
11658
+ * cadence (D384). This is never the `backup_destination_policies.cron`
11659
+ * column: that per-location cron has scheduled nothing since 2026-07-28
11660
+ * and reading it made a destination with a DISABLED schedule claim a
11661
+ * nightly run.
11662
+ */
11655
11663
  cron: string().optional(),
11656
- /** ms-epoch of next computed firing for this destination's cron, if any. */
11664
+ /** ms-epoch of the next firing across those schedules (earliest), if any. */
11657
11665
  nextRunAt: number().optional(),
11658
- /** ms-epoch of last successful scheduled run (mirrors policy.lastRunAt). */
11659
- lastRunAt: number().optional()
11666
+ /**
11667
+ * ms-epoch of the last time a run ATTEMPTED to write here — success or
11668
+ * failure. Never a success stamp: pair it with `lastSuccessAt` (the
11669
+ * newest archive that actually landed) and `lastError`.
11670
+ */
11671
+ lastAttemptAt: number().optional(),
11672
+ /**
11673
+ * Why the last attempt failed, verbatim. Absent when the last attempt
11674
+ * landed the archive. A destination that has never been written to has
11675
+ * neither this nor `lastAttemptAt`.
11676
+ */
11677
+ lastError: string().optional()
11660
11678
  });
11661
11679
  /**
11662
11680
  * Per-archive entry returned by `backup.listArchives({ destinationId })`.
@@ -11819,8 +11837,16 @@ var BackupScheduleSchema = object({
11819
11837
  retentionCount: number().int().min(1).max(1e3),
11820
11838
  /** Optional subset of source locations to include; omitted = all. */
11821
11839
  dataSources: array(string()).readonly().optional(),
11822
- /** ms-epoch of last successful run. */
11823
- lastRunAt: number().optional(),
11840
+ /**
11841
+ * ms-epoch of the last tick that FIRED this schedule. Stamped before the
11842
+ * archive runs (it is the dedupe anchor), so it says "attempted", never
11843
+ * "succeeded" — a run refused by every destination stamps it too.
11844
+ */
11845
+ lastAttemptAt: number().optional(),
11846
+ /** ms-epoch of the last run of this schedule that landed at ≥1 destination. */
11847
+ lastSuccessAt: number().optional(),
11848
+ /** Why the last fired run failed, verbatim. Absent when it succeeded. */
11849
+ lastError: string().optional(),
11824
11850
  /** ms-epoch of next computed firing (read-only, filled on list). */
11825
11851
  nextRunAt: number().optional()
11826
11852
  });
@@ -11869,14 +11895,7 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
11869
11895
  locationId: string(),
11870
11896
  enabled: boolean(),
11871
11897
  retentionCount: number().int().min(1).max(1e3),
11872
- label: string().optional(),
11873
- /**
11874
- * Per-destination cron expression. Empty string clears the
11875
- * schedule (manual-only). Validated server-side via croner;
11876
- * malformed expressions reject the upsert with an actionable
11877
- * message.
11878
- */
11879
- cron: string().optional()
11898
+ label: string().optional()
11880
11899
  }), _void(), {
11881
11900
  kind: "mutation",
11882
11901
  auth: "admin"
package/dist/addon.mjs CHANGED
@@ -11650,12 +11650,30 @@ var BackupDestinationInfoSchema = object({
11650
11650
  lastSuccessAt: number().optional(),
11651
11651
  /** Newest-archive size from `manifests.json`, or undefined. */
11652
11652
  lastSuccessSizeBytes: number().optional(),
11653
- /** Per-destination cron expression. Empty = manual-only (no schedule). */
11653
+ /**
11654
+ * Cron cadence(s) of the ENABLED schedules that fan out to this
11655
+ * destination, comma-joined. Absent when no enabled schedule targets it
11656
+ * — a destination nothing is scheduled to write to must not advertise a
11657
+ * cadence (D384). This is never the `backup_destination_policies.cron`
11658
+ * column: that per-location cron has scheduled nothing since 2026-07-28
11659
+ * and reading it made a destination with a DISABLED schedule claim a
11660
+ * nightly run.
11661
+ */
11654
11662
  cron: string().optional(),
11655
- /** ms-epoch of next computed firing for this destination's cron, if any. */
11663
+ /** ms-epoch of the next firing across those schedules (earliest), if any. */
11656
11664
  nextRunAt: number().optional(),
11657
- /** ms-epoch of last successful scheduled run (mirrors policy.lastRunAt). */
11658
- lastRunAt: number().optional()
11665
+ /**
11666
+ * ms-epoch of the last time a run ATTEMPTED to write here — success or
11667
+ * failure. Never a success stamp: pair it with `lastSuccessAt` (the
11668
+ * newest archive that actually landed) and `lastError`.
11669
+ */
11670
+ lastAttemptAt: number().optional(),
11671
+ /**
11672
+ * Why the last attempt failed, verbatim. Absent when the last attempt
11673
+ * landed the archive. A destination that has never been written to has
11674
+ * neither this nor `lastAttemptAt`.
11675
+ */
11676
+ lastError: string().optional()
11659
11677
  });
11660
11678
  /**
11661
11679
  * Per-archive entry returned by `backup.listArchives({ destinationId })`.
@@ -11818,8 +11836,16 @@ var BackupScheduleSchema = object({
11818
11836
  retentionCount: number().int().min(1).max(1e3),
11819
11837
  /** Optional subset of source locations to include; omitted = all. */
11820
11838
  dataSources: array(string()).readonly().optional(),
11821
- /** ms-epoch of last successful run. */
11822
- lastRunAt: number().optional(),
11839
+ /**
11840
+ * ms-epoch of the last tick that FIRED this schedule. Stamped before the
11841
+ * archive runs (it is the dedupe anchor), so it says "attempted", never
11842
+ * "succeeded" — a run refused by every destination stamps it too.
11843
+ */
11844
+ lastAttemptAt: number().optional(),
11845
+ /** ms-epoch of the last run of this schedule that landed at ≥1 destination. */
11846
+ lastSuccessAt: number().optional(),
11847
+ /** Why the last fired run failed, verbatim. Absent when it succeeded. */
11848
+ lastError: string().optional(),
11823
11849
  /** ms-epoch of next computed firing (read-only, filled on list). */
11824
11850
  nextRunAt: number().optional()
11825
11851
  });
@@ -11868,14 +11894,7 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
11868
11894
  locationId: string(),
11869
11895
  enabled: boolean(),
11870
11896
  retentionCount: number().int().min(1).max(1e3),
11871
- label: string().optional(),
11872
- /**
11873
- * Per-destination cron expression. Empty string clears the
11874
- * schedule (manual-only). Validated server-side via croner;
11875
- * malformed expressions reject the upsert with an actionable
11876
- * message.
11877
- */
11878
- cron: string().optional()
11897
+ label: string().optional()
11879
11898
  }), _void(), {
11880
11899
  kind: "mutation",
11881
11900
  auth: "admin"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-petkit",
3
- "version": "0.2.77",
3
+ "version": "0.2.78",
4
4
  "description": "PetKit smart-feeder device-provider addon for CamStack — wraps the @apocaliss92/nodepetkit PetKit cloud client",
5
5
  "keywords": [
6
6
  "camstack",