@kusinta/iot-schema 0.2.0-beta.1 → 0.2.0-beta.11

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 (40) hide show
  1. package/package.json +8 -1
  2. package/src/kusinta/iot/access/v1/acl_pb.d.ts +130 -0
  3. package/src/kusinta/iot/access/v1/acl_pb.js +19 -5
  4. package/src/kusinta/iot/access/v1/roles_pb.d.ts +80 -14
  5. package/src/kusinta/iot/access/v1/roles_pb.js +33 -1
  6. package/src/kusinta/iot/common/v1/pairing_pb.d.ts +201 -0
  7. package/src/kusinta/iot/common/v1/pairing_pb.js +50 -0
  8. package/src/kusinta/iot/common/v1/types_pb.d.ts +34 -0
  9. package/src/kusinta/iot/common/v1/types_pb.js +22 -1
  10. package/src/kusinta/iot/connector/v1/connector_pb.d.ts +476 -7
  11. package/src/kusinta/iot/connector/v1/connector_pb.js +70 -12
  12. package/src/kusinta/iot/device/v1/cluster_state_pb.d.ts +25 -0
  13. package/src/kusinta/iot/device/v1/cluster_state_pb.js +1 -1
  14. package/src/kusinta/iot/device/v1/descriptor_pb.d.ts +16 -1
  15. package/src/kusinta/iot/device/v1/descriptor_pb.js +2 -1
  16. package/src/kusinta/iot/device/v1/device_pb.d.ts +34 -3
  17. package/src/kusinta/iot/device/v1/device_pb.js +1 -1
  18. package/src/kusinta/iot/device/v1/matter_options_pb.d.ts +26 -0
  19. package/src/kusinta/iot/device/v1/matter_options_pb.js +31 -4
  20. package/src/kusinta/iot/device/v1/properties_pb.d.ts +14 -0
  21. package/src/kusinta/iot/device/v1/properties_pb.js +1 -1
  22. package/src/kusinta/iot/link/v1/link_pb.d.ts +419 -0
  23. package/src/kusinta/iot/link/v1/link_pb.js +121 -0
  24. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.d.ts +162 -13
  25. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.js +8 -1
  26. package/src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.d.ts +69 -0
  27. package/src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.js +19 -0
  28. package/src/kusinta/iot/vendor/v1/vendor_options_pb.d.ts +21 -0
  29. package/src/kusinta/iot/vendor/v1/vendor_options_pb.js +24 -2
  30. package/src/kusinta/iot/webrtc/v1/command_pb.d.ts +14 -6
  31. package/src/kusinta/iot/webrtc/v1/command_pb.js +2 -1
  32. package/src/kusinta/iot/webrtc/v1/device_state_pb.d.ts +12 -6
  33. package/src/kusinta/iot/webrtc/v1/device_state_pb.js +5 -5
  34. package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +339 -5
  35. package/src/kusinta/iot/webrtc/v1/envelope_pb.js +48 -3
  36. package/src/kusinta/iot/webrtc/v1/management_pb.d.ts +246 -3
  37. package/src/kusinta/iot/webrtc/v1/management_pb.js +42 -5
  38. package/src/kusinta/iot/webrtc/v1/permission_push_pb.js +2 -2
  39. package/src/kusinta/iot/webrtc/v1/setpoint_mode_pb.d.ts +63 -0
  40. package/src/kusinta/iot/webrtc/v1/setpoint_mode_pb.js +45 -0
@@ -5,8 +5,10 @@
5
5
  import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
7
  import type { DeviceOwnershipType, SpaceType } from "../../common/v1/types_pb.js";
8
- import type { DeviceId, SpaceId, UserId } from "../../identity/v1/identity_pb.js";
8
+ import type { ConnectorId, DeviceId, SpaceId, UserId } from "../../identity/v1/identity_pb.js";
9
+ import type { LorawanProvisioning } from "../../vendor/lorawan/v1/lorawan_pb.js";
9
10
  import type { Space } from "../../space/v1/space_pb.js";
11
+ import type { LinkFunction, LinkMode, LinkSettings } from "../../link/v1/link_pb.js";
10
12
 
11
13
  /**
12
14
  * Describes the file kusinta/iot/webrtc/v1/management.proto.
@@ -265,8 +267,18 @@ export declare type ClaimDevice = Message<"kusinta.iot.webrtc.v1.ClaimDevice"> &
265
267
  initialSpaceId?: SpaceId | undefined;
266
268
 
267
269
  /**
268
- * Evidence the claimant is standing at the device: the serial printed on it,
269
- * matched against DeviceDescriptor.serial_number. Required precisely when the
270
+ * Evidence the claimant is standing at the device: the identifier printed on it,
271
+ * matched against DeviceDescriptor.serial_number.
272
+ *
273
+ * The match is by SUFFIX, because what a connector announces is not always the whole
274
+ * of what is printed and the announced value is commonly the tail of the printed one.
275
+ * Both sides are normalised first — lowercased, with whitespace and ASCII hyphens
276
+ * removed, since a label prints the value in groups and a scan does not — and the proof
277
+ * is accepted when what remains ends with the announced serial. Spelled out because two
278
+ * gateways normalising differently would accept different proofs for the same device.
279
+ *
280
+ * A serial shorter than eight characters cannot be proved at all: under a suffix rule a
281
+ * short one is proved by almost anything ending with it. Required precisely when the
270
282
  * caller cannot already reach the device, which is the ordinary case for a
271
283
  * resident claiming something they just bought — an unfiled device is invisible
272
284
  * to them, so possession is the only thing left that can distinguish them from
@@ -304,6 +316,66 @@ export declare type ReleaseDevice = Message<"kusinta.iot.webrtc.v1.ReleaseDevice
304
316
  */
305
317
  export declare const ReleaseDeviceSchema: GenMessage<ReleaseDevice>;
306
318
 
319
+ /**
320
+ * Registers a device with the system that will admit it, so that it can join
321
+ * later. For a technology where a device is enrolled as a record rather than
322
+ * adopted during a window — see common.v1.PairingWindow for the other case, where
323
+ * something joins a hub during a window and the arrival is attributed to the
324
+ * caller. A LoRaWAN device has no window: it is written into a network server and
325
+ * joins whenever it is next powered, which may be minutes, days, or never.
326
+ *
327
+ * Answered with the ordinary ManagementAck. A provision writes a record and returns
328
+ * nothing to show; the device itself is announced by device_added if and when it
329
+ * joins, the same path every other device takes — which is why this adds no
330
+ * ManagementResult arm. A new result arm is a compile error in a consumer that
331
+ * matches the result exhaustively; a new request arm is not.
332
+ *
333
+ * Registering and owning stay two operations. ClaimDevice records the caller and
334
+ * carries possession_proof, so a device that has not joined yet is still claimable
335
+ * by whoever holds it — and because the connector derives the device id and the
336
+ * serial from the identifier here, that claim can be made before the join.
337
+ *
338
+ * Provisioning the same identifier twice is an upsert: it replaces the credentials
339
+ * rather than being refused as a conflict, so correcting a mistyped key does not
340
+ * require removing the device first. Removing a record is a distinct act from
341
+ * giving up ownership (ReleaseDevice) and is left to a later operation.
342
+ *
343
+ * @generated from message kusinta.iot.webrtc.v1.ProvisionDevice
344
+ */
345
+ export declare type ProvisionDevice = Message<"kusinta.iot.webrtc.v1.ProvisionDevice"> & {
346
+ /**
347
+ * Required, unlike a pairing window's connector target. A registration is written
348
+ * to one specific registry; there is no sensible "open them all and see what
349
+ * joins". The app names it from the connector enumeration, targeting a connector
350
+ * that declares ConnectorInfo.supports_provisioning.
351
+ *
352
+ * @generated from field: kusinta.iot.identity.v1.ConnectorId connector_id = 1;
353
+ */
354
+ connectorId?: ConnectorId | undefined;
355
+
356
+ /**
357
+ * What the registry needs to admit the device, which differs entirely by
358
+ * technology — a oneof per technology rather than a flat set of fields, for the
359
+ * reason LinkSettings gives: the second technology to arrive must not turn this
360
+ * into a bag of unrelated optionals named after the first.
361
+ *
362
+ * @generated from oneof kusinta.iot.webrtc.v1.ProvisionDevice.credentials
363
+ */
364
+ credentials: {
365
+ /**
366
+ * @generated from field: kusinta.iot.vendor.lorawan.v1.LorawanProvisioning lorawan = 2;
367
+ */
368
+ value: LorawanProvisioning;
369
+ case: "lorawan";
370
+ } | { case: undefined; value?: undefined };
371
+ };
372
+
373
+ /**
374
+ * Describes the message kusinta.iot.webrtc.v1.ProvisionDevice.
375
+ * Use `create(ProvisionDeviceSchema)` to create a new message.
376
+ */
377
+ export declare const ProvisionDeviceSchema: GenMessage<ProvisionDevice>;
378
+
307
379
  /**
308
380
  * Asks for the spaces the caller can reach. Unset root_space_id means all of
309
381
  * them, which for most users is one apartment and for an administrator is the
@@ -373,7 +445,148 @@ export declare const ManagementAckSchema: GenMessage<ManagementAck>;
373
445
  * message kind, so these can never be gated by a table keyed on the envelope case
374
446
  * the way device messages are. Keeping them behind one case means one place that
375
447
  * must authorize, and one refusal path that must not leak whether a target exists.
448
+ * Links one device to another, so the sender leads the receiver. The gateway
449
+ * resolves which underlying connections that needs and asks the connector for
450
+ * them; a caller names two devices and what the link is for.
451
+ *
452
+ * Authorized against both ends, and not symmetrically. Leading a device is a
453
+ * standing grant of control over it, so the receiver requires ownership or a
454
+ * servicing role. The sender's requirement depends on the mode: a gateway-kept
455
+ * link only reads what the caller can already see, while a device-to-device one
456
+ * writes configuration to the sender and spends its battery, which is a change
457
+ * to someone else's hardware.
458
+ *
459
+ * @generated from message kusinta.iot.webrtc.v1.CreateDeviceLink
460
+ */
461
+ export declare type CreateDeviceLink = Message<"kusinta.iot.webrtc.v1.CreateDeviceLink"> & {
462
+ /**
463
+ * @generated from field: kusinta.iot.identity.v1.DeviceId sender = 1;
464
+ */
465
+ sender?: DeviceId | undefined;
466
+
467
+ /**
468
+ * @generated from field: kusinta.iot.identity.v1.DeviceId receiver = 2;
469
+ */
470
+ receiver?: DeviceId | undefined;
471
+
472
+ /**
473
+ * @generated from field: kusinta.iot.link.v1.LinkFunction function = 3;
474
+ */
475
+ function: LinkFunction;
476
+
477
+ /**
478
+ * Unset lets the gateway choose, which prefers a device-to-device link where
479
+ * one can be brokered: it survives a gateway outage and runs at the devices'
480
+ * own rate. Name one to override that.
481
+ *
482
+ * @generated from field: kusinta.iot.link.v1.LinkMode mode = 4;
483
+ */
484
+ mode: LinkMode;
485
+
486
+ /**
487
+ * How a gateway-kept link is to behave, set as it is made. Carried here as
488
+ * well as on UpdateDeviceLink so that a link does not have to exist in a
489
+ * configured-by-nobody state first — a soft climate link created without a
490
+ * target is one that holds the room at nothing until a second request
491
+ * arrives, and every reader would have to handle that transient forever.
492
+ *
493
+ * Unset is still allowed and still means unconfigured, since a hard link has
494
+ * nothing to configure and a caller may genuinely not know the target yet.
495
+ *
496
+ * @generated from field: kusinta.iot.link.v1.LinkSettings settings = 5;
497
+ */
498
+ settings?: LinkSettings | undefined;
499
+ };
500
+
501
+ /**
502
+ * Describes the message kusinta.iot.webrtc.v1.CreateDeviceLink.
503
+ * Use `create(CreateDeviceLinkSchema)` to create a new message.
504
+ */
505
+ export declare const CreateDeviceLinkSchema: GenMessage<CreateDeviceLink>;
506
+
507
+ /**
508
+ * Removes a link. Note that on at least one vendor, removing a link disturbs the
509
+ * receiver's own settings and the connector must repair them, so this is not the
510
+ * no-op it appears to be.
511
+ *
512
+ * @generated from message kusinta.iot.webrtc.v1.RemoveDeviceLink
513
+ */
514
+ export declare type RemoveDeviceLink = Message<"kusinta.iot.webrtc.v1.RemoveDeviceLink"> & {
515
+ /**
516
+ * @generated from field: string link_id = 1;
517
+ */
518
+ linkId: string;
519
+ };
520
+
521
+ /**
522
+ * Describes the message kusinta.iot.webrtc.v1.RemoveDeviceLink.
523
+ * Use `create(RemoveDeviceLinkSchema)` to create a new message.
524
+ */
525
+ export declare const RemoveDeviceLinkSchema: GenMessage<RemoveDeviceLink>;
526
+
527
+ /**
528
+ * Changes how a gateway-kept link behaves — for a climate lead, the temperature
529
+ * it is to hold.
530
+ *
531
+ * Refused on a link that has nothing to configure — see LinkSettings — rather
532
+ * than accepted as a no-op, so that a caller who has mistaken which link they
533
+ * are holding is told.
534
+ *
535
+ * Authorized against both ends, as creating and removing the link are: deciding
536
+ * what temperature a room is held at is directing a device, not adjusting one,
537
+ * so it takes ownership of the ends or a servicing role, not the permission to
538
+ * turn a thermostat up.
539
+ *
540
+ * @generated from message kusinta.iot.webrtc.v1.UpdateDeviceLink
541
+ */
542
+ export declare type UpdateDeviceLink = Message<"kusinta.iot.webrtc.v1.UpdateDeviceLink"> & {
543
+ /**
544
+ * @generated from field: string link_id = 1;
545
+ */
546
+ linkId: string;
547
+
548
+ /**
549
+ * Replaces the link's settings rather than patching them: the settings of one
550
+ * function are few and are set together, so there is no half-update worth
551
+ * expressing. This is why it does not follow UpdateSpace's per-field optional
552
+ * shape, which exists for a message whose fields genuinely move alone.
553
+ *
554
+ * Unset is refused rather than being given a meaning. It would have to mean
555
+ * either "leave everything alone", making the request a no-op, or "clear the
556
+ * settings", which is the one thing that reads like an accident — and the
557
+ * wire cannot tell those two callers apart.
558
+ *
559
+ * @generated from field: kusinta.iot.link.v1.LinkSettings settings = 2;
560
+ */
561
+ settings?: LinkSettings | undefined;
562
+ };
563
+
564
+ /**
565
+ * Describes the message kusinta.iot.webrtc.v1.UpdateDeviceLink.
566
+ * Use `create(UpdateDeviceLinkSchema)` to create a new message.
567
+ */
568
+ export declare const UpdateDeviceLinkSchema: GenMessage<UpdateDeviceLink>;
569
+
570
+ /**
571
+ * Lists links. Unset device_id lists every link among devices the caller can
572
+ * reach; naming one narrows it to that device's own, in either direction.
376
573
  *
574
+ * @generated from message kusinta.iot.webrtc.v1.ListDeviceLinks
575
+ */
576
+ export declare type ListDeviceLinks = Message<"kusinta.iot.webrtc.v1.ListDeviceLinks"> & {
577
+ /**
578
+ * @generated from field: kusinta.iot.identity.v1.DeviceId device_id = 1;
579
+ */
580
+ deviceId?: DeviceId | undefined;
581
+ };
582
+
583
+ /**
584
+ * Describes the message kusinta.iot.webrtc.v1.ListDeviceLinks.
585
+ * Use `create(ListDeviceLinksSchema)` to create a new message.
586
+ */
587
+ export declare const ListDeviceLinksSchema: GenMessage<ListDeviceLinks>;
588
+
589
+ /**
377
590
  * @generated from message kusinta.iot.webrtc.v1.ManagementRequest
378
591
  */
379
592
  export declare type ManagementRequest = Message<"kusinta.iot.webrtc.v1.ManagementRequest"> & {
@@ -440,6 +653,36 @@ export declare type ManagementRequest = Message<"kusinta.iot.webrtc.v1.Managemen
440
653
  */
441
654
  value: ListSpaces;
442
655
  case: "listSpaces";
656
+ } | {
657
+ /**
658
+ * @generated from field: kusinta.iot.webrtc.v1.CreateDeviceLink create_device_link = 11;
659
+ */
660
+ value: CreateDeviceLink;
661
+ case: "createDeviceLink";
662
+ } | {
663
+ /**
664
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveDeviceLink remove_device_link = 12;
665
+ */
666
+ value: RemoveDeviceLink;
667
+ case: "removeDeviceLink";
668
+ } | {
669
+ /**
670
+ * @generated from field: kusinta.iot.webrtc.v1.ListDeviceLinks list_device_links = 13;
671
+ */
672
+ value: ListDeviceLinks;
673
+ case: "listDeviceLinks";
674
+ } | {
675
+ /**
676
+ * @generated from field: kusinta.iot.webrtc.v1.UpdateDeviceLink update_device_link = 14;
677
+ */
678
+ value: UpdateDeviceLink;
679
+ case: "updateDeviceLink";
680
+ } | {
681
+ /**
682
+ * @generated from field: kusinta.iot.webrtc.v1.ProvisionDevice provision_device = 15;
683
+ */
684
+ value: ProvisionDevice;
685
+ case: "provisionDevice";
443
686
  } | { case: undefined; value?: undefined };
444
687
  };
445
688
 
@@ -5,13 +5,15 @@
5
5
  import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
6
  import { file_kusinta_iot_common_v1_types } from "../../common/v1/types_pb.js";
7
7
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
8
+ import { file_kusinta_iot_link_v1_link } from "../../link/v1/link_pb.js";
8
9
  import { file_kusinta_iot_space_v1_space } from "../../space/v1/space_pb.js";
10
+ import { file_kusinta_iot_vendor_lorawan_v1_lorawan } from "../../vendor/lorawan/v1/lorawan_pb.js";
9
11
 
10
12
  /**
11
13
  * Describes the file kusinta/iot/webrtc/v1/management.proto.
12
14
  */
13
15
  export const file_kusinta_iot_webrtc_v1_management = /*@__PURE__*/
14
- fileDesc("CiZrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWFuYWdlbWVudC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxIrABCgtDcmVhdGVTcGFjZRI0CgpzcGFjZV90eXBlGAEgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBWZsb29yGAQgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgFIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQizwIKC1VwZGF0ZVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI5CgpzcGFjZV90eXBlGAIgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZUgBiAEBEhEKBG5hbWUYAyABKAlIAogBARIYCgtkZXNjcmlwdGlvbhgEIAEoCUgDiAEBEhIKBWZsb29yGAUgASgFSASIAQESOwoPcGFyZW50X3NwYWNlX2lkGAYgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZEgAEhAKBmRldGFjaBgHIAEoCEgAQg8KDXBhcmVudF9jaGFuZ2VCDQoLX3NwYWNlX3R5cGVCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQggKBl9mbG9vciJSCgtEZWxldGVTcGFjZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSDwoHY2FzY2FkZRgCIAEoCCJ/ChFBc3NpZ25Vc2VyVG9TcGFjZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSMAoHdXNlcl9pZBgCIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZEoECAMQBCJ7ChNSZW1vdmVVc2VyRnJvbVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkIn4KElBsYWNlRGV2aWNlSW5TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQigQEKFVJlbW92ZURldmljZUZyb21TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi2AEKC0NsYWltRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEj0KCW93bmVyc2hpcBgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEhgKEHBvc3Nlc3Npb25fcHJvb2YYBCABKAkiRQoNUmVsZWFzZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJFCgpMaXN0U3BhY2VzEjcKDXJvb3Rfc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIjgKCVNwYWNlVHJlZRIrCgZzcGFjZXMYASADKAsyGy5rdXNpbnRhLmlvdC5zcGFjZS52MS5TcGFjZSIPCg1NYW5hZ2VtZW50QWNrIr4FChFNYW5hZ2VtZW50UmVxdWVzdBI6CgxjcmVhdGVfc3BhY2UYASABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ3JlYXRlU3BhY2VIABI6Cgx1cGRhdGVfc3BhY2UYAiABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuVXBkYXRlU3BhY2VIABI6CgxkZWxldGVfc3BhY2UYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGVsZXRlU3BhY2VIABJIChRhc3NpZ25fdXNlcl90b19zcGFjZRgEIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Bc3NpZ25Vc2VyVG9TcGFjZUgAEkwKFnJlbW92ZV91c2VyX2Zyb21fc3BhY2UYBSABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlVXNlckZyb21TcGFjZUgAEkoKFXBsYWNlX2RldmljZV9pbl9zcGFjZRgGIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QbGFjZURldmljZUluU3BhY2VIABJQChhyZW1vdmVfZGV2aWNlX2Zyb21fc3BhY2UYByABKAsyLC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlRGV2aWNlRnJvbVNwYWNlSAASOgoMY2xhaW1fZGV2aWNlGAggASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkNsYWltRGV2aWNlSAASPgoOcmVsZWFzZV9kZXZpY2UYCSABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVsZWFzZURldmljZUgAEjgKC2xpc3Rfc3BhY2VzGAogASgLMiEua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RTcGFjZXNIAEIJCgdyZXF1ZXN0QgJIAWIGcHJvdG8z", [file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_space_v1_space]);
16
+ fileDesc("CiZrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWFuYWdlbWVudC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxIrABCgtDcmVhdGVTcGFjZRI0CgpzcGFjZV90eXBlGAEgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBWZsb29yGAQgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgFIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQizwIKC1VwZGF0ZVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI5CgpzcGFjZV90eXBlGAIgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZUgBiAEBEhEKBG5hbWUYAyABKAlIAogBARIYCgtkZXNjcmlwdGlvbhgEIAEoCUgDiAEBEhIKBWZsb29yGAUgASgFSASIAQESOwoPcGFyZW50X3NwYWNlX2lkGAYgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZEgAEhAKBmRldGFjaBgHIAEoCEgAQg8KDXBhcmVudF9jaGFuZ2VCDQoLX3NwYWNlX3R5cGVCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQggKBl9mbG9vciJSCgtEZWxldGVTcGFjZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSDwoHY2FzY2FkZRgCIAEoCCJ/ChFBc3NpZ25Vc2VyVG9TcGFjZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSMAoHdXNlcl9pZBgCIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZEoECAMQBCJ7ChNSZW1vdmVVc2VyRnJvbVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkIn4KElBsYWNlRGV2aWNlSW5TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQigQEKFVJlbW92ZURldmljZUZyb21TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi2AEKC0NsYWltRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEj0KCW93bmVyc2hpcBgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEhgKEHBvc3Nlc3Npb25fcHJvb2YYBCABKAkiRQoNUmVsZWFzZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCKjAQoPUHJvdmlzaW9uRGV2aWNlEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEkUKB2xvcmF3YW4YAiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IubG9yYXdhbi52MS5Mb3Jhd2FuUHJvdmlzaW9uaW5nSABCDQoLY3JlZGVudGlhbHMiRQoKTGlzdFNwYWNlcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCI4CglTcGFjZVRyZWUSKwoGc3BhY2VzGAEgAygLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2UiDwoNTWFuYWdlbWVudEFjayKRAgoQQ3JlYXRlRGV2aWNlTGluaxIxCgZzZW5kZXIYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgCIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAMgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24SKwoEbW9kZRgEIAEoDjIdLmt1c2ludGEuaW90LmxpbmsudjEuTGlua01vZGUSMwoIc2V0dGluZ3MYBSABKAsyIS5rdXNpbnRhLmlvdC5saW5rLnYxLkxpbmtTZXR0aW5ncyIjChBSZW1vdmVEZXZpY2VMaW5rEg8KB2xpbmtfaWQYASABKAkiWAoQVXBkYXRlRGV2aWNlTGluaxIPCgdsaW5rX2lkGAEgASgJEjMKCHNldHRpbmdzGAIgASgLMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rU2V0dGluZ3MiRwoPTGlzdERldmljZUxpbmtzEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIpwIChFNYW5hZ2VtZW50UmVxdWVzdBI6CgxjcmVhdGVfc3BhY2UYASABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ3JlYXRlU3BhY2VIABI6Cgx1cGRhdGVfc3BhY2UYAiABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuVXBkYXRlU3BhY2VIABI6CgxkZWxldGVfc3BhY2UYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGVsZXRlU3BhY2VIABJIChRhc3NpZ25fdXNlcl90b19zcGFjZRgEIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Bc3NpZ25Vc2VyVG9TcGFjZUgAEkwKFnJlbW92ZV91c2VyX2Zyb21fc3BhY2UYBSABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlVXNlckZyb21TcGFjZUgAEkoKFXBsYWNlX2RldmljZV9pbl9zcGFjZRgGIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QbGFjZURldmljZUluU3BhY2VIABJQChhyZW1vdmVfZGV2aWNlX2Zyb21fc3BhY2UYByABKAsyLC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlRGV2aWNlRnJvbVNwYWNlSAASOgoMY2xhaW1fZGV2aWNlGAggASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkNsYWltRGV2aWNlSAASPgoOcmVsZWFzZV9kZXZpY2UYCSABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVsZWFzZURldmljZUgAEjgKC2xpc3Rfc3BhY2VzGAogASgLMiEua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RTcGFjZXNIABJFChJjcmVhdGVfZGV2aWNlX2xpbmsYCyABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ3JlYXRlRGV2aWNlTGlua0gAEkUKEnJlbW92ZV9kZXZpY2VfbGluaxgMIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVEZXZpY2VMaW5rSAASQwoRbGlzdF9kZXZpY2VfbGlua3MYDSABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdERldmljZUxpbmtzSAASRQoSdXBkYXRlX2RldmljZV9saW5rGA4gASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLlVwZGF0ZURldmljZUxpbmtIABJCChBwcm92aXNpb25fZGV2aWNlGA8gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLlByb3Zpc2lvbkRldmljZUgAQgkKB3JlcXVlc3RCAkgBYgZwcm90bzM", [file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_vendor_lorawan_v1_lorawan]);
15
17
 
16
18
  /**
17
19
  * Describes the message kusinta.iot.webrtc.v1.CreateSpace.
@@ -76,31 +78,66 @@ export const ClaimDeviceSchema = /*@__PURE__*/
76
78
  export const ReleaseDeviceSchema = /*@__PURE__*/
77
79
  messageDesc(file_kusinta_iot_webrtc_v1_management, 8);
78
80
 
81
+ /**
82
+ * Describes the message kusinta.iot.webrtc.v1.ProvisionDevice.
83
+ * Use `create(ProvisionDeviceSchema)` to create a new message.
84
+ */
85
+ export const ProvisionDeviceSchema = /*@__PURE__*/
86
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 9);
87
+
79
88
  /**
80
89
  * Describes the message kusinta.iot.webrtc.v1.ListSpaces.
81
90
  * Use `create(ListSpacesSchema)` to create a new message.
82
91
  */
83
92
  export const ListSpacesSchema = /*@__PURE__*/
84
- messageDesc(file_kusinta_iot_webrtc_v1_management, 9);
93
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 10);
85
94
 
86
95
  /**
87
96
  * Describes the message kusinta.iot.webrtc.v1.SpaceTree.
88
97
  * Use `create(SpaceTreeSchema)` to create a new message.
89
98
  */
90
99
  export const SpaceTreeSchema = /*@__PURE__*/
91
- messageDesc(file_kusinta_iot_webrtc_v1_management, 10);
100
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 11);
92
101
 
93
102
  /**
94
103
  * Describes the message kusinta.iot.webrtc.v1.ManagementAck.
95
104
  * Use `create(ManagementAckSchema)` to create a new message.
96
105
  */
97
106
  export const ManagementAckSchema = /*@__PURE__*/
98
- messageDesc(file_kusinta_iot_webrtc_v1_management, 11);
107
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 12);
108
+
109
+ /**
110
+ * Describes the message kusinta.iot.webrtc.v1.CreateDeviceLink.
111
+ * Use `create(CreateDeviceLinkSchema)` to create a new message.
112
+ */
113
+ export const CreateDeviceLinkSchema = /*@__PURE__*/
114
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 13);
115
+
116
+ /**
117
+ * Describes the message kusinta.iot.webrtc.v1.RemoveDeviceLink.
118
+ * Use `create(RemoveDeviceLinkSchema)` to create a new message.
119
+ */
120
+ export const RemoveDeviceLinkSchema = /*@__PURE__*/
121
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 14);
122
+
123
+ /**
124
+ * Describes the message kusinta.iot.webrtc.v1.UpdateDeviceLink.
125
+ * Use `create(UpdateDeviceLinkSchema)` to create a new message.
126
+ */
127
+ export const UpdateDeviceLinkSchema = /*@__PURE__*/
128
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 15);
129
+
130
+ /**
131
+ * Describes the message kusinta.iot.webrtc.v1.ListDeviceLinks.
132
+ * Use `create(ListDeviceLinksSchema)` to create a new message.
133
+ */
134
+ export const ListDeviceLinksSchema = /*@__PURE__*/
135
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 16);
99
136
 
100
137
  /**
101
138
  * Describes the message kusinta.iot.webrtc.v1.ManagementRequest.
102
139
  * Use `create(ManagementRequestSchema)` to create a new message.
103
140
  */
104
141
  export const ManagementRequestSchema = /*@__PURE__*/
105
- messageDesc(file_kusinta_iot_webrtc_v1_management, 12);
142
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 17);
106
143
 
@@ -3,14 +3,14 @@
3
3
  /* eslint-disable */
4
4
 
5
5
  import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
- import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
7
6
  import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
7
+ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
8
8
 
9
9
  /**
10
10
  * Describes the file kusinta/iot/webrtc/v1/permission_push.proto.
11
11
  */
12
12
  export const file_kusinta_iot_webrtc_v1_permission_push = /*@__PURE__*/
13
- fileDesc("CitrdXNpbnRhL2lvdC93ZWJydGMvdjEvcGVybWlzc2lvbl9wdXNoLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEi6QEKFExpdmVQZXJtaXNzaW9uVXBkYXRlEkQKD25ld19wZXJtaXNzaW9ucxgBIAEoCzIrLmt1c2ludGEuaW90LmFjY2Vzcy52MS5FZmZlY3RpdmVQZXJtaXNzaW9ucxI4Cg1hZGRlZF9kZXZpY2VzGAIgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSOgoPcmVtb3ZlZF9kZXZpY2VzGAMgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSFQoNY2hhbmdlX3JlYXNvbhgEIAEoCUICSAFiBnByb3RvMw", [file_kusinta_iot_identity_v1_identity, file_kusinta_iot_access_v1_acl]);
13
+ fileDesc("CitrdXNpbnRhL2lvdC93ZWJydGMvdjEvcGVybWlzc2lvbl9wdXNoLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEi6QEKFExpdmVQZXJtaXNzaW9uVXBkYXRlEkQKD25ld19wZXJtaXNzaW9ucxgBIAEoCzIrLmt1c2ludGEuaW90LmFjY2Vzcy52MS5FZmZlY3RpdmVQZXJtaXNzaW9ucxI4Cg1hZGRlZF9kZXZpY2VzGAIgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSOgoPcmVtb3ZlZF9kZXZpY2VzGAMgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSFQoNY2hhbmdlX3JlYXNvbhgEIAEoCUICSAFiBnByb3RvMw", [file_kusinta_iot_access_v1_acl, file_kusinta_iot_identity_v1_identity]);
14
14
 
15
15
  /**
16
16
  * Describes the message kusinta.iot.webrtc.v1.LivePermissionUpdate.
@@ -0,0 +1,63 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/webrtc/v1/setpoint_mode.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import type { GenEnum, GenFile } from "@bufbuild/protobuf/codegenv2";
6
+
7
+ /**
8
+ * Describes the file kusinta/iot/webrtc/v1/setpoint_mode.proto.
9
+ */
10
+ export declare const file_kusinta_iot_webrtc_v1_setpoint_mode: GenFile;
11
+
12
+ /**
13
+ * SetpointAdjustMode selects which setpoint a thermostat command targets. It is
14
+ * Matter's SetpointRaiseLowerModeEnum (Thermostat cluster 0x0201) and carries Matter's
15
+ * own numbering.
16
+ *
17
+ * A real type rather than a numbering written down in a comment. The mode field on
18
+ * ThermostatSetpointParams was a bare uint32 with this numbering stated beside it, so a
19
+ * consumer carrying forward an older Heat=1/Cool=2/Both=3 convention compiled cleanly and
20
+ * silently reversed which physical behavior a command produced.
21
+ *
22
+ * Zero is a real mode, not a "not set" sentinel — which is why there is no
23
+ * SETPOINT_ADJUST_MODE_UNSPECIFIED, and why every field carrying this value has explicit
24
+ * presence: absent = the producer stated no mode, present = the mode it named, Heat
25
+ * included. This is the same rule properties.proto applies to readings, for the same
26
+ * reason — a bare proto3 scalar makes "meant Heat" and "never set it" identical on the
27
+ * wire. Renumbering to free zero is not available: the wire value IS Matter's value.
28
+ *
29
+ * SetpointAdjustMode is NOT ThermostatProperties.system_mode. system_mode is Matter's
30
+ * SystemModeEnum (Off=0, Auto=1, Cool=3, Heat=4), a different enum over a different set
31
+ * of concepts. Cool is 1 here and 3 there; the two must never be substituted for each
32
+ * other or read through the same mapping table.
33
+ *
34
+ * @generated from enum kusinta.iot.webrtc.v1.SetpointAdjustMode
35
+ */
36
+ export enum SetpointAdjustMode {
37
+ /**
38
+ * Targets ThermostatProperties.occupied_heating_setpoint.
39
+ *
40
+ * @generated from enum value: SETPOINT_ADJUST_MODE_HEAT = 0;
41
+ */
42
+ HEAT = 0,
43
+
44
+ /**
45
+ * Targets ThermostatProperties.occupied_cooling_setpoint.
46
+ *
47
+ * @generated from enum value: SETPOINT_ADJUST_MODE_COOL = 1;
48
+ */
49
+ COOL = 1,
50
+
51
+ /**
52
+ * Targets both setpoints.
53
+ *
54
+ * @generated from enum value: SETPOINT_ADJUST_MODE_BOTH = 2;
55
+ */
56
+ BOTH = 2,
57
+ }
58
+
59
+ /**
60
+ * Describes the enum kusinta.iot.webrtc.v1.SetpointAdjustMode.
61
+ */
62
+ export declare const SetpointAdjustModeSchema: GenEnum<SetpointAdjustMode>;
63
+
@@ -0,0 +1,45 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/webrtc/v1/setpoint_mode.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import { enumDesc, fileDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
6
+
7
+ /**
8
+ * Describes the file kusinta/iot/webrtc/v1/setpoint_mode.proto.
9
+ */
10
+ export const file_kusinta_iot_webrtc_v1_setpoint_mode = /*@__PURE__*/
11
+ fileDesc("CilrdXNpbnRhL2lvdC93ZWJydGMvdjEvc2V0cG9pbnRfbW9kZS5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxKnEKElNldHBvaW50QWRqdXN0TW9kZRIdChlTRVRQT0lOVF9BREpVU1RfTU9ERV9IRUFUEAASHQoZU0VUUE9JTlRfQURKVVNUX01PREVfQ09PTBABEh0KGVNFVFBPSU5UX0FESlVTVF9NT0RFX0JPVEgQAkICSAFiBnByb3RvMw");
12
+
13
+ /**
14
+ * Describes the enum kusinta.iot.webrtc.v1.SetpointAdjustMode.
15
+ */
16
+ export const SetpointAdjustModeSchema = /*@__PURE__*/
17
+ enumDesc(file_kusinta_iot_webrtc_v1_setpoint_mode, 0);
18
+
19
+ /**
20
+ * SetpointAdjustMode selects which setpoint a thermostat command targets. It is
21
+ * Matter's SetpointRaiseLowerModeEnum (Thermostat cluster 0x0201) and carries Matter's
22
+ * own numbering.
23
+ *
24
+ * A real type rather than a numbering written down in a comment. The mode field on
25
+ * ThermostatSetpointParams was a bare uint32 with this numbering stated beside it, so a
26
+ * consumer carrying forward an older Heat=1/Cool=2/Both=3 convention compiled cleanly and
27
+ * silently reversed which physical behavior a command produced.
28
+ *
29
+ * Zero is a real mode, not a "not set" sentinel — which is why there is no
30
+ * SETPOINT_ADJUST_MODE_UNSPECIFIED, and why every field carrying this value has explicit
31
+ * presence: absent = the producer stated no mode, present = the mode it named, Heat
32
+ * included. This is the same rule properties.proto applies to readings, for the same
33
+ * reason — a bare proto3 scalar makes "meant Heat" and "never set it" identical on the
34
+ * wire. Renumbering to free zero is not available: the wire value IS Matter's value.
35
+ *
36
+ * SetpointAdjustMode is NOT ThermostatProperties.system_mode. system_mode is Matter's
37
+ * SystemModeEnum (Off=0, Auto=1, Cool=3, Heat=4), a different enum over a different set
38
+ * of concepts. Cool is 1 here and 3 there; the two must never be substituted for each
39
+ * other or read through the same mapping table.
40
+ *
41
+ * @generated from enum kusinta.iot.webrtc.v1.SetpointAdjustMode
42
+ */
43
+ export const SetpointAdjustMode = /*@__PURE__*/
44
+ tsEnum(SetpointAdjustModeSchema);
45
+