@camstack/addon-tailscale 1.2.51 → 1.2.53

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.
@@ -24,7 +24,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
24
  enumerable: true
25
25
  }) : target, mod));
26
26
  //#endregion
27
- const require_dist = require("../dist-DZmp04sL.js");
27
+ const require_dist = require("../dist-BFbW-DND.js");
28
28
  let node_child_process = require("node:child_process");
29
29
  let node_util = require("node:util");
30
30
  let node_fs = require("node:fs");
@@ -1,4 +1,4 @@
1
- import { a as EventCategory, i as BaseAddon, n as networkAccessCapability, r as BOOT_RECOVERY_BACKOFF_MS, t as meshNetworkCapability } from "../dist-CLEhB-7g.mjs";
1
+ import { a as EventCategory, i as BaseAddon, n as networkAccessCapability, r as BOOT_RECOVERY_BACKOFF_MS, t as meshNetworkCapability } from "../dist-DCvDQ86T.mjs";
2
2
  import { execFile, spawn } from "node:child_process";
3
3
  import { promisify } from "node:util";
4
4
  import * as fs from "node:fs";
@@ -7735,7 +7735,8 @@ var OpsLogReasonSchema = _enum([
7735
7735
  "quota",
7736
7736
  "manual",
7737
7737
  "operator",
7738
- "maintenance"
7738
+ "maintenance",
7739
+ "orphaned-device"
7739
7740
  ]);
7740
7741
  /** One audit row, shared verbatim by both domains. */
7741
7742
  var OpsLogEntrySchema = object({
@@ -12766,10 +12767,39 @@ var DevicePersistConfigPayloadSchema = object({
12766
12767
  deviceId: number(),
12767
12768
  data: record(string(), unknown())
12768
12769
  });
12770
+ /** What a migration actually did, per switch. `unreachable` is a first-class
12771
+ * answer: a camera that could not be asked is not a camera that was silenced. */
12772
+ var MigrateSwitchOutcomeSchema = _enum([
12773
+ "off",
12774
+ "on",
12775
+ "not-offered",
12776
+ "unreachable"
12777
+ ]);
12778
+ var MigrateSwitchReportSchema = object({
12779
+ deviceId: number(),
12780
+ switchId: CameraSwitchIdSchema,
12781
+ outcome: MigrateSwitchOutcomeSchema,
12782
+ detail: string().optional()
12783
+ });
12784
+ var MigrateDeviceResultSchema = object({
12785
+ sourceId: number(),
12786
+ targetId: number(),
12787
+ switches: array(MigrateSwitchReportSchema).readonly(),
12788
+ /** Switches that could NOT be turned off on the source. Empty is the only
12789
+ * value meaning the replaced hardware is quiet. */
12790
+ sourceStillLive: array(CameraSwitchIdSchema).readonly(),
12791
+ swapped: boolean()
12792
+ });
12769
12793
  method(object({
12770
12794
  addonId: string(),
12771
12795
  stableId: string()
12772
- }), object({ id: number() }), { kind: "mutation" }), 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({
12796
+ }), object({ id: number() }), { kind: "mutation" }), method(object({
12797
+ sourceId: number(),
12798
+ targetId: number()
12799
+ }), MigrateDeviceResultSchema, {
12800
+ kind: "mutation",
12801
+ auth: "admin"
12802
+ }), 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({
12773
12803
  deviceId: number(),
12774
12804
  name: string()
12775
12805
  }), _void(), {
@@ -18883,6 +18913,34 @@ var KeyEventsForDeviceSchema = object({
18883
18913
  deviceId: number(),
18884
18914
  events: array(KeyEventSchema).readonly()
18885
18915
  });
18916
+ /** One non-empty bucket of the timeline histogram. */
18917
+ var EventDensityBucketSchema = object({
18918
+ bucketStart: number(),
18919
+ motion: number().int(),
18920
+ object: number().int(),
18921
+ audio: number().int()
18922
+ });
18923
+ /**
18924
+ * One camera's row in a `getEventDensityBatch` answer.
18925
+ *
18926
+ * TWO facts, and the timeline draws them differently:
18927
+ *
18928
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
18929
+ * claim: read, and nothing happened in the window.
18930
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
18931
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
18932
+ * not quiet.
18933
+ *
18934
+ * Fanned out per camera the difference was free — one query rejected while the
18935
+ * others resolved — and collapsing to a batch is the exact moment it is lost
18936
+ * silently. Every requested id gets a row: a caller that asked for twelve and
18937
+ * got eleven cannot tell which one is missing, or that any is.
18938
+ */
18939
+ var EventDensityForDeviceSchema = object({
18940
+ deviceId: number(),
18941
+ read: _enum(["read", "unreadable"]),
18942
+ buckets: array(EventDensityBucketSchema).readonly()
18943
+ });
18886
18944
  object({
18887
18945
  trackId: string(),
18888
18946
  className: string(),
@@ -19193,12 +19251,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19193
19251
  since: number(),
19194
19252
  until: number(),
19195
19253
  bucketMs: number().int().positive()
19196
- }), array(object({
19197
- bucketStart: number(),
19198
- motion: number().int(),
19199
- object: number().int(),
19200
- audio: number().int()
19201
- })).readonly()), method(object({
19254
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19255
+ deviceIds: array(number()).min(1).max(200),
19256
+ since: number(),
19257
+ until: number(),
19258
+ bucketMs: number().int().positive()
19259
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19202
19260
  deviceId: number(),
19203
19261
  cutoffMs: number()
19204
19262
  }), object({
@@ -26569,6 +26627,39 @@ var RecordingDaysSchema = object({
26569
26627
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26570
26628
  days: array(number())
26571
26629
  });
26630
+ /**
26631
+ * One camera's row in a `getAvailabilityBatch` answer.
26632
+ *
26633
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26634
+ * batch collapses the transport, not the work — plus the one thing the singular
26635
+ * method never had to say:
26636
+ *
26637
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26638
+ * no footage in the window", which is a real claim.
26639
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26640
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26641
+ * that emptiness means NOTHING.
26642
+ *
26643
+ * A timeline that renders the second as the first tells an operator there is no
26644
+ * footage when the truth is that nobody looked.
26645
+ */
26646
+ var RecordingAvailabilityForDeviceSchema = object({
26647
+ deviceId: number(),
26648
+ read: _enum(["read", "unreadable"]),
26649
+ ranges: array(RecordingRangeSchema).readonly()
26650
+ });
26651
+ /**
26652
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26653
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26654
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26655
+ * the date-picker's day dots must not spell them the same.
26656
+ */
26657
+ var RecordingDaysForDeviceSchema = object({
26658
+ deviceId: number(),
26659
+ read: _enum(["read", "unreadable"]),
26660
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26661
+ days: array(number()).readonly()
26662
+ });
26572
26663
  var RecordingManifestSchema = object({
26573
26664
  deviceId: number(),
26574
26665
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26803,6 +26894,13 @@ method(object({
26803
26894
  }), RecordingAvailabilitySchema, {
26804
26895
  kind: "query",
26805
26896
  auth: "protected"
26897
+ }), method(object({
26898
+ deviceIds: array(number()).min(1).max(200),
26899
+ fromMs: number(),
26900
+ toMs: number()
26901
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
26902
+ kind: "query",
26903
+ auth: "protected"
26806
26904
  }), method(object({
26807
26905
  deviceId: number(),
26808
26906
  fromMs: number(),
@@ -26811,6 +26909,14 @@ method(object({
26811
26909
  }), RecordingDaysSchema, {
26812
26910
  kind: "query",
26813
26911
  auth: "protected"
26912
+ }), method(object({
26913
+ deviceIds: array(number()).min(1).max(200),
26914
+ fromMs: number(),
26915
+ toMs: number(),
26916
+ tzOffsetMinutes: number()
26917
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
26918
+ kind: "query",
26919
+ auth: "protected"
26814
26920
  }), method(object({
26815
26921
  deviceId: number(),
26816
26922
  fromMs: number(),
@@ -30274,6 +30380,12 @@ Object.freeze({
30274
30380
  addonId: null,
30275
30381
  access: "view"
30276
30382
  },
30383
+ "deviceManager.migrateDevice": {
30384
+ capName: "device-manager",
30385
+ capScope: "system",
30386
+ addonId: null,
30387
+ access: "create"
30388
+ },
30277
30389
  "deviceManager.persistConfig": {
30278
30390
  capName: "device-manager",
30279
30391
  capScope: "system",
@@ -32008,6 +32120,12 @@ Object.freeze({
32008
32120
  addonId: null,
32009
32121
  access: "view"
32010
32122
  },
32123
+ "pipelineAnalytics.getEventDensityBatch": {
32124
+ capName: "pipeline-analytics",
32125
+ capScope: "device",
32126
+ addonId: null,
32127
+ access: "view"
32128
+ },
32011
32129
  "pipelineAnalytics.getEventMedia": {
32012
32130
  capName: "pipeline-analytics",
32013
32131
  capScope: "device",
@@ -33130,12 +33248,24 @@ Object.freeze({
33130
33248
  addonId: null,
33131
33249
  access: "view"
33132
33250
  },
33251
+ "recording.getAvailabilityBatch": {
33252
+ capName: "recording",
33253
+ capScope: "system",
33254
+ addonId: null,
33255
+ access: "view"
33256
+ },
33133
33257
  "recording.getDaysWithRecordings": {
33134
33258
  capName: "recording",
33135
33259
  capScope: "system",
33136
33260
  addonId: null,
33137
33261
  access: "view"
33138
33262
  },
33263
+ "recording.getDaysWithRecordingsBatch": {
33264
+ capName: "recording",
33265
+ capScope: "system",
33266
+ addonId: null,
33267
+ access: "view"
33268
+ },
33139
33269
  "recording.getDeviceConfig": {
33140
33270
  capName: "recording",
33141
33271
  capScope: "system",
@@ -35740,6 +35870,11 @@ Object.freeze({
35740
35870
  form: "single",
35741
35871
  optional: false
35742
35872
  }],
35873
+ "pipelineAnalytics.getEventDensityBatch": [{
35874
+ name: "deviceIds",
35875
+ form: "array",
35876
+ optional: false
35877
+ }],
35743
35878
  "pipelineAnalytics.getEventMedia": [{
35744
35879
  name: "deviceId",
35745
35880
  form: "single",
@@ -36155,11 +36290,21 @@ Object.freeze({
36155
36290
  form: "single",
36156
36291
  optional: false
36157
36292
  }],
36293
+ "recording.getAvailabilityBatch": [{
36294
+ name: "deviceIds",
36295
+ form: "array",
36296
+ optional: false
36297
+ }],
36158
36298
  "recording.getDaysWithRecordings": [{
36159
36299
  name: "deviceId",
36160
36300
  form: "single",
36161
36301
  optional: false
36162
36302
  }],
36303
+ "recording.getDaysWithRecordingsBatch": [{
36304
+ name: "deviceIds",
36305
+ form: "array",
36306
+ optional: false
36307
+ }],
36163
36308
  "recording.getDeviceConfig": [{
36164
36309
  name: "deviceId",
36165
36310
  form: "single",
@@ -7735,7 +7735,8 @@ var OpsLogReasonSchema = _enum([
7735
7735
  "quota",
7736
7736
  "manual",
7737
7737
  "operator",
7738
- "maintenance"
7738
+ "maintenance",
7739
+ "orphaned-device"
7739
7740
  ]);
7740
7741
  /** One audit row, shared verbatim by both domains. */
7741
7742
  var OpsLogEntrySchema = object({
@@ -12766,10 +12767,39 @@ var DevicePersistConfigPayloadSchema = object({
12766
12767
  deviceId: number(),
12767
12768
  data: record(string(), unknown())
12768
12769
  });
12770
+ /** What a migration actually did, per switch. `unreachable` is a first-class
12771
+ * answer: a camera that could not be asked is not a camera that was silenced. */
12772
+ var MigrateSwitchOutcomeSchema = _enum([
12773
+ "off",
12774
+ "on",
12775
+ "not-offered",
12776
+ "unreachable"
12777
+ ]);
12778
+ var MigrateSwitchReportSchema = object({
12779
+ deviceId: number(),
12780
+ switchId: CameraSwitchIdSchema,
12781
+ outcome: MigrateSwitchOutcomeSchema,
12782
+ detail: string().optional()
12783
+ });
12784
+ var MigrateDeviceResultSchema = object({
12785
+ sourceId: number(),
12786
+ targetId: number(),
12787
+ switches: array(MigrateSwitchReportSchema).readonly(),
12788
+ /** Switches that could NOT be turned off on the source. Empty is the only
12789
+ * value meaning the replaced hardware is quiet. */
12790
+ sourceStillLive: array(CameraSwitchIdSchema).readonly(),
12791
+ swapped: boolean()
12792
+ });
12769
12793
  method(object({
12770
12794
  addonId: string(),
12771
12795
  stableId: string()
12772
- }), object({ id: number() }), { kind: "mutation" }), 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({
12796
+ }), object({ id: number() }), { kind: "mutation" }), method(object({
12797
+ sourceId: number(),
12798
+ targetId: number()
12799
+ }), MigrateDeviceResultSchema, {
12800
+ kind: "mutation",
12801
+ auth: "admin"
12802
+ }), 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({
12773
12803
  deviceId: number(),
12774
12804
  name: string()
12775
12805
  }), _void(), {
@@ -18883,6 +18913,34 @@ var KeyEventsForDeviceSchema = object({
18883
18913
  deviceId: number(),
18884
18914
  events: array(KeyEventSchema).readonly()
18885
18915
  });
18916
+ /** One non-empty bucket of the timeline histogram. */
18917
+ var EventDensityBucketSchema = object({
18918
+ bucketStart: number(),
18919
+ motion: number().int(),
18920
+ object: number().int(),
18921
+ audio: number().int()
18922
+ });
18923
+ /**
18924
+ * One camera's row in a `getEventDensityBatch` answer.
18925
+ *
18926
+ * TWO facts, and the timeline draws them differently:
18927
+ *
18928
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
18929
+ * claim: read, and nothing happened in the window.
18930
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
18931
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
18932
+ * not quiet.
18933
+ *
18934
+ * Fanned out per camera the difference was free — one query rejected while the
18935
+ * others resolved — and collapsing to a batch is the exact moment it is lost
18936
+ * silently. Every requested id gets a row: a caller that asked for twelve and
18937
+ * got eleven cannot tell which one is missing, or that any is.
18938
+ */
18939
+ var EventDensityForDeviceSchema = object({
18940
+ deviceId: number(),
18941
+ read: _enum(["read", "unreadable"]),
18942
+ buckets: array(EventDensityBucketSchema).readonly()
18943
+ });
18886
18944
  object({
18887
18945
  trackId: string(),
18888
18946
  className: string(),
@@ -19193,12 +19251,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19193
19251
  since: number(),
19194
19252
  until: number(),
19195
19253
  bucketMs: number().int().positive()
19196
- }), array(object({
19197
- bucketStart: number(),
19198
- motion: number().int(),
19199
- object: number().int(),
19200
- audio: number().int()
19201
- })).readonly()), method(object({
19254
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19255
+ deviceIds: array(number()).min(1).max(200),
19256
+ since: number(),
19257
+ until: number(),
19258
+ bucketMs: number().int().positive()
19259
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19202
19260
  deviceId: number(),
19203
19261
  cutoffMs: number()
19204
19262
  }), object({
@@ -26569,6 +26627,39 @@ var RecordingDaysSchema = object({
26569
26627
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26570
26628
  days: array(number())
26571
26629
  });
26630
+ /**
26631
+ * One camera's row in a `getAvailabilityBatch` answer.
26632
+ *
26633
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26634
+ * batch collapses the transport, not the work — plus the one thing the singular
26635
+ * method never had to say:
26636
+ *
26637
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26638
+ * no footage in the window", which is a real claim.
26639
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26640
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26641
+ * that emptiness means NOTHING.
26642
+ *
26643
+ * A timeline that renders the second as the first tells an operator there is no
26644
+ * footage when the truth is that nobody looked.
26645
+ */
26646
+ var RecordingAvailabilityForDeviceSchema = object({
26647
+ deviceId: number(),
26648
+ read: _enum(["read", "unreadable"]),
26649
+ ranges: array(RecordingRangeSchema).readonly()
26650
+ });
26651
+ /**
26652
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26653
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26654
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26655
+ * the date-picker's day dots must not spell them the same.
26656
+ */
26657
+ var RecordingDaysForDeviceSchema = object({
26658
+ deviceId: number(),
26659
+ read: _enum(["read", "unreadable"]),
26660
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26661
+ days: array(number()).readonly()
26662
+ });
26572
26663
  var RecordingManifestSchema = object({
26573
26664
  deviceId: number(),
26574
26665
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26803,6 +26894,13 @@ method(object({
26803
26894
  }), RecordingAvailabilitySchema, {
26804
26895
  kind: "query",
26805
26896
  auth: "protected"
26897
+ }), method(object({
26898
+ deviceIds: array(number()).min(1).max(200),
26899
+ fromMs: number(),
26900
+ toMs: number()
26901
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
26902
+ kind: "query",
26903
+ auth: "protected"
26806
26904
  }), method(object({
26807
26905
  deviceId: number(),
26808
26906
  fromMs: number(),
@@ -26811,6 +26909,14 @@ method(object({
26811
26909
  }), RecordingDaysSchema, {
26812
26910
  kind: "query",
26813
26911
  auth: "protected"
26912
+ }), method(object({
26913
+ deviceIds: array(number()).min(1).max(200),
26914
+ fromMs: number(),
26915
+ toMs: number(),
26916
+ tzOffsetMinutes: number()
26917
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
26918
+ kind: "query",
26919
+ auth: "protected"
26814
26920
  }), method(object({
26815
26921
  deviceId: number(),
26816
26922
  fromMs: number(),
@@ -30274,6 +30380,12 @@ Object.freeze({
30274
30380
  addonId: null,
30275
30381
  access: "view"
30276
30382
  },
30383
+ "deviceManager.migrateDevice": {
30384
+ capName: "device-manager",
30385
+ capScope: "system",
30386
+ addonId: null,
30387
+ access: "create"
30388
+ },
30277
30389
  "deviceManager.persistConfig": {
30278
30390
  capName: "device-manager",
30279
30391
  capScope: "system",
@@ -32008,6 +32120,12 @@ Object.freeze({
32008
32120
  addonId: null,
32009
32121
  access: "view"
32010
32122
  },
32123
+ "pipelineAnalytics.getEventDensityBatch": {
32124
+ capName: "pipeline-analytics",
32125
+ capScope: "device",
32126
+ addonId: null,
32127
+ access: "view"
32128
+ },
32011
32129
  "pipelineAnalytics.getEventMedia": {
32012
32130
  capName: "pipeline-analytics",
32013
32131
  capScope: "device",
@@ -33130,12 +33248,24 @@ Object.freeze({
33130
33248
  addonId: null,
33131
33249
  access: "view"
33132
33250
  },
33251
+ "recording.getAvailabilityBatch": {
33252
+ capName: "recording",
33253
+ capScope: "system",
33254
+ addonId: null,
33255
+ access: "view"
33256
+ },
33133
33257
  "recording.getDaysWithRecordings": {
33134
33258
  capName: "recording",
33135
33259
  capScope: "system",
33136
33260
  addonId: null,
33137
33261
  access: "view"
33138
33262
  },
33263
+ "recording.getDaysWithRecordingsBatch": {
33264
+ capName: "recording",
33265
+ capScope: "system",
33266
+ addonId: null,
33267
+ access: "view"
33268
+ },
33139
33269
  "recording.getDeviceConfig": {
33140
33270
  capName: "recording",
33141
33271
  capScope: "system",
@@ -35740,6 +35870,11 @@ Object.freeze({
35740
35870
  form: "single",
35741
35871
  optional: false
35742
35872
  }],
35873
+ "pipelineAnalytics.getEventDensityBatch": [{
35874
+ name: "deviceIds",
35875
+ form: "array",
35876
+ optional: false
35877
+ }],
35743
35878
  "pipelineAnalytics.getEventMedia": [{
35744
35879
  name: "deviceId",
35745
35880
  form: "single",
@@ -36155,11 +36290,21 @@ Object.freeze({
36155
36290
  form: "single",
36156
36291
  optional: false
36157
36292
  }],
36293
+ "recording.getAvailabilityBatch": [{
36294
+ name: "deviceIds",
36295
+ form: "array",
36296
+ optional: false
36297
+ }],
36158
36298
  "recording.getDaysWithRecordings": [{
36159
36299
  name: "deviceId",
36160
36300
  form: "single",
36161
36301
  optional: false
36162
36302
  }],
36303
+ "recording.getDaysWithRecordingsBatch": [{
36304
+ name: "deviceIds",
36305
+ form: "array",
36306
+ optional: false
36307
+ }],
36163
36308
  "recording.getDeviceConfig": [{
36164
36309
  name: "deviceId",
36165
36310
  form: "single",
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-DZmp04sL.js");
5
+ const require_dist = require("../dist-BFbW-DND.js");
6
6
  let node_crypto = require("node:crypto");
7
7
  let node_child_process = require("node:child_process");
8
8
  //#region src/ingress/tailscale-cli.ts
@@ -1,4 +1,4 @@
1
- import { a as EventCategory, i as BaseAddon, n as networkAccessCapability } from "../dist-CLEhB-7g.mjs";
1
+ import { a as EventCategory, i as BaseAddon, n as networkAccessCapability } from "../dist-DCvDQ86T.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { execFile } from "node:child_process";
4
4
  import { promisify } from "node:util";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-tailscale",
3
- "version": "1.2.51",
3
+ "version": "1.2.53",
4
4
  "description": "Tailscale bundle for CamStack — joins the host to a tailnet (client) and exposes the hub via Serve/Funnel (ingress). Multi-entry npm package shipping 2 addons under a single bundle.",
5
5
  "keywords": [
6
6
  "camstack",