@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.
- package/dist/client/tailscale.addon.js +1 -1
- package/dist/client/tailscale.addon.mjs +1 -1
- package/dist/{dist-CDYOSmZP.js → dist-CHxximRh.js} +117 -8
- package/dist/{dist-uBwggMrS.mjs → dist-Dyfj9Ljl.mjs} +117 -8
- package/dist/ingress/tailscale-ingress.addon.js +1 -1
- package/dist/ingress/tailscale-ingress.addon.mjs +1 -1
- package/package.json +1 -1
|
@@ -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-
|
|
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-
|
|
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
|
-
|
|
17133
|
-
}), array(
|
|
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
|
-
|
|
17133
|
-
}), array(
|
|
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-
|
|
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-
|
|
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.
|
|
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",
|