@kusinta/iot-schema 0.2.0-beta.4 → 0.2.0-beta.40

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 (67) hide show
  1. package/package.json +12 -1
  2. package/src/kusinta/iot/access/v1/acl_pb.d.ts +119 -2
  3. package/src/kusinta/iot/access/v1/acl_pb.js +20 -3
  4. package/src/kusinta/iot/access/v1/roles_pb.d.ts +131 -4
  5. package/src/kusinta/iot/access/v1/roles_pb.js +110 -5
  6. package/src/kusinta/iot/accountlink/v1/account_link_pb.d.ts +583 -0
  7. package/src/kusinta/iot/accountlink/v1/account_link_pb.js +160 -0
  8. package/src/kusinta/iot/climate/v1/climate_pb.d.ts +1041 -0
  9. package/src/kusinta/iot/climate/v1/climate_pb.js +206 -0
  10. package/src/kusinta/iot/commissioning/v1/commissioning_pb.d.ts +1128 -0
  11. package/src/kusinta/iot/commissioning/v1/commissioning_pb.js +246 -0
  12. package/src/kusinta/iot/common/v1/pairing_pb.d.ts +217 -0
  13. package/src/kusinta/iot/common/v1/pairing_pb.js +50 -0
  14. package/src/kusinta/iot/common/v1/types_pb.d.ts +175 -0
  15. package/src/kusinta/iot/common/v1/types_pb.js +70 -1
  16. package/src/kusinta/iot/connector/v1/connector_pb.d.ts +691 -2
  17. package/src/kusinta/iot/connector/v1/connector_pb.js +104 -13
  18. package/src/kusinta/iot/device/v1/cluster_state_pb.d.ts +213 -1
  19. package/src/kusinta/iot/device/v1/cluster_state_pb.js +37 -2
  20. package/src/kusinta/iot/device/v1/descriptor_pb.d.ts +22 -2
  21. package/src/kusinta/iot/device/v1/descriptor_pb.js +2 -1
  22. package/src/kusinta/iot/device/v1/device_event_pb.d.ts +87 -5
  23. package/src/kusinta/iot/device/v1/device_event_pb.js +1 -1
  24. package/src/kusinta/iot/device/v1/device_pb.d.ts +164 -11
  25. package/src/kusinta/iot/device/v1/device_pb.js +33 -2
  26. package/src/kusinta/iot/device/v1/properties_pb.d.ts +26 -5
  27. package/src/kusinta/iot/device/v1/properties_pb.js +1 -1
  28. package/src/kusinta/iot/device/v1/property_update_pb.d.ts +28 -2
  29. package/src/kusinta/iot/device/v1/property_update_pb.js +2 -1
  30. package/src/kusinta/iot/heating/v1/heating_pb.d.ts +619 -0
  31. package/src/kusinta/iot/heating/v1/heating_pb.js +118 -0
  32. package/src/kusinta/iot/link/v1/link_pb.d.ts +438 -0
  33. package/src/kusinta/iot/link/v1/link_pb.js +121 -0
  34. package/src/kusinta/iot/registration/v1/registration_pb.d.ts +18 -0
  35. package/src/kusinta/iot/registration/v1/registration_pb.js +1 -1
  36. package/src/kusinta/iot/reporting/v1/reporting_pb.d.ts +1225 -0
  37. package/src/kusinta/iot/reporting/v1/reporting_pb.js +238 -0
  38. package/src/kusinta/iot/reporting/v1/reporting_service_pb.d.ts +63 -0
  39. package/src/kusinta/iot/reporting/v1/reporting_service_pb.js +24 -0
  40. package/src/kusinta/iot/signaling/v1/signaling_pb.d.ts +920 -7
  41. package/src/kusinta/iot/signaling/v1/signaling_pb.js +163 -4
  42. package/src/kusinta/iot/signaling/v1/signaling_service_pb.d.ts +24 -1
  43. package/src/kusinta/iot/signaling/v1/signaling_service_pb.js +1 -1
  44. package/src/kusinta/iot/space/v1/space_pb.d.ts +107 -2
  45. package/src/kusinta/iot/space/v1/space_pb.js +10 -1
  46. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.d.ts +19 -3
  47. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.js +1 -1
  48. package/src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.d.ts +69 -0
  49. package/src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.js +19 -0
  50. package/src/kusinta/iot/vendor/v1/vendor_options_pb.d.ts +4 -4
  51. package/src/kusinta/iot/vendor/v1/vendor_options_pb.js +4 -4
  52. package/src/kusinta/iot/webrtc/v1/app_token_pb.d.ts +48 -5
  53. package/src/kusinta/iot/webrtc/v1/app_token_pb.js +1 -1
  54. package/src/kusinta/iot/webrtc/v1/command_pb.d.ts +56 -0
  55. package/src/kusinta/iot/webrtc/v1/command_pb.js +1 -1
  56. package/src/kusinta/iot/webrtc/v1/device_state_pb.d.ts +179 -5
  57. package/src/kusinta/iot/webrtc/v1/device_state_pb.js +35 -6
  58. package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +607 -3
  59. package/src/kusinta/iot/webrtc/v1/envelope_pb.js +68 -3
  60. package/src/kusinta/iot/webrtc/v1/invite_pb.d.ts +498 -0
  61. package/src/kusinta/iot/webrtc/v1/invite_pb.js +108 -0
  62. package/src/kusinta/iot/webrtc/v1/management_pb.d.ts +1687 -75
  63. package/src/kusinta/iot/webrtc/v1/management_pb.js +261 -5
  64. package/src/kusinta/iot/webrtc/v1/members_pb.d.ts +536 -0
  65. package/src/kusinta/iot/webrtc/v1/members_pb.js +113 -0
  66. package/src/kusinta/iot/webrtc/v1/permission_push_pb.d.ts +66 -4
  67. package/src/kusinta/iot/webrtc/v1/permission_push_pb.js +10 -2
@@ -67,11 +67,26 @@ export declare type AppTokenClaims = Message<"kusinta.iot.webrtc.v1.AppTokenClai
67
67
 
68
68
  /**
69
69
  * Custom claims.
70
- * A user may hold several roles at once (e.g. resident + gateway admin), so
71
- * this is a list. Carried in the JWT as an array of enum NAME strings
72
- * (e.g. ["ROLE_RESIDENT", "ROLE_GATEWAY_ADMIN"]), matching proto3 canonical
73
- * JSON enum encoding — not integer values. This keeps the claim
74
- * self-describing and aligns with text-typed role storage on the api-server.
70
+ * The roles the api-server holds for the user on this gateway: the service
71
+ * roles the gateway reported (reporting.v1.GatewayMember) other than
72
+ * ROLE_GATEWAY_ADMIN, and ROLE_GATEWAY_ADMIN for each administrator of the
73
+ * organisation that owns the gateway. A resident's token names none. Carried in the JWT as an array of
74
+ * enum NAME strings (e.g. ["ROLE_TECHNICIAN"]), not integer values. The
75
+ * issuer writes the claim even when it names no role ([]), and a validator
76
+ * refuses a token without it.
77
+ *
78
+ * The gateway authorises from the roles it holds itself, and takes from
79
+ * this claim ROLE_GATEWAY_ADMIN alone. So the api-server MUST set
80
+ * ROLE_GATEWAY_ADMIN here only for an administrator of the organisation that
81
+ * owns the gateway as it stands when the token is minted, never because the
82
+ * gateway reported someone as one: the gateway holds those itself, and a copy
83
+ * in a token would outlive their demotion until the token expired. The same
84
+ * administrators are told to the gateway as the vouched set
85
+ * (signaling.v1.VouchedAdministrators), which ends the administration of a
86
+ * session whose user it no longer names, and of a token issued before it. A gateway that holds roles itself must be
87
+ * deployed before an api-server issues tokens under this rule, since a
88
+ * gateway that authorised from this claim would find residents and
89
+ * reported service roles missing.
75
90
  *
76
91
  * @generated from field: repeated kusinta.iot.access.v1.Role roles = 6;
77
92
  */
@@ -105,6 +120,34 @@ export declare type AppTokenClaims = Message<"kusinta.iot.webrtc.v1.AppTokenClai
105
120
  * @generated from field: kusinta.iot.webrtc.v1.Confirmation cnf = 7;
106
121
  */
107
122
  cnf?: Confirmation | undefined;
123
+
124
+ /**
125
+ * The user's display name as the identity provider holds it, or empty. The issuer MUST
126
+ * take it from the provider's display-name claim alone and send it empty rather than
127
+ * fall back to a username, an email address or any other field, since a username is an
128
+ * email address wherever accounts log in by email. The gateway records it only to name the
129
+ * user to the people who may see who they are (MemberDetail.name, ServiceParty.names),
130
+ * and treats it as self-chosen: it removes control and format characters (bidirectional
131
+ * overrides among them) and keeps at most 80 Unicode code points. A validator accepts a
132
+ * token without it. Carried in the JWT as "name".
133
+ *
134
+ * @generated from field: string name = 8;
135
+ */
136
+ name: string;
137
+
138
+ /**
139
+ * The verified email address of the account, or empty. The issuer sets it for a user who
140
+ * is staff (access.v1.Role, STAFF) on the token's gateway as the member report stands
141
+ * (reporting.v1.GatewayMember), every administrator of the owning organisation included, when the identity
142
+ * provider marks their address verified. It MUST be empty for anyone else, and for an
143
+ * address not marked verified. The gateway MUST keep it only while the user holds a
144
+ * staff role, and use it only to tell staff apart to whoever may list every member
145
+ * (MemberDetail.email). A validator accepts a token without it. Carried in the JWT as
146
+ * "email".
147
+ *
148
+ * @generated from field: string email = 9;
149
+ */
150
+ email: string;
108
151
  };
109
152
 
110
153
  /**
@@ -10,7 +10,7 @@ import { file_kusinta_iot_access_v1_roles } from "../../access/v1/roles_pb.js";
10
10
  * Describes the file kusinta/iot/webrtc/v1/app_token.proto.
11
11
  */
12
12
  export const file_kusinta_iot_webrtc_v1_app_token = /*@__PURE__*/
13
- fileDesc("CiVrdXNpbnRhL2lvdC93ZWJydGMvdjEvYXBwX3Rva2VuLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEi5wEKDkFwcFRva2VuQ2xhaW1zEgsKA2lzcxgBIAEoCRILCgNhdWQYAiABKAkSCwoDc3ViGAMgASgJEicKA2lhdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJwoDZXhwGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIqCgVyb2xlcxgGIAMoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjAKA2NuZhgHIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25maXJtYXRpb24iIAoMQ29uZmlybWF0aW9uEhAKCHg1dF9zMjU2GAEgASgJQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_roles]);
13
+ fileDesc("CiVrdXNpbnRhL2lvdC93ZWJydGMvdjEvYXBwX3Rva2VuLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEihAIKDkFwcFRva2VuQ2xhaW1zEgsKA2lzcxgBIAEoCRILCgNhdWQYAiABKAkSCwoDc3ViGAMgASgJEicKA2lhdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJwoDZXhwGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIqCgVyb2xlcxgGIAMoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjAKA2NuZhgHIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25maXJtYXRpb24SDAoEbmFtZRgIIAEoCRINCgVlbWFpbBgJIAEoCSIgCgxDb25maXJtYXRpb24SEAoIeDV0X3MyNTYYASABKAlCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_roles]);
14
14
 
15
15
  /**
16
16
  * Describes the message kusinta.iot.webrtc.v1.AppTokenClaims.
@@ -281,6 +281,16 @@ export declare type DeviceCommand = Message<"kusinta.iot.webrtc.v1.DeviceCommand
281
281
  value: Uint8Array;
282
282
  case: "rawTlv";
283
283
  } | { case: undefined; value?: undefined };
284
+
285
+ /**
286
+ * How long, in seconds, the value the command sets holds, for a command that sets an
287
+ * attribute the producer states as leased: OnOff is set by the On and Off commands, not
288
+ * by a write. The same rules as AttributeWriteRequest.lease_seconds, applied to the
289
+ * attribute the command sets.
290
+ *
291
+ * @generated from field: optional uint32 lease_seconds = 14;
292
+ */
293
+ leaseSeconds?: number | undefined;
284
294
  };
285
295
 
286
296
  /**
@@ -304,6 +314,20 @@ export declare type CommandError = Message<"kusinta.iot.webrtc.v1.CommandError">
304
314
  * @generated from field: kusinta.iot.webrtc.v1.CommandErrorCode code = 3;
305
315
  */
306
316
  code: CommandErrorCode;
317
+
318
+ /**
319
+ * Structured detail for the app, beside `code`. Mirrors GatewayError.metadata.
320
+ *
321
+ * "reason": a stable, machine-readable code the app may branch on — a reason
322
+ * such as a setting being governed by the device's room.
323
+ * "detail": one sentence the app may show the user.
324
+ *
325
+ * `message` stays log-only; anything meant for a user goes here. Empty means the
326
+ * producer has nothing to add beyond `code`.
327
+ *
328
+ * @generated from field: map<string, string> metadata = 4;
329
+ */
330
+ metadata: { [key: string]: string };
307
331
  };
308
332
 
309
333
  /**
@@ -420,6 +444,28 @@ export declare type AttributeWriteRequest = Message<"kusinta.iot.webrtc.v1.Attri
420
444
  * @generated from field: kusinta.iot.device.v1.AttributeValue value = 4;
421
445
  */
422
446
  value?: AttributeValue | undefined;
447
+
448
+ /**
449
+ * How long, in seconds, the written value holds before the device itself returns the
450
+ * attribute to its lapse value — for an attribute the producer states as leased
451
+ * (device.v1.LeasedWrite, on the attribute's cluster or as a vendor parameter). At least
452
+ * one second, and within the stated minimum and maximum.
453
+ *
454
+ * The producer MUST refuse, with COMMAND_ERROR_CODE_INVALID_COMMAND, a write to a leased
455
+ * attribute that carries no lease, a lease of zero or outside the stated bounds, and a
456
+ * lease on an attribute it does not state as leased. A write of the attribute's lapse
457
+ * value is the exception: it needs no lease, ends any lease running, and a lease on it
458
+ * is ignored (device.v1.LeasedWrite.lapse_value). Rollout order: a writer sends a
459
+ * lease for an attribute before the attribute's producer states it as leased.
460
+ *
461
+ * Set only by the gateway, towards a producer: a leased attribute is written by the
462
+ * gateway alone. A gateway MUST refuse a request from an app that carries a lease, with
463
+ * COMMAND_ERROR_CODE_INVALID_COMMAND, and an app's write or command to an attribute its
464
+ * producer states as leased, with COMMAND_ERROR_CODE_HELD_BY_GATEWAY.
465
+ *
466
+ * @generated from field: optional uint32 lease_seconds = 5;
467
+ */
468
+ leaseSeconds?: number | undefined;
423
469
  };
424
470
 
425
471
  /**
@@ -500,6 +546,16 @@ export enum CommandErrorCode {
500
546
  * @generated from enum value: COMMAND_ERROR_CODE_INTERNAL = 7;
501
547
  */
502
548
  INTERNAL = 7,
549
+
550
+ /**
551
+ * The attribute is one the gateway drives under a lease — a floor zone, a heat source's
552
+ * add-on heater block — and a person changes it through the room's target and comfort
553
+ * band, not directly. Permanent for this attribute: do not retry; tell the user where to
554
+ * change it instead.
555
+ *
556
+ * @generated from enum value: COMMAND_ERROR_CODE_HELD_BY_GATEWAY = 8;
557
+ */
558
+ HELD_BY_GATEWAY = 8,
503
559
  }
504
560
 
505
561
  /**
@@ -14,7 +14,7 @@ import { file_kusinta_iot_webrtc_v1_setpoint_mode } from "./setpoint_mode_pb.js"
14
14
  * Describes the file kusinta/iot/webrtc/v1/command.proto.
15
15
  */
16
16
  export const file_kusinta_iot_webrtc_v1_command = /*@__PURE__*/
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
+ fileDesc("CiNrdXNpbnRhL2lvdC93ZWJydGMvdjEvY29tbWFuZC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxInwKGFRoZXJtb3N0YXRTZXRwb2ludFBhcmFtcxI8CgRtb2RlGAEgASgOMikua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldHBvaW50QWRqdXN0TW9kZUgAiAEBEg4KBmFtb3VudBgCIAEoEToJuLUYgQTAtRgAQgcKBV9tb2RlIkYKEkxldmVsQ29udHJvbFBhcmFtcxINCgVsZXZlbBgBIAEoDRIXCg90cmFuc2l0aW9uX3RpbWUYAiABKA06CLi1GAjAtRgAIisKC09uT2ZmUGFyYW1zOgS4tRgGSgQIARACSgQIAhADUgJvblIGdG9nZ2xlIkEKGFdpbmRvd0NvdmVyaW5nTGlmdFBhcmFtcxIaChJsaWZ0X3BlcmNlbnQxMDB0aHMYASABKA06Cbi1GIICwLUYBSI7Cg5Eb29yTG9ja1BhcmFtcxIQCghwaW5fY29kZRgCIAEoCToFuLUYgQJKBAgBEAJSCmxvY2tfc3RhdGUiwAUKDURldmljZUNvbW1hbmQSEgoKcmVxdWVzdF9pZBgBIAEoCRI0CglkZXZpY2VfaWQYAiABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIUCgxjb21tYW5kX25hbWUYBCABKAkSEgoKY2x1c3Rlcl9pZBgMIAEoDRIeChFtYXR0ZXJfY29tbWFuZF9pZBgNIAEoDUgBiAEBEhgKC2VuZHBvaW50X2lkGAsgASgNSAKIAQESTgoTdGhlcm1vc3RhdF9zZXRwb2ludBgFIAEoCzIvLmt1c2ludGEuaW90LndlYnJ0Yy52MS5UaGVybW9zdGF0U2V0cG9pbnRQYXJhbXNIABJCCg1sZXZlbF9jb250cm9sGAYgASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLkxldmVsQ29udHJvbFBhcmFtc0gAEjQKBm9uX29mZhgHIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Pbk9mZlBhcmFtc0gAEk8KFHdpbmRvd19jb3ZlcmluZ19saWZ0GAggASgLMi8ua3VzaW50YS5pb3Qud2VicnRjLnYxLldpbmRvd0NvdmVyaW5nTGlmdFBhcmFtc0gAEjoKCWRvb3JfbG9jaxgJIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Eb29yTG9ja1BhcmFtc0gAEhEKB3Jhd190bHYYYyABKAxIABIaCg1sZWFzZV9zZWNvbmRzGA4gASgNSAOIAQFCDAoKcGFyYW1ldGVyc0IUChJfbWF0dGVyX2NvbW1hbmRfaWRCDgoMX2VuZHBvaW50X2lkQhAKDl9sZWFzZV9zZWNvbmRzSgQIAxAESgQIChALUg5jbHVzdGVyX2lkX2hleFIZdGhlcm1vc3RhdF9zZXRwb2ludF93cml0ZSLSAQoMQ29tbWFuZEVycm9yEg8KB21lc3NhZ2UYAiABKAkSNQoEY29kZRgDIAEoDjInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db21tYW5kRXJyb3JDb2RlEkMKCG1ldGFkYXRhGAQgAygLMjEua3VzaW50YS5pb3Qud2VicnRjLnYxLkNvbW1hbmRFcnJvci5NZXRhZGF0YUVudHJ5Gi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUoECAEQAiLeAQoNQ29tbWFuZFJlc3VsdBISCgpyZXF1ZXN0X2lkGAEgASgJEg8KB3N1Y2Nlc3MYAiABKAgSMgoFZXJyb3IYAyABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29tbWFuZEVycm9yEjAKDGNvbXBsZXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMwoKc2V0dGxlc19ieRgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBAUINCgtfc2V0dGxlc19ieSL6AQoVQXR0cmlidXRlV3JpdGVSZXF1ZXN0EhIKCnJlcXVlc3RfaWQYASABKAkSNAoJZGV2aWNlX2lkGAIgASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSMwoGdGFyZ2V0GAMgASgLMiMua3VzaW50YS5pb3QuYWNjZXNzLnYxLkF0dHJpYnV0ZVJlZhI0CgV2YWx1ZRgEIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5BdHRyaWJ1dGVWYWx1ZRIaCg1sZWFzZV9zZWNvbmRzGAUgASgNSACIAQFCEAoOX2xlYXNlX3NlY29uZHMq5wIKEENvbW1hbmRFcnJvckNvZGUSIgoeQ09NTUFORF9FUlJPUl9DT0RFX1VOU1BFQ0lGSUVEEAASIwofQ09NTUFORF9FUlJPUl9DT0RFX05PVF9FTlRJVExFRBABEioKJkNPTU1BTkRfRVJST1JfQ09ERV9DT05TVFJBSU5UX1ZJT0xBVEVEEAISJgoiQ09NTUFORF9FUlJPUl9DT0RFX0lOVkFMSURfQ09NTUFORBADEiIKHkNPTU1BTkRfRVJST1JfQ09ERV9VTlJFQUNIQUJMRRAEEh4KGkNPTU1BTkRfRVJST1JfQ09ERV9USU1FT1VUEAUSKQolQ09NTUFORF9FUlJPUl9DT0RFX1JFSkVDVEVEX0JZX0RFVklDRRAGEh8KG0NPTU1BTkRfRVJST1JfQ09ERV9JTlRFUk5BTBAHEiYKIkNPTU1BTkRfRVJST1JfQ09ERV9IRUxEX0JZX0dBVEVXQVkQCEICSAFiBnByb3RvMw", [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]);
18
18
 
19
19
  /**
20
20
  * Describes the message kusinta.iot.webrtc.v1.ThermostatSetpointParams.
@@ -2,13 +2,14 @@
2
2
  // @generated from file kusinta/iot/webrtc/v1/device_state.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
3
  /* eslint-disable */
4
4
 
5
- import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
5
+ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
7
  import type { Device } from "../../device/v1/device_pb.js";
8
8
  import type { EffectivePermissions } from "../../access/v1/acl_pb.js";
9
9
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
10
- import type { PropertyUpdate } from "../../device/v1/property_update_pb.js";
10
+ import type { SessionRoles } from "./permission_push_pb.js";
11
11
  import type { DeviceId } from "../../identity/v1/identity_pb.js";
12
+ import type { PropertyUpdate } from "../../device/v1/property_update_pb.js";
12
13
 
13
14
  /**
14
15
  * Describes the file kusinta/iot/webrtc/v1/device_state.proto.
@@ -16,7 +17,9 @@ import type { DeviceId } from "../../identity/v1/identity_pb.js";
16
17
  export declare const file_kusinta_iot_webrtc_v1_device_state: GenFile;
17
18
 
18
19
  /**
19
- * Full device state sent to the app on initial WebRTC connection.
20
+ * Full device state sent to the app on initial WebRTC connection. Devices the recipient sees
21
+ * as service are as they are now, by description only, each with its ServiceStatus once
22
+ * one has been evaluated for them (see service_statuses).
20
23
  *
21
24
  * @generated from message kusinta.iot.webrtc.v1.DeviceStateSnapshot
22
25
  */
@@ -35,6 +38,23 @@ export declare type DeviceStateSnapshot = Message<"kusinta.iot.webrtc.v1.DeviceS
35
38
  * @generated from field: google.protobuf.Timestamp snapshotted_at = 3;
36
39
  */
37
40
  snapshottedAt?: Timestamp | undefined;
41
+
42
+ /**
43
+ * One for every device the recipient sees, as last evaluated (see ServiceStatus). A device
44
+ * the recipient began to see since the last quarter hour — or began to see as its
45
+ * resident — has none until the next.
46
+ *
47
+ * @generated from field: repeated kusinta.iot.webrtc.v1.ServiceStatus service_statuses = 4;
48
+ */
49
+ serviceStatuses: ServiceStatus[];
50
+
51
+ /**
52
+ * The roles the gateway holds for the session as it opens (see SessionRoles). Every
53
+ * LivePermissionUpdate after it carries them again.
54
+ *
55
+ * @generated from field: kusinta.iot.webrtc.v1.SessionRoles session_roles = 5;
56
+ */
57
+ sessionRoles?: SessionRoles | undefined;
38
58
  };
39
59
 
40
60
  /**
@@ -43,6 +63,123 @@ export declare type DeviceStateSnapshot = Message<"kusinta.iot.webrtc.v1.DeviceS
43
63
  */
44
64
  export declare const DeviceStateSnapshotSchema: GenMessage<DeviceStateSnapshot>;
45
65
 
66
+ /**
67
+ * What keeps a device working, as the gateway judges it, and nothing that describes the
68
+ * people around it. Sent for every device a recipient sees, so that an app reads a
69
+ * device's problems from one place whatever its view. To a recipient whose
70
+ * DeviceAcl.relation is SERVICE it is all they get of the device's state, beside its
71
+ * description-only Device: they hold no action on
72
+ * it and are sent no PropertyReport or DeviceEvent for it (see
73
+ * access.v1.MembershipRelation).
74
+ *
75
+ * Evaluated by the gateway at each quarter hour (:00, :15, :30, :45 UTC) from what it holds
76
+ * then, and pushed in ServiceStatusChanged when it differs from what the recipient was last
77
+ * sent. Between quarter hours nothing here changes, so polling learns nothing more. A
78
+ * change still says the device was heard within that quarter hour, and nothing finer.
79
+ *
80
+ * @generated from message kusinta.iot.webrtc.v1.ServiceStatus
81
+ */
82
+ export declare type ServiceStatus = Message<"kusinta.iot.webrtc.v1.ServiceStatus"> & {
83
+ /**
84
+ * @generated from field: kusinta.iot.identity.v1.DeviceId device_id = 1;
85
+ */
86
+ deviceId?: DeviceId | undefined;
87
+
88
+ /**
89
+ * Always set. The quarter hour at which the status took its current value, but never
90
+ * earlier than the start of the recipient's current, unbroken stretch of seeing the
91
+ * device, nor, for a resident, than their current residency — each start taken at the
92
+ * first quarter hour at or after it. When that start moves because the recipient becomes
93
+ * a resident, the app drops the status it held and is sent one again from the new start at
94
+ * the next quarter hour. These quarter hours, and the moments a device appears to service,
95
+ * changes and is taken away, which they see as they happen, are the only times service is
96
+ * given of a device in a home (see access.v1.MembershipRelation). Pushed and in a
97
+ * snapshot alike, so an unchanged status carries the same as_of however it arrived.
98
+ *
99
+ * @generated from field: google.protobuf.Timestamp as_of = 2;
100
+ */
101
+ asOf?: Timestamp | undefined;
102
+
103
+ /**
104
+ * @generated from field: bool reachable = 3;
105
+ */
106
+ reachable: boolean;
107
+
108
+ /**
109
+ * While unreachable, the quarter hour at which the gateway found it so — not when it was
110
+ * last heard, which for a device that reports on change is when it was last used — and,
111
+ * like as_of, never earlier than those starts. Unset while reachable.
112
+ *
113
+ * @generated from field: google.protobuf.Timestamp unreachable_since = 4;
114
+ */
115
+ unreachableSince?: Timestamp | undefined;
116
+
117
+ /**
118
+ * Remaining charge, rounded up to a multiple of ten — 4 % is sent as 10, and 0 only when
119
+ * the device reports none left. Absent for a device that does not report one.
120
+ *
121
+ * @generated from field: optional uint32 battery_percent = 5;
122
+ */
123
+ batteryPercent?: number | undefined;
124
+
125
+ /**
126
+ * battery_low: the device reports its charge low or critical (Matter Power Source
127
+ * BatChargeLevel, or a vendor's low-battery flag). battery_replacement_needed: it reports
128
+ * that its battery must be replaced. Each is set on its own report alone.
129
+ *
130
+ * @generated from field: bool battery_low = 6;
131
+ */
132
+ batteryLow: boolean;
133
+
134
+ /**
135
+ * @generated from field: bool battery_replacement_needed = 7;
136
+ */
137
+ batteryReplacementNeeded: boolean;
138
+
139
+ /**
140
+ * A device.v1.RadioQuality number, travelling as a uint32 as every enum-valued reading
141
+ * does. Absent: the device does not report one.
142
+ *
143
+ * @generated from field: optional uint32 radio_quality = 8;
144
+ */
145
+ radioQuality?: number | undefined;
146
+
147
+ /**
148
+ * Faults the device reports now, each listed once. Empty: none. A fault can follow from
149
+ * what someone did — a casing opened — and service learns that within the quarter hour;
150
+ * that much fault reporting discloses.
151
+ *
152
+ * @generated from field: repeated kusinta.iot.webrtc.v1.ServiceFault faults = 9;
153
+ */
154
+ faults: ServiceFault[];
155
+ };
156
+
157
+ /**
158
+ * Describes the message kusinta.iot.webrtc.v1.ServiceStatus.
159
+ * Use `create(ServiceStatusSchema)` to create a new message.
160
+ */
161
+ export declare const ServiceStatusSchema: GenMessage<ServiceStatus>;
162
+
163
+ /**
164
+ * The service statuses that changed at a quarter hour, gateway → app. Apply each as an
165
+ * upsert keyed on device_id. Sent for every device the recipient sees, without a
166
+ * subscription: a service view holds no SUBSCRIBE, and needs none for this.
167
+ *
168
+ * @generated from message kusinta.iot.webrtc.v1.ServiceStatusChanged
169
+ */
170
+ export declare type ServiceStatusChanged = Message<"kusinta.iot.webrtc.v1.ServiceStatusChanged"> & {
171
+ /**
172
+ * @generated from field: repeated kusinta.iot.webrtc.v1.ServiceStatus statuses = 1;
173
+ */
174
+ statuses: ServiceStatus[];
175
+ };
176
+
177
+ /**
178
+ * Describes the message kusinta.iot.webrtc.v1.ServiceStatusChanged.
179
+ * Use `create(ServiceStatusChangedSchema)` to create a new message.
180
+ */
181
+ export declare const ServiceStatusChangedSchema: GenMessage<ServiceStatusChanged>;
182
+
46
183
  /**
47
184
  * One attribute reading streamed to the app as it happens — Matter's Report Data Action,
48
185
  * for a single attribute.
@@ -78,7 +215,9 @@ export declare const PropertyReportSchema: GenMessage<PropertyReport>;
78
215
  *
79
216
  * Carries the full Device, descriptor plus current typed properties, so the app can
80
217
  * render it without a follow-up read — the same payload DeviceStateSnapshot gives
81
- * per device.
218
+ * per device. To a recipient who sees it as service, the Device carries its description
219
+ * only, as in a snapshot, and is sent as it appears; its ServiceStatus follows from the
220
+ * next quarter hour (see access.v1.DeviceAcl.relation).
82
221
  *
83
222
  * Apply as an upsert keyed on descriptor.device_id, never as an insert: a device can
84
223
  * be in the snapshot and then announced, or announced twice across a connector
@@ -106,11 +245,15 @@ export declare const DeviceAddedSchema: GenMessage<DeviceAdded>;
106
245
 
107
246
  /**
108
247
  * A device is gone, because its connector said so via connector.v1.DeviceRemoval.
248
+ * To a recipient who sees it as service, sent at once, as the removal from their
249
+ * permissions is (see LivePermissionUpdate) — if they were shown the device; otherwise not
250
+ * at all.
109
251
  *
110
252
  * A connector disconnecting is NOT a removal: an ordinary reconnect wipes the
111
253
  * device→connector route while every device still exists, and treating that as a
112
254
  * removal makes the whole UI flap. Unreachability is a separate signal — read
113
- * device.v1.Device.last_seen for that.
255
+ * ServiceStatus.reachable for that, which every recipient gets; device.v1.Device.last_seen
256
+ * may be unset.
114
257
  *
115
258
  * @generated from message kusinta.iot.webrtc.v1.DeviceRemoved
116
259
  */
@@ -134,3 +277,34 @@ export declare type DeviceRemoved = Message<"kusinta.iot.webrtc.v1.DeviceRemoved
134
277
  */
135
278
  export declare const DeviceRemovedSchema: GenMessage<DeviceRemoved>;
136
279
 
280
+ /**
281
+ * A fault a device reports about itself, as service sees it.
282
+ *
283
+ * @generated from enum kusinta.iot.webrtc.v1.ServiceFault
284
+ */
285
+ export enum ServiceFault {
286
+ /**
287
+ * @generated from enum value: SERVICE_FAULT_UNSPECIFIED = 0;
288
+ */
289
+ UNSPECIFIED = 0,
290
+
291
+ /**
292
+ * An error the device reports in its own operation.
293
+ *
294
+ * @generated from enum value: SERVICE_FAULT_ERROR = 1;
295
+ */
296
+ ERROR = 1,
297
+
298
+ /**
299
+ * Its casing was opened or it was taken off its mount.
300
+ *
301
+ * @generated from enum value: SERVICE_FAULT_TAMPER = 2;
302
+ */
303
+ TAMPER = 2,
304
+ }
305
+
306
+ /**
307
+ * Describes the enum kusinta.iot.webrtc.v1.ServiceFault.
308
+ */
309
+ export declare const ServiceFaultSchema: GenEnum<ServiceFault>;
310
+
@@ -2,18 +2,19 @@
2
2
  // @generated from file kusinta/iot/webrtc/v1/device_state.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
3
  /* eslint-disable */
4
4
 
5
- import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
5
+ import { enumDesc, fileDesc, messageDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
6
6
  import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
+ import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
7
8
  import { file_kusinta_iot_device_v1_device } from "../../device/v1/device_pb.js";
8
9
  import { file_kusinta_iot_device_v1_property_update } from "../../device/v1/property_update_pb.js";
9
- import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
10
10
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
11
+ import { file_kusinta_iot_webrtc_v1_permission_push } from "./permission_push_pb.js";
11
12
 
12
13
  /**
13
14
  * Describes the file kusinta/iot/webrtc/v1/device_state.proto.
14
15
  */
15
16
  export const file_kusinta_iot_webrtc_v1_device_state = /*@__PURE__*/
16
- fileDesc("CihrdXNpbnRhL2lvdC93ZWJydGMvdjEvZGV2aWNlX3N0YXRlLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEiuwEKE0RldmljZVN0YXRlU25hcHNob3QSLgoHZGV2aWNlcxgBIAMoCzIdLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2USQAoLcGVybWlzc2lvbnMYAiABKAsyKy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuRWZmZWN0aXZlUGVybWlzc2lvbnMSMgoOc25hcHNob3R0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIoEBCg5Qcm9wZXJ0eVJlcG9ydBI1CgZ1cGRhdGUYASABKAsyJS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuUHJvcGVydHlVcGRhdGUSOAoUZ2F0ZXdheV9wcm9jZXNzZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIjwKC0RldmljZUFkZGVkEi0KBmRldmljZRgBIAEoCzIdLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2UiVQoNRGV2aWNlUmVtb3ZlZBI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIOCgZyZWFzb24YAiABKAlCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_device, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_access_v1_acl, file_kusinta_iot_identity_v1_identity]);
17
+ fileDesc("CihrdXNpbnRhL2lvdC93ZWJydGMvdjEvZGV2aWNlX3N0YXRlLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEitwIKE0RldmljZVN0YXRlU25hcHNob3QSLgoHZGV2aWNlcxgBIAMoCzIdLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2USQAoLcGVybWlzc2lvbnMYAiABKAsyKy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuRWZmZWN0aXZlUGVybWlzc2lvbnMSMgoOc25hcHNob3R0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEj4KEHNlcnZpY2Vfc3RhdHVzZXMYBCADKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2VydmljZVN0YXR1cxI6Cg1zZXNzaW9uX3JvbGVzGAUgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlc3Npb25Sb2xlcyKIAwoNU2VydmljZVN0YXR1cxI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIpCgVhc19vZhgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEQoJcmVhY2hhYmxlGAMgASgIEjUKEXVucmVhY2hhYmxlX3NpbmNlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIcCg9iYXR0ZXJ5X3BlcmNlbnQYBSABKA1IAIgBARITCgtiYXR0ZXJ5X2xvdxgGIAEoCBIiChpiYXR0ZXJ5X3JlcGxhY2VtZW50X25lZWRlZBgHIAEoCBIaCg1yYWRpb19xdWFsaXR5GAggASgNSAGIAQESMwoGZmF1bHRzGAkgAygOMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VGYXVsdEISChBfYmF0dGVyeV9wZXJjZW50QhAKDl9yYWRpb19xdWFsaXR5Ik4KFFNlcnZpY2VTdGF0dXNDaGFuZ2VkEjYKCHN0YXR1c2VzGAEgAygLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VTdGF0dXMigQEKDlByb3BlcnR5UmVwb3J0EjUKBnVwZGF0ZRgBIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5Qcm9wZXJ0eVVwZGF0ZRI4ChRnYXRld2F5X3Byb2Nlc3NlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiPAoLRGV2aWNlQWRkZWQSLQoGZGV2aWNlGAEgASgLMh0ua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZSJVCg1EZXZpY2VSZW1vdmVkEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEg4KBnJlYXNvbhgCIAEoCSpgCgxTZXJ2aWNlRmF1bHQSHQoZU0VSVklDRV9GQVVMVF9VTlNQRUNJRklFRBAAEhcKE1NFUlZJQ0VfRkFVTFRfRVJST1IQARIYChRTRVJWSUNFX0ZBVUxUX1RBTVBFUhACQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_device_v1_device, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_webrtc_v1_permission_push]);
17
18
 
18
19
  /**
19
20
  * Describes the message kusinta.iot.webrtc.v1.DeviceStateSnapshot.
@@ -22,24 +23,52 @@ export const file_kusinta_iot_webrtc_v1_device_state = /*@__PURE__*/
22
23
  export const DeviceStateSnapshotSchema = /*@__PURE__*/
23
24
  messageDesc(file_kusinta_iot_webrtc_v1_device_state, 0);
24
25
 
26
+ /**
27
+ * Describes the message kusinta.iot.webrtc.v1.ServiceStatus.
28
+ * Use `create(ServiceStatusSchema)` to create a new message.
29
+ */
30
+ export const ServiceStatusSchema = /*@__PURE__*/
31
+ messageDesc(file_kusinta_iot_webrtc_v1_device_state, 1);
32
+
33
+ /**
34
+ * Describes the message kusinta.iot.webrtc.v1.ServiceStatusChanged.
35
+ * Use `create(ServiceStatusChangedSchema)` to create a new message.
36
+ */
37
+ export const ServiceStatusChangedSchema = /*@__PURE__*/
38
+ messageDesc(file_kusinta_iot_webrtc_v1_device_state, 2);
39
+
25
40
  /**
26
41
  * Describes the message kusinta.iot.webrtc.v1.PropertyReport.
27
42
  * Use `create(PropertyReportSchema)` to create a new message.
28
43
  */
29
44
  export const PropertyReportSchema = /*@__PURE__*/
30
- messageDesc(file_kusinta_iot_webrtc_v1_device_state, 1);
45
+ messageDesc(file_kusinta_iot_webrtc_v1_device_state, 3);
31
46
 
32
47
  /**
33
48
  * Describes the message kusinta.iot.webrtc.v1.DeviceAdded.
34
49
  * Use `create(DeviceAddedSchema)` to create a new message.
35
50
  */
36
51
  export const DeviceAddedSchema = /*@__PURE__*/
37
- messageDesc(file_kusinta_iot_webrtc_v1_device_state, 2);
52
+ messageDesc(file_kusinta_iot_webrtc_v1_device_state, 4);
38
53
 
39
54
  /**
40
55
  * Describes the message kusinta.iot.webrtc.v1.DeviceRemoved.
41
56
  * Use `create(DeviceRemovedSchema)` to create a new message.
42
57
  */
43
58
  export const DeviceRemovedSchema = /*@__PURE__*/
44
- messageDesc(file_kusinta_iot_webrtc_v1_device_state, 3);
59
+ messageDesc(file_kusinta_iot_webrtc_v1_device_state, 5);
60
+
61
+ /**
62
+ * Describes the enum kusinta.iot.webrtc.v1.ServiceFault.
63
+ */
64
+ export const ServiceFaultSchema = /*@__PURE__*/
65
+ enumDesc(file_kusinta_iot_webrtc_v1_device_state, 0);
66
+
67
+ /**
68
+ * A fault a device reports about itself, as service sees it.
69
+ *
70
+ * @generated from enum kusinta.iot.webrtc.v1.ServiceFault
71
+ */
72
+ export const ServiceFault = /*@__PURE__*/
73
+ tsEnum(ServiceFaultSchema);
45
74