@camstack/types 0.1.31 → 0.1.32

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.
Files changed (76) hide show
  1. package/dist/capabilities/admin-ui.cap.d.ts +6 -2
  2. package/dist/capabilities/admin-ui.cap.d.ts.map +1 -1
  3. package/dist/capabilities/advanced-notifier.cap.d.ts +202 -29
  4. package/dist/capabilities/advanced-notifier.cap.d.ts.map +1 -1
  5. package/dist/capabilities/audio-codec.cap.d.ts +2 -2
  6. package/dist/capabilities/capability-definition.d.ts +22 -0
  7. package/dist/capabilities/capability-definition.d.ts.map +1 -1
  8. package/dist/capabilities/device-export.cap.d.ts +77 -0
  9. package/dist/capabilities/device-export.cap.d.ts.map +1 -0
  10. package/dist/capabilities/embedding-encoder.cap.d.ts +14 -7
  11. package/dist/capabilities/embedding-encoder.cap.d.ts.map +1 -1
  12. package/dist/capabilities/index.d.ts +15 -11
  13. package/dist/capabilities/index.d.ts.map +1 -1
  14. package/dist/capabilities/intercom.cap.d.ts +34 -0
  15. package/dist/capabilities/intercom.cap.d.ts.map +1 -1
  16. package/dist/capabilities/mesh-network.cap.d.ts +18 -20
  17. package/dist/capabilities/mesh-network.cap.d.ts.map +1 -1
  18. package/dist/capabilities/mqtt-broker.cap.d.ts +153 -0
  19. package/dist/capabilities/mqtt-broker.cap.d.ts.map +1 -0
  20. package/dist/capabilities/network-access.cap.d.ts +41 -1
  21. package/dist/capabilities/network-access.cap.d.ts.map +1 -1
  22. package/dist/capabilities/platform-probe.cap.d.ts +234 -15
  23. package/dist/capabilities/platform-probe.cap.d.ts.map +1 -1
  24. package/dist/capabilities/smtp-provider.cap.d.ts +11 -10
  25. package/dist/capabilities/smtp-provider.cap.d.ts.map +1 -1
  26. package/dist/capabilities/sso-bridge.cap.d.ts +3 -0
  27. package/dist/capabilities/sso-bridge.cap.d.ts.map +1 -1
  28. package/dist/capabilities/stream-broker.cap.d.ts +90 -85
  29. package/dist/capabilities/stream-broker.cap.d.ts.map +1 -1
  30. package/dist/capabilities/webrtc-session.cap.d.ts +34 -0
  31. package/dist/capabilities/webrtc-session.cap.d.ts.map +1 -1
  32. package/dist/enums/event-category.d.ts +1 -8
  33. package/dist/enums/event-category.d.ts.map +1 -1
  34. package/dist/generated/addon-api.d.ts +12923 -10641
  35. package/dist/generated/addon-api.d.ts.map +1 -1
  36. package/dist/generated/cap-status-types.d.ts +5 -1
  37. package/dist/generated/cap-status-types.d.ts.map +1 -1
  38. package/dist/generated/capability-router-map.d.ts +7 -7
  39. package/dist/generated/capability-router-map.d.ts.map +1 -1
  40. package/dist/generated/device-proxy.d.ts +2 -0
  41. package/dist/generated/device-proxy.d.ts.map +1 -1
  42. package/dist/generated/method-access-map.d.ts +1 -1
  43. package/dist/generated/method-access-map.d.ts.map +1 -1
  44. package/dist/generated/provider-kind-map.d.ts +22 -0
  45. package/dist/generated/provider-kind-map.d.ts.map +1 -0
  46. package/dist/generated/system-proxy.d.ts +7 -3
  47. package/dist/generated/system-proxy.d.ts.map +1 -1
  48. package/dist/{index-BKnvgAep.mjs → index-BBVUwOlZ.mjs} +641 -610
  49. package/dist/index-BBVUwOlZ.mjs.map +1 -0
  50. package/dist/{index-BKifir_y.js → index-BUBhoPUu.js} +381 -350
  51. package/dist/index-BUBhoPUu.js.map +1 -0
  52. package/dist/index.d.ts +2 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +108 -39
  55. package/dist/index.js.map +1 -1
  56. package/dist/index.mjs +365 -296
  57. package/dist/index.mjs.map +1 -1
  58. package/dist/interfaces/addon.d.ts +14 -3
  59. package/dist/interfaces/addon.d.ts.map +1 -1
  60. package/dist/interfaces/advanced-notifier.d.ts +8 -7
  61. package/dist/interfaces/advanced-notifier.d.ts.map +1 -1
  62. package/dist/interfaces/capability.d.ts +6 -6
  63. package/dist/interfaces/capability.d.ts.map +1 -1
  64. package/dist/interfaces/embedding-encoder.d.ts +16 -7
  65. package/dist/interfaces/embedding-encoder.d.ts.map +1 -1
  66. package/dist/interfaces/rtp-egress.d.ts +45 -0
  67. package/dist/interfaces/rtp-egress.d.ts.map +1 -0
  68. package/dist/node.js +1 -1
  69. package/dist/node.mjs +1 -1
  70. package/package.json +1 -1
  71. package/dist/capabilities/home-assistant.cap.d.ts +0 -138
  72. package/dist/capabilities/home-assistant.cap.d.ts.map +0 -1
  73. package/dist/capabilities/mqtt-provider.cap.d.ts +0 -91
  74. package/dist/capabilities/mqtt-provider.cap.d.ts.map +0 -1
  75. package/dist/index-BKifir_y.js.map +0 -1
  76. package/dist/index-BKnvgAep.mjs.map +0 -1
@@ -1069,9 +1069,9 @@ const DecodedFrameSchema = z.object({
1069
1069
  format: z.enum(["jpeg", "rgb", "bgr", "yuv420", "gray"]),
1070
1070
  timestamp: z.number()
1071
1071
  });
1072
- const BrokerStatusSchema = z.enum(["idle", "connecting", "streaming", "error", "stopped"]);
1072
+ const BrokerStatusSchema$1 = z.enum(["idle", "connecting", "streaming", "error", "stopped"]);
1073
1073
  const BrokerStatsSchema = z.object({
1074
- status: BrokerStatusSchema,
1074
+ status: BrokerStatusSchema$1,
1075
1075
  inputFps: z.number(),
1076
1076
  decodeFps: z.number(),
1077
1077
  encodedSubscribers: z.number(),
@@ -1177,22 +1177,34 @@ const PlaceholderReasonSchema = z.enum([
1177
1177
  "disabled",
1178
1178
  "waking"
1179
1179
  ]);
1180
+ const VideoCodecTargetSchema = z.enum(["H264", "H265", "auto"]);
1181
+ const AudioCodecTargetSchema = z.enum(["AAC", "Opus", "PCMU", "none"]);
1182
+ const MaxResolutionSchema = z.object({
1183
+ width: z.number().int().positive(),
1184
+ height: z.number().int().positive()
1185
+ });
1186
+ const GetStreamWithCodecInputSchema = z.object({
1187
+ deviceId: z.number().int().nonnegative(),
1188
+ videoCodec: VideoCodecTargetSchema,
1189
+ audioCodec: AudioCodecTargetSchema.optional(),
1190
+ maxResolution: MaxResolutionSchema.optional(),
1191
+ tag: z.string().optional()
1192
+ });
1193
+ const RtpSourceSchema = z.object({
1194
+ url: z.string(),
1195
+ videoCodec: z.enum(["H264", "H265"]),
1196
+ audioCodec: z.string(),
1197
+ resolution: MaxResolutionSchema,
1198
+ transcoded: z.boolean(),
1199
+ encoder: z.string(),
1200
+ pipelineKey: z.string()
1201
+ });
1180
1202
  const streamBrokerCapability = {
1181
1203
  name: "stream-broker",
1182
1204
  scope: "system",
1183
1205
  mode: "singleton",
1184
1206
  exposesDeviceSettings: true,
1185
1207
  methods: {
1186
- // ── Cam stream lifecycle (publish / retract) ─────────────────────
1187
- /**
1188
- * Register a physical camera stream as an input option. Idempotent
1189
- * for (deviceId, camStreamId) — re-publishing updates metadata
1190
- * without disturbing profile assignments. The provider calls this
1191
- * in `onInitialize` for each stream it offers. Third-party addons
1192
- * may also publish (e.g. an RTMP discovery layer) — camstack has
1193
- * no notion of "owner" beyond the (deviceId, camStreamId) key.
1194
- */
1195
- /* — see STREAM_BROKER_CAP_EVENTS below for cap-event category strings — */
1196
1208
  publishCameraStream: method(
1197
1209
  z.object({
1198
1210
  deviceId: z.number().int().nonnegative(),
@@ -1203,28 +1215,8 @@ const streamBrokerCapability = {
1203
1215
  resolution: CamStreamResolutionSchema.optional(),
1204
1216
  fps: z.number().positive().optional(),
1205
1217
  label: z.string().optional(),
1206
- /**
1207
- * Device-level features that the broker / manager / snapshot
1208
- * orchestrator consult to derive per-stream policy (e.g.
1209
- * `BatteryOperated` → relax stall watchdog, default pre-buffer
1210
- * to off, raise snapshot rate-limit). Single source of truth —
1211
- * publishers no longer set per-stream flags like `allowStall`.
1212
- */
1213
1218
  deviceFeatures: z.array(z.string()).optional(),
1214
- /**
1215
- * Whether this stream participates in the broker's automatic
1216
- * profile assignment. Defaults `true`. Publishers set `false` for
1217
- * streams that should be SELECTABLE but not auto-picked — e.g.
1218
- * Reolink publishes native Baichuan as eligible and RTSP/RTMP
1219
- * mirrors as ineligible (still assignable manually via
1220
- * `assignProfile`).
1221
- */
1222
1219
  autoEligible: z.boolean().optional(),
1223
- /**
1224
- * Transport-specific opaque metadata stashed alongside the stream
1225
- * record. `pull-rfc4571` publishers put the SDP here so the broker
1226
- * reader can route packets without an in-band DESCRIBE phase.
1227
- */
1228
1220
  metadata: z.record(z.string(), z.unknown()).optional()
1229
1221
  }),
1230
1222
  z.object({ success: z.literal(true) }),
@@ -1238,12 +1230,6 @@ const streamBrokerCapability = {
1238
1230
  z.object({ success: z.literal(true) }),
1239
1231
  { kind: "mutation", auth: "admin" }
1240
1232
  ),
1241
- // ── Profile assignment ───────────────────────────────────────────
1242
- /**
1243
- * Assign a cam stream to a profile slot. Tears down any existing
1244
- * broker for that slot and rebuilds against the new source. Persists
1245
- * the choice — survives reboots.
1246
- */
1247
1233
  assignProfile: method(
1248
1234
  z.object({
1249
1235
  deviceId: z.number().int().nonnegative(),
@@ -1261,12 +1247,6 @@ const streamBrokerCapability = {
1261
1247
  z.object({ success: z.literal(true) }),
1262
1248
  { kind: "mutation", auth: "admin" }
1263
1249
  ),
1264
- // ── System-wide views ────────────────────────────────────────────
1265
- /**
1266
- * Full dump of every published cam stream across every device.
1267
- * For dashboards and cross-device tooling; per-device reads go
1268
- * through the `camera-streams` cap on the device proxy.
1269
- */
1270
1250
  listAllCameraStreams: method(
1271
1251
  z.void(),
1272
1252
  z.array(CameraStreamSchema).readonly()
@@ -1275,7 +1255,6 @@ const streamBrokerCapability = {
1275
1255
  z.void(),
1276
1256
  z.array(ProfileSlotSchema).readonly()
1277
1257
  ),
1278
- // ── Broker runtime (stats + client inventory) ────────────────────
1279
1258
  getBrokerStats: method(
1280
1259
  z.object({ brokerId: z.string() }),
1281
1260
  BrokerStatsSchema
@@ -1293,7 +1272,6 @@ const streamBrokerCapability = {
1293
1272
  z.object({ killed: z.boolean() }),
1294
1273
  { kind: "mutation", auth: "admin" }
1295
1274
  ),
1296
- /** Rebuild the broker for a profile slot in place (re-dial source). */
1297
1275
  restartProfile: method(
1298
1276
  z.object({
1299
1277
  deviceId: z.number().int().nonnegative(),
@@ -1302,24 +1280,28 @@ const streamBrokerCapability = {
1302
1280
  z.object({ success: z.boolean() }),
1303
1281
  { kind: "mutation", auth: "admin" }
1304
1282
  ),
1305
- // ── Stream URLs ──────────────────────────────────────────────────
1306
1283
  getStreamUrl: method(
1307
1284
  z.object({ streamId: z.string(), format: StreamFormatSchema }),
1308
1285
  z.object({ url: z.string() })
1309
1286
  ),
1310
- // ── In-process broker access ─────────────────────────────────────
1311
1287
  /**
1312
- * Return the live IStreamBroker instance for a given brokerId. Same
1313
- * LOCAL-ONLY contract as before: callers (pipeline-runner) must be
1314
- * co-located. BrokerId is `${deviceId}/${camStreamId}` — profile
1315
- * lookup goes through `assignments` if a caller starts from a
1316
- * profile.
1288
+ * Shared codec-targeted stream API see Task #184.
1289
+ * Resolution order: source-select HW transcode libx264/libx265.
1317
1290
  */
1291
+ getStreamWithCodec: method(
1292
+ GetStreamWithCodecInputSchema,
1293
+ RtpSourceSchema,
1294
+ { kind: "mutation", auth: "admin" }
1295
+ ),
1296
+ releaseStreamWithCodec: method(
1297
+ z.object({ pipelineKey: z.string() }),
1298
+ z.object({ released: z.boolean(), refcount: z.number().int().nonnegative() }),
1299
+ { kind: "mutation", auth: "admin" }
1300
+ ),
1318
1301
  getBroker: method(
1319
1302
  z.object({ brokerId: z.string() }),
1320
1303
  z.custom()
1321
1304
  ),
1322
- // ── Pre-buffer ───────────────────────────────────────────────────
1323
1305
  setPreBufferDuration: method(
1324
1306
  z.object({ brokerId: z.string(), seconds: z.number().min(0).max(30) }),
1325
1307
  z.void(),
@@ -1329,7 +1311,6 @@ const streamBrokerCapability = {
1329
1311
  z.object({ brokerId: z.string() }),
1330
1312
  z.object({ configuredSec: z.number(), bufferedMs: z.number(), packetCount: z.number() })
1331
1313
  ),
1332
- // ── RTSP restream ────────────────────────────────────────────────
1333
1314
  getRtspPort: method(z.void(), z.number()),
1334
1315
  getAllRtspEntries: method(
1335
1316
  z.object({ hostname: z.string().optional() }),
@@ -1355,37 +1336,15 @@ const streamBrokerCapability = {
1355
1336
  )
1356
1337
  },
1357
1338
  events: {
1358
- /**
1359
- * Emitted when a profile starts consuming a push-kind cam stream.
1360
- * Push-kind providers (e.g. Reolink Baichuan native streams)
1361
- * subscribe and begin emitting packets only on demand — battery
1362
- * cams stay asleep until someone actually watches.
1363
- */
1364
1339
  onCamStreamDemand: event(z.object({
1365
1340
  deviceId: z.number().int().nonnegative(),
1366
1341
  camStreamId: z.string(),
1367
1342
  profile: CamProfileSchema
1368
1343
  })),
1369
- /**
1370
- * Emitted when the last profile consuming a push-kind cam stream
1371
- * releases it. Providers tear down upstream connections on this
1372
- * signal.
1373
- */
1374
1344
  onCamStreamIdle: event(z.object({
1375
1345
  deviceId: z.number().int().nonnegative(),
1376
1346
  camStreamId: z.string()
1377
1347
  })),
1378
- /**
1379
- * Emitted by a broker that failed to dial a managed-loopback
1380
- * source (today: `pull-rfc4571`). The publisher's transport (e.g.
1381
- * the Reolink lib's RFC 4571 TCP server) idle-tears-down after
1382
- * ~15s with no clients and may rebind to a different port on
1383
- * recreate, leaving the URL the broker has cached stale. The owning
1384
- * camera provider re-runs its publish pipeline on receipt — that
1385
- * call self-heals the loopback server (`ensureRfc4571Server`) and
1386
- * `publishCameraStream` propagates the fresh URL back into the
1387
- * broker's source resolver.
1388
- */
1389
1348
  onRequestStreamSourceRefresh: event(z.object({
1390
1349
  deviceId: z.number().int().nonnegative(),
1391
1350
  camStreamId: z.string(),
@@ -3659,14 +3618,16 @@ const logDestinationCapability = {
3659
3618
  )
3660
3619
  }
3661
3620
  };
3621
+ const StaticDirOutputSchema = z.object({ staticDir: z.string() });
3622
+ const VersionOutputSchema = z.object({ version: z.string() });
3662
3623
  const adminUiCapability = {
3663
3624
  name: "admin-ui",
3664
3625
  scope: "system",
3665
3626
  mode: "singleton",
3666
3627
  internal: true,
3667
3628
  methods: {
3668
- getStaticDir: method(z.void(), z.string()),
3669
- getVersion: method(z.void(), z.string())
3629
+ getStaticDir: method(z.void(), StaticDirOutputSchema),
3630
+ getVersion: method(z.void(), VersionOutputSchema)
3670
3631
  }
3671
3632
  };
3672
3633
  const SsoBridgeClaimsSchema = z.object({
@@ -3675,7 +3636,16 @@ const SsoBridgeClaimsSchema = z.object({
3675
3636
  isAdmin: z.boolean(),
3676
3637
  provider: z.string(),
3677
3638
  email: z.string().optional(),
3678
- displayName: z.string().optional()
3639
+ displayName: z.string().optional(),
3640
+ /**
3641
+ * Public HTTPS URL of the hub that issued this token. Used by
3642
+ * cloud-mode OAuth proxies (Alexa Smart Home Lambda, future Google
3643
+ * Home Lambda) to route a request back to the originating hub
3644
+ * without holding routing state of their own. The Lambda decodes the
3645
+ * JWT WITHOUT verifying the signature — the hub re-verifies on every
3646
+ * inbound call so trust still rests with the signing hub.
3647
+ */
3648
+ hubUrl: z.string().optional()
3679
3649
  });
3680
3650
  const ssoBridgeCapability = {
3681
3651
  name: "sso-bridge",
@@ -3757,7 +3727,7 @@ const userPasskeysCapability = {
3757
3727
  )
3758
3728
  }
3759
3729
  };
3760
- const EmailAddressSchema = z.string().email();
3730
+ const EmailAddressSchema = z.email();
3761
3731
  const SendEmailInputSchema = z.object({
3762
3732
  to: z.union([EmailAddressSchema, z.array(EmailAddressSchema).min(1)]),
3763
3733
  cc: z.array(EmailAddressSchema).optional(),
@@ -3795,6 +3765,7 @@ const smtpProviderCapability = {
3795
3765
  scope: "system",
3796
3766
  mode: "collection",
3797
3767
  internal: true,
3768
+ providerKind: "email",
3798
3769
  methods: {
3799
3770
  sendEmail: method(
3800
3771
  SendEmailInputSchema,
@@ -3815,204 +3786,125 @@ const smtpProviderCapability = {
3815
3786
  )
3816
3787
  }
3817
3788
  };
3818
- const QosSchema = z.union([z.literal(0), z.literal(1), z.literal(2)]);
3819
- const PublishInputSchema = z.object({
3820
- topic: z.string(),
3821
- /** UTF-8 payload. Binary payloads must be base64-encoded by the caller. */
3822
- payload: z.string(),
3823
- qos: QosSchema.default(0),
3824
- retain: z.boolean().default(false)
3825
- });
3826
- const SubscribeInputSchema = z.object({
3827
- /** MQTT topic filter (supports `+` single-level and `#` multi-level wildcards). */
3828
- topic: z.string(),
3829
- qos: QosSchema.default(0),
3789
+ const BrokerKindSchema = z.enum(["external", "embedded"]);
3790
+ const BrokerStatusSchema = z.enum([
3791
+ "connected",
3792
+ "disconnected",
3793
+ "auth-failed",
3794
+ "unreachable",
3795
+ "tls-error"
3796
+ ]);
3797
+ const BrokerInfoSchema = z.object({
3798
+ id: z.string(),
3799
+ name: z.string(),
3800
+ url: z.string(),
3801
+ kind: BrokerKindSchema,
3802
+ status: BrokerStatusSchema,
3803
+ latencyMs: z.number().nullable(),
3804
+ error: z.string().optional(),
3805
+ /** Embedded brokers only: number of MQTT clients currently connected. */
3806
+ connectedClients: z.number().int().nonnegative().optional(),
3807
+ /** Epoch ms of the last live probe (external) or aedes snapshot (embedded). */
3808
+ lastCheckedAt: z.number().optional()
3809
+ });
3810
+ const BrokerConnectionDetailsSchema = z.object({
3811
+ url: z.string(),
3812
+ username: z.string().optional(),
3813
+ password: z.string().optional(),
3830
3814
  /**
3831
- * Caller-supplied owner tag. Useful for debugging + the
3832
- * `listSubscriptions` admin view ("which consumer owns this?").
3833
- * When omitted, the addon synthesizes one from the caller's addon id.
3815
+ * Suggested prefix for `clientId`. Each consumer should suffix this
3816
+ * with its own discriminator (addon id, instance id) so reconnects
3817
+ * don't kick each other off (MQTT spec: clientId must be unique per
3818
+ * broker).
3834
3819
  */
3835
- owner: z.string().optional()
3820
+ clientIdPrefix: z.string().optional()
3836
3821
  });
3837
- const SubscribeResultSchema = z.object({
3838
- success: z.literal(true),
3839
- /** Server-generated subscription id. Pass to `unsubscribe` to release. */
3840
- subscriptionId: z.string()
3822
+ const AddBrokerInputSchema = z.object({
3823
+ name: z.string().min(1),
3824
+ url: z.string().regex(/^(mqtt|mqtts|ws|wss):\/\//, "URL must start with mqtt(s):// or ws(s)://"),
3825
+ username: z.string().optional(),
3826
+ password: z.string().optional(),
3827
+ clientIdPrefix: z.string().optional()
3841
3828
  });
3842
- const UnsubscribeInputSchema = z.object({
3843
- /** Subscription id from `subscribe`. */
3844
- subscriptionId: z.string()
3829
+ const AddBrokerResultSchema = z.object({
3830
+ id: z.string()
3845
3831
  });
3846
- const MqttStatusSchema = z.object({
3847
- /** True iff the addon has an active connection to the broker. */
3848
- connected: z.boolean(),
3849
- /** Operator-visible host string (e.g. `mqtt://broker.example:1883`). */
3850
- brokerUrl: z.string(),
3851
- /** Active subscription count (per-owner, NOT broker-side topic count). */
3852
- subscriptionCount: z.number().int(),
3853
- /** Last error reported by the broker. */
3854
- error: z.string().optional(),
3855
- /** Last successful connection timestamp (unix ms). */
3856
- connectedAt: z.number().optional()
3857
- });
3858
- const SubscriptionInfoSchema = z.object({
3859
- subscriptionId: z.string(),
3860
- topic: z.string(),
3861
- qos: QosSchema,
3862
- owner: z.string(),
3863
- /** When this individual subscription was created. */
3864
- createdAt: z.number()
3832
+ const IdInputSchema = z.object({ id: z.string() });
3833
+ const TestResultSchema = z.discriminatedUnion("ok", [
3834
+ z.object({ ok: z.literal(true), latencyMs: z.number() }),
3835
+ z.object({ ok: z.literal(false), error: z.string() })
3836
+ ]);
3837
+ const StartEmbeddedInputSchema = z.object({
3838
+ port: z.number().int().min(1).max(65535).default(1883),
3839
+ /** Allow anonymous connect (no username/password). Default: false. */
3840
+ allowAnonymous: z.boolean().default(false),
3841
+ /** Optional shared username/password for clients. */
3842
+ username: z.string().optional(),
3843
+ password: z.string().optional()
3865
3844
  });
3866
- const mqttProviderCapability = {
3867
- name: "mqtt-provider",
3845
+ const StartEmbeddedResultSchema = z.object({
3846
+ id: z.string(),
3847
+ url: z.string()
3848
+ });
3849
+ const StatusSchema = z.object({
3850
+ brokerCount: z.number(),
3851
+ embeddedRunning: z.boolean()
3852
+ });
3853
+ const mqttBrokerCapability = {
3854
+ name: "mqtt-broker",
3868
3855
  scope: "system",
3869
3856
  mode: "collection",
3870
- internal: true,
3857
+ providerKind: "broker",
3858
+ status: { schema: StatusSchema, kind: "poll" },
3871
3859
  methods: {
3872
- /** Publish a message. Lazy-opens the connection if not yet active. */
3873
- publish: method(
3874
- PublishInputSchema,
3875
- z.object({ success: z.literal(true) }),
3876
- { kind: "mutation", auth: "admin", access: "create" }
3877
- ),
3878
- /**
3879
- * Subscribe to a topic. Returns a `subscriptionId` to pass to
3880
- * `unsubscribe`. The addon refcounts broker subscriptions —
3881
- * multiple consumers on the same topic share one upstream sub.
3882
- * Messages arrive on `mqtt.message` events with `subscriptionIds[]`
3883
- * listing which subscriptions matched.
3884
- */
3885
- subscribe: method(
3886
- SubscribeInputSchema,
3887
- SubscribeResultSchema,
3888
- { kind: "mutation", auth: "admin", access: "create" }
3889
- ),
3890
- /** Release a specific subscription. Tears down the broker sub
3891
- * only when the last owner releases. Idempotent. */
3892
- unsubscribe: method(
3893
- UnsubscribeInputSchema,
3894
- z.object({ success: z.literal(true) }),
3895
- { kind: "mutation", auth: "admin", access: "delete" }
3896
- ),
3897
- /** List active per-owner subscriptions on this provider. */
3898
- listSubscriptions: method(
3899
- z.void(),
3900
- z.array(SubscriptionInfoSchema),
3901
- { auth: "admin" }
3902
- ),
3903
- getStatus: method(
3904
- z.void(),
3905
- MqttStatusSchema,
3906
- { auth: "admin" }
3907
- )
3860
+ listBrokers: method(z.void(), z.array(BrokerInfoSchema)),
3861
+ getBrokerConfig: method(IdInputSchema, BrokerConnectionDetailsSchema),
3862
+ addBroker: method(AddBrokerInputSchema, AddBrokerResultSchema, { kind: "mutation" }),
3863
+ removeBroker: method(IdInputSchema, z.void(), { kind: "mutation" }),
3864
+ testConnection: method(IdInputSchema, TestResultSchema, { kind: "mutation" }),
3865
+ startEmbeddedBroker: method(StartEmbeddedInputSchema, StartEmbeddedResultSchema, { kind: "mutation" }),
3866
+ stopEmbeddedBroker: method(IdInputSchema, z.void(), { kind: "mutation" }),
3867
+ getStatus: method(z.void(), StatusSchema)
3908
3868
  }
3909
3869
  };
3910
- const HaServiceCallSchema = z.object({
3911
- /** HA domain (e.g. `light`, `switch`, `notify`). */
3912
- domain: z.string(),
3913
- /** HA service (e.g. `turn_on`, `toggle`). */
3914
- service: z.string(),
3915
- /** Service-specific data payload (e.g. `{entity_id: 'light.kitchen', brightness: 200}`). */
3916
- serviceData: z.record(z.string(), z.unknown()).optional(),
3917
- /** Optional target spec (entity_id / device_id / area_id). */
3918
- target: z.record(z.string(), z.unknown()).optional()
3919
- });
3920
- const HaStateSchema = z.object({
3921
- entity_id: z.string(),
3922
- state: z.string(),
3923
- attributes: z.record(z.string(), z.unknown()).default({}),
3924
- last_changed: z.string().optional(),
3925
- last_updated: z.string().optional()
3870
+ const LinkStateSchema = z.enum(["unlinked", "linked", "error"]);
3871
+ const DeviceExportStatusSchema = z.object({
3872
+ linkState: LinkStateSchema,
3873
+ exposedDeviceCount: z.number(),
3874
+ error: z.string().optional()
3926
3875
  });
3927
- const HaStatusSchema = z.object({
3928
- connected: z.boolean(),
3929
- host: z.string(),
3930
- /** Active per-owner subscription count. */
3931
- subscriptionCount: z.number().int(),
3932
- /** Last error reported by the WebSocket. */
3933
- error: z.string().optional(),
3934
- /** HA version reported during the auth handshake, when reachable. */
3935
- haVersion: z.string().optional(),
3936
- connectedAt: z.number().optional()
3876
+ const DeviceKindSchema = z.string();
3877
+ const ExposedDeviceSchema = z.object({
3878
+ deviceId: z.string(),
3879
+ exposedAs: z.string().optional(),
3880
+ capabilities: z.array(z.string()).optional()
3937
3881
  });
3938
- const HaSubscribeInputSchema = z.object({
3939
- /**
3940
- * Specific HA event type to subscribe to (`state_changed`,
3941
- * `service_called`, etc.). Empty string = all events (firehose —
3942
- * only for debugging).
3943
- */
3944
- eventType: z.string().optional(),
3945
- /** Caller-supplied tag for listSubscriptions debugging. */
3946
- owner: z.string().optional()
3947
- });
3948
- const HaSubscribeResultSchema = z.object({
3949
- success: z.literal(true),
3950
- subscriptionId: z.string()
3951
- });
3952
- const HaUnsubscribeInputSchema = z.object({
3953
- subscriptionId: z.string()
3954
- });
3955
- const HaSubscriptionInfoSchema = z.object({
3956
- subscriptionId: z.string(),
3957
- /** Empty string when subscribed to ALL events. */
3958
- eventType: z.string(),
3959
- owner: z.string(),
3960
- createdAt: z.number()
3882
+ const ExposeInputSchema = z.object({
3883
+ deviceId: z.string(),
3884
+ capabilities: z.array(z.string()).optional()
3961
3885
  });
3962
- const homeAssistantCapability = {
3963
- name: "home-assistant",
3886
+ const UnexposeInputSchema = z.object({ deviceId: z.string() });
3887
+ const deviceExportCapability = {
3888
+ name: "device-export",
3964
3889
  scope: "system",
3965
3890
  mode: "collection",
3966
- internal: true,
3891
+ providerKind: "device-export",
3892
+ status: { schema: DeviceExportStatusSchema, kind: "poll" },
3893
+ /**
3894
+ * Each export provider contributes its own per-device "Export" panel
3895
+ * (enabled toggle, preferred stream, addon-specific knobs like the
3896
+ * HA-MQTT discovery prefix). The three framework methods
3897
+ * `getDeviceSettingsContribution` / `getDeviceLiveContribution` /
3898
+ * `applyDeviceSettingsPatch` are auto-injected on the provider
3899
+ * interface and routed to the device-details aggregator.
3900
+ */
3901
+ exposesDeviceSettings: true,
3967
3902
  methods: {
3968
- /**
3969
- * Subscribe to HA events. Returns a `subscriptionId` to pass to
3970
- * `unsubscribeEvents`. The addon refcounts upstream subscriptions
3971
- * so multiple consumers share one HA-side event stream.
3972
- * Events arrive on the kernel bus under `home-assistant.event`
3973
- * with `subscriptionIds[]` listing which subs matched.
3974
- */
3975
- subscribeEvents: method(
3976
- HaSubscribeInputSchema,
3977
- HaSubscribeResultSchema,
3978
- { kind: "mutation", auth: "admin", access: "create" }
3979
- ),
3980
- /** Release a specific subscription. Tears down the upstream sub
3981
- * only when the last owner releases. Idempotent. */
3982
- unsubscribeEvents: method(
3983
- HaUnsubscribeInputSchema,
3984
- z.object({ success: z.literal(true) }),
3985
- { kind: "mutation", auth: "admin", access: "delete" }
3986
- ),
3987
- /**
3988
- * Call an HA service (turn light on, run a script, etc.). Returns
3989
- * the HA response object — usually `{context, response: ...}`.
3990
- */
3991
- callService: method(
3992
- HaServiceCallSchema,
3993
- z.object({ result: z.unknown() }),
3994
- { kind: "mutation", auth: "admin", access: "create" }
3995
- ),
3996
- /** Fetch all entity states. Cheap snapshot — HA returns the full
3997
- * state registry on every call. */
3998
- getStates: method(
3999
- z.void(),
4000
- z.array(HaStateSchema).readonly(),
4001
- { auth: "admin" }
4002
- ),
4003
- /** Fetch a single entity's current state. `null` when not found. */
4004
- getState: method(
4005
- z.object({ entityId: z.string() }),
4006
- HaStateSchema.nullable(),
4007
- { auth: "admin" }
4008
- ),
4009
- /** List active per-owner subscriptions. */
4010
- listSubscriptions: method(
4011
- z.void(),
4012
- z.array(HaSubscriptionInfoSchema).readonly(),
4013
- { auth: "admin" }
4014
- ),
4015
- getStatus: method(z.void(), HaStatusSchema, { auth: "admin" })
3903
+ getStatus: method(z.void(), DeviceExportStatusSchema),
3904
+ listSupportedDeviceKinds: method(z.void(), z.array(DeviceKindSchema)),
3905
+ listExposedDevices: method(z.void(), z.array(ExposedDeviceSchema)),
3906
+ exposeDevice: method(ExposeInputSchema, z.void(), { kind: "mutation" }),
3907
+ unexposeDevice: method(UnexposeInputSchema, z.void(), { kind: "mutation" })
4016
3908
  }
4017
3909
  };
4018
3910
  const AddonPageDeclarationSchema$1 = z.object({
@@ -4414,6 +4306,29 @@ const webrtcSessionCapability = {
4414
4306
  z.object({ sessionId: z.string(), sdpOffer: z.string() }),
4415
4307
  { kind: "mutation" }
4416
4308
  ),
4309
+ /**
4310
+ * Accept a CLIENT-generated SDP offer and return the server's
4311
+ * SDP answer. Mirrors the WHEP / Alexa
4312
+ * `Alexa.RTCSessionController.InitiateSessionWithOffer` direction
4313
+ * (client offers, server answers) — the dual of `createSession`,
4314
+ * which has the server offer first.
4315
+ *
4316
+ * `target` defaults to the device's adaptive selection when
4317
+ * omitted; an optional `sessionId` lets the client provide its
4318
+ * own correlation id (Alexa supplies one in the directive
4319
+ * payload). The returned `sessionId` is whatever the server uses
4320
+ * to track the session and accepts via `closeSession`.
4321
+ */
4322
+ handleOffer: method(
4323
+ z.object({
4324
+ deviceId: z.number().int().nonnegative(),
4325
+ target: WebrtcStreamTargetSchema.optional(),
4326
+ sdpOffer: z.string(),
4327
+ sessionId: z.string().optional()
4328
+ }),
4329
+ z.object({ sessionId: z.string(), sdpAnswer: z.string() }),
4330
+ { kind: "mutation" }
4331
+ ),
4417
4332
  handleAnswer: method(
4418
4333
  z.object({
4419
4334
  deviceId: z.number().int().nonnegative(),
@@ -5053,12 +4968,12 @@ const audioCodecCapability = {
5053
4968
  };
5054
4969
  const EmbeddingResultSchema = z.object({
5055
4970
  embedding: z.array(z.number()),
5056
- dimensions: z.number()
4971
+ inferenceMs: z.number()
5057
4972
  });
5058
4973
  const EmbeddingInfoSchema = z.object({
5059
4974
  modelId: z.string(),
5060
- dimensions: z.number(),
5061
- inputSize: z.number()
4975
+ embeddingDim: z.number(),
4976
+ ready: z.boolean()
5062
4977
  });
5063
4978
  const embeddingEncoderCapability = {
5064
4979
  name: "embedding-encoder",
@@ -5793,16 +5708,36 @@ const NetworkAccessStatusSchema = z.object({
5793
5708
  endpoint: NetworkEndpointSchema.nullable(),
5794
5709
  error: z.string().optional()
5795
5710
  });
5711
+ const NetworkEndpointEntrySchema = NetworkEndpointSchema.extend({
5712
+ /**
5713
+ * Stable id within the provider — typically `<mode>-<sourcePort>` so
5714
+ * the orchestrator can dedupe across `listEndpoints` polls.
5715
+ */
5716
+ id: z.string(),
5717
+ /** Operator-facing label (mirrors `MeshEndpoint.label`). */
5718
+ label: z.string(),
5719
+ /** Optional provider-specific mode tag, used for icon/colour in admin UI. */
5720
+ mode: z.string().optional(),
5721
+ /** Originating local port the ingress fronts (informational). */
5722
+ sourcePort: z.number().optional()
5723
+ });
5796
5724
  const networkAccessCapability = {
5797
5725
  name: "network-access",
5798
5726
  scope: "system",
5799
5727
  mode: "collection",
5800
5728
  internal: true,
5729
+ providerKind: "ingress",
5801
5730
  methods: {
5802
5731
  start: method(z.void(), NetworkEndpointSchema, { kind: "mutation" }),
5803
5732
  stop: method(z.void(), z.void(), { kind: "mutation" }),
5804
5733
  getEndpoint: method(z.void(), NetworkEndpointSchema.nullable()),
5805
- getStatus: method(z.void(), NetworkAccessStatusSchema)
5734
+ getStatus: method(z.void(), NetworkAccessStatusSchema),
5735
+ /**
5736
+ * Enumerate every active ingress entry. Default implementation (when
5737
+ * the provider omits this method) is derived from `getEndpoint()` —
5738
+ * see the remote-access orchestrator for the fallback path.
5739
+ */
5740
+ listEndpoints: method(z.void(), z.array(NetworkEndpointEntrySchema).readonly())
5806
5741
  }
5807
5742
  };
5808
5743
  const RemoteAccessEndpointSchema = z.object({
@@ -6006,20 +5941,59 @@ const notificationOutputCapability = {
6006
5941
  )
6007
5942
  }
6008
5943
  };
5944
+ const NotificationRuleConditionsSchema = z.object({
5945
+ deviceIds: z.array(z.number()).readonly().optional(),
5946
+ classNames: z.array(z.string()).readonly().optional(),
5947
+ zoneIds: z.array(z.string()).readonly().optional(),
5948
+ minConfidence: z.number().optional(),
5949
+ source: z.enum(["pipeline", "onboard", "any"]).optional(),
5950
+ schedule: z.object({
5951
+ days: z.array(z.number()).readonly(),
5952
+ startHour: z.number(),
5953
+ endHour: z.number()
5954
+ }).optional(),
5955
+ cooldownSeconds: z.number().optional(),
5956
+ minDwellSeconds: z.number().optional()
5957
+ });
5958
+ const NotificationRuleTemplateSchema = z.object({
5959
+ title: z.string(),
5960
+ body: z.string(),
5961
+ imageMode: z.enum(["crop", "annotated", "full", "none"])
5962
+ });
6009
5963
  const NotificationRuleSchema = z.object({
6010
5964
  id: z.string(),
6011
5965
  name: z.string(),
6012
5966
  enabled: z.boolean(),
6013
- conditions: z.record(z.string(), z.unknown()),
6014
- actions: z.array(z.record(z.string(), z.unknown()))
5967
+ eventTypes: z.array(z.string()).readonly(),
5968
+ conditions: NotificationRuleConditionsSchema,
5969
+ outputs: z.array(z.string()).readonly(),
5970
+ template: NotificationRuleTemplateSchema.optional(),
5971
+ priority: z.enum(["low", "normal", "high", "critical"])
5972
+ });
5973
+ const NotificationTestResultSchema = z.object({
5974
+ ruleId: z.string(),
5975
+ eventId: z.string(),
5976
+ timestamp: z.number(),
5977
+ wouldFire: z.boolean(),
5978
+ reason: z.string().optional()
6015
5979
  });
6016
5980
  const NotificationHistoryEntrySchema = z.object({
6017
5981
  id: z.string(),
6018
5982
  ruleId: z.string(),
5983
+ ruleName: z.string(),
5984
+ eventId: z.string(),
6019
5985
  timestamp: z.number(),
6020
- deviceId: z.number().optional(),
5986
+ outputs: z.array(z.string()).readonly(),
6021
5987
  success: z.boolean(),
6022
- error: z.string().optional()
5988
+ error: z.string().optional(),
5989
+ deviceId: z.number().optional()
5990
+ });
5991
+ const NotificationHistoryFilterSchema = z.object({
5992
+ ruleId: z.string().optional(),
5993
+ deviceId: z.number().optional(),
5994
+ from: z.number().optional(),
5995
+ to: z.number().optional(),
5996
+ limit: z.number().optional()
6023
5997
  });
6024
5998
  const advancedNotifierCapability = {
6025
5999
  name: "advanced-notifier",
@@ -6027,17 +6001,28 @@ const advancedNotifierCapability = {
6027
6001
  mode: "singleton",
6028
6002
  internal: true,
6029
6003
  methods: {
6030
- getRules: method(z.void(), z.array(NotificationRuleSchema).readonly()),
6031
- upsertRule: method(NotificationRuleSchema, z.void(), { kind: "mutation" }),
6032
- deleteRule: method(z.object({ ruleId: z.string() }), z.void(), { kind: "mutation" }),
6004
+ getRules: method(
6005
+ z.void(),
6006
+ z.object({ rules: z.array(NotificationRuleSchema).readonly() })
6007
+ ),
6008
+ upsertRule: method(
6009
+ z.object({ rule: NotificationRuleSchema }),
6010
+ z.object({ success: z.literal(true) }),
6011
+ { kind: "mutation" }
6012
+ ),
6013
+ deleteRule: method(
6014
+ z.object({ ruleId: z.string() }),
6015
+ z.object({ success: z.literal(true) }),
6016
+ { kind: "mutation" }
6017
+ ),
6033
6018
  testRule: method(
6034
6019
  z.object({ ruleId: z.string(), lookbackMinutes: z.number() }),
6035
- z.array(z.record(z.string(), z.unknown())),
6020
+ z.object({ results: z.array(NotificationTestResultSchema).readonly() }),
6036
6021
  { kind: "mutation" }
6037
6022
  ),
6038
6023
  getHistory: method(
6039
- z.object({ ruleId: z.string().optional(), limit: z.number().optional() }),
6040
- z.array(NotificationHistoryEntrySchema)
6024
+ z.object({ filter: NotificationHistoryFilterSchema.optional() }),
6025
+ z.object({ entries: z.array(NotificationHistoryEntrySchema).readonly() })
6041
6026
  )
6042
6027
  }
6043
6028
  };
@@ -7059,6 +7044,47 @@ const intercomCapability = {
7059
7044
  z.object({ deviceId: z.number(), sessionId: z.string() }),
7060
7045
  z.void(),
7061
7046
  { kind: "mutation", auth: "admin" }
7047
+ ),
7048
+ /**
7049
+ * Open a raw-PCM talk session (no WebRTC SDP plumbing). Used by
7050
+ * non-WebRTC consumers (HomeKit export, Alexa raw audio, test
7051
+ * harnesses) that already have decoded PCM frames and just need a
7052
+ * direct path onto the camera's talk channel. Mutually exclusive
7053
+ * with `startSession` (an active WebRTC session must be stopped
7054
+ * before a raw-PCM session can be opened on the same device, and
7055
+ * vice versa).
7056
+ */
7057
+ startTalkSession: method(
7058
+ z.object({ deviceId: z.number() }),
7059
+ z.object({ sessionId: z.string() }),
7060
+ { kind: "mutation", auth: "admin" }
7061
+ ),
7062
+ /**
7063
+ * Push a chunk of PCM s16le mono onto the active raw-PCM talk
7064
+ * session. Frames are encoded to the firmware's expected codec
7065
+ * (Reolink: IMA ADPCM @ camera sample rate; Hikvision: G.711 @
7066
+ * 8 kHz) inside the provider — callers must resample upstream to
7067
+ * the rate the camera negotiated (typical: 16 kHz Reolink,
7068
+ * 8 kHz Hikvision). PCM is shipped base64-encoded so the payload
7069
+ * survives JSON serialization across tRPC.
7070
+ */
7071
+ pushTalkPcm: method(
7072
+ z.object({
7073
+ deviceId: z.number(),
7074
+ /** PCM frames as little-endian s16, mono. Base64-encoded so
7075
+ * the payload survives tRPC JSON serialization. */
7076
+ pcmBase64: z.string(),
7077
+ /** Sequence number for ordering / dropping out-of-order frames. */
7078
+ sequenceNumber: z.number().int()
7079
+ }),
7080
+ z.object({ accepted: z.boolean() }),
7081
+ { kind: "mutation", auth: "admin" }
7082
+ ),
7083
+ /** Close the raw-PCM talk session. Idempotent. */
7084
+ endTalkSession: method(
7085
+ z.object({ deviceId: z.number() }),
7086
+ z.void(),
7087
+ { kind: "mutation", auth: "admin" }
7062
7088
  )
7063
7089
  },
7064
7090
  events: {
@@ -7134,6 +7160,33 @@ const HwAccelBackendInputSchema = z.enum([
7134
7160
  const HwAccelResolutionSchema = z.object({
7135
7161
  preferred: z.array(z.string()).readonly()
7136
7162
  });
7163
+ const HardwareEncoderIdSchema = z.enum([
7164
+ "h264_videotoolbox",
7165
+ "hevc_videotoolbox",
7166
+ "h264_vaapi",
7167
+ "hevc_vaapi",
7168
+ "h264_nvenc",
7169
+ "hevc_nvenc",
7170
+ "h264_qsv",
7171
+ "hevc_qsv",
7172
+ "h264_amf",
7173
+ "hevc_amf",
7174
+ "libx264",
7175
+ "libx265"
7176
+ ]);
7177
+ const HardwareEncoderProbeSchema = z.object({
7178
+ encoder: HardwareEncoderIdSchema,
7179
+ codec: z.enum(["H264", "H265"]),
7180
+ family: z.enum(["videotoolbox", "vaapi", "nvenc", "qsv", "amf", "software"]),
7181
+ available: z.boolean(),
7182
+ reason: z.string().optional()
7183
+ });
7184
+ const HardwareEncodersSchema = z.object({
7185
+ encoders: z.array(HardwareEncoderProbeSchema).readonly(),
7186
+ defaultH264: HardwareEncoderIdSchema,
7187
+ defaultH265: HardwareEncoderIdSchema,
7188
+ probedAt: z.number()
7189
+ });
7137
7190
  const HardwarePlatformSchema = z.enum(["darwin", "linux", "win32"]);
7138
7191
  const HardwareArchSchema = z.enum(["arm64", "x64"]);
7139
7192
  const GpuInfoSchema = z.object({
@@ -7187,41 +7240,24 @@ const platformProbeCapability = {
7187
7240
  scope: "system",
7188
7241
  mode: "singleton",
7189
7242
  methods: {
7190
- /** Return cached hardware + scored backends for this node. */
7191
- getCapabilities: method(
7192
- z.void(),
7193
- PlatformCapabilitiesSchema
7194
- ),
7195
- /** Convenience getter — hardware only. */
7196
- getHardware: method(
7197
- z.void(),
7198
- HardwareInfoSchema
7199
- ),
7200
- /**
7201
- * Resolve the best (model, runtime, backend, format) for a given list
7202
- * of requirements, using this node's scored backends as the candidate
7203
- * pool. Always returns a config — falls back to CPU when no preferred
7204
- * backend matches.
7205
- */
7243
+ getCapabilities: method(z.void(), PlatformCapabilitiesSchema),
7244
+ getHardware: method(z.void(), HardwareInfoSchema),
7206
7245
  resolveInferenceConfig: method(
7207
- z.object({
7208
- requirements: z.array(ModelRequirementSchema).readonly()
7209
- }),
7246
+ z.object({ requirements: z.array(ModelRequirementSchema).readonly() }),
7210
7247
  ResolvedInferenceConfigSchema
7211
7248
  ),
7212
- /**
7213
- * Resolve the ordered HW acceleration backend list for this node.
7214
- * Pass `prefer` to hint a specific backend; pass `null` or omit
7215
- * for auto-detection. Replaces the legacy `$hwaccel.resolve`
7216
- * Moleculer action — cap routing handles per-node dispatch via
7217
- * `nodeId`.
7218
- */
7219
7249
  resolveHwAccel: method(
7220
- z.object({
7221
- prefer: HwAccelBackendInputSchema,
7222
- nodeId: z.string().optional()
7223
- }),
7250
+ z.object({ prefer: HwAccelBackendInputSchema, nodeId: z.string().optional() }),
7224
7251
  HwAccelResolutionSchema
7252
+ ),
7253
+ /**
7254
+ * Hardware-encoder probe — see Task #185. Cached after first call.
7255
+ */
7256
+ getHardwareEncoders: method(z.void(), HardwareEncodersSchema),
7257
+ refreshHardwareEncoders: method(
7258
+ z.void(),
7259
+ HardwareEncodersSchema,
7260
+ { kind: "mutation", auth: "admin" }
7225
7261
  )
7226
7262
  }
7227
7263
  };
@@ -7458,25 +7494,11 @@ const MeshStatusSchema = z.object({
7458
7494
  /** Last error from the daemon, when not joined. */
7459
7495
  error: z.string().optional()
7460
7496
  });
7461
- const PublicIngressConfigSchema = z.object({
7462
- /** Whether the provider should expose CamStack via its public
7463
- * ingress (Tailscale Funnel, etc.). */
7464
- enabled: z.boolean(),
7465
- /** Local port to forward. Auto-detected from the hub HTTP port
7466
- * when omitted. */
7467
- port: z.number().int().min(1).max(65535).optional()
7468
- });
7469
- const MeshIngressConfigSchema = z.object({
7470
- /** Whether the provider should expose CamStack inside the mesh
7471
- * via HTTPS (Tailscale Serve, etc.) instead of just raw IP. */
7472
- enabled: z.boolean(),
7473
- /** Local port to forward. Auto-detected when omitted. */
7474
- port: z.number().int().min(1).max(65535).optional()
7475
- });
7476
7497
  const meshNetworkCapability = {
7477
7498
  name: "mesh-network",
7478
7499
  scope: "system",
7479
7500
  mode: "collection",
7501
+ providerKind: "mesh",
7480
7502
  methods: {
7481
7503
  /** Return the current join state + endpoints + peer count. Cheap
7482
7504
  * poll-target — admin UI hits this every few seconds. */
@@ -7498,6 +7520,29 @@ const meshNetworkCapability = {
7498
7520
  z.object({ joined: z.literal(true) }),
7499
7521
  { kind: "mutation" }
7500
7522
  ),
7523
+ /**
7524
+ * Start an interactive browser-redirect login flow.
7525
+ *
7526
+ * The provider spawns its daemon's join command without a pre-auth
7527
+ * key, captures the verification URL the daemon prints, and returns
7528
+ * it. The admin UI opens the URL in a new tab; the user completes
7529
+ * authentication in the provider's web console and the background
7530
+ * process self-terminates. The caller then polls `getStatus()` until
7531
+ * `joined: true`.
7532
+ *
7533
+ * Mirrors the `tailscale up` (no `--auth-key`) flow.
7534
+ */
7535
+ startLogin: method(
7536
+ z.object({
7537
+ /** Optional hostname override the host should advertise once joined. */
7538
+ hostname: z.string().optional()
7539
+ }),
7540
+ z.object({
7541
+ /** Authentication URL the operator should open in a browser. */
7542
+ loginUrl: z.string()
7543
+ }),
7544
+ { kind: "mutation" }
7545
+ ),
7501
7546
  /** Leave the mesh. After this the meshIp/magicDnsHostname/etc.
7502
7547
  * vanish until the next `join`. */
7503
7548
  leave: method(
@@ -7509,24 +7554,6 @@ const meshNetworkCapability = {
7509
7554
  listPeers: method(z.void(), z.object({
7510
7555
  peers: z.array(MeshPeerSchema).readonly()
7511
7556
  })),
7512
- /**
7513
- * Toggle the public ingress (e.g. Tailscale Funnel) that maps a
7514
- * local port to the open internet via the provider's edge. Idempotent.
7515
- */
7516
- setPublicIngress: method(
7517
- PublicIngressConfigSchema,
7518
- z.object({ success: z.literal(true) }),
7519
- { kind: "mutation" }
7520
- ),
7521
- /**
7522
- * Toggle the in-mesh HTTPS ingress (e.g. Tailscale Serve) so peers
7523
- * inside the mesh hit a valid TLS endpoint instead of the raw IP.
7524
- */
7525
- setMeshIngress: method(
7526
- MeshIngressConfigSchema,
7527
- z.object({ success: z.literal(true) }),
7528
- { kind: "mutation" }
7529
- ),
7530
7557
  /**
7531
7558
  * Probe the mesh daemon / API for a sanity check WITHOUT joining.
7532
7559
  * Operator-facing "test connection" button: validates the auth key
@@ -8467,12 +8494,12 @@ export {
8467
8494
  cameraCredentialsCapability as J,
8468
8495
  decoderCapability as K,
8469
8496
  detectionPipelineCapability as L,
8470
- deviceManagerCapability as M,
8471
- deviceOpsCapability as N,
8472
- deviceStateCapability as O,
8473
- embeddingEncoderCapability as P,
8474
- eventsCapability as Q,
8475
- homeAssistantCapability as R,
8497
+ deviceExportCapability as M,
8498
+ deviceManagerCapability as N,
8499
+ deviceOpsCapability as O,
8500
+ deviceStateCapability as P,
8501
+ embeddingEncoderCapability as Q,
8502
+ eventsCapability as R,
8476
8503
  integrationsCapability as S,
8477
8504
  intercomCapability as T,
8478
8505
  localNetworkCapability as U,
@@ -8481,9 +8508,9 @@ export {
8481
8508
  meshOrchestratorCapability as X,
8482
8509
  metricsProviderCapability as Y,
8483
8510
  motionDetectionCapability as Z,
8484
- mqttProviderCapability as _,
8511
+ mqttBrokerCapability as _,
8485
8512
  zoneRulesCapability as a,
8486
- AudioLevelSchema as a$,
8513
+ AudioEventSchema as a$,
8487
8514
  networkAccessCapability as a0,
8488
8515
  networkQualityCapability as a1,
8489
8516
  nodesCapability as a2,
@@ -8497,30 +8524,30 @@ export {
8497
8524
  AUDIO_MACRO_LABELS as aA,
8498
8525
  AccessoriesStatusSchema as aB,
8499
8526
  AccessoryKind as aC,
8500
- AddonAutoUpdateSchema as aD,
8501
- AddonListItemSchema as aE,
8502
- AddonPageDeclarationSchema as aF,
8503
- AddonPageInfoSchema as aG,
8504
- AgentLoadSummarySchema as aH,
8505
- AlertSchema as aI,
8506
- AlertSeveritySchema as aJ,
8507
- AlertSourceSchema as aK,
8508
- AlertStatusSchema as aL,
8509
- ApiKeyRecordSchema as aM,
8510
- ApiKeySummarySchema as aN,
8511
- ArchiveEntrySchema as aO,
8512
- ArchiveManifestSchema as aP,
8513
- AudioAnalysisResultSchema as aQ,
8514
- AudioAnalysisSettingsSchema as aR,
8515
- AudioChunkInputSchema as aS,
8516
- AudioClassSummarySchema as aT,
8517
- AudioClassificationLabelSchema as aU,
8518
- AudioClassificationResultSchema as aV,
8519
- AudioCodecInfoSchema as aW,
8520
- AudioDecodeSessionConfigSchema as aX,
8521
- AudioEncodeSessionConfigSchema as aY,
8522
- AudioEncodedChunkSchema as aZ,
8523
- AudioEventSchema as a_,
8527
+ AddBrokerInputSchema as aD,
8528
+ AddonAutoUpdateSchema as aE,
8529
+ AddonListItemSchema as aF,
8530
+ AddonPageDeclarationSchema as aG,
8531
+ AddonPageInfoSchema as aH,
8532
+ AgentLoadSummarySchema as aI,
8533
+ AlertSchema as aJ,
8534
+ AlertSeveritySchema as aK,
8535
+ AlertSourceSchema as aL,
8536
+ AlertStatusSchema as aM,
8537
+ ApiKeyRecordSchema as aN,
8538
+ ApiKeySummarySchema as aO,
8539
+ ArchiveEntrySchema as aP,
8540
+ ArchiveManifestSchema as aQ,
8541
+ AudioAnalysisResultSchema as aR,
8542
+ AudioAnalysisSettingsSchema as aS,
8543
+ AudioChunkInputSchema as aT,
8544
+ AudioClassSummarySchema as aU,
8545
+ AudioClassificationLabelSchema as aV,
8546
+ AudioClassificationResultSchema as aW,
8547
+ AudioCodecInfoSchema as aX,
8548
+ AudioDecodeSessionConfigSchema as aY,
8549
+ AudioEncodeSessionConfigSchema as aZ,
8550
+ AudioEncodedChunkSchema as a_,
8524
8551
  ptzCapability as aa,
8525
8552
  rebootCapability as ab,
8526
8553
  recordingCapability as ac,
@@ -8548,247 +8575,251 @@ export {
8548
8575
  APPLE_SA_TO_MACRO as ay,
8549
8576
  AUDIO_BACKEND_CHOICES as az,
8550
8577
  zoneAnalyticsCapability as b,
8551
- DeviceStatusSchema as b$,
8552
- AudioMetricsHistoryPointSchema as b0,
8553
- AudioMetricsHistorySchema as b1,
8554
- AudioMetricsSnapshotSchema as b2,
8555
- AudioPcmChunkSchema as b3,
8556
- AuthProviderInfoSchema as b4,
8557
- AuthResultSchema as b5,
8558
- AutoUpdateSettingsSchema as b6,
8559
- AvailableIntegrationTypeSchema as b7,
8560
- BATTERY_DEVICE_PROFILE as b8,
8561
- BackupDestinationInfoSchema as b9,
8562
- CollectionIndexSchema as bA,
8563
- ConfigEntrySchema$1 as bB,
8564
- ConfigSectionWithValuesSchema as bC,
8565
- ConfigTabDeclarationSchema as bD,
8566
- CreateApiKeyInputSchema as bE,
8567
- CreateApiKeyResultSchema as bF,
8568
- CreateIntegrationInputSchema as bG,
8569
- CreateScopedTokenInputSchema as bH,
8570
- CreateScopedTokenResultSchema as bI,
8571
- CreateUserInputSchema as bJ,
8572
- CustomActionInputSchema as bK,
8573
- DEFAULT_AUDIO_ANALYZER_CONFIG as bL,
8574
- DEFAULT_DECODER_HWACCEL_CONFIG as bM,
8575
- DEVICE_PROFILES as bN,
8576
- DEVICE_SETTINGS_CONTRIBUTION_METHODS as bO,
8577
- DEVICE_STATUS_METHOD as bP,
8578
- DecodedFrameSchema as bQ,
8579
- DecoderAssignmentSchema as bR,
8580
- DecoderSessionConfigSchema as bS,
8581
- DecoderStatsSchema as bT,
8582
- DeleteIntegrationResultSchema as bU,
8583
- DetectorOutputSchema as bV,
8584
- DeviceDiscoveryStatusSchema as bW,
8585
- DeviceFeature as bX,
8586
- DeviceInfoSchema as bY,
8587
- DeviceNetworkStatsSchema as bZ,
8588
- DeviceRole as b_,
8589
- BackupEntrySchema as ba,
8590
- BatteryStatusSchema as bb,
8591
- BoundingBoxSchema as bc,
8592
- BrightnessStatusSchema as bd,
8593
- BrokerAudioClientSchema as be,
8594
- BrokerClientsSchema as bf,
8595
- BrokerDecodedClientSchema as bg,
8596
- BrokerRtspClientSchema as bh,
8597
- BrokerStatsSchema as bi,
8598
- BrokerStatusSchema as bj,
8599
- CAM_PROFILE_ORDER as bk,
8600
- CamProfileSchema as bl,
8601
- CamStreamKindSchema as bm,
8602
- CamStreamResolutionSchema as bn,
8603
- CameraCredentialsSchema as bo,
8604
- CameraCredentialsStatusSchema as bp,
8605
- CameraMetricsSchema as bq,
8606
- CameraMetricsWithDeviceIdSchema as br,
8607
- CameraStreamSchema as bs,
8608
- CapScopeSchema as bt,
8609
- CapabilityBindingsSchema as bu,
8610
- ChargingStatus as bv,
8611
- ClientNetworkStatsSchema as bw,
8612
- ClusterAddonNodeDeploymentSchema as bx,
8613
- ClusterAddonStatusEntrySchema as by,
8614
- CollectionColumnSchema as bz,
8578
+ DeviceExportStatusSchema as b$,
8579
+ AudioLevelSchema as b0,
8580
+ AudioMetricsHistoryPointSchema as b1,
8581
+ AudioMetricsHistorySchema as b2,
8582
+ AudioMetricsSnapshotSchema as b3,
8583
+ AudioPcmChunkSchema as b4,
8584
+ AuthProviderInfoSchema as b5,
8585
+ AuthResultSchema as b6,
8586
+ AutoUpdateSettingsSchema as b7,
8587
+ AvailableIntegrationTypeSchema as b8,
8588
+ BATTERY_DEVICE_PROFILE as b9,
8589
+ ClusterAddonNodeDeploymentSchema as bA,
8590
+ ClusterAddonStatusEntrySchema as bB,
8591
+ CollectionColumnSchema as bC,
8592
+ CollectionIndexSchema as bD,
8593
+ ConfigEntrySchema$1 as bE,
8594
+ ConfigSectionWithValuesSchema as bF,
8595
+ ConfigTabDeclarationSchema as bG,
8596
+ CreateApiKeyInputSchema as bH,
8597
+ CreateApiKeyResultSchema as bI,
8598
+ CreateIntegrationInputSchema as bJ,
8599
+ CreateScopedTokenInputSchema as bK,
8600
+ CreateScopedTokenResultSchema as bL,
8601
+ CreateUserInputSchema as bM,
8602
+ CustomActionInputSchema as bN,
8603
+ DEFAULT_AUDIO_ANALYZER_CONFIG as bO,
8604
+ DEFAULT_DECODER_HWACCEL_CONFIG as bP,
8605
+ DEVICE_PROFILES as bQ,
8606
+ DEVICE_SETTINGS_CONTRIBUTION_METHODS as bR,
8607
+ DEVICE_STATUS_METHOD as bS,
8608
+ DecodedFrameSchema as bT,
8609
+ DecoderAssignmentSchema as bU,
8610
+ DecoderSessionConfigSchema as bV,
8611
+ DecoderStatsSchema as bW,
8612
+ DeleteIntegrationResultSchema as bX,
8613
+ DetectorOutputSchema as bY,
8614
+ DeviceDiscoveryStatusSchema as bZ,
8615
+ ExposeInputSchema as b_,
8616
+ BackupDestinationInfoSchema as ba,
8617
+ BackupEntrySchema as bb,
8618
+ BatteryStatusSchema as bc,
8619
+ BoundingBoxSchema as bd,
8620
+ BrightnessStatusSchema as be,
8621
+ BrokerAudioClientSchema as bf,
8622
+ BrokerClientsSchema as bg,
8623
+ BrokerConnectionDetailsSchema as bh,
8624
+ BrokerDecodedClientSchema as bi,
8625
+ BrokerInfoSchema as bj,
8626
+ BrokerRtspClientSchema as bk,
8627
+ BrokerStatsSchema as bl,
8628
+ BrokerStatusSchema$1 as bm,
8629
+ CAM_PROFILE_ORDER as bn,
8630
+ CamProfileSchema as bo,
8631
+ CamStreamKindSchema as bp,
8632
+ CamStreamResolutionSchema as bq,
8633
+ CameraCredentialsSchema as br,
8634
+ CameraCredentialsStatusSchema as bs,
8635
+ CameraMetricsSchema as bt,
8636
+ CameraMetricsWithDeviceIdSchema as bu,
8637
+ CameraStreamSchema as bv,
8638
+ CapScopeSchema as bw,
8639
+ CapabilityBindingsSchema as bx,
8640
+ ChargingStatus as by,
8641
+ ClientNetworkStatsSchema as bz,
8615
8642
  motionCapability as c,
8616
- PIPELINE_OWNER_CAPABILITY_NAMES as c$,
8617
- DeviceType as c0,
8618
- DiscoveredChildDeviceSchema as c1,
8619
- DiscoveredChildStatusSchema as c2,
8620
- DiscoveredDeviceSchema as c3,
8621
- DoorbellPressEventSchema as c4,
8622
- DoorbellStatusSchema as c5,
8623
- EmbeddingInfoSchema as c6,
8624
- EmbeddingResultSchema as c7,
8625
- EncodedPacketSchema as c8,
8626
- EnrichedWidgetMetadataSchema as c9,
8627
- MotionAnalysisResultSchema as cA,
8628
- MotionEventSchema as cB,
8629
- MotionOnMotionChangedDataSchema as cC,
8630
- MotionRegionSchema as cD,
8631
- MotionSourceEnum as cE,
8632
- MotionSourcesSchema as cF,
8633
- MotionStatusSchema as cG,
8634
- MotionTriggerRuntimeStateSchema as cH,
8635
- MotionTriggerStatusSchema as cI,
8636
- MqttStatusSchema as cJ,
8637
- NativeDetectionSchema as cK,
8638
- NativeObjectClassEnum as cL,
8639
- NativeObjectDetectionStatusSchema as cM,
8640
- NetworkAccessStatusSchema as cN,
8641
- NetworkAddressSchema as cO,
8642
- NetworkEndpointSchema as cP,
8643
- NotificationHistoryEntrySchema as cQ,
8644
- NotificationRuleSchema as cR,
8645
- NotificationSchema as cS,
8646
- ObjectEventSchema as cT,
8647
- OrchestratorMetricsSchema as cU,
8648
- OsdOverlayKindEnum as cV,
8649
- OsdOverlayPatchSchema as cW,
8650
- OsdOverlaySchema as cX,
8651
- OsdPositionEnum as cY,
8652
- OsdStatusSchema as cZ,
8653
- PIPELINE_FLOW_CAPABILITY_NAMES as c_,
8654
- EventItemSchema as ca,
8655
- EventKindSchema as cb,
8656
- ExposedResourceSchema as cc,
8657
- FeatureManifestSchema as cd,
8658
- FeatureProbeStatusSchema as ce,
8659
- FrameInputSchema as cf,
8660
- GlobalMetricsSchema as cg,
8661
- HWACCEL_OPTIONS as ch,
8662
- HaServiceCallSchema as ci,
8663
- HaStateSchema as cj,
8664
- HaStatusSchema as ck,
8665
- HealthStatusSchema as cl,
8666
- HistoryPointSchema as cm,
8667
- HistoryResolutionEnum as cn,
8668
- InstalledPackageSchema as co,
8669
- IntegrationLiteSchema as cp,
8670
- IntegrationWithStateSchema as cq,
8671
- IntercomAbilitySchema as cr,
8672
- IntercomStatusSchema as cs,
8673
- LocationStatSchema as ct,
8674
- LogEntrySchema as cu,
8675
- LogLevelSchema$1 as cv,
8676
- LogStreamEntrySchema as cw,
8677
- MODEL_FORMATS as cx,
8678
- MediaFileSchema as cy,
8679
- MethodAccessSchema as cz,
8643
+ OsdOverlayPatchSchema as c$,
8644
+ UnexposeInputSchema as c0,
8645
+ DeviceFeature as c1,
8646
+ DeviceInfoSchema as c2,
8647
+ DeviceNetworkStatsSchema as c3,
8648
+ DeviceRole as c4,
8649
+ DeviceStatusSchema as c5,
8650
+ DeviceType as c6,
8651
+ DiscoveredChildDeviceSchema as c7,
8652
+ DiscoveredChildStatusSchema as c8,
8653
+ DiscoveredDeviceSchema as c9,
8654
+ LogLevelSchema$1 as cA,
8655
+ LogStreamEntrySchema as cB,
8656
+ MODEL_FORMATS as cC,
8657
+ MediaFileSchema as cD,
8658
+ MethodAccessSchema as cE,
8659
+ MotionAnalysisResultSchema as cF,
8660
+ MotionEventSchema as cG,
8661
+ MotionOnMotionChangedDataSchema as cH,
8662
+ MotionRegionSchema as cI,
8663
+ MotionSourceEnum as cJ,
8664
+ MotionSourcesSchema as cK,
8665
+ MotionStatusSchema as cL,
8666
+ MotionTriggerRuntimeStateSchema as cM,
8667
+ MotionTriggerStatusSchema as cN,
8668
+ StatusSchema as cO,
8669
+ NativeDetectionSchema as cP,
8670
+ NativeObjectClassEnum as cQ,
8671
+ NativeObjectDetectionStatusSchema as cR,
8672
+ NetworkAccessStatusSchema as cS,
8673
+ NetworkAddressSchema as cT,
8674
+ NetworkEndpointSchema as cU,
8675
+ NotificationHistoryEntrySchema as cV,
8676
+ NotificationRuleSchema as cW,
8677
+ NotificationSchema as cX,
8678
+ ObjectEventSchema as cY,
8679
+ OrchestratorMetricsSchema as cZ,
8680
+ OsdOverlayKindEnum as c_,
8681
+ DoorbellPressEventSchema as ca,
8682
+ DoorbellStatusSchema as cb,
8683
+ EmbeddingInfoSchema as cc,
8684
+ EmbeddingResultSchema as cd,
8685
+ EncodedPacketSchema as ce,
8686
+ EnrichedWidgetMetadataSchema as cf,
8687
+ EventItemSchema as cg,
8688
+ EventKindSchema as ch,
8689
+ ExposedDeviceSchema as ci,
8690
+ ExposedResourceSchema as cj,
8691
+ FeatureManifestSchema as ck,
8692
+ FeatureProbeStatusSchema as cl,
8693
+ FrameInputSchema as cm,
8694
+ GetStreamWithCodecInputSchema as cn,
8695
+ GlobalMetricsSchema as co,
8696
+ HWACCEL_OPTIONS as cp,
8697
+ HealthStatusSchema as cq,
8698
+ HistoryPointSchema as cr,
8699
+ HistoryResolutionEnum as cs,
8700
+ InstalledPackageSchema as ct,
8701
+ IntegrationLiteSchema as cu,
8702
+ IntegrationWithStateSchema as cv,
8703
+ IntercomAbilitySchema as cw,
8704
+ IntercomStatusSchema as cx,
8705
+ LocationStatSchema as cy,
8706
+ LogEntrySchema as cz,
8680
8707
  doorbellCapability as d,
8681
- StreamFormatSchema as d$,
8682
- PackageUpdateSchema as d0,
8683
- PackageVersionInfoSchema as d1,
8684
- PasskeySummarySchema as d2,
8685
- PcmSampleFormatSchema as d3,
8686
- PerScopeBreakdownSchema as d4,
8687
- PipelineAssignmentSchema as d5,
8688
- PipelineDefaultStepSchema as d6,
8689
- PipelineEngineChoiceSchema as d7,
8690
- PipelineRunResultBridge as d8,
8691
- PipelineStepInputSchema as d9,
8692
- ScopedTokenSummarySchema as dA,
8693
- SearchResultSchema as dB,
8694
- SegmentSchema as dC,
8695
- SendEmailInputSchema as dD,
8696
- SendEmailResultSchema as dE,
8697
- SettingsPatchSchema as dF,
8698
- SettingsRecordSchema as dG,
8699
- SettingsSchemaWithValuesSchema as dH,
8700
- SettingsUpdateResultSchema as dI,
8701
- SmtpStatusSchema as dJ,
8702
- SnapshotImageSchema as dK,
8703
- SpatialDetectionSchema as dL,
8704
- SsoBridgeClaimsSchema as dM,
8705
- AbortUploadInputSchema as dN,
8706
- BeginDownloadInputSchema as dO,
8707
- BeginDownloadResultSchema as dP,
8708
- BeginUploadInputSchema as dQ,
8709
- BeginUploadResultSchema as dR,
8710
- EndDownloadInputSchema as dS,
8711
- FinalizeUploadInputSchema as dT,
8712
- StorageLocationRefSchema as dU,
8713
- StorageLocationSchema as dV,
8714
- StorageLocationTypeSchema as dW,
8715
- ProviderInfoSchema as dX,
8716
- ReadChunkInputSchema as dY,
8717
- TestLocationResultSchema as dZ,
8718
- WriteChunkInputSchema as d_,
8719
- PlaceholderReasonSchema as da,
8720
- PolygonPointSchema as db,
8721
- ProfileSlotSchema as dc,
8722
- ProfileSlotStatusSchema as dd,
8723
- ProviderStatusSchema as de,
8724
- PtzAutotrackRuntimeStateSchema as df,
8725
- PtzAutotrackSettingsSchema as dg,
8726
- PtzAutotrackStatusSchema as dh,
8727
- PtzAutotrackTargetOptionSchema as di,
8728
- PtzMoveCommandSchema as dj,
8729
- PtzPositionSchema as dk,
8730
- PtzPresetSchema as dl,
8731
- PublishInputSchema as dm,
8732
- QueryFilterSchema as dn,
8733
- RegisteredStreamSchema as dp,
8734
- RemoteAccessEndpointSchema as dq,
8735
- RemoteAccessProviderInfoSchema as dr,
8736
- ReportMotionInputSchema as ds,
8737
- RtspRestreamEntrySchema as dt,
8738
- RunnerCameraConfigSchema as du,
8739
- RunnerCameraDeviceUIFields as dv,
8740
- RunnerLocalLoadSchema as dw,
8741
- RunnerLocalMetricsSchema as dx,
8742
- STORAGE_LOCATION_CARDINALITY as dy,
8743
- ScopedTokenSchema as dz,
8708
+ StorageLocationSchema as d$,
8709
+ OsdOverlaySchema as d0,
8710
+ OsdPositionEnum as d1,
8711
+ OsdStatusSchema as d2,
8712
+ PIPELINE_FLOW_CAPABILITY_NAMES as d3,
8713
+ PIPELINE_OWNER_CAPABILITY_NAMES as d4,
8714
+ PackageUpdateSchema as d5,
8715
+ PackageVersionInfoSchema as d6,
8716
+ PasskeySummarySchema as d7,
8717
+ PcmSampleFormatSchema as d8,
8718
+ PerScopeBreakdownSchema as d9,
8719
+ RunnerCameraDeviceUIFields as dA,
8720
+ RunnerLocalLoadSchema as dB,
8721
+ RunnerLocalMetricsSchema as dC,
8722
+ STORAGE_LOCATION_CARDINALITY as dD,
8723
+ ScopedTokenSchema as dE,
8724
+ ScopedTokenSummarySchema as dF,
8725
+ SearchResultSchema as dG,
8726
+ SegmentSchema as dH,
8727
+ SendEmailInputSchema as dI,
8728
+ SendEmailResultSchema as dJ,
8729
+ SettingsPatchSchema as dK,
8730
+ SettingsRecordSchema as dL,
8731
+ SettingsSchemaWithValuesSchema as dM,
8732
+ SettingsUpdateResultSchema as dN,
8733
+ SmtpStatusSchema as dO,
8734
+ SnapshotImageSchema as dP,
8735
+ SpatialDetectionSchema as dQ,
8736
+ SsoBridgeClaimsSchema as dR,
8737
+ StartEmbeddedInputSchema as dS,
8738
+ AbortUploadInputSchema as dT,
8739
+ BeginDownloadInputSchema as dU,
8740
+ BeginDownloadResultSchema as dV,
8741
+ BeginUploadInputSchema as dW,
8742
+ BeginUploadResultSchema as dX,
8743
+ EndDownloadInputSchema as dY,
8744
+ FinalizeUploadInputSchema as dZ,
8745
+ StorageLocationRefSchema as d_,
8746
+ PipelineAssignmentSchema as da,
8747
+ PipelineDefaultStepSchema as db,
8748
+ PipelineEngineChoiceSchema as dc,
8749
+ PipelineRunResultBridge as dd,
8750
+ PipelineStepInputSchema as de,
8751
+ PlaceholderReasonSchema as df,
8752
+ PolygonPointSchema as dg,
8753
+ ProfileSlotSchema as dh,
8754
+ ProfileSlotStatusSchema as di,
8755
+ ProviderStatusSchema as dj,
8756
+ PtzAutotrackRuntimeStateSchema as dk,
8757
+ PtzAutotrackSettingsSchema as dl,
8758
+ PtzAutotrackStatusSchema as dm,
8759
+ PtzAutotrackTargetOptionSchema as dn,
8760
+ PtzMoveCommandSchema as dp,
8761
+ PtzPositionSchema as dq,
8762
+ PtzPresetSchema as dr,
8763
+ QueryFilterSchema as ds,
8764
+ RegisteredStreamSchema as dt,
8765
+ RemoteAccessEndpointSchema as du,
8766
+ RemoteAccessProviderInfoSchema as dv,
8767
+ ReportMotionInputSchema as dw,
8768
+ RtpSourceSchema as dx,
8769
+ RtspRestreamEntrySchema as dy,
8770
+ RunnerCameraConfigSchema as dz,
8744
8771
  errMsg as e,
8745
- StreamInfoSchema as e0,
8746
- StreamNetworkStatsSchema as e1,
8747
- StreamSourceEntrySchema$1 as e2,
8748
- StreamSourceSchema as e3,
8749
- SubscribeInputSchema as e4,
8750
- SubscriptionInfoSchema as e5,
8751
- SwitchStatusSchema as e6,
8752
- SystemMetricsSchema as e7,
8753
- TestConnectionResultSchema as e8,
8754
- ToastSchema as e9,
8755
- ZoneSchema as eA,
8756
- ZoneScopeBreakdownSchema as eB,
8757
- accessoryStableId as eC,
8758
- deviceMatchesProfile as eD,
8759
- event as eE,
8760
- expandCapMethods as eF,
8761
- getAudioMacroClassIds as eG,
8762
- mapAudioLabelToMacro as eH,
8763
- method as eI,
8764
- resolveDeviceProfile as eJ,
8765
- webrtcClientHintsSchema as eK,
8766
- TokenScopeSchema as ea,
8767
- TopologyNodeSchema as eb,
8768
- TopologyProcessSchema as ec,
8769
- TopologyServiceSchema as ed,
8770
- TrackSchema as ee,
8771
- TrackStateSchema as ef,
8772
- TrackedDetectionSchema as eg,
8773
- TurnProviderInfoSchema as eh,
8774
- TurnServerSchema as ei,
8775
- UpdateIntegrationInputSchema as ej,
8776
- UpdateUserInputSchema as ek,
8777
- UserRecordSchema as el,
8778
- UserSummarySchema as em,
8779
- WELL_KNOWN_TABS as en,
8780
- WELL_KNOWN_TAB_MAP as eo,
8781
- WebrtcStreamChoiceSchema as ep,
8782
- WebrtcStreamTargetSchema as eq,
8783
- WidgetHostEnum as er,
8784
- WidgetMetadataSchema as es,
8785
- WidgetSizeEnum as et,
8786
- YAMNET_TO_MACRO as eu,
8787
- ZoneKindEnum as ev,
8788
- ZoneRuleModeEnum as ew,
8789
- ZoneRuleSchema as ex,
8790
- ZoneRuleStageEnum as ey,
8791
- ZoneRulesArraySchema as ez,
8772
+ StorageLocationTypeSchema as e0,
8773
+ ProviderInfoSchema as e1,
8774
+ ReadChunkInputSchema as e2,
8775
+ TestLocationResultSchema as e3,
8776
+ WriteChunkInputSchema as e4,
8777
+ StreamFormatSchema as e5,
8778
+ StreamInfoSchema as e6,
8779
+ StreamNetworkStatsSchema as e7,
8780
+ StreamSourceEntrySchema$1 as e8,
8781
+ StreamSourceSchema as e9,
8782
+ ZoneRuleModeEnum as eA,
8783
+ ZoneRuleSchema as eB,
8784
+ ZoneRuleStageEnum as eC,
8785
+ ZoneRulesArraySchema as eD,
8786
+ ZoneSchema as eE,
8787
+ ZoneScopeBreakdownSchema as eF,
8788
+ accessoryStableId as eG,
8789
+ deviceMatchesProfile as eH,
8790
+ event as eI,
8791
+ expandCapMethods as eJ,
8792
+ getAudioMacroClassIds as eK,
8793
+ mapAudioLabelToMacro as eL,
8794
+ method as eM,
8795
+ resolveDeviceProfile as eN,
8796
+ webrtcClientHintsSchema as eO,
8797
+ SwitchStatusSchema as ea,
8798
+ SystemMetricsSchema as eb,
8799
+ TestConnectionResultSchema as ec,
8800
+ ToastSchema as ed,
8801
+ TokenScopeSchema as ee,
8802
+ TopologyNodeSchema as ef,
8803
+ TopologyProcessSchema as eg,
8804
+ TopologyServiceSchema as eh,
8805
+ TrackSchema as ei,
8806
+ TrackStateSchema as ej,
8807
+ TrackedDetectionSchema as ek,
8808
+ TurnProviderInfoSchema as el,
8809
+ TurnServerSchema as em,
8810
+ UpdateIntegrationInputSchema as en,
8811
+ UpdateUserInputSchema as eo,
8812
+ UserRecordSchema as ep,
8813
+ UserSummarySchema as eq,
8814
+ WELL_KNOWN_TABS as er,
8815
+ WELL_KNOWN_TAB_MAP as es,
8816
+ WebrtcStreamChoiceSchema as et,
8817
+ WebrtcStreamTargetSchema as eu,
8818
+ WidgetHostEnum as ev,
8819
+ WidgetMetadataSchema as ew,
8820
+ WidgetSizeEnum as ex,
8821
+ YAMNET_TO_MACRO as ey,
8822
+ ZoneKindEnum as ez,
8792
8823
  featureProbeCapability as f,
8793
8824
  deviceStatusCapability as g,
8794
8825
  hydrateSchema as h,
@@ -8811,4 +8842,4 @@ export {
8811
8842
  addonsCapability as y,
8812
8843
  zonesCapability as z
8813
8844
  };
8814
- //# sourceMappingURL=index-BKnvgAep.mjs.map
8845
+ //# sourceMappingURL=index-BBVUwOlZ.mjs.map