@kusinta/iot-schema 0.1.0-beta.9 → 0.2.0-beta.2

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 (46) hide show
  1. package/package.json +13 -2
  2. package/src/kusinta/iot/access/v1/acl_pb.d.ts +230 -11
  3. package/src/kusinta/iot/access/v1/acl_pb.js +25 -4
  4. package/src/kusinta/iot/access/v1/roles_pb.d.ts +95 -2
  5. package/src/kusinta/iot/access/v1/roles_pb.js +37 -1
  6. package/src/kusinta/iot/connector/v1/connector_pb.d.ts +60 -30
  7. package/src/kusinta/iot/connector/v1/connector_pb.js +12 -11
  8. package/src/kusinta/iot/connector/v1/connector_service_pb.d.ts +5 -5
  9. package/src/kusinta/iot/connector/v1/connector_service_pb.js +1 -1
  10. package/src/kusinta/iot/device/v1/cluster_state_pb.d.ts +238 -0
  11. package/src/kusinta/iot/device/v1/cluster_state_pb.js +54 -0
  12. package/src/kusinta/iot/device/v1/descriptor_pb.d.ts +37 -8
  13. package/src/kusinta/iot/device/v1/descriptor_pb.js +2 -1
  14. package/src/kusinta/iot/device/v1/device_event_pb.d.ts +162 -0
  15. package/src/kusinta/iot/device/v1/device_event_pb.js +45 -0
  16. package/src/kusinta/iot/device/v1/device_pb.d.ts +154 -28
  17. package/src/kusinta/iot/device/v1/device_pb.js +10 -2
  18. package/src/kusinta/iot/device/v1/matter_options_pb.d.ts +84 -0
  19. package/src/kusinta/iot/device/v1/matter_options_pb.js +91 -0
  20. package/src/kusinta/iot/device/v1/properties_pb.d.ts +228 -207
  21. package/src/kusinta/iot/device/v1/properties_pb.js +9 -1
  22. package/src/kusinta/iot/device/v1/property_update_pb.d.ts +197 -8
  23. package/src/kusinta/iot/device/v1/property_update_pb.js +20 -2
  24. package/src/kusinta/iot/registration/v1/registration_pb.d.ts +170 -0
  25. package/src/kusinta/iot/registration/v1/registration_pb.js +61 -0
  26. package/src/kusinta/iot/registration/v1/registration_service_pb.d.ts +34 -0
  27. package/src/kusinta/iot/registration/v1/registration_service_pb.js +19 -0
  28. package/src/kusinta/iot/signaling/v1/signaling_pb.d.ts +320 -0
  29. package/src/kusinta/iot/signaling/v1/signaling_pb.js +83 -0
  30. package/src/kusinta/iot/signaling/v1/signaling_service_pb.d.ts +34 -0
  31. package/src/kusinta/iot/signaling/v1/signaling_service_pb.js +19 -0
  32. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.d.ts +65 -47
  33. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.js +8 -7
  34. package/src/kusinta/iot/vendor/v1/vendor_options_pb.d.ts +50 -0
  35. package/src/kusinta/iot/vendor/v1/vendor_options_pb.js +53 -0
  36. package/src/kusinta/iot/webrtc/v1/app_token_pb.d.ts +152 -0
  37. package/src/kusinta/iot/webrtc/v1/app_token_pb.js +28 -0
  38. package/src/kusinta/iot/webrtc/v1/command_pb.d.ts +276 -39
  39. package/src/kusinta/iot/webrtc/v1/command_pb.js +28 -2
  40. package/src/kusinta/iot/webrtc/v1/device_state_pb.d.ts +76 -7
  41. package/src/kusinta/iot/webrtc/v1/device_state_pb.js +19 -4
  42. package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +371 -24
  43. package/src/kusinta/iot/webrtc/v1/envelope_pb.js +68 -5
  44. package/src/kusinta/iot/webrtc/v1/management_pb.d.ts +451 -0
  45. package/src/kusinta/iot/webrtc/v1/management_pb.js +106 -0
  46. package/src/kusinta/iot/webrtc/v1/permission_push_pb.d.ts +7 -1
@@ -6,10 +6,11 @@ import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
7
  import type { ConnectorId, DeviceId, GatewayId } from "../../identity/v1/identity_pb.js";
8
8
  import type { ConnectorTransport } from "../../common/v1/types_pb.js";
9
- import type { DeviceDescriptor } from "../../device/v1/descriptor_pb.js";
9
+ import type { Device } from "../../device/v1/device_pb.js";
10
10
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
11
11
  import type { PropertyUpdateBatch } from "../../device/v1/property_update_pb.js";
12
- import type { DeviceCommand } from "../../webrtc/v1/command_pb.js";
12
+ import type { DeviceEventBatch } from "../../device/v1/device_event_pb.js";
13
+ import type { AttributeWriteRequest, DeviceCommand } from "../../webrtc/v1/command_pb.js";
13
14
 
14
15
  /**
15
16
  * Describes the file kusinta/iot/connector/v1/connector.proto.
@@ -69,9 +70,9 @@ export declare type ConnectorHandshake = Message<"kusinta.iot.connector.v1.Conne
69
70
  info?: ConnectorInfo | undefined;
70
71
 
71
72
  /**
72
- * @generated from field: repeated kusinta.iot.device.v1.DeviceDescriptor known_devices = 2;
73
+ * @generated from field: repeated kusinta.iot.device.v1.Device known_devices = 2;
73
74
  */
74
- knownDevices: DeviceDescriptor[];
75
+ knownDevices: Device[];
75
76
  };
76
77
 
77
78
  /**
@@ -107,13 +108,20 @@ export declare type HandshakeAck = Message<"kusinta.iot.connector.v1.HandshakeAc
107
108
  export declare const HandshakeAckSchema: GenMessage<HandshakeAck>;
108
109
 
109
110
  /**
111
+ * A device the connector has found. Carries the full Device, not just its descriptor,
112
+ * because a device's endpoints are what say which Matter device types it presents — and
113
+ * without them the gateway cannot resolve any PropertyUpdate the device goes on to send.
114
+ *
115
+ * Properties may be unset on every endpoint; that means the device exists and has
116
+ * reported nothing yet, which is the normal state at announcement.
117
+ *
110
118
  * @generated from message kusinta.iot.connector.v1.DeviceAnnouncement
111
119
  */
112
120
  export declare type DeviceAnnouncement = Message<"kusinta.iot.connector.v1.DeviceAnnouncement"> & {
113
121
  /**
114
- * @generated from field: kusinta.iot.device.v1.DeviceDescriptor descriptor = 1;
122
+ * @generated from field: kusinta.iot.device.v1.Device device = 2;
115
123
  */
116
- descriptor?: DeviceDescriptor | undefined;
124
+ device?: Device | undefined;
117
125
  };
118
126
 
119
127
  /**
@@ -202,11 +210,11 @@ export declare type GatewayError = Message<"kusinta.iot.connector.v1.GatewayErro
202
210
  message: string;
203
211
 
204
212
  /**
205
- * non-empty if the error is in response to a command
213
+ * non-empty if the error answers a command or a write
206
214
  *
207
- * @generated from field: string command_id = 3;
215
+ * @generated from field: string request_id = 3;
208
216
  */
209
- commandId: string;
217
+ requestId: string;
210
218
  };
211
219
 
212
220
  /**
@@ -216,13 +224,20 @@ export declare type GatewayError = Message<"kusinta.iot.connector.v1.GatewayErro
216
224
  export declare const GatewayErrorSchema: GenMessage<GatewayError>;
217
225
 
218
226
  /**
219
- * @generated from message kusinta.iot.connector.v1.CommandResult
227
+ * A connector's answer to an executed command OR attribute write. One message for both:
228
+ * the two operations differ in what they do to a device, not in how a connector reports
229
+ * having done it, and request_id says which request this answers either way.
230
+ *
231
+ * @generated from message kusinta.iot.connector.v1.ConnectorCommandResult
220
232
  */
221
- export declare type CommandResult = Message<"kusinta.iot.connector.v1.CommandResult"> & {
233
+ export declare type ConnectorCommandResult = Message<"kusinta.iot.connector.v1.ConnectorCommandResult"> & {
222
234
  /**
223
- * @generated from field: string command_id = 1;
235
+ * Was command_id. Renamed with webrtc.v1.DeviceCommand.request_id, which it mirrors, and
236
+ * because it now correlates writes as well as commands.
237
+ *
238
+ * @generated from field: string request_id = 1;
224
239
  */
225
- commandId: string;
240
+ requestId: string;
226
241
 
227
242
  /**
228
243
  * @generated from field: bool success = 2;
@@ -241,15 +256,15 @@ export declare type CommandResult = Message<"kusinta.iot.connector.v1.CommandRes
241
256
  };
242
257
 
243
258
  /**
244
- * Describes the message kusinta.iot.connector.v1.CommandResult.
245
- * Use `create(CommandResultSchema)` to create a new message.
259
+ * Describes the message kusinta.iot.connector.v1.ConnectorCommandResult.
260
+ * Use `create(ConnectorCommandResultSchema)` to create a new message.
246
261
  */
247
- export declare const CommandResultSchema: GenMessage<CommandResult>;
262
+ export declare const ConnectorCommandResultSchema: GenMessage<ConnectorCommandResult>;
248
263
 
249
264
  /**
250
- * @generated from message kusinta.iot.connector.v1.ConnectRequest
265
+ * @generated from message kusinta.iot.connector.v1.SessionRequest
251
266
  */
252
- export declare type ConnectRequest = Message<"kusinta.iot.connector.v1.ConnectRequest"> & {
267
+ export declare type SessionRequest = Message<"kusinta.iot.connector.v1.SessionRequest"> & {
253
268
  /**
254
269
  * @generated from field: string message_id = 1;
255
270
  */
@@ -261,7 +276,7 @@ export declare type ConnectRequest = Message<"kusinta.iot.connector.v1.ConnectRe
261
276
  sentAt?: Timestamp | undefined;
262
277
 
263
278
  /**
264
- * @generated from oneof kusinta.iot.connector.v1.ConnectRequest.payload
279
+ * @generated from oneof kusinta.iot.connector.v1.SessionRequest.payload
265
280
  */
266
281
  payload: {
267
282
  /**
@@ -289,9 +304,9 @@ export declare type ConnectRequest = Message<"kusinta.iot.connector.v1.ConnectRe
289
304
  case: "deviceRemoved";
290
305
  } | {
291
306
  /**
292
- * @generated from field: kusinta.iot.connector.v1.CommandResult command_result = 7;
307
+ * @generated from field: kusinta.iot.connector.v1.ConnectorCommandResult command_result = 7;
293
308
  */
294
- value: CommandResult;
309
+ value: ConnectorCommandResult;
295
310
  case: "commandResult";
296
311
  } | {
297
312
  /**
@@ -299,19 +314,25 @@ export declare type ConnectRequest = Message<"kusinta.iot.connector.v1.ConnectRe
299
314
  */
300
315
  value: HeartBeat;
301
316
  case: "heartbeat";
317
+ } | {
318
+ /**
319
+ * @generated from field: kusinta.iot.device.v1.DeviceEventBatch device_events = 9;
320
+ */
321
+ value: DeviceEventBatch;
322
+ case: "deviceEvents";
302
323
  } | { case: undefined; value?: undefined };
303
324
  };
304
325
 
305
326
  /**
306
- * Describes the message kusinta.iot.connector.v1.ConnectRequest.
307
- * Use `create(ConnectRequestSchema)` to create a new message.
327
+ * Describes the message kusinta.iot.connector.v1.SessionRequest.
328
+ * Use `create(SessionRequestSchema)` to create a new message.
308
329
  */
309
- export declare const ConnectRequestSchema: GenMessage<ConnectRequest>;
330
+ export declare const SessionRequestSchema: GenMessage<SessionRequest>;
310
331
 
311
332
  /**
312
- * @generated from message kusinta.iot.connector.v1.ConnectResponse
333
+ * @generated from message kusinta.iot.connector.v1.SessionResponse
313
334
  */
314
- export declare type ConnectResponse = Message<"kusinta.iot.connector.v1.ConnectResponse"> & {
335
+ export declare type SessionResponse = Message<"kusinta.iot.connector.v1.SessionResponse"> & {
315
336
  /**
316
337
  * @generated from field: string message_id = 1;
317
338
  */
@@ -323,7 +344,7 @@ export declare type ConnectResponse = Message<"kusinta.iot.connector.v1.ConnectR
323
344
  sentAt?: Timestamp | undefined;
324
345
 
325
346
  /**
326
- * @generated from oneof kusinta.iot.connector.v1.ConnectResponse.payload
347
+ * @generated from oneof kusinta.iot.connector.v1.SessionResponse.payload
327
348
  */
328
349
  payload: {
329
350
  /**
@@ -355,12 +376,21 @@ export declare type ConnectResponse = Message<"kusinta.iot.connector.v1.ConnectR
355
376
  */
356
377
  value: DeviceCommand;
357
378
  case: "executeCommand";
379
+ } | {
380
+ /**
381
+ * The connector-leg half of PERMISSION_ACTION_WRITE. A sibling case rather than another
382
+ * meaning overloaded onto execute_command, which is the mistake this replaces.
383
+ *
384
+ * @generated from field: kusinta.iot.webrtc.v1.AttributeWriteRequest execute_attribute_write = 9;
385
+ */
386
+ value: AttributeWriteRequest;
387
+ case: "executeAttributeWrite";
358
388
  } | { case: undefined; value?: undefined };
359
389
  };
360
390
 
361
391
  /**
362
- * Describes the message kusinta.iot.connector.v1.ConnectResponse.
363
- * Use `create(ConnectResponseSchema)` to create a new message.
392
+ * Describes the message kusinta.iot.connector.v1.SessionResponse.
393
+ * Use `create(SessionResponseSchema)` to create a new message.
364
394
  */
365
- export declare const ConnectResponseSchema: GenMessage<ConnectResponse>;
395
+ export declare const SessionResponseSchema: GenMessage<SessionResponse>;
366
396
 
@@ -6,7 +6,8 @@ import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
6
  import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
7
  import { file_kusinta_iot_common_v1_types } from "../../common/v1/types_pb.js";
8
8
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
9
- import { file_kusinta_iot_device_v1_descriptor } from "../../device/v1/descriptor_pb.js";
9
+ import { file_kusinta_iot_device_v1_device } from "../../device/v1/device_pb.js";
10
+ import { file_kusinta_iot_device_v1_device_event } from "../../device/v1/device_event_pb.js";
10
11
  import { file_kusinta_iot_device_v1_property_update } from "../../device/v1/property_update_pb.js";
11
12
  import { file_kusinta_iot_webrtc_v1_command } from "../../webrtc/v1/command_pb.js";
12
13
 
@@ -14,7 +15,7 @@ import { file_kusinta_iot_webrtc_v1_command } from "../../webrtc/v1/command_pb.j
14
15
  * Describes the file kusinta/iot/connector/v1/connector.proto.
15
16
  */
16
17
  export const file_kusinta_iot_connector_v1_connector = /*@__PURE__*/
17
- fileDesc("CihrdXNpbnRhL2lvdC9jb25uZWN0b3IvdjEvY29ubmVjdG9yLnByb3RvEhhrdXNpbnRhLmlvdC5jb25uZWN0b3IudjEi5QEKDUNvbm5lY3RvckluZm8SOgoMY29ubmVjdG9yX2lkGAEgASgLMiQua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuQ29ubmVjdG9ySWQSFAoMZGlzcGxheV9uYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAkSPAoJdHJhbnNwb3J0GAQgASgOMikua3VzaW50YS5pb3QuY29tbW9uLnYxLkNvbm5lY3RvclRyYW5zcG9ydBIQCghlbmRwb2ludBgFIAEoCRIhChlzdXBwb3J0ZWRfZGV2aWNlX3R5cGVfaWRzGAYgAygNIosBChJDb25uZWN0b3JIYW5kc2hha2USNQoEaW5mbxgBIAEoCzInLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5Db25uZWN0b3JJbmZvEj4KDWtub3duX2RldmljZXMYAiADKAsyJy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRGV2aWNlRGVzY3JpcHRvciJoCgxIYW5kc2hha2VBY2sSEAoIYWNjZXB0ZWQYASABKAgSDgoGcmVhc29uGAIgASgJEjYKCmdhdGV3YXlfaWQYAyABKAsyIi5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5HYXRld2F5SWQiUQoSRGV2aWNlQW5ub3VuY2VtZW50EjsKCmRlc2NyaXB0b3IYASABKAsyJy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRGV2aWNlRGVzY3JpcHRvciJVCg1EZXZpY2VSZW1vdmFsEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEg4KBnJlYXNvbhgCIAEoCSILCglIZWFydEJlYXQiRwoPU3Vic2NyaWJlRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIkkKEVVuc3Vic2NyaWJlRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIkEKDEdhdGV3YXlFcnJvchIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKY29tbWFuZF9pZBgDIAEoCSKdAQoNQ29tbWFuZFJlc3VsdBISCgpjb21tYW5kX2lkGAEgASgJEg8KB3N1Y2Nlc3MYAiABKAgSNQoFZXJyb3IYAyABKAsyJi5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuR2F0ZXdheUVycm9yEjAKDGNvbXBsZXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAi8AMKDkNvbm5lY3RSZXF1ZXN0EhIKCm1lc3NhZ2VfaWQYASABKAkSKwoHc2VudF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASQQoJaGFuZHNoYWtlGAMgASgLMiwua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkNvbm5lY3RvckhhbmRzaGFrZUgAEkUKD3Byb3BlcnR5X3VwZGF0ZRgEIAEoCzIqLmt1c2ludGEuaW90LmRldmljZS52MS5Qcm9wZXJ0eVVwZGF0ZUJhdGNoSAASSAoQZGV2aWNlX2Fubm91bmNlZBgFIAEoCzIsLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5EZXZpY2VBbm5vdW5jZW1lbnRIABJBCg5kZXZpY2VfcmVtb3ZlZBgGIAEoCzInLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5EZXZpY2VSZW1vdmFsSAASQQoOY29tbWFuZF9yZXN1bHQYByABKAsyJy5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuQ29tbWFuZFJlc3VsdEgAEjgKCWhlYXJ0YmVhdBgIIAEoCzIjLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5IZWFydEJlYXRIAEIJCgdwYXlsb2FkIqIDCg9Db25uZWN0UmVzcG9uc2USEgoKbWVzc2FnZV9pZBgBIAEoCRIrCgdzZW50X2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI/Cg1oYW5kc2hha2VfYWNrGAMgASgLMiYua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkhhbmRzaGFrZUFja0gAEj4KCXN1YnNjcmliZRgFIAEoCzIpLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5TdWJzY3JpYmVEZXZpY2VIABJCCgt1bnN1YnNjcmliZRgGIAEoCzIrLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5VbnN1YnNjcmliZURldmljZUgAEjcKBWVycm9yGAcgASgLMiYua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkdhdGV3YXlFcnJvckgAEj8KD2V4ZWN1dGVfY29tbWFuZBgIIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VDb21tYW5kSABCCQoHcGF5bG9hZEoECAQQBUICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_device_v1_descriptor, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_webrtc_v1_command]);
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
19
 
19
20
  /**
20
21
  * Describes the message kusinta.iot.connector.v1.ConnectorInfo.
@@ -80,23 +81,23 @@ export const GatewayErrorSchema = /*@__PURE__*/
80
81
  messageDesc(file_kusinta_iot_connector_v1_connector, 8);
81
82
 
82
83
  /**
83
- * Describes the message kusinta.iot.connector.v1.CommandResult.
84
- * Use `create(CommandResultSchema)` to create a new message.
84
+ * Describes the message kusinta.iot.connector.v1.ConnectorCommandResult.
85
+ * Use `create(ConnectorCommandResultSchema)` to create a new message.
85
86
  */
86
- export const CommandResultSchema = /*@__PURE__*/
87
+ export const ConnectorCommandResultSchema = /*@__PURE__*/
87
88
  messageDesc(file_kusinta_iot_connector_v1_connector, 9);
88
89
 
89
90
  /**
90
- * Describes the message kusinta.iot.connector.v1.ConnectRequest.
91
- * Use `create(ConnectRequestSchema)` to create a new message.
91
+ * Describes the message kusinta.iot.connector.v1.SessionRequest.
92
+ * Use `create(SessionRequestSchema)` to create a new message.
92
93
  */
93
- export const ConnectRequestSchema = /*@__PURE__*/
94
+ export const SessionRequestSchema = /*@__PURE__*/
94
95
  messageDesc(file_kusinta_iot_connector_v1_connector, 10);
95
96
 
96
97
  /**
97
- * Describes the message kusinta.iot.connector.v1.ConnectResponse.
98
- * Use `create(ConnectResponseSchema)` to create a new message.
98
+ * Describes the message kusinta.iot.connector.v1.SessionResponse.
99
+ * Use `create(SessionResponseSchema)` to create a new message.
99
100
  */
100
- export const ConnectResponseSchema = /*@__PURE__*/
101
+ export const SessionResponseSchema = /*@__PURE__*/
101
102
  messageDesc(file_kusinta_iot_connector_v1_connector, 11);
102
103
 
@@ -3,7 +3,7 @@
3
3
  /* eslint-disable */
4
4
 
5
5
  import type { GenFile, GenService } from "@bufbuild/protobuf/codegenv2";
6
- import type { ConnectRequestSchema, ConnectResponseSchema } from "./connector_pb.js";
6
+ import type { SessionRequestSchema, SessionResponseSchema } from "./connector_pb.js";
7
7
 
8
8
  /**
9
9
  * Describes the file kusinta/iot/connector/v1/connector_service.proto.
@@ -18,12 +18,12 @@ export declare const file_kusinta_iot_connector_v1_connector_service: GenFile;
18
18
  */
19
19
  export declare const ConnectorGatewayService: GenService<{
20
20
  /**
21
- * @generated from rpc kusinta.iot.connector.v1.ConnectorGatewayService.Connect
21
+ * @generated from rpc kusinta.iot.connector.v1.ConnectorGatewayService.Session
22
22
  */
23
- connect: {
23
+ session: {
24
24
  methodKind: "bidi_streaming";
25
- input: typeof ConnectRequestSchema;
26
- output: typeof ConnectResponseSchema;
25
+ input: typeof SessionRequestSchema;
26
+ output: typeof SessionResponseSchema;
27
27
  },
28
28
  }>;
29
29
 
@@ -9,7 +9,7 @@ import { file_kusinta_iot_connector_v1_connector } from "./connector_pb.js";
9
9
  * Describes the file kusinta/iot/connector/v1/connector_service.proto.
10
10
  */
11
11
  export const file_kusinta_iot_connector_v1_connector_service = /*@__PURE__*/
12
- fileDesc("CjBrdXNpbnRhL2lvdC9jb25uZWN0b3IvdjEvY29ubmVjdG9yX3NlcnZpY2UucHJvdG8SGGt1c2ludGEuaW90LmNvbm5lY3Rvci52MTJ9ChdDb25uZWN0b3JHYXRld2F5U2VydmljZRJiCgdDb25uZWN0Eigua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkNvbm5lY3RSZXF1ZXN0Gikua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkNvbm5lY3RSZXNwb25zZSgBMAFCAkgBYgZwcm90bzM", [file_kusinta_iot_connector_v1_connector]);
12
+ fileDesc("CjBrdXNpbnRhL2lvdC9jb25uZWN0b3IvdjEvY29ubmVjdG9yX3NlcnZpY2UucHJvdG8SGGt1c2ludGEuaW90LmNvbm5lY3Rvci52MTJ9ChdDb25uZWN0b3JHYXRld2F5U2VydmljZRJiCgdTZXNzaW9uEigua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLlNlc3Npb25SZXF1ZXN0Gikua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLlNlc3Npb25SZXNwb25zZSgBMAFCAkgBYgZwcm90bzM", [file_kusinta_iot_connector_v1_connector]);
13
13
 
14
14
  /**
15
15
  * ConnectorGatewayService: connector dials the gateway on startup.
@@ -0,0 +1,238 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/device/v1/cluster_state.proto (package kusinta.iot.device.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
+ import type { Message } from "@bufbuild/protobuf";
7
+
8
+ /**
9
+ * Describes the file kusinta/iot/device/v1/cluster_state.proto.
10
+ */
11
+ export declare const file_kusinta_iot_device_v1_cluster_state: GenFile;
12
+
13
+ /**
14
+ * Matter null. Distinct from a field being absent: Matter types many attributes as
15
+ * nullable, where null is a reported value meaning "not currently known" — a thermostat
16
+ * that cannot read its local temperature reports null, which is not the same as never
17
+ * having reported at all.
18
+ *
19
+ * @generated from message kusinta.iot.device.v1.NullValue
20
+ */
21
+ export declare type NullValue = Message<"kusinta.iot.device.v1.NullValue"> & {
22
+ };
23
+
24
+ /**
25
+ * Describes the message kusinta.iot.device.v1.NullValue.
26
+ * Use `create(NullValueSchema)` to create a new message.
27
+ */
28
+ export declare const NullValueSchema: GenMessage<NullValue>;
29
+
30
+ /**
31
+ * A Matter attribute value of any shape, including the ones a scalar cannot carry.
32
+ *
33
+ * Self-describing rather than Matter's own TLV as opaque bytes: an app that cannot decode
34
+ * a value cannot show it, and TLV would make the generic path useful only to the gateway.
35
+ * The cost is a recursive message; the benefit is that an attribute this schema has never
36
+ * heard of is still renderable.
37
+ *
38
+ * Widths are deliberately wider than most attributes need — sint64 covers every signed
39
+ * Matter integer type and uint64 every unsigned one, so a generic carrier never has to
40
+ * know an attribute's declared width to carry its value.
41
+ *
42
+ * @generated from message kusinta.iot.device.v1.AttributeValue
43
+ */
44
+ export declare type AttributeValue = Message<"kusinta.iot.device.v1.AttributeValue"> & {
45
+ /**
46
+ * @generated from oneof kusinta.iot.device.v1.AttributeValue.value
47
+ */
48
+ value: {
49
+ /**
50
+ * @generated from field: bool bool_value = 1;
51
+ */
52
+ value: boolean;
53
+ case: "boolValue";
54
+ } | {
55
+ /**
56
+ * @generated from field: sint64 int_value = 2;
57
+ */
58
+ value: bigint;
59
+ case: "intValue";
60
+ } | {
61
+ /**
62
+ * @generated from field: uint64 uint_value = 3;
63
+ */
64
+ value: bigint;
65
+ case: "uintValue";
66
+ } | {
67
+ /**
68
+ * @generated from field: double double_value = 4;
69
+ */
70
+ value: number;
71
+ case: "doubleValue";
72
+ } | {
73
+ /**
74
+ * @generated from field: string string_value = 5;
75
+ */
76
+ value: string;
77
+ case: "stringValue";
78
+ } | {
79
+ /**
80
+ * @generated from field: bytes bytes_value = 6;
81
+ */
82
+ value: Uint8Array;
83
+ case: "bytesValue";
84
+ } | {
85
+ /**
86
+ * @generated from field: kusinta.iot.device.v1.AttributeValueList list_value = 7;
87
+ */
88
+ value: AttributeValueList;
89
+ case: "listValue";
90
+ } | {
91
+ /**
92
+ * @generated from field: kusinta.iot.device.v1.AttributeValueStruct struct_value = 8;
93
+ */
94
+ value: AttributeValueStruct;
95
+ case: "structValue";
96
+ } | {
97
+ /**
98
+ * @generated from field: kusinta.iot.device.v1.NullValue null_value = 9;
99
+ */
100
+ value: NullValue;
101
+ case: "nullValue";
102
+ } | { case: undefined; value?: undefined };
103
+ };
104
+
105
+ /**
106
+ * Describes the message kusinta.iot.device.v1.AttributeValue.
107
+ * Use `create(AttributeValueSchema)` to create a new message.
108
+ */
109
+ export declare const AttributeValueSchema: GenMessage<AttributeValue>;
110
+
111
+ /**
112
+ * @generated from message kusinta.iot.device.v1.AttributeValueList
113
+ */
114
+ export declare type AttributeValueList = Message<"kusinta.iot.device.v1.AttributeValueList"> & {
115
+ /**
116
+ * @generated from field: repeated kusinta.iot.device.v1.AttributeValue values = 1;
117
+ */
118
+ values: AttributeValue[];
119
+ };
120
+
121
+ /**
122
+ * Describes the message kusinta.iot.device.v1.AttributeValueList.
123
+ * Use `create(AttributeValueListSchema)` to create a new message.
124
+ */
125
+ export declare const AttributeValueListSchema: GenMessage<AttributeValueList>;
126
+
127
+ /**
128
+ * Matter struct fields are addressed by numeric context tag, not by name, so the map is
129
+ * keyed by tag. A consumer that knows the struct's definition reads the tags it wants; one
130
+ * that does not can still carry and re-emit the whole thing.
131
+ *
132
+ * @generated from message kusinta.iot.device.v1.AttributeValueStruct
133
+ */
134
+ export declare type AttributeValueStruct = Message<"kusinta.iot.device.v1.AttributeValueStruct"> & {
135
+ /**
136
+ * @generated from field: map<uint32, kusinta.iot.device.v1.AttributeValue> fields = 1;
137
+ */
138
+ fields: { [key: number]: AttributeValue };
139
+ };
140
+
141
+ /**
142
+ * Describes the message kusinta.iot.device.v1.AttributeValueStruct.
143
+ * Use `create(AttributeValueStructSchema)` to create a new message.
144
+ */
145
+ export declare const AttributeValueStructSchema: GenMessage<AttributeValueStruct>;
146
+
147
+ /**
148
+ * @generated from message kusinta.iot.device.v1.AttributeState
149
+ */
150
+ export declare type AttributeState = Message<"kusinta.iot.device.v1.AttributeState"> & {
151
+ /**
152
+ * @generated from field: uint32 attribute_id = 1;
153
+ */
154
+ attributeId: number;
155
+
156
+ /**
157
+ * @generated from field: kusinta.iot.device.v1.AttributeValue value = 2;
158
+ */
159
+ value?: AttributeValue | undefined;
160
+ };
161
+
162
+ /**
163
+ * Describes the message kusinta.iot.device.v1.AttributeState.
164
+ * Use `create(AttributeStateSchema)` to create a new message.
165
+ */
166
+ export declare const AttributeStateSchema: GenMessage<AttributeState>;
167
+
168
+ /**
169
+ * One cluster hosted by an endpoint: what it is, what it supports, and any attribute value
170
+ * that has no typed home.
171
+ *
172
+ * An entry exists for EVERY cluster the endpoint hosts, including clusters this schema
173
+ * models with a typed properties message. That is not a contradiction of the
174
+ * one-value-one-place rule below — cluster_revision, feature_map and
175
+ * accepted_command_ids describe the cluster itself and have nowhere else to live.
176
+ *
177
+ * attributes is where the rule applies: it holds ONLY the attribute values that no typed
178
+ * field covers. An attribute the schema models is carried in its typed field and MUST NOT
179
+ * be repeated here — a value that exists in two places is a value that can disagree with
180
+ * itself.
181
+ *
182
+ * This is what lets an endpoint report something useful when its device type is not
183
+ * modelled, or when it carries a cluster beyond its device type's set, which the Matter
184
+ * specification explicitly permits.
185
+ *
186
+ * @generated from message kusinta.iot.device.v1.ClusterState
187
+ */
188
+ export declare type ClusterState = Message<"kusinta.iot.device.v1.ClusterState"> & {
189
+ /**
190
+ * @generated from field: uint32 cluster_id = 1;
191
+ */
192
+ clusterId: number;
193
+
194
+ /**
195
+ * Matter's ClusterRevision. Which revision of the cluster definition the device
196
+ * implements.
197
+ *
198
+ * @generated from field: optional uint32 cluster_revision = 2;
199
+ */
200
+ clusterRevision?: number | undefined;
201
+
202
+ /**
203
+ * Matter's FeatureMap: a bitmap of the optional features this cluster supports on this
204
+ * endpoint.
205
+ *
206
+ * Worth carrying even for fully-modelled clusters, because it resolves an ambiguity the
207
+ * presence rule cannot. properties.proto says an absent field means "never reported" —
208
+ * but without a FeatureMap, absent is also what an attribute the device does not
209
+ * implement looks like. With it, a consumer can tell "not supported" from "not yet
210
+ * seen".
211
+ *
212
+ * @generated from field: optional uint32 feature_map = 3;
213
+ */
214
+ featureMap?: number | undefined;
215
+
216
+ /**
217
+ * Attribute values with no typed field. See the message comment.
218
+ *
219
+ * @generated from field: repeated kusinta.iot.device.v1.AttributeState attributes = 4;
220
+ */
221
+ attributes: AttributeState[];
222
+
223
+ /**
224
+ * Matter's AcceptedCommandList: which commands this cluster accepts on this endpoint.
225
+ * Without it a consumer must infer a device's capabilities from its device type and
226
+ * discover the truth by sending a command and watching it fail.
227
+ *
228
+ * @generated from field: repeated uint32 accepted_command_ids = 5;
229
+ */
230
+ acceptedCommandIds: number[];
231
+ };
232
+
233
+ /**
234
+ * Describes the message kusinta.iot.device.v1.ClusterState.
235
+ * Use `create(ClusterStateSchema)` to create a new message.
236
+ */
237
+ export declare const ClusterStateSchema: GenMessage<ClusterState>;
238
+
@@ -0,0 +1,54 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/device/v1/cluster_state.proto (package kusinta.iot.device.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
+
7
+ /**
8
+ * Describes the file kusinta/iot/device/v1/cluster_state.proto.
9
+ */
10
+ export const file_kusinta_iot_device_v1_cluster_state = /*@__PURE__*/
11
+ fileDesc("CilrdXNpbnRhL2lvdC9kZXZpY2UvdjEvY2x1c3Rlcl9zdGF0ZS5wcm90bxIVa3VzaW50YS5pb3QuZGV2aWNlLnYxIgsKCU51bGxWYWx1ZSLfAgoOQXR0cmlidXRlVmFsdWUSFAoKYm9vbF92YWx1ZRgBIAEoCEgAEhMKCWludF92YWx1ZRgCIAEoEkgAEhQKCnVpbnRfdmFsdWUYAyABKARIABIWCgxkb3VibGVfdmFsdWUYBCABKAFIABIWCgxzdHJpbmdfdmFsdWUYBSABKAlIABIVCgtieXRlc192YWx1ZRgGIAEoDEgAEj8KCmxpc3RfdmFsdWUYByABKAsyKS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuQXR0cmlidXRlVmFsdWVMaXN0SAASQwoMc3RydWN0X3ZhbHVlGAggASgLMisua3VzaW50YS5pb3QuZGV2aWNlLnYxLkF0dHJpYnV0ZVZhbHVlU3RydWN0SAASNgoKbnVsbF92YWx1ZRgJIAEoCzIgLmt1c2ludGEuaW90LmRldmljZS52MS5OdWxsVmFsdWVIAEIHCgV2YWx1ZSJLChJBdHRyaWJ1dGVWYWx1ZUxpc3QSNQoGdmFsdWVzGAEgAygLMiUua3VzaW50YS5pb3QuZGV2aWNlLnYxLkF0dHJpYnV0ZVZhbHVlIrUBChRBdHRyaWJ1dGVWYWx1ZVN0cnVjdBJHCgZmaWVsZHMYASADKAsyNy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuQXR0cmlidXRlVmFsdWVTdHJ1Y3QuRmllbGRzRW50cnkaVAoLRmllbGRzRW50cnkSCwoDa2V5GAEgASgNEjQKBXZhbHVlGAIgASgLMiUua3VzaW50YS5pb3QuZGV2aWNlLnYxLkF0dHJpYnV0ZVZhbHVlOgI4ASJcCg5BdHRyaWJ1dGVTdGF0ZRIUCgxhdHRyaWJ1dGVfaWQYASABKA0SNAoFdmFsdWUYAiABKAsyJS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuQXR0cmlidXRlVmFsdWUi2QEKDENsdXN0ZXJTdGF0ZRISCgpjbHVzdGVyX2lkGAEgASgNEh0KEGNsdXN0ZXJfcmV2aXNpb24YAiABKA1IAIgBARIYCgtmZWF0dXJlX21hcBgDIAEoDUgBiAEBEjkKCmF0dHJpYnV0ZXMYBCADKAsyJS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuQXR0cmlidXRlU3RhdGUSHAoUYWNjZXB0ZWRfY29tbWFuZF9pZHMYBSADKA1CEwoRX2NsdXN0ZXJfcmV2aXNpb25CDgoMX2ZlYXR1cmVfbWFwQgJIAWIGcHJvdG8z");
12
+
13
+ /**
14
+ * Describes the message kusinta.iot.device.v1.NullValue.
15
+ * Use `create(NullValueSchema)` to create a new message.
16
+ */
17
+ export const NullValueSchema = /*@__PURE__*/
18
+ messageDesc(file_kusinta_iot_device_v1_cluster_state, 0);
19
+
20
+ /**
21
+ * Describes the message kusinta.iot.device.v1.AttributeValue.
22
+ * Use `create(AttributeValueSchema)` to create a new message.
23
+ */
24
+ export const AttributeValueSchema = /*@__PURE__*/
25
+ messageDesc(file_kusinta_iot_device_v1_cluster_state, 1);
26
+
27
+ /**
28
+ * Describes the message kusinta.iot.device.v1.AttributeValueList.
29
+ * Use `create(AttributeValueListSchema)` to create a new message.
30
+ */
31
+ export const AttributeValueListSchema = /*@__PURE__*/
32
+ messageDesc(file_kusinta_iot_device_v1_cluster_state, 2);
33
+
34
+ /**
35
+ * Describes the message kusinta.iot.device.v1.AttributeValueStruct.
36
+ * Use `create(AttributeValueStructSchema)` to create a new message.
37
+ */
38
+ export const AttributeValueStructSchema = /*@__PURE__*/
39
+ messageDesc(file_kusinta_iot_device_v1_cluster_state, 3);
40
+
41
+ /**
42
+ * Describes the message kusinta.iot.device.v1.AttributeState.
43
+ * Use `create(AttributeStateSchema)` to create a new message.
44
+ */
45
+ export const AttributeStateSchema = /*@__PURE__*/
46
+ messageDesc(file_kusinta_iot_device_v1_cluster_state, 4);
47
+
48
+ /**
49
+ * Describes the message kusinta.iot.device.v1.ClusterState.
50
+ * Use `create(ClusterStateSchema)` to create a new message.
51
+ */
52
+ export const ClusterStateSchema = /*@__PURE__*/
53
+ messageDesc(file_kusinta_iot_device_v1_cluster_state, 5);
54
+
@@ -7,6 +7,7 @@ import type { Message } from "@bufbuild/protobuf";
7
7
  import type { ConnectorId, DeviceId, SpaceId, UserId } from "../../identity/v1/identity_pb.js";
8
8
  import type { DeviceLifecycleState, DeviceOwnershipType } from "../../common/v1/types_pb.js";
9
9
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
10
+ import type { HomematicDeviceIdentity } from "../../vendor/homematic/v1/homematic_pb.js";
10
11
 
11
12
  /**
12
13
  * Describes the file kusinta/iot/device/v1/descriptor.proto.
@@ -14,7 +15,10 @@ import type { Timestamp } from "@bufbuild/protobuf/wkt";
14
15
  export declare const file_kusinta_iot_device_v1_descriptor: GenFile;
15
16
 
16
17
  /**
17
- * DeviceDescriptor holds identity and Matter BasicInformation cluster fields.
18
+ * DeviceDescriptor holds identity and Matter BasicInformation cluster fields — what the
19
+ * device IS, not what it reports. The device types it presents are one per endpoint, in
20
+ * Device.endpoints.
21
+ *
18
22
  * Fields 1-19 are stable Matter-aligned fields. Fields 20+ are ownership/lifecycle.
19
23
  *
20
24
  * @generated from message kusinta.iot.device.v1.DeviceDescriptor
@@ -25,13 +29,6 @@ export declare type DeviceDescriptor = Message<"kusinta.iot.device.v1.DeviceDesc
25
29
  */
26
30
  deviceId?: DeviceId | undefined;
27
31
 
28
- /**
29
- * Matter 1.5.1 device type ID (e.g. 0x0301 = Thermostat, 0x0302 = TemperatureSensor)
30
- *
31
- * @generated from field: uint32 matter_device_type_id = 2;
32
- */
33
- matterDeviceTypeId: number;
34
-
35
32
  /**
36
33
  * Matter BasicInformation cluster attributes
37
34
  *
@@ -105,6 +102,38 @@ export declare type DeviceDescriptor = Message<"kusinta.iot.device.v1.DeviceDesc
105
102
  * @generated from field: google.protobuf.Timestamp claimed_at = 16;
106
103
  */
107
104
  claimedAt?: Timestamp | undefined;
105
+
106
+ /**
107
+ * Who the device is in its vendor's own terms — an address and a model string that
108
+ * identify the PHYSICAL device, not one of its endpoints. It belongs here rather than
109
+ * beside the per-endpoint vendor readings, which would duplicate it onto every
110
+ * endpoint with no rule saying whether a producer should.
111
+ *
112
+ * Absent for a device with no vendor extension, which is most of them.
113
+ * Set when this device sits behind a Matter bridge, naming the bridge's own Device.
114
+ *
115
+ * A bridge is one Matter node exposing many devices, and each gets its own DeviceId here
116
+ * rather than becoming an endpoint of the bridge: a user perceives twelve bridged bulbs
117
+ * as twelve things, and one row that cannot be placed in twelve rooms is not usable.
118
+ *
119
+ * So a Device is a Matter node OR one device behind one — the equivalence is deliberately
120
+ * not exact, and this field is how a consumer tells which. Absent means the device is
121
+ * reached directly.
122
+ *
123
+ * @generated from field: optional kusinta.iot.identity.v1.DeviceId bridged_by = 19;
124
+ */
125
+ bridgedBy?: DeviceId | undefined;
126
+
127
+ /**
128
+ * @generated from oneof kusinta.iot.device.v1.DeviceDescriptor.vendor_identity
129
+ */
130
+ vendorIdentity: {
131
+ /**
132
+ * @generated from field: kusinta.iot.vendor.homematic.v1.HomematicDeviceIdentity homematic = 18;
133
+ */
134
+ value: HomematicDeviceIdentity;
135
+ case: "homematic";
136
+ } | { case: undefined; value?: undefined };
108
137
  };
109
138
 
110
139
  /**