@camstack/addon-export-google 0.1.22 → 0.1.23

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.
@@ -10746,6 +10746,89 @@ var LocationStatSchema = object({
10746
10746
  fileCount: number(),
10747
10747
  present: boolean()
10748
10748
  });
10749
+ /** Lifecycle of a backup run. Terminal states: succeeded / failed / cancelled. */
10750
+ var BackupRunStateSchema = _enum([
10751
+ "queued",
10752
+ "running",
10753
+ "succeeded",
10754
+ "failed",
10755
+ "cancelled"
10756
+ ]);
10757
+ /**
10758
+ * Where a running backup currently is. `queued` before it starts,
10759
+ * `building` while the tar.gz is being staged, `uploading` during the
10760
+ * per-destination fan-out, `done` once terminal.
10761
+ */
10762
+ var BackupRunPhaseSchema = _enum([
10763
+ "queued",
10764
+ "building",
10765
+ "uploading",
10766
+ "done"
10767
+ ]);
10768
+ /**
10769
+ * Observable state of one backup run — readable WHILE it runs via
10770
+ * `backup.listRuns`. This is what makes the execution queue and
10771
+ * `backup.cancel` usable: the 2026-09-04 incident (two concurrent
10772
+ * multi-GB builds, staging 5.1 GB → 18 GB, load 62) was only
10773
+ * diagnosable with `du` because nothing reported that runs existed or
10774
+ * how large the staged archive had grown.
10775
+ */
10776
+ var BackupRunSchema = object({
10777
+ /** Stable run id — the handle `backup.cancel` takes. */
10778
+ id: string(),
10779
+ state: BackupRunStateSchema,
10780
+ phase: BackupRunPhaseSchema,
10781
+ /**
10782
+ * Resolved destination location ids. Empty while queued (targets are
10783
+ * resolved when the run starts, against the then-current policies).
10784
+ */
10785
+ destinationIds: array(string()).readonly(),
10786
+ label: string().optional(),
10787
+ /** ms-epoch when the run was submitted (trigger call / schedule fire). */
10788
+ requestedAt: number(),
10789
+ /** ms-epoch when the run left the queue and started building. */
10790
+ startedAt: number().optional(),
10791
+ /** ms-epoch when the run reached a terminal state. */
10792
+ finishedAt: number().optional(),
10793
+ /** Compressed bytes of the staging archive written so far. */
10794
+ stagedBytes: number(),
10795
+ /** Final staged archive size, once the build phase completes. */
10796
+ archiveSizeBytes: number().optional(),
10797
+ /** Bytes pushed to the destination currently uploading. */
10798
+ uploadedBytes: number(),
10799
+ /** Destinations where the archive fully landed (uploaded + indexed). */
10800
+ completedDestinationIds: array(string()).readonly(),
10801
+ /** Destinations that failed during the fan-out. */
10802
+ failedDestinationIds: array(string()).readonly(),
10803
+ /** Failure message when `state === 'failed'`. */
10804
+ error: string().optional(),
10805
+ /**
10806
+ * 1-based place in the execution queue — 1 = runs next. Present only
10807
+ * while `state === 'queued'`. Stamped by the orchestrator from the
10808
+ * queue's OWN pending order, never derived from timestamps, so the
10809
+ * UI cannot show an order the executor will not honour.
10810
+ */
10811
+ queuePosition: number().int().min(1).optional()
10812
+ });
10813
+ /**
10814
+ * Result of `backup.trigger`. The call still resolves when the run
10815
+ * terminates (compat with schedule-driven runs and the admin UI), but
10816
+ * it now names the run and says whether it had to WAIT: a trigger that
10817
+ * arrives while another run is in flight is enqueued (or joined onto
10818
+ * an identical already-queued run), never started concurrently.
10819
+ */
10820
+ var BackupTriggerResultSchema = object({
10821
+ /** The run this trigger mapped to — poll it via `listRuns`, stop it via `cancel`. */
10822
+ runId: string(),
10823
+ /** True when the run waited behind an in-flight run instead of starting immediately. */
10824
+ queued: boolean(),
10825
+ /** True when this trigger was coalesced onto an identical already-queued run. */
10826
+ joined: boolean(),
10827
+ /** True when the run was cancelled before completing every destination. */
10828
+ cancelled: boolean(),
10829
+ /** One entry per destination the archive landed at (partial on cancel). */
10830
+ entries: array(BackupEntrySchema).readonly()
10831
+ });
10749
10832
  /**
10750
10833
  * A backup schedule — the N:M "entry" that binds one cron cadence to a
10751
10834
  * SET of destination locations. Supersedes the per-location cron on
@@ -10793,7 +10876,10 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
10793
10876
  * retention (manual runs).
10794
10877
  */
10795
10878
  retentionCount: number().int().min(1).max(1e3).optional()
10796
- }).optional(), array(BackupEntrySchema).readonly(), {
10879
+ }).optional(), BackupTriggerResultSchema, {
10880
+ kind: "mutation",
10881
+ auth: "admin"
10882
+ }), method(_void(), array(BackupRunSchema).readonly(), { auth: "admin" }), method(object({ runId: string() }), object({ cancelled: boolean() }), {
10797
10883
  kind: "mutation",
10798
10884
  auth: "admin"
10799
10885
  }), method(_void(), array(BackupEntrySchema).readonly(), { auth: "admin" }), method(_void(), array(LocationStatSchema).readonly(), { auth: "admin" }), method(object({
@@ -11510,6 +11596,14 @@ method(object({
11510
11596
  }), object({ success: literal(true) }), {
11511
11597
  kind: "mutation",
11512
11598
  auth: "admin"
11599
+ }), method(object({ deviceId: number().int().nonnegative() }), object({
11600
+ derivedStreamsDeleted: array(string()).readonly(),
11601
+ assignmentsPurged: boolean(),
11602
+ probeSnapshotsDropped: number().int().nonnegative(),
11603
+ rtspTokenRowsDeleted: number().int().nonnegative()
11604
+ }), {
11605
+ kind: "mutation",
11606
+ auth: "admin"
11513
11607
  }), method(object({
11514
11608
  deviceId: number(),
11515
11609
  /** Absent = the LOWEST assigned profile — a notification attachment is
@@ -29687,6 +29781,12 @@ Object.freeze({
29687
29781
  addonId: null,
29688
29782
  access: "create"
29689
29783
  },
29784
+ "backup.cancel": {
29785
+ capName: "backup",
29786
+ capScope: "system",
29787
+ addonId: null,
29788
+ access: "create"
29789
+ },
29690
29790
  "backup.delete": {
29691
29791
  capName: "backup",
29692
29792
  capScope: "system",
@@ -29729,6 +29829,12 @@ Object.freeze({
29729
29829
  addonId: null,
29730
29830
  access: "view"
29731
29831
  },
29832
+ "backup.listRuns": {
29833
+ capName: "backup",
29834
+ capScope: "system",
29835
+ addonId: null,
29836
+ access: "view"
29837
+ },
29732
29838
  "backup.listSchedules": {
29733
29839
  capName: "backup",
29734
29840
  capScope: "system",
@@ -34295,6 +34401,12 @@ Object.freeze({
34295
34401
  addonId: null,
34296
34402
  access: "create"
34297
34403
  },
34404
+ "streamBroker.forgetDeviceHardware": {
34405
+ capName: "stream-broker",
34406
+ capScope: "system",
34407
+ addonId: null,
34408
+ access: "delete"
34409
+ },
34298
34410
  "streamBroker.getAllRtspEntries": {
34299
34411
  capName: "stream-broker",
34300
34412
  capScope: "system",
@@ -36753,6 +36865,11 @@ Object.freeze({
36753
36865
  form: "single",
36754
36866
  optional: false
36755
36867
  }],
36868
+ "streamBroker.forgetDeviceHardware": [{
36869
+ name: "deviceId",
36870
+ form: "single",
36871
+ optional: false
36872
+ }],
36756
36873
  "streamBroker.getDeviceAudioMute": [{
36757
36874
  name: "deviceId",
36758
36875
  form: "single",
@@ -10742,6 +10742,89 @@ var LocationStatSchema = object({
10742
10742
  fileCount: number(),
10743
10743
  present: boolean()
10744
10744
  });
10745
+ /** Lifecycle of a backup run. Terminal states: succeeded / failed / cancelled. */
10746
+ var BackupRunStateSchema = _enum([
10747
+ "queued",
10748
+ "running",
10749
+ "succeeded",
10750
+ "failed",
10751
+ "cancelled"
10752
+ ]);
10753
+ /**
10754
+ * Where a running backup currently is. `queued` before it starts,
10755
+ * `building` while the tar.gz is being staged, `uploading` during the
10756
+ * per-destination fan-out, `done` once terminal.
10757
+ */
10758
+ var BackupRunPhaseSchema = _enum([
10759
+ "queued",
10760
+ "building",
10761
+ "uploading",
10762
+ "done"
10763
+ ]);
10764
+ /**
10765
+ * Observable state of one backup run — readable WHILE it runs via
10766
+ * `backup.listRuns`. This is what makes the execution queue and
10767
+ * `backup.cancel` usable: the 2026-09-04 incident (two concurrent
10768
+ * multi-GB builds, staging 5.1 GB → 18 GB, load 62) was only
10769
+ * diagnosable with `du` because nothing reported that runs existed or
10770
+ * how large the staged archive had grown.
10771
+ */
10772
+ var BackupRunSchema = object({
10773
+ /** Stable run id — the handle `backup.cancel` takes. */
10774
+ id: string(),
10775
+ state: BackupRunStateSchema,
10776
+ phase: BackupRunPhaseSchema,
10777
+ /**
10778
+ * Resolved destination location ids. Empty while queued (targets are
10779
+ * resolved when the run starts, against the then-current policies).
10780
+ */
10781
+ destinationIds: array(string()).readonly(),
10782
+ label: string().optional(),
10783
+ /** ms-epoch when the run was submitted (trigger call / schedule fire). */
10784
+ requestedAt: number(),
10785
+ /** ms-epoch when the run left the queue and started building. */
10786
+ startedAt: number().optional(),
10787
+ /** ms-epoch when the run reached a terminal state. */
10788
+ finishedAt: number().optional(),
10789
+ /** Compressed bytes of the staging archive written so far. */
10790
+ stagedBytes: number(),
10791
+ /** Final staged archive size, once the build phase completes. */
10792
+ archiveSizeBytes: number().optional(),
10793
+ /** Bytes pushed to the destination currently uploading. */
10794
+ uploadedBytes: number(),
10795
+ /** Destinations where the archive fully landed (uploaded + indexed). */
10796
+ completedDestinationIds: array(string()).readonly(),
10797
+ /** Destinations that failed during the fan-out. */
10798
+ failedDestinationIds: array(string()).readonly(),
10799
+ /** Failure message when `state === 'failed'`. */
10800
+ error: string().optional(),
10801
+ /**
10802
+ * 1-based place in the execution queue — 1 = runs next. Present only
10803
+ * while `state === 'queued'`. Stamped by the orchestrator from the
10804
+ * queue's OWN pending order, never derived from timestamps, so the
10805
+ * UI cannot show an order the executor will not honour.
10806
+ */
10807
+ queuePosition: number().int().min(1).optional()
10808
+ });
10809
+ /**
10810
+ * Result of `backup.trigger`. The call still resolves when the run
10811
+ * terminates (compat with schedule-driven runs and the admin UI), but
10812
+ * it now names the run and says whether it had to WAIT: a trigger that
10813
+ * arrives while another run is in flight is enqueued (or joined onto
10814
+ * an identical already-queued run), never started concurrently.
10815
+ */
10816
+ var BackupTriggerResultSchema = object({
10817
+ /** The run this trigger mapped to — poll it via `listRuns`, stop it via `cancel`. */
10818
+ runId: string(),
10819
+ /** True when the run waited behind an in-flight run instead of starting immediately. */
10820
+ queued: boolean(),
10821
+ /** True when this trigger was coalesced onto an identical already-queued run. */
10822
+ joined: boolean(),
10823
+ /** True when the run was cancelled before completing every destination. */
10824
+ cancelled: boolean(),
10825
+ /** One entry per destination the archive landed at (partial on cancel). */
10826
+ entries: array(BackupEntrySchema).readonly()
10827
+ });
10745
10828
  /**
10746
10829
  * A backup schedule — the N:M "entry" that binds one cron cadence to a
10747
10830
  * SET of destination locations. Supersedes the per-location cron on
@@ -10789,7 +10872,10 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
10789
10872
  * retention (manual runs).
10790
10873
  */
10791
10874
  retentionCount: number().int().min(1).max(1e3).optional()
10792
- }).optional(), array(BackupEntrySchema).readonly(), {
10875
+ }).optional(), BackupTriggerResultSchema, {
10876
+ kind: "mutation",
10877
+ auth: "admin"
10878
+ }), method(_void(), array(BackupRunSchema).readonly(), { auth: "admin" }), method(object({ runId: string() }), object({ cancelled: boolean() }), {
10793
10879
  kind: "mutation",
10794
10880
  auth: "admin"
10795
10881
  }), method(_void(), array(BackupEntrySchema).readonly(), { auth: "admin" }), method(_void(), array(LocationStatSchema).readonly(), { auth: "admin" }), method(object({
@@ -11506,6 +11592,14 @@ method(object({
11506
11592
  }), object({ success: literal(true) }), {
11507
11593
  kind: "mutation",
11508
11594
  auth: "admin"
11595
+ }), method(object({ deviceId: number().int().nonnegative() }), object({
11596
+ derivedStreamsDeleted: array(string()).readonly(),
11597
+ assignmentsPurged: boolean(),
11598
+ probeSnapshotsDropped: number().int().nonnegative(),
11599
+ rtspTokenRowsDeleted: number().int().nonnegative()
11600
+ }), {
11601
+ kind: "mutation",
11602
+ auth: "admin"
11509
11603
  }), method(object({
11510
11604
  deviceId: number(),
11511
11605
  /** Absent = the LOWEST assigned profile — a notification attachment is
@@ -29683,6 +29777,12 @@ Object.freeze({
29683
29777
  addonId: null,
29684
29778
  access: "create"
29685
29779
  },
29780
+ "backup.cancel": {
29781
+ capName: "backup",
29782
+ capScope: "system",
29783
+ addonId: null,
29784
+ access: "create"
29785
+ },
29686
29786
  "backup.delete": {
29687
29787
  capName: "backup",
29688
29788
  capScope: "system",
@@ -29725,6 +29825,12 @@ Object.freeze({
29725
29825
  addonId: null,
29726
29826
  access: "view"
29727
29827
  },
29828
+ "backup.listRuns": {
29829
+ capName: "backup",
29830
+ capScope: "system",
29831
+ addonId: null,
29832
+ access: "view"
29833
+ },
29728
29834
  "backup.listSchedules": {
29729
29835
  capName: "backup",
29730
29836
  capScope: "system",
@@ -34291,6 +34397,12 @@ Object.freeze({
34291
34397
  addonId: null,
34292
34398
  access: "create"
34293
34399
  },
34400
+ "streamBroker.forgetDeviceHardware": {
34401
+ capName: "stream-broker",
34402
+ capScope: "system",
34403
+ addonId: null,
34404
+ access: "delete"
34405
+ },
34294
34406
  "streamBroker.getAllRtspEntries": {
34295
34407
  capName: "stream-broker",
34296
34408
  capScope: "system",
@@ -36749,6 +36861,11 @@ Object.freeze({
36749
36861
  form: "single",
36750
36862
  optional: false
36751
36863
  }],
36864
+ "streamBroker.forgetDeviceHardware": [{
36865
+ name: "deviceId",
36866
+ form: "single",
36867
+ optional: false
36868
+ }],
36752
36869
  "streamBroker.getDeviceAudioMute": [{
36753
36870
  name: "deviceId",
36754
36871
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-google",
3
- "version": "0.1.22",
3
+ "version": "0.1.23",
4
4
  "description": "Google Home export — hub-side smart-home fulfillment (SYNC / QUERY / EXECUTE / DISCONNECT) for the non-camera fleet, served over the hub's own OAuth account link. No Google credential is stored, sent or required.",
5
5
  "keywords": [
6
6
  "camstack",