@camstack/addon-tailscale 1.2.18 → 1.2.20

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-DbpUYHfo.js");
27
+ const require_dist = require("../dist-DGr1NbVk.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-jVhbn7qz.mjs";
1
+ import { a as EventCategory, i as BaseAddon, n as networkAccessCapability, r as BOOT_RECOVERY_BACKOFF_MS, t as meshNetworkCapability } from "../dist-nGlZjTHi.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";
@@ -19094,7 +19094,31 @@ DeviceType.Camera, method(object({
19094
19094
  lastCapturedAt: number().nullable(),
19095
19095
  cacheAgeMs: number().nullable(),
19096
19096
  etag: string().nullable()
19097
- }))), 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({
19098
19122
  /** The tiles a surface is actually rendering. One entry per (device,
19099
19123
  * width) the caller will paint — the width is snapped to the server's
19100
19124
  * ladder and becomes part of the link's SIGNED identity. */
@@ -19133,7 +19157,14 @@ targets: array(object({
19133
19157
  "sleeping",
19134
19158
  "unreachable",
19135
19159
  "waking"
19136
- ]).nullable()
19160
+ ]).nullable(),
19161
+ /** A battery camera (whatever its current state). An AWAKE battery
19162
+ * camera is deliberately NOT recaptured on the poll cadence — every
19163
+ * capture is a camera hit that would keep it out of sleep — so its
19164
+ * cached frame legitimately ages past the currency ceiling while
19165
+ * nothing is streaming. A surface must keep painting it (a fresh
19166
+ * frame is captured at each wake), not blank to "unavailable". */
19167
+ battery: boolean()
19137
19168
  })));
19138
19169
  /**
19139
19170
  * `sso-bridge` — internal hub-only cap that lets SSO-style auth
@@ -30370,6 +30401,12 @@ Object.freeze({
30370
30401
  addonId: null,
30371
30402
  access: "view"
30372
30403
  },
30404
+ "snapshot.getDebugState": {
30405
+ capName: "snapshot",
30406
+ capScope: "device",
30407
+ addonId: null,
30408
+ access: "view"
30409
+ },
30373
30410
  "snapshot.getSnapshot": {
30374
30411
  capName: "snapshot",
30375
30412
  capScope: "device",
@@ -32967,6 +33004,11 @@ Object.freeze({
32967
33004
  form: "single",
32968
33005
  optional: false
32969
33006
  }],
33007
+ "snapshot.getDebugState": [{
33008
+ name: "deviceId",
33009
+ form: "single",
33010
+ optional: false
33011
+ }],
32970
33012
  "snapshot.getSnapshot": [{
32971
33013
  name: "deviceId",
32972
33014
  form: "single",
@@ -19094,7 +19094,31 @@ DeviceType.Camera, method(object({
19094
19094
  lastCapturedAt: number().nullable(),
19095
19095
  cacheAgeMs: number().nullable(),
19096
19096
  etag: string().nullable()
19097
- }))), 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({
19098
19122
  /** The tiles a surface is actually rendering. One entry per (device,
19099
19123
  * width) the caller will paint — the width is snapped to the server's
19100
19124
  * ladder and becomes part of the link's SIGNED identity. */
@@ -19133,7 +19157,14 @@ targets: array(object({
19133
19157
  "sleeping",
19134
19158
  "unreachable",
19135
19159
  "waking"
19136
- ]).nullable()
19160
+ ]).nullable(),
19161
+ /** A battery camera (whatever its current state). An AWAKE battery
19162
+ * camera is deliberately NOT recaptured on the poll cadence — every
19163
+ * capture is a camera hit that would keep it out of sleep — so its
19164
+ * cached frame legitimately ages past the currency ceiling while
19165
+ * nothing is streaming. A surface must keep painting it (a fresh
19166
+ * frame is captured at each wake), not blank to "unavailable". */
19167
+ battery: boolean()
19137
19168
  })));
19138
19169
  /**
19139
19170
  * `sso-bridge` — internal hub-only cap that lets SSO-style auth
@@ -30370,6 +30401,12 @@ Object.freeze({
30370
30401
  addonId: null,
30371
30402
  access: "view"
30372
30403
  },
30404
+ "snapshot.getDebugState": {
30405
+ capName: "snapshot",
30406
+ capScope: "device",
30407
+ addonId: null,
30408
+ access: "view"
30409
+ },
30373
30410
  "snapshot.getSnapshot": {
30374
30411
  capName: "snapshot",
30375
30412
  capScope: "device",
@@ -32967,6 +33004,11 @@ Object.freeze({
32967
33004
  form: "single",
32968
33005
  optional: false
32969
33006
  }],
33007
+ "snapshot.getDebugState": [{
33008
+ name: "deviceId",
33009
+ form: "single",
33010
+ optional: false
33011
+ }],
32970
33012
  "snapshot.getSnapshot": [{
32971
33013
  name: "deviceId",
32972
33014
  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-DbpUYHfo.js");
5
+ const require_dist = require("../dist-DGr1NbVk.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-jVhbn7qz.mjs";
1
+ import { a as EventCategory, i as BaseAddon, n as networkAccessCapability } from "../dist-nGlZjTHi.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.18",
3
+ "version": "1.2.20",
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",