@camstack/addon-tailscale 1.2.17 → 1.2.19

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-CDYOSmZP.js");
27
+ const require_dist = require("../dist-CHxximRh.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-uBwggMrS.mjs";
1
+ import { a as EventCategory, i as BaseAddon, n as networkAccessCapability, r as BOOT_RECOVERY_BACKOFF_MS, t as meshNetworkCapability } from "../dist-Dyfj9Ljl.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";
@@ -10832,6 +10832,8 @@ var QueryFilterSchema = object({
10832
10832
  where: record(string(), unknown()).optional(),
10833
10833
  whereIn: record(string(), array(unknown())).optional(),
10834
10834
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
10835
+ /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
10836
+ whereNot: record(string(), unknown()).optional(),
10835
10837
  orderBy: object({
10836
10838
  field: string(),
10837
10839
  direction: _enum(["asc", "desc"])
@@ -10851,7 +10853,8 @@ var QueryFilterSchema = object({
10851
10853
  var MutationFilterSchema = object({
10852
10854
  where: record(string(), unknown()).optional(),
10853
10855
  whereIn: record(string(), array(unknown())).optional(),
10854
- whereBetween: record(string(), tuple([unknown(), unknown()])).optional()
10856
+ whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
10857
+ whereNot: record(string(), unknown()).optional()
10855
10858
  });
10856
10859
  /** A single stored record: `{ id, data }`. */
10857
10860
  var SettingsRecordSchema = object({
@@ -16744,7 +16747,10 @@ var RecentTracksQueryInput = object({
16744
16747
  * Encodes the (lastSeen, trackId) sort position — treat as opaque. */
16745
16748
  cursor: string().optional(),
16746
16749
  /** See {@link TrackProjectionSchema}. Default `full`. */
16747
- projection: TrackProjectionSchema.optional()
16750
+ projection: TrackProjectionSchema.optional(),
16751
+ /** Include stationary-promoted rows (parked objects). Default false: the
16752
+ * feed lists passages; parking records live on the stationary registry. */
16753
+ includeStationary: boolean().optional()
16748
16754
  });
16749
16755
  var RecentTracksPageSchema = object({
16750
16756
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
@@ -16962,7 +16968,11 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16962
16968
  zone: TrackZoneFilterSchema.optional(),
16963
16969
  /** See {@link TrackProjectionSchema}. Default `full` (backward
16964
16970
  * compatible — omitting the field keeps today's exact behaviour). */
16965
- projection: TrackProjectionSchema.optional()
16971
+ projection: TrackProjectionSchema.optional(),
16972
+ /** Include stationary-promoted rows (parked objects handed to the
16973
+ * stationary registry). Default false: the timeline lists passages,
16974
+ * not parking records (operator decision, 2026-08-15). */
16975
+ includeStationary: boolean().optional()
16966
16976
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
16967
16977
  kind: "mutation",
16968
16978
  auth: "admin"
@@ -17126,11 +17136,16 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
17126
17136
  auth: "admin"
17127
17137
  }), method(object({
17128
17138
  eventId: string(),
17129
- kind: MediaFileKindEnum.optional()
17139
+ kind: MediaFileKindEnum.optional(),
17140
+ deviceId: number()
17141
+ }), array(MediaFileSchema).readonly()), method(object({
17142
+ trackId: string(),
17143
+ kinds: array(MediaFileKindEnum).optional(),
17144
+ deviceId: number()
17130
17145
  }), array(MediaFileSchema).readonly()), method(object({
17131
17146
  trackId: string(),
17132
- kinds: array(MediaFileKindEnum).optional()
17133
- }), array(MediaFileSchema).readonly()), method(object({ trackId: string() }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
17147
+ deviceId: number()
17148
+ }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
17134
17149
  kind: "mutation",
17135
17150
  auth: "admin"
17136
17151
  }), method(RebuildObjectEmbeddingsInput, RebuildObjectEmbeddingsResultSchema, {
@@ -19079,7 +19094,31 @@ DeviceType.Camera, method(object({
19079
19094
  lastCapturedAt: number().nullable(),
19080
19095
  cacheAgeMs: number().nullable(),
19081
19096
  etag: string().nullable()
19082
- }))), systemMethod(object({
19097
+ }))), systemMethod(object({ deviceId: number() }), object({
19098
+ /** The battery slice as read, or null when the device has none. */
19099
+ battery: object({
19100
+ sleeping: boolean(),
19101
+ lastUpdated: number(),
19102
+ lastContactAt: number().optional()
19103
+ }).nullable(),
19104
+ /** The resolved snapshot state (what the overlay decision used). */
19105
+ state: object({
19106
+ isBattery: boolean(),
19107
+ reason: _enum([
19108
+ "disabled",
19109
+ "sleeping",
19110
+ "unreachable",
19111
+ "waking"
19112
+ ]).nullable()
19113
+ }),
19114
+ /** The cached frame behind the next paint. */
19115
+ frame: object({
19116
+ capturedAt: number().nullable(),
19117
+ ageMs: number().nullable()
19118
+ }),
19119
+ /** A wake window is currently open (the Waking overlay's source). */
19120
+ waking: boolean()
19121
+ })), systemMethod(object({
19083
19122
  /** The tiles a surface is actually rendering. One entry per (device,
19084
19123
  * width) the caller will paint — the width is snapped to the server's
19085
19124
  * ladder and becomes part of the link's SIGNED identity. */
@@ -19109,7 +19148,16 @@ targets: array(object({
19109
19148
  /** A sleeping battery camera: the frame is deliberately stale and will
19110
19149
  * NOT refresh in the background. A surface should say so rather than
19111
19150
  * present it as current. */
19112
- sleeping: boolean()
19151
+ sleeping: boolean(),
19152
+ /** Current device state rendered over the cached frame. State images
19153
+ * remain authoritative even when their photographic background is
19154
+ * old; null means the link must carry a current camera frame. */
19155
+ stateReason: _enum([
19156
+ "disabled",
19157
+ "sleeping",
19158
+ "unreachable",
19159
+ "waking"
19160
+ ]).nullable()
19113
19161
  })));
19114
19162
  /**
19115
19163
  * `sso-bridge` — internal hub-only cap that lets SSO-style auth
@@ -20631,6 +20679,25 @@ var BatteryStatusSchema = object({
20631
20679
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
20632
20680
  lastUpdated: number(),
20633
20681
  /**
20682
+ * Ms epoch of the last time the device PROVED it was reachable — a
20683
+ * completed firmware round-trip, an observed wake, or an inbound push
20684
+ * (firmware event, email). `0`/absent = never since this slice was born.
20685
+ *
20686
+ * This is the ONLY input that separates "asleep" from "gone", and it is
20687
+ * fed exclusively by PASSIVE signals: nothing may write it by reaching
20688
+ * for the radio, because a poll that confirms reachability is the same
20689
+ * poll that drains the battery. See {@link deriveBatteryPresence} — the
20690
+ * single derivation every consumer must use; no surface computes its own.
20691
+ *
20692
+ * It is deliberately NOT a clock in the
20693
+ * `scripts/check-runtime-state-durability.ts` sense: it is the
20694
+ * observation itself, and it is the only thing a 30-hour silence is
20695
+ * visible in. Writers quantise it (see `CONTACT_WRITE_QUANTUM_MS` in the
20696
+ * Reolink provider) so a value that means "recently" cannot cost a
20697
+ * SQLite commit per round-trip.
20698
+ */
20699
+ lastContactAt: number().optional(),
20700
+ /**
20634
20701
  * True when the source is a BINARY low-battery indicator (HA
20635
20702
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
20636
20703
  * charge level — `percentage` is then a coarse stand-in (100 = normal,
@@ -24969,6 +25036,16 @@ var CamStreamDescriptorSchema = object({
24969
25036
  /** Transport-specific opaque metadata (e.g. rfc4571 SDP). */
24970
25037
  metadata: record(string(), unknown()).optional()
24971
25038
  });
25039
+ object({
25040
+ /** The descriptors as last built from a real camera response. Never a guess:
25041
+ * a failed or refused build writes NOTHING, so a restored catalog is always
25042
+ * one the camera itself once produced. */
25043
+ descriptors: array(CamStreamDescriptorSchema),
25044
+ /** Ms epoch of the build that produced {@link descriptors}. Lets the wake
25045
+ * path decide whether the camera's own awake window is worth spending on a
25046
+ * re-read. */
25047
+ lastFetchedAt: number()
25048
+ });
24972
25049
  DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), array(CamStreamDescriptorSchema).readonly());
24973
25050
  /** One of the camera's stream profiles. */
24974
25051
  var StreamProfileSchema = _enum([
@@ -30317,6 +30394,12 @@ Object.freeze({
30317
30394
  addonId: null,
30318
30395
  access: "view"
30319
30396
  },
30397
+ "snapshot.getDebugState": {
30398
+ capName: "snapshot",
30399
+ capScope: "device",
30400
+ addonId: null,
30401
+ access: "view"
30402
+ },
30320
30403
  "snapshot.getSnapshot": {
30321
30404
  capName: "snapshot",
30322
30405
  capScope: "device",
@@ -32399,6 +32482,11 @@ Object.freeze({
32399
32482
  form: "single",
32400
32483
  optional: false
32401
32484
  }],
32485
+ "pipelineAnalytics.getEventMedia": [{
32486
+ name: "deviceId",
32487
+ form: "single",
32488
+ optional: false
32489
+ }],
32402
32490
  "pipelineAnalytics.getKeyEvents": [{
32403
32491
  name: "deviceId",
32404
32492
  form: "single",
@@ -32429,6 +32517,11 @@ Object.freeze({
32429
32517
  form: "single",
32430
32518
  optional: false
32431
32519
  }],
32520
+ "pipelineAnalytics.getTrackMedia": [{
32521
+ name: "deviceId",
32522
+ form: "single",
32523
+ optional: false
32524
+ }],
32432
32525
  "pipelineAnalytics.getTrainingExportSummary": [{
32433
32526
  name: "deviceIds",
32434
32527
  form: "array",
@@ -32464,6 +32557,11 @@ Object.freeze({
32464
32557
  form: "array",
32465
32558
  optional: true
32466
32559
  }],
32560
+ "pipelineAnalytics.listTrackMedia": [{
32561
+ name: "deviceId",
32562
+ form: "single",
32563
+ optional: false
32564
+ }],
32467
32565
  "pipelineAnalytics.listTracks": [{
32468
32566
  name: "deviceId",
32469
32567
  form: "single",
@@ -32899,11 +32997,22 @@ Object.freeze({
32899
32997
  form: "single",
32900
32998
  optional: false
32901
32999
  }],
33000
+ "snapshot.getDebugState": [{
33001
+ name: "deviceId",
33002
+ form: "single",
33003
+ optional: false
33004
+ }],
32902
33005
  "snapshot.getSnapshot": [{
32903
33006
  name: "deviceId",
32904
33007
  form: "single",
32905
33008
  optional: false
32906
33009
  }],
33010
+ "snapshot.getSnapshotLinks": [{
33011
+ name: "targets",
33012
+ form: "object-array",
33013
+ optional: false,
33014
+ itemField: "deviceId"
33015
+ }],
32907
33016
  "snapshot.getSnapshotOverview": [{
32908
33017
  name: "deviceIds",
32909
33018
  form: "array",
@@ -10832,6 +10832,8 @@ var QueryFilterSchema = object({
10832
10832
  where: record(string(), unknown()).optional(),
10833
10833
  whereIn: record(string(), array(unknown())).optional(),
10834
10834
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
10835
+ /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
10836
+ whereNot: record(string(), unknown()).optional(),
10835
10837
  orderBy: object({
10836
10838
  field: string(),
10837
10839
  direction: _enum(["asc", "desc"])
@@ -10851,7 +10853,8 @@ var QueryFilterSchema = object({
10851
10853
  var MutationFilterSchema = object({
10852
10854
  where: record(string(), unknown()).optional(),
10853
10855
  whereIn: record(string(), array(unknown())).optional(),
10854
- whereBetween: record(string(), tuple([unknown(), unknown()])).optional()
10856
+ whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
10857
+ whereNot: record(string(), unknown()).optional()
10855
10858
  });
10856
10859
  /** A single stored record: `{ id, data }`. */
10857
10860
  var SettingsRecordSchema = object({
@@ -16744,7 +16747,10 @@ var RecentTracksQueryInput = object({
16744
16747
  * Encodes the (lastSeen, trackId) sort position — treat as opaque. */
16745
16748
  cursor: string().optional(),
16746
16749
  /** See {@link TrackProjectionSchema}. Default `full`. */
16747
- projection: TrackProjectionSchema.optional()
16750
+ projection: TrackProjectionSchema.optional(),
16751
+ /** Include stationary-promoted rows (parked objects). Default false: the
16752
+ * feed lists passages; parking records live on the stationary registry. */
16753
+ includeStationary: boolean().optional()
16748
16754
  });
16749
16755
  var RecentTracksPageSchema = object({
16750
16756
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
@@ -16962,7 +16968,11 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16962
16968
  zone: TrackZoneFilterSchema.optional(),
16963
16969
  /** See {@link TrackProjectionSchema}. Default `full` (backward
16964
16970
  * compatible — omitting the field keeps today's exact behaviour). */
16965
- projection: TrackProjectionSchema.optional()
16971
+ projection: TrackProjectionSchema.optional(),
16972
+ /** Include stationary-promoted rows (parked objects handed to the
16973
+ * stationary registry). Default false: the timeline lists passages,
16974
+ * not parking records (operator decision, 2026-08-15). */
16975
+ includeStationary: boolean().optional()
16966
16976
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
16967
16977
  kind: "mutation",
16968
16978
  auth: "admin"
@@ -17126,11 +17136,16 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
17126
17136
  auth: "admin"
17127
17137
  }), method(object({
17128
17138
  eventId: string(),
17129
- kind: MediaFileKindEnum.optional()
17139
+ kind: MediaFileKindEnum.optional(),
17140
+ deviceId: number()
17141
+ }), array(MediaFileSchema).readonly()), method(object({
17142
+ trackId: string(),
17143
+ kinds: array(MediaFileKindEnum).optional(),
17144
+ deviceId: number()
17130
17145
  }), array(MediaFileSchema).readonly()), method(object({
17131
17146
  trackId: string(),
17132
- kinds: array(MediaFileKindEnum).optional()
17133
- }), array(MediaFileSchema).readonly()), method(object({ trackId: string() }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
17147
+ deviceId: number()
17148
+ }), array(MediaFileInfoSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
17134
17149
  kind: "mutation",
17135
17150
  auth: "admin"
17136
17151
  }), method(RebuildObjectEmbeddingsInput, RebuildObjectEmbeddingsResultSchema, {
@@ -19079,7 +19094,31 @@ DeviceType.Camera, method(object({
19079
19094
  lastCapturedAt: number().nullable(),
19080
19095
  cacheAgeMs: number().nullable(),
19081
19096
  etag: string().nullable()
19082
- }))), systemMethod(object({
19097
+ }))), systemMethod(object({ deviceId: number() }), object({
19098
+ /** The battery slice as read, or null when the device has none. */
19099
+ battery: object({
19100
+ sleeping: boolean(),
19101
+ lastUpdated: number(),
19102
+ lastContactAt: number().optional()
19103
+ }).nullable(),
19104
+ /** The resolved snapshot state (what the overlay decision used). */
19105
+ state: object({
19106
+ isBattery: boolean(),
19107
+ reason: _enum([
19108
+ "disabled",
19109
+ "sleeping",
19110
+ "unreachable",
19111
+ "waking"
19112
+ ]).nullable()
19113
+ }),
19114
+ /** The cached frame behind the next paint. */
19115
+ frame: object({
19116
+ capturedAt: number().nullable(),
19117
+ ageMs: number().nullable()
19118
+ }),
19119
+ /** A wake window is currently open (the Waking overlay's source). */
19120
+ waking: boolean()
19121
+ })), systemMethod(object({
19083
19122
  /** The tiles a surface is actually rendering. One entry per (device,
19084
19123
  * width) the caller will paint — the width is snapped to the server's
19085
19124
  * ladder and becomes part of the link's SIGNED identity. */
@@ -19109,7 +19148,16 @@ targets: array(object({
19109
19148
  /** A sleeping battery camera: the frame is deliberately stale and will
19110
19149
  * NOT refresh in the background. A surface should say so rather than
19111
19150
  * present it as current. */
19112
- sleeping: boolean()
19151
+ sleeping: boolean(),
19152
+ /** Current device state rendered over the cached frame. State images
19153
+ * remain authoritative even when their photographic background is
19154
+ * old; null means the link must carry a current camera frame. */
19155
+ stateReason: _enum([
19156
+ "disabled",
19157
+ "sleeping",
19158
+ "unreachable",
19159
+ "waking"
19160
+ ]).nullable()
19113
19161
  })));
19114
19162
  /**
19115
19163
  * `sso-bridge` — internal hub-only cap that lets SSO-style auth
@@ -20631,6 +20679,25 @@ var BatteryStatusSchema = object({
20631
20679
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
20632
20680
  lastUpdated: number(),
20633
20681
  /**
20682
+ * Ms epoch of the last time the device PROVED it was reachable — a
20683
+ * completed firmware round-trip, an observed wake, or an inbound push
20684
+ * (firmware event, email). `0`/absent = never since this slice was born.
20685
+ *
20686
+ * This is the ONLY input that separates "asleep" from "gone", and it is
20687
+ * fed exclusively by PASSIVE signals: nothing may write it by reaching
20688
+ * for the radio, because a poll that confirms reachability is the same
20689
+ * poll that drains the battery. See {@link deriveBatteryPresence} — the
20690
+ * single derivation every consumer must use; no surface computes its own.
20691
+ *
20692
+ * It is deliberately NOT a clock in the
20693
+ * `scripts/check-runtime-state-durability.ts` sense: it is the
20694
+ * observation itself, and it is the only thing a 30-hour silence is
20695
+ * visible in. Writers quantise it (see `CONTACT_WRITE_QUANTUM_MS` in the
20696
+ * Reolink provider) so a value that means "recently" cannot cost a
20697
+ * SQLite commit per round-trip.
20698
+ */
20699
+ lastContactAt: number().optional(),
20700
+ /**
20634
20701
  * True when the source is a BINARY low-battery indicator (HA
20635
20702
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
20636
20703
  * charge level — `percentage` is then a coarse stand-in (100 = normal,
@@ -24969,6 +25036,16 @@ var CamStreamDescriptorSchema = object({
24969
25036
  /** Transport-specific opaque metadata (e.g. rfc4571 SDP). */
24970
25037
  metadata: record(string(), unknown()).optional()
24971
25038
  });
25039
+ object({
25040
+ /** The descriptors as last built from a real camera response. Never a guess:
25041
+ * a failed or refused build writes NOTHING, so a restored catalog is always
25042
+ * one the camera itself once produced. */
25043
+ descriptors: array(CamStreamDescriptorSchema),
25044
+ /** Ms epoch of the build that produced {@link descriptors}. Lets the wake
25045
+ * path decide whether the camera's own awake window is worth spending on a
25046
+ * re-read. */
25047
+ lastFetchedAt: number()
25048
+ });
24972
25049
  DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), array(CamStreamDescriptorSchema).readonly());
24973
25050
  /** One of the camera's stream profiles. */
24974
25051
  var StreamProfileSchema = _enum([
@@ -30317,6 +30394,12 @@ Object.freeze({
30317
30394
  addonId: null,
30318
30395
  access: "view"
30319
30396
  },
30397
+ "snapshot.getDebugState": {
30398
+ capName: "snapshot",
30399
+ capScope: "device",
30400
+ addonId: null,
30401
+ access: "view"
30402
+ },
30320
30403
  "snapshot.getSnapshot": {
30321
30404
  capName: "snapshot",
30322
30405
  capScope: "device",
@@ -32399,6 +32482,11 @@ Object.freeze({
32399
32482
  form: "single",
32400
32483
  optional: false
32401
32484
  }],
32485
+ "pipelineAnalytics.getEventMedia": [{
32486
+ name: "deviceId",
32487
+ form: "single",
32488
+ optional: false
32489
+ }],
32402
32490
  "pipelineAnalytics.getKeyEvents": [{
32403
32491
  name: "deviceId",
32404
32492
  form: "single",
@@ -32429,6 +32517,11 @@ Object.freeze({
32429
32517
  form: "single",
32430
32518
  optional: false
32431
32519
  }],
32520
+ "pipelineAnalytics.getTrackMedia": [{
32521
+ name: "deviceId",
32522
+ form: "single",
32523
+ optional: false
32524
+ }],
32432
32525
  "pipelineAnalytics.getTrainingExportSummary": [{
32433
32526
  name: "deviceIds",
32434
32527
  form: "array",
@@ -32464,6 +32557,11 @@ Object.freeze({
32464
32557
  form: "array",
32465
32558
  optional: true
32466
32559
  }],
32560
+ "pipelineAnalytics.listTrackMedia": [{
32561
+ name: "deviceId",
32562
+ form: "single",
32563
+ optional: false
32564
+ }],
32467
32565
  "pipelineAnalytics.listTracks": [{
32468
32566
  name: "deviceId",
32469
32567
  form: "single",
@@ -32899,11 +32997,22 @@ Object.freeze({
32899
32997
  form: "single",
32900
32998
  optional: false
32901
32999
  }],
33000
+ "snapshot.getDebugState": [{
33001
+ name: "deviceId",
33002
+ form: "single",
33003
+ optional: false
33004
+ }],
32902
33005
  "snapshot.getSnapshot": [{
32903
33006
  name: "deviceId",
32904
33007
  form: "single",
32905
33008
  optional: false
32906
33009
  }],
33010
+ "snapshot.getSnapshotLinks": [{
33011
+ name: "targets",
33012
+ form: "object-array",
33013
+ optional: false,
33014
+ itemField: "deviceId"
33015
+ }],
32907
33016
  "snapshot.getSnapshotOverview": [{
32908
33017
  name: "deviceIds",
32909
33018
  form: "array",
@@ -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-CDYOSmZP.js");
5
+ const require_dist = require("../dist-CHxximRh.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-uBwggMrS.mjs";
1
+ import { a as EventCategory, i as BaseAddon, n as networkAccessCapability } from "../dist-Dyfj9Ljl.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.17",
3
+ "version": "1.2.19",
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",