@kusinta/iot-schema 0.2.0-beta.2 → 0.2.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kusinta/iot-schema",
3
- "version": "0.2.0-beta.2",
3
+ "version": "0.2.0-beta.3",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "files": ["src"],
@@ -27,7 +27,11 @@
27
27
  "./connector/service": "./src/kusinta/iot/connector/v1/connector_service_pb.js",
28
28
  "./webrtc": "./src/kusinta/iot/webrtc/v1/envelope_pb.js",
29
29
  "./webrtc/app-token": "./src/kusinta/iot/webrtc/v1/app_token_pb.js",
30
+ "./webrtc/command": "./src/kusinta/iot/webrtc/v1/command_pb.js",
31
+ "./webrtc/device-state": "./src/kusinta/iot/webrtc/v1/device_state_pb.js",
30
32
  "./webrtc/management": "./src/kusinta/iot/webrtc/v1/management_pb.js",
33
+ "./webrtc/permission-push": "./src/kusinta/iot/webrtc/v1/permission_push_pb.js",
34
+ "./webrtc/setpoint-mode": "./src/kusinta/iot/webrtc/v1/setpoint_mode_pb.js",
31
35
  "./registration": "./src/kusinta/iot/registration/v1/registration_pb.js",
32
36
  "./registration/service": "./src/kusinta/iot/registration/v1/registration_service_pb.js",
33
37
  "./signaling": "./src/kusinta/iot/signaling/v1/signaling_pb.js",
@@ -8,9 +8,9 @@ import type { ConnectorId, DeviceId, GatewayId } from "../../identity/v1/identit
8
8
  import type { ConnectorTransport } from "../../common/v1/types_pb.js";
9
9
  import type { Device } from "../../device/v1/device_pb.js";
10
10
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
11
+ import type { AttributeWriteRequest, CommandError, DeviceCommand } from "../../webrtc/v1/command_pb.js";
11
12
  import type { PropertyUpdateBatch } from "../../device/v1/property_update_pb.js";
12
13
  import type { DeviceEventBatch } from "../../device/v1/device_event_pb.js";
13
- import type { AttributeWriteRequest, DeviceCommand } from "../../webrtc/v1/command_pb.js";
14
14
 
15
15
  /**
16
16
  * Describes the file kusinta/iot/connector/v1/connector.proto.
@@ -196,6 +196,15 @@ export declare type UnsubscribeDevice = Message<"kusinta.iot.connector.v1.Unsubs
196
196
  export declare const UnsubscribeDeviceSchema: GenMessage<UnsubscribeDevice>;
197
197
 
198
198
  /**
199
+ * Session-level error, gateway → connector. NOT how a command or a write fails: that is
200
+ * an ordinary ConnectorCommandResult with success = false and a typed CommandError, and
201
+ * one operation failing says nothing about the session, which continues.
202
+ *
203
+ * code stays a free-form string here, unlike webrtc.v1.GatewayError's closed
204
+ * GatewayErrorCode and unlike the CommandError below. A connector is versioned on its own
205
+ * schedule and one may be a third party's, so the set of things that can go wrong between
206
+ * a gateway and a connector is not closed the way the app leg's is.
207
+ *
199
208
  * @generated from message kusinta.iot.connector.v1.GatewayError
200
209
  */
201
210
  export declare type GatewayError = Message<"kusinta.iot.connector.v1.GatewayError"> & {
@@ -210,7 +219,7 @@ export declare type GatewayError = Message<"kusinta.iot.connector.v1.GatewayErro
210
219
  message: string;
211
220
 
212
221
  /**
213
- * non-empty if the error answers a command or a write
222
+ * non-empty if the error refers to a specific request
214
223
  *
215
224
  * @generated from field: string request_id = 3;
216
225
  */
@@ -245,14 +254,53 @@ export declare type ConnectorCommandResult = Message<"kusinta.iot.connector.v1.C
245
254
  success: boolean;
246
255
 
247
256
  /**
248
- * @generated from field: kusinta.iot.connector.v1.GatewayError error = 3;
257
+ * @generated from field: google.protobuf.Timestamp completed_at = 4;
249
258
  */
250
- error?: GatewayError | undefined;
259
+ completedAt?: Timestamp | undefined;
251
260
 
252
261
  /**
253
- * @generated from field: google.protobuf.Timestamp completed_at = 4;
262
+ * Why it failed, in the same closed vocabulary the app is eventually given. The gateway
263
+ * forwards this into webrtc.v1.CommandResult.error unchanged; it does not translate.
264
+ *
265
+ * Shared rather than mirrored on purpose. The free-form string this replaces left every
266
+ * connector to invent its own spellings ("TIMEOUT", "UNSUPPORTED_MODE") and the gateway
267
+ * to keep a mapping table that silently fell behind whenever a connector coined a new
268
+ * one — which is the drift a closed vocabulary exists to prevent.
269
+ *
270
+ * A connector produces the subset it can actually observe: REJECTED_BY_DEVICE,
271
+ * UNREACHABLE, TIMEOUT, INVALID_COMMAND, INTERNAL. NOT_ENTITLED and
272
+ * CONSTRAINT_VIOLATED are the gateway's, decided before a command is forwarded at all;
273
+ * a connector never sees the caller's permissions and must not claim to.
274
+ *
275
+ * Rollout note: a connector whose schema predates this sends nothing on field 5 and the
276
+ * gateway reads UNSPECIFIED. Set success = false with no code and the meaning is "it
277
+ * failed, reason unstated" — which is what the string codes amounted to anyway.
278
+ *
279
+ * @generated from field: kusinta.iot.webrtc.v1.CommandError error = 5;
254
280
  */
255
- completedAt?: Timestamp | undefined;
281
+ error?: CommandError | undefined;
282
+
283
+ /**
284
+ * When this connector's own optimistic window closes: by this time the value has either
285
+ * been confirmed by the device or restored, and either way the connector will have
286
+ * published a PropertyUpdate saying so.
287
+ *
288
+ * Set it when the connector applied the value optimistically and runs a rollback timer
289
+ * of its own — a downstream device with a known, device-specific timeout. The gateway
290
+ * carries it into webrtc.v1.CommandResult.settles_by instead of applying a fixed guess:
291
+ * the connector is the only party that knows the timer, and a gateway-side constant
292
+ * chasing it is the same hardcoded-window problem one level up.
293
+ *
294
+ * Absent means no claim — either the connector confirms synchronously, or it cannot
295
+ * state a bound. Absent is NOT "settles immediately", and the gateway is free to fall
296
+ * back to a deadline of its own when nothing is stated here.
297
+ *
298
+ * This bounds the wait; it does not label the values that arrive. Which update was the
299
+ * optimistic one is device.v1.PropertyUpdate.provenance.
300
+ *
301
+ * @generated from field: optional google.protobuf.Timestamp settles_by = 6;
302
+ */
303
+ settlesBy?: Timestamp | undefined;
256
304
  };
257
305
 
258
306
  /**
@@ -15,7 +15,7 @@ import { file_kusinta_iot_webrtc_v1_command } from "../../webrtc/v1/command_pb.j
15
15
  * Describes the file kusinta/iot/connector/v1/connector.proto.
16
16
  */
17
17
  export const file_kusinta_iot_connector_v1_connector = /*@__PURE__*/
18
- fileDesc("CihrdXNpbnRhL2lvdC9jb25uZWN0b3IvdjEvY29ubmVjdG9yLnByb3RvEhhrdXNpbnRhLmlvdC5jb25uZWN0b3IudjEi5QEKDUNvbm5lY3RvckluZm8SOgoMY29ubmVjdG9yX2lkGAEgASgLMiQua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuQ29ubmVjdG9ySWQSFAoMZGlzcGxheV9uYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAkSPAoJdHJhbnNwb3J0GAQgASgOMikua3VzaW50YS5pb3QuY29tbW9uLnYxLkNvbm5lY3RvclRyYW5zcG9ydBIQCghlbmRwb2ludBgFIAEoCRIhChlzdXBwb3J0ZWRfZGV2aWNlX3R5cGVfaWRzGAYgAygNIoEBChJDb25uZWN0b3JIYW5kc2hha2USNQoEaW5mbxgBIAEoCzInLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5Db25uZWN0b3JJbmZvEjQKDWtub3duX2RldmljZXMYAiADKAsyHS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRGV2aWNlImgKDEhhbmRzaGFrZUFjaxIQCghhY2NlcHRlZBgBIAEoCBIOCgZyZWFzb24YAiABKAkSNgoKZ2F0ZXdheV9pZBgDIAEoCzIiLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkdhdGV3YXlJZCJVChJEZXZpY2VBbm5vdW5jZW1lbnQSLQoGZGV2aWNlGAIgASgLMh0ua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZUoECAEQAlIKZGVzY3JpcHRvciJVCg1EZXZpY2VSZW1vdmFsEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEg4KBnJlYXNvbhgCIAEoCSILCglIZWFydEJlYXQiRwoPU3Vic2NyaWJlRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIkkKEVVuc3Vic2NyaWJlRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIkEKDEdhdGV3YXlFcnJvchIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKcmVxdWVzdF9pZBgDIAEoCSKmAQoWQ29ubmVjdG9yQ29tbWFuZFJlc3VsdBISCgpyZXF1ZXN0X2lkGAEgASgJEg8KB3N1Y2Nlc3MYAiABKAgSNQoFZXJyb3IYAyABKAsyJi5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuR2F0ZXdheUVycm9yEjAKDGNvbXBsZXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiuwQKDlNlc3Npb25SZXF1ZXN0EhIKCm1lc3NhZ2VfaWQYASABKAkSKwoHc2VudF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASQQoJaGFuZHNoYWtlGAMgASgLMiwua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkNvbm5lY3RvckhhbmRzaGFrZUgAEkUKD3Byb3BlcnR5X3VwZGF0ZRgEIAEoCzIqLmt1c2ludGEuaW90LmRldmljZS52MS5Qcm9wZXJ0eVVwZGF0ZUJhdGNoSAASSAoQZGV2aWNlX2Fubm91bmNlZBgFIAEoCzIsLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5EZXZpY2VBbm5vdW5jZW1lbnRIABJBCg5kZXZpY2VfcmVtb3ZlZBgGIAEoCzInLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5EZXZpY2VSZW1vdmFsSAASSgoOY29tbWFuZF9yZXN1bHQYByABKAsyMC5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuQ29ubmVjdG9yQ29tbWFuZFJlc3VsdEgAEjgKCWhlYXJ0YmVhdBgIIAEoCzIjLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5IZWFydEJlYXRIABJACg1kZXZpY2VfZXZlbnRzGAkgASgLMicua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZUV2ZW50QmF0Y2hIAEIJCgdwYXlsb2FkIvMDCg9TZXNzaW9uUmVzcG9uc2USEgoKbWVzc2FnZV9pZBgBIAEoCRIrCgdzZW50X2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI/Cg1oYW5kc2hha2VfYWNrGAMgASgLMiYua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkhhbmRzaGFrZUFja0gAEj4KCXN1YnNjcmliZRgFIAEoCzIpLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5TdWJzY3JpYmVEZXZpY2VIABJCCgt1bnN1YnNjcmliZRgGIAEoCzIrLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5VbnN1YnNjcmliZURldmljZUgAEjcKBWVycm9yGAcgASgLMiYua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkdhdGV3YXlFcnJvckgAEj8KD2V4ZWN1dGVfY29tbWFuZBgIIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VDb21tYW5kSAASTwoXZXhlY3V0ZV9hdHRyaWJ1dGVfd3JpdGUYCSABKAsyLC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXR0cmlidXRlV3JpdGVSZXF1ZXN0SABCCQoHcGF5bG9hZEoECAQQBUICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_device_v1_device, file_kusinta_iot_device_v1_device_event, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_webrtc_v1_command]);
18
+ fileDesc("CihrdXNpbnRhL2lvdC9jb25uZWN0b3IvdjEvY29ubmVjdG9yLnByb3RvEhhrdXNpbnRhLmlvdC5jb25uZWN0b3IudjEi5QEKDUNvbm5lY3RvckluZm8SOgoMY29ubmVjdG9yX2lkGAEgASgLMiQua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuQ29ubmVjdG9ySWQSFAoMZGlzcGxheV9uYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAkSPAoJdHJhbnNwb3J0GAQgASgOMikua3VzaW50YS5pb3QuY29tbW9uLnYxLkNvbm5lY3RvclRyYW5zcG9ydBIQCghlbmRwb2ludBgFIAEoCRIhChlzdXBwb3J0ZWRfZGV2aWNlX3R5cGVfaWRzGAYgAygNIoEBChJDb25uZWN0b3JIYW5kc2hha2USNQoEaW5mbxgBIAEoCzInLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5Db25uZWN0b3JJbmZvEjQKDWtub3duX2RldmljZXMYAiADKAsyHS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRGV2aWNlImgKDEhhbmRzaGFrZUFjaxIQCghhY2NlcHRlZBgBIAEoCBIOCgZyZWFzb24YAiABKAkSNgoKZ2F0ZXdheV9pZBgDIAEoCzIiLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkdhdGV3YXlJZCJVChJEZXZpY2VBbm5vdW5jZW1lbnQSLQoGZGV2aWNlGAIgASgLMh0ua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZUoECAEQAlIKZGVzY3JpcHRvciJVCg1EZXZpY2VSZW1vdmFsEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEg4KBnJlYXNvbhgCIAEoCSILCglIZWFydEJlYXQiRwoPU3Vic2NyaWJlRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIkkKEVVuc3Vic2NyaWJlRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIkEKDEdhdGV3YXlFcnJvchIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKcmVxdWVzdF9pZBgDIAEoCSLtAQoWQ29ubmVjdG9yQ29tbWFuZFJlc3VsdBISCgpyZXF1ZXN0X2lkGAEgASgJEg8KB3N1Y2Nlc3MYAiABKAgSMAoMY29tcGxldGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIyCgVlcnJvchgFIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db21tYW5kRXJyb3ISMwoKc2V0dGxlc19ieRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBAUINCgtfc2V0dGxlc19ieUoECAMQBCK7BAoOU2Vzc2lvblJlcXVlc3QSEgoKbWVzc2FnZV9pZBgBIAEoCRIrCgdzZW50X2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJBCgloYW5kc2hha2UYAyABKAsyLC5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuQ29ubmVjdG9ySGFuZHNoYWtlSAASRQoPcHJvcGVydHlfdXBkYXRlGAQgASgLMioua3VzaW50YS5pb3QuZGV2aWNlLnYxLlByb3BlcnR5VXBkYXRlQmF0Y2hIABJIChBkZXZpY2VfYW5ub3VuY2VkGAUgASgLMiwua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkRldmljZUFubm91bmNlbWVudEgAEkEKDmRldmljZV9yZW1vdmVkGAYgASgLMicua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkRldmljZVJlbW92YWxIABJKCg5jb21tYW5kX3Jlc3VsdBgHIAEoCzIwLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5Db25uZWN0b3JDb21tYW5kUmVzdWx0SAASOAoJaGVhcnRiZWF0GAggASgLMiMua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkhlYXJ0QmVhdEgAEkAKDWRldmljZV9ldmVudHMYCSABKAsyJy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRGV2aWNlRXZlbnRCYXRjaEgAQgkKB3BheWxvYWQi8wMKD1Nlc3Npb25SZXNwb25zZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEj8KDWhhbmRzaGFrZV9hY2sYAyABKAsyJi5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuSGFuZHNoYWtlQWNrSAASPgoJc3Vic2NyaWJlGAUgASgLMikua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLlN1YnNjcmliZURldmljZUgAEkIKC3Vuc3Vic2NyaWJlGAYgASgLMisua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLlVuc3Vic2NyaWJlRGV2aWNlSAASNwoFZXJyb3IYByABKAsyJi5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuR2F0ZXdheUVycm9ySAASPwoPZXhlY3V0ZV9jb21tYW5kGAggASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZUNvbW1hbmRIABJPChdleGVjdXRlX2F0dHJpYnV0ZV93cml0ZRgJIAEoCzIsLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BdHRyaWJ1dGVXcml0ZVJlcXVlc3RIAEIJCgdwYXlsb2FkSgQIBBAFQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_device_v1_device, file_kusinta_iot_device_v1_device_event, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_webrtc_v1_command]);
19
19
 
20
20
  /**
21
21
  * Describes the message kusinta.iot.connector.v1.ConnectorInfo.
@@ -4,6 +4,7 @@
4
4
 
5
5
  import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
+ import type { SetpointAdjustMode } from "./setpoint_mode_pb.js";
7
8
  import type { DeviceId } from "../../identity/v1/identity_pb.js";
8
9
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
9
10
  import type { AttributeRef } from "../../access/v1/acl_pb.js";
@@ -28,11 +29,11 @@ export declare const file_kusinta_iot_webrtc_v1_command: GenFile;
28
29
  */
29
30
  export declare type ThermostatSetpointParams = Message<"kusinta.iot.webrtc.v1.ThermostatSetpointParams"> & {
30
31
  /**
31
- * SetpointAdjustMode, see above
32
+ * absent = the producer stated no mode
32
33
  *
33
- * @generated from field: optional uint32 mode = 1;
34
+ * @generated from field: optional kusinta.iot.webrtc.v1.SetpointAdjustMode mode = 1;
34
35
  */
35
- mode?: number | undefined;
36
+ mode?: SetpointAdjustMode | undefined;
36
37
 
37
38
  /**
38
39
  * centidegrees delta
@@ -8,12 +8,13 @@ import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
8
8
  import { file_kusinta_iot_device_v1_cluster_state } from "../../device/v1/cluster_state_pb.js";
9
9
  import { file_kusinta_iot_device_v1_matter_options } from "../../device/v1/matter_options_pb.js";
10
10
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
11
+ import { file_kusinta_iot_webrtc_v1_setpoint_mode } from "./setpoint_mode_pb.js";
11
12
 
12
13
  /**
13
14
  * Describes the file kusinta/iot/webrtc/v1/command.proto.
14
15
  */
15
16
  export const file_kusinta_iot_webrtc_v1_command = /*@__PURE__*/
16
- fileDesc("CiNrdXNpbnRhL2lvdC93ZWJydGMvdjEvY29tbWFuZC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxIlEKGFRoZXJtb3N0YXRTZXRwb2ludFBhcmFtcxIRCgRtb2RlGAEgASgNSACIAQESDgoGYW1vdW50GAIgASgROgm4tRiBBMC1GABCBwoFX21vZGUiRgoSTGV2ZWxDb250cm9sUGFyYW1zEg0KBWxldmVsGAEgASgNEhcKD3RyYW5zaXRpb25fdGltZRgCIAEoDToIuLUYCMC1GAAiKwoLT25PZmZQYXJhbXM6BLi1GAZKBAgBEAJKBAgCEANSAm9uUgZ0b2dnbGUiQQoYV2luZG93Q292ZXJpbmdMaWZ0UGFyYW1zEhoKEmxpZnRfcGVyY2VudDEwMHRocxgBIAEoDToJuLUYggLAtRgFIjsKDkRvb3JMb2NrUGFyYW1zEhAKCHBpbl9jb2RlGAIgASgJOgW4tRiBAkoECAEQAlIKbG9ja19zdGF0ZSKSBQoNRGV2aWNlQ29tbWFuZBISCgpyZXF1ZXN0X2lkGAEgASgJEjQKCWRldmljZV9pZBgCIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEhQKDGNvbW1hbmRfbmFtZRgEIAEoCRISCgpjbHVzdGVyX2lkGAwgASgNEh4KEW1hdHRlcl9jb21tYW5kX2lkGA0gASgNSAGIAQESGAoLZW5kcG9pbnRfaWQYCyABKA1IAogBARJOChN0aGVybW9zdGF0X3NldHBvaW50GAUgASgLMi8ua3VzaW50YS5pb3Qud2VicnRjLnYxLlRoZXJtb3N0YXRTZXRwb2ludFBhcmFtc0gAEkIKDWxldmVsX2NvbnRyb2wYBiABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGV2ZWxDb250cm9sUGFyYW1zSAASNAoGb25fb2ZmGAcgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLk9uT2ZmUGFyYW1zSAASTwoUd2luZG93X2NvdmVyaW5nX2xpZnQYCCABKAsyLy5rdXNpbnRhLmlvdC53ZWJydGMudjEuV2luZG93Q292ZXJpbmdMaWZ0UGFyYW1zSAASOgoJZG9vcl9sb2NrGAkgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLkRvb3JMb2NrUGFyYW1zSAASEQoHcmF3X3RsdhhjIAEoDEgAQgwKCnBhcmFtZXRlcnNCFAoSX21hdHRlcl9jb21tYW5kX2lkQg4KDF9lbmRwb2ludF9pZEoECAMQBEoECAoQC1IOY2x1c3Rlcl9pZF9oZXhSGXRoZXJtb3N0YXRfc2V0cG9pbnRfd3JpdGUiXAoMQ29tbWFuZEVycm9yEg8KB21lc3NhZ2UYAiABKAkSNQoEY29kZRgDIAEoDjInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db21tYW5kRXJyb3JDb2RlSgQIARACIt4BCg1Db21tYW5kUmVzdWx0EhIKCnJlcXVlc3RfaWQYASABKAkSDwoHc3VjY2VzcxgCIAEoCBIyCgVlcnJvchgDIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db21tYW5kRXJyb3ISMAoMY29tcGxldGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCgpzZXR0bGVzX2J5GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBQg0KC19zZXR0bGVzX2J5IswBChVBdHRyaWJ1dGVXcml0ZVJlcXVlc3QSEgoKcmVxdWVzdF9pZBgBIAEoCRI0CglkZXZpY2VfaWQYAiABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCgZ0YXJnZXQYAyABKAsyIy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuQXR0cmlidXRlUmVmEjQKBXZhbHVlGAQgASgLMiUua3VzaW50YS5pb3QuZGV2aWNlLnYxLkF0dHJpYnV0ZVZhbHVlKr8CChBDb21tYW5kRXJyb3JDb2RlEiIKHkNPTU1BTkRfRVJST1JfQ09ERV9VTlNQRUNJRklFRBAAEiMKH0NPTU1BTkRfRVJST1JfQ09ERV9OT1RfRU5USVRMRUQQARIqCiZDT01NQU5EX0VSUk9SX0NPREVfQ09OU1RSQUlOVF9WSU9MQVRFRBACEiYKIkNPTU1BTkRfRVJST1JfQ09ERV9JTlZBTElEX0NPTU1BTkQQAxIiCh5DT01NQU5EX0VSUk9SX0NPREVfVU5SRUFDSEFCTEUQBBIeChpDT01NQU5EX0VSUk9SX0NPREVfVElNRU9VVBAFEikKJUNPTU1BTkRfRVJST1JfQ09ERV9SRUpFQ1RFRF9CWV9ERVZJQ0UQBhIfChtDT01NQU5EX0VSUk9SX0NPREVfSU5URVJOQUwQB0ICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_device_v1_cluster_state, file_kusinta_iot_device_v1_matter_options, file_kusinta_iot_identity_v1_identity]);
17
+ fileDesc("CiNrdXNpbnRhL2lvdC93ZWJydGMvdjEvY29tbWFuZC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxInwKGFRoZXJtb3N0YXRTZXRwb2ludFBhcmFtcxI8CgRtb2RlGAEgASgOMikua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldHBvaW50QWRqdXN0TW9kZUgAiAEBEg4KBmFtb3VudBgCIAEoEToJuLUYgQTAtRgAQgcKBV9tb2RlIkYKEkxldmVsQ29udHJvbFBhcmFtcxINCgVsZXZlbBgBIAEoDRIXCg90cmFuc2l0aW9uX3RpbWUYAiABKA06CLi1GAjAtRgAIisKC09uT2ZmUGFyYW1zOgS4tRgGSgQIARACSgQIAhADUgJvblIGdG9nZ2xlIkEKGFdpbmRvd0NvdmVyaW5nTGlmdFBhcmFtcxIaChJsaWZ0X3BlcmNlbnQxMDB0aHMYASABKA06Cbi1GIICwLUYBSI7Cg5Eb29yTG9ja1BhcmFtcxIQCghwaW5fY29kZRgCIAEoCToFuLUYgQJKBAgBEAJSCmxvY2tfc3RhdGUikgUKDURldmljZUNvbW1hbmQSEgoKcmVxdWVzdF9pZBgBIAEoCRI0CglkZXZpY2VfaWQYAiABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIUCgxjb21tYW5kX25hbWUYBCABKAkSEgoKY2x1c3Rlcl9pZBgMIAEoDRIeChFtYXR0ZXJfY29tbWFuZF9pZBgNIAEoDUgBiAEBEhgKC2VuZHBvaW50X2lkGAsgASgNSAKIAQESTgoTdGhlcm1vc3RhdF9zZXRwb2ludBgFIAEoCzIvLmt1c2ludGEuaW90LndlYnJ0Yy52MS5UaGVybW9zdGF0U2V0cG9pbnRQYXJhbXNIABJCCg1sZXZlbF9jb250cm9sGAYgASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLkxldmVsQ29udHJvbFBhcmFtc0gAEjQKBm9uX29mZhgHIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Pbk9mZlBhcmFtc0gAEk8KFHdpbmRvd19jb3ZlcmluZ19saWZ0GAggASgLMi8ua3VzaW50YS5pb3Qud2VicnRjLnYxLldpbmRvd0NvdmVyaW5nTGlmdFBhcmFtc0gAEjoKCWRvb3JfbG9jaxgJIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Eb29yTG9ja1BhcmFtc0gAEhEKB3Jhd190bHYYYyABKAxIAEIMCgpwYXJhbWV0ZXJzQhQKEl9tYXR0ZXJfY29tbWFuZF9pZEIOCgxfZW5kcG9pbnRfaWRKBAgDEARKBAgKEAtSDmNsdXN0ZXJfaWRfaGV4Uhl0aGVybW9zdGF0X3NldHBvaW50X3dyaXRlIlwKDENvbW1hbmRFcnJvchIPCgdtZXNzYWdlGAIgASgJEjUKBGNvZGUYAyABKA4yJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29tbWFuZEVycm9yQ29kZUoECAEQAiLeAQoNQ29tbWFuZFJlc3VsdBISCgpyZXF1ZXN0X2lkGAEgASgJEg8KB3N1Y2Nlc3MYAiABKAgSMgoFZXJyb3IYAyABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29tbWFuZEVycm9yEjAKDGNvbXBsZXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMwoKc2V0dGxlc19ieRgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBAUINCgtfc2V0dGxlc19ieSLMAQoVQXR0cmlidXRlV3JpdGVSZXF1ZXN0EhIKCnJlcXVlc3RfaWQYASABKAkSNAoJZGV2aWNlX2lkGAIgASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSMwoGdGFyZ2V0GAMgASgLMiMua3VzaW50YS5pb3QuYWNjZXNzLnYxLkF0dHJpYnV0ZVJlZhI0CgV2YWx1ZRgEIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5BdHRyaWJ1dGVWYWx1ZSq/AgoQQ29tbWFuZEVycm9yQ29kZRIiCh5DT01NQU5EX0VSUk9SX0NPREVfVU5TUEVDSUZJRUQQABIjCh9DT01NQU5EX0VSUk9SX0NPREVfTk9UX0VOVElUTEVEEAESKgomQ09NTUFORF9FUlJPUl9DT0RFX0NPTlNUUkFJTlRfVklPTEFURUQQAhImCiJDT01NQU5EX0VSUk9SX0NPREVfSU5WQUxJRF9DT01NQU5EEAMSIgoeQ09NTUFORF9FUlJPUl9DT0RFX1VOUkVBQ0hBQkxFEAQSHgoaQ09NTUFORF9FUlJPUl9DT0RFX1RJTUVPVVQQBRIpCiVDT01NQU5EX0VSUk9SX0NPREVfUkVKRUNURURfQllfREVWSUNFEAYSHwobQ09NTUFORF9FUlJPUl9DT0RFX0lOVEVSTkFMEAdCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_device_v1_cluster_state, file_kusinta_iot_device_v1_matter_options, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_webrtc_v1_setpoint_mode]);
17
18
 
18
19
  /**
19
20
  * Describes the message kusinta.iot.webrtc.v1.ThermostatSetpointParams.
@@ -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
+