@camstack/addon-export-google 0.1.22 → 0.1.24

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
@@ -12766,7 +12860,10 @@ method(_void(), _void(), { kind: "mutation" }), method(_void(), _void(), { kind:
12766
12860
  id: string(),
12767
12861
  name: string(),
12768
12862
  type: string()
12769
- }))), method(object({}), boolean()), method(object({ params: record(string(), unknown()).optional() }), array(DiscoveryCandidateSchema), {
12863
+ }))), method(object({ stableId: string() }), object({ deviceId: number() }), {
12864
+ kind: "mutation",
12865
+ timeoutMs: 3 * 6e4
12866
+ }), method(object({}), boolean()), method(object({ params: record(string(), unknown()).optional() }), array(DiscoveryCandidateSchema), {
12770
12867
  kind: "mutation",
12771
12868
  auth: "admin"
12772
12869
  }), method(object({}), CreationSchemaOutputSchema), method(object({}), object({ deviceType: _enum(DeviceType).nullable() })), method(object({ candidate: DiscoveryCandidateSchema }), DeviceSummarySchema, {
@@ -13047,7 +13144,8 @@ method(object({
13047
13144
  targetId: number()
13048
13145
  }), MigrateDeviceResultSchema, {
13049
13146
  kind: "mutation",
13050
- auth: "admin"
13147
+ auth: "admin",
13148
+ timeoutMs: 12 * 6e4
13051
13149
  }), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
13052
13150
  deviceId: number(),
13053
13151
  name: string()
@@ -29687,6 +29785,12 @@ Object.freeze({
29687
29785
  addonId: null,
29688
29786
  access: "create"
29689
29787
  },
29788
+ "backup.cancel": {
29789
+ capName: "backup",
29790
+ capScope: "system",
29791
+ addonId: null,
29792
+ access: "create"
29793
+ },
29690
29794
  "backup.delete": {
29691
29795
  capName: "backup",
29692
29796
  capScope: "system",
@@ -29729,6 +29833,12 @@ Object.freeze({
29729
29833
  addonId: null,
29730
29834
  access: "view"
29731
29835
  },
29836
+ "backup.listRuns": {
29837
+ capName: "backup",
29838
+ capScope: "system",
29839
+ addonId: null,
29840
+ access: "view"
29841
+ },
29732
29842
  "backup.listSchedules": {
29733
29843
  capName: "backup",
29734
29844
  capScope: "system",
@@ -30929,6 +31039,12 @@ Object.freeze({
30929
31039
  addonId: null,
30930
31040
  access: "view"
30931
31041
  },
31042
+ "deviceProvider.reloadDevice": {
31043
+ capName: "device-provider",
31044
+ capScope: "system",
31045
+ addonId: null,
31046
+ access: "create"
31047
+ },
30932
31048
  "deviceProvider.start": {
30933
31049
  capName: "device-provider",
30934
31050
  capScope: "system",
@@ -34295,6 +34411,12 @@ Object.freeze({
34295
34411
  addonId: null,
34296
34412
  access: "create"
34297
34413
  },
34414
+ "streamBroker.forgetDeviceHardware": {
34415
+ capName: "stream-broker",
34416
+ capScope: "system",
34417
+ addonId: null,
34418
+ access: "delete"
34419
+ },
34298
34420
  "streamBroker.getAllRtspEntries": {
34299
34421
  capName: "stream-broker",
34300
34422
  capScope: "system",
@@ -36753,6 +36875,11 @@ Object.freeze({
36753
36875
  form: "single",
36754
36876
  optional: false
36755
36877
  }],
36878
+ "streamBroker.forgetDeviceHardware": [{
36879
+ name: "deviceId",
36880
+ form: "single",
36881
+ optional: false
36882
+ }],
36756
36883
  "streamBroker.getDeviceAudioMute": [{
36757
36884
  name: "deviceId",
36758
36885
  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
@@ -12762,7 +12856,10 @@ method(_void(), _void(), { kind: "mutation" }), method(_void(), _void(), { kind:
12762
12856
  id: string(),
12763
12857
  name: string(),
12764
12858
  type: string()
12765
- }))), method(object({}), boolean()), method(object({ params: record(string(), unknown()).optional() }), array(DiscoveryCandidateSchema), {
12859
+ }))), method(object({ stableId: string() }), object({ deviceId: number() }), {
12860
+ kind: "mutation",
12861
+ timeoutMs: 3 * 6e4
12862
+ }), method(object({}), boolean()), method(object({ params: record(string(), unknown()).optional() }), array(DiscoveryCandidateSchema), {
12766
12863
  kind: "mutation",
12767
12864
  auth: "admin"
12768
12865
  }), method(object({}), CreationSchemaOutputSchema), method(object({}), object({ deviceType: _enum(DeviceType).nullable() })), method(object({ candidate: DiscoveryCandidateSchema }), DeviceSummarySchema, {
@@ -13043,7 +13140,8 @@ method(object({
13043
13140
  targetId: number()
13044
13141
  }), MigrateDeviceResultSchema, {
13045
13142
  kind: "mutation",
13046
- auth: "admin"
13143
+ auth: "admin",
13144
+ timeoutMs: 12 * 6e4
13047
13145
  }), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
13048
13146
  deviceId: number(),
13049
13147
  name: string()
@@ -29683,6 +29781,12 @@ Object.freeze({
29683
29781
  addonId: null,
29684
29782
  access: "create"
29685
29783
  },
29784
+ "backup.cancel": {
29785
+ capName: "backup",
29786
+ capScope: "system",
29787
+ addonId: null,
29788
+ access: "create"
29789
+ },
29686
29790
  "backup.delete": {
29687
29791
  capName: "backup",
29688
29792
  capScope: "system",
@@ -29725,6 +29829,12 @@ Object.freeze({
29725
29829
  addonId: null,
29726
29830
  access: "view"
29727
29831
  },
29832
+ "backup.listRuns": {
29833
+ capName: "backup",
29834
+ capScope: "system",
29835
+ addonId: null,
29836
+ access: "view"
29837
+ },
29728
29838
  "backup.listSchedules": {
29729
29839
  capName: "backup",
29730
29840
  capScope: "system",
@@ -30925,6 +31035,12 @@ Object.freeze({
30925
31035
  addonId: null,
30926
31036
  access: "view"
30927
31037
  },
31038
+ "deviceProvider.reloadDevice": {
31039
+ capName: "device-provider",
31040
+ capScope: "system",
31041
+ addonId: null,
31042
+ access: "create"
31043
+ },
30928
31044
  "deviceProvider.start": {
30929
31045
  capName: "device-provider",
30930
31046
  capScope: "system",
@@ -34291,6 +34407,12 @@ Object.freeze({
34291
34407
  addonId: null,
34292
34408
  access: "create"
34293
34409
  },
34410
+ "streamBroker.forgetDeviceHardware": {
34411
+ capName: "stream-broker",
34412
+ capScope: "system",
34413
+ addonId: null,
34414
+ access: "delete"
34415
+ },
34294
34416
  "streamBroker.getAllRtspEntries": {
34295
34417
  capName: "stream-broker",
34296
34418
  capScope: "system",
@@ -36749,6 +36871,11 @@ Object.freeze({
36749
36871
  form: "single",
36750
36872
  optional: false
36751
36873
  }],
36874
+ "streamBroker.forgetDeviceHardware": [{
36875
+ name: "deviceId",
36876
+ form: "single",
36877
+ optional: false
36878
+ }],
36752
36879
  "streamBroker.getDeviceAudioMute": [{
36753
36880
  name: "deviceId",
36754
36881
  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.24",
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",