@kusinta/iot-schema 0.2.0-beta.26 → 0.2.0-beta.28

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.26",
3
+ "version": "0.2.0-beta.28",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "files": ["src"],
@@ -34,6 +34,7 @@
34
34
  "./webrtc/command": "./src/kusinta/iot/webrtc/v1/command_pb.js",
35
35
  "./webrtc/device-state": "./src/kusinta/iot/webrtc/v1/device_state_pb.js",
36
36
  "./webrtc/invite": "./src/kusinta/iot/webrtc/v1/invite_pb.js",
37
+ "./webrtc/members": "./src/kusinta/iot/webrtc/v1/members_pb.js",
37
38
  "./webrtc/management": "./src/kusinta/iot/webrtc/v1/management_pb.js",
38
39
  "./webrtc/permission-push": "./src/kusinta/iot/webrtc/v1/permission_push_pb.js",
39
40
  "./webrtc/setpoint-mode": "./src/kusinta/iot/webrtc/v1/setpoint_mode_pb.js",
@@ -236,7 +236,9 @@ export declare const PermissionActionSchema: GenEnum<PermissionAction>;
236
236
  * who service the building get the service view above and no more. It does not keep the
237
237
  * property owner or the administrator out by force — they hold the building's filing
238
238
  * authority and the gateway itself — but it makes their seeing in a deliberate act on the
239
- * home, such as filing themselves on it, rather than something handed out by default.
239
+ * home, such as filing themselves on it, rather than something handed out by default. Who
240
+ * lives where is the exception: they are shown every member and membership
241
+ * (webrtc.v1.ListGatewayMembers), since they remove a resident who moves out.
240
242
  *
241
243
  * A membership recorded with no relation, made before relations existed, sees no more than
242
244
  * either relation would where it is held: on an apartment or a room, a home as service; on a
@@ -140,7 +140,9 @@ export const MembershipRelationSchema = /*@__PURE__*/
140
140
  * who service the building get the service view above and no more. It does not keep the
141
141
  * property owner or the administrator out by force — they hold the building's filing
142
142
  * authority and the gateway itself — but it makes their seeing in a deliberate act on the
143
- * home, such as filing themselves on it, rather than something handed out by default.
143
+ * home, such as filing themselves on it, rather than something handed out by default. Who
144
+ * lives where is the exception: they are shown every member and membership
145
+ * (webrtc.v1.ListGatewayMembers), since they remove a resident who moves out.
144
146
  *
145
147
  * A membership recorded with no relation, made before relations existed, sees no more than
146
148
  * either relation would where it is held: on an apartment or a room, a home as service; on a
@@ -726,6 +726,12 @@ export declare const ReportServedSpacesResponseSchema: GenMessage<ReportServedSp
726
726
  * administrator is also reported so, the api-server's record governs: their administration
727
727
  * counts from the earlier of its own start and administrator_since.
728
728
  *
729
+ * A member here is a user the gateway holds a membership or a role for, and no one else. The
730
+ * registering administrator is reported only when the gateway holds one of those for them —
731
+ * a membership, or ROLE_PROPERTY_OWNER they were given — and never with the
732
+ * ROLE_GATEWAY_ADMIN their token carries. That the gateway recognises them otherwise
733
+ * (webrtc.v1.MemberDetail.registering_admin) does not make them a member of this report.
734
+ *
729
735
  * @generated from message kusinta.iot.reporting.v1.GatewayMember
730
736
  */
731
737
  export declare type GatewayMember = Message<"kusinta.iot.reporting.v1.GatewayMember"> & {
@@ -328,8 +328,9 @@ export declare type RedeemInvite = Message<"kusinta.iot.signaling.v1.RedeemInvit
328
328
  } | { case: undefined; value?: undefined };
329
329
 
330
330
  /**
331
- * The display name the user's token carries, for the join request it may make.
332
- * May be empty.
331
+ * The display name the user's token carries, for the join request it may make, by the
332
+ * same rule as webrtc.v1.AppTokenClaims.name: the identity provider's display-name claim
333
+ * alone, never a username or an email address. May be empty.
333
334
  *
334
335
  * @generated from field: string display_name = 4;
335
336
  */
@@ -108,7 +108,7 @@ export declare type Space = Message<"kusinta.iot.space.v1.Space"> & {
108
108
  * live with, and anyone filed on their home as service, since being filed on a home
109
109
  * is an act on it its residents should see. Service reach from a building or floor
110
110
  * above is not listed; webrtc.v1.PrivacyDisclosure tells them what kinds of party
111
- * hold it, without naming anyone;
111
+ * hold it, and who, without saying where anyone lives;
112
112
  * * anyone else sees none, residents of a building or floor included.
113
113
  *
114
114
  * @generated from field: repeated kusinta.iot.space.v1.SpaceMember members = 13;
@@ -117,6 +117,20 @@ export declare type AppTokenClaims = Message<"kusinta.iot.webrtc.v1.AppTokenClai
117
117
  * @generated from field: kusinta.iot.webrtc.v1.Confirmation cnf = 7;
118
118
  */
119
119
  cnf?: Confirmation | undefined;
120
+
121
+ /**
122
+ * The user's display name as the identity provider holds it, or empty. The issuer MUST
123
+ * take it from the provider's display-name claim alone and send it empty rather than
124
+ * fall back to a username, an email address or any other field, since a username is an
125
+ * email address wherever accounts log in by email. The gateway records it only to name the
126
+ * user to the people who may see who they are (MemberDetail.name, ServiceParty.names),
127
+ * and treats it as self-chosen: it removes control and format characters (bidirectional
128
+ * overrides among them) and keeps at most 80 Unicode code points. A validator accepts a
129
+ * token without it. Carried in the JWT as "name".
130
+ *
131
+ * @generated from field: string name = 8;
132
+ */
133
+ name: string;
120
134
  };
121
135
 
122
136
  /**
@@ -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("CiVrdXNpbnRhL2lvdC93ZWJydGMvdjEvYXBwX3Rva2VuLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEi9QEKDkFwcFRva2VuQ2xhaW1zEgsKA2lzcxgBIAEoCRILCgNhdWQYAiABKAkSCwoDc3ViGAMgASgJEicKA2lhdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJwoDZXhwGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIqCgVyb2xlcxgGIAMoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjAKA2NuZhgHIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25maXJtYXRpb24SDAoEbmFtZRgIIAEoCSIgCgxDb25maXJtYXRpb24SEAoIeDV0X3MyNTYYASABKAlCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_roles]);
14
14
 
15
15
  /**
16
16
  * Describes the message kusinta.iot.webrtc.v1.AppTokenClaims.
@@ -11,6 +11,7 @@ import type { ManagementAck, ManagementRequest, PrivacyDisclosure, SpaceTree } f
11
11
  import type { DeviceLink, DeviceLinkList } from "../../link/v1/link_pb.js";
12
12
  import type { ApartmentClimateSummary, ClimateMode, RoomClimate, RoomClimateList, RoomHistory } from "../../climate/v1/climate_pb.js";
13
13
  import type { IssuedInvite, SpaceInvites } from "./invite_pb.js";
14
+ import type { GatewayMembers } from "./members_pb.js";
14
15
  import type { PairingErrorDetail, PairingWindow } from "../../common/v1/pairing_pb.js";
15
16
  import type { BackendHealth, ConnectorKind, DeviceOwnershipType } from "../../common/v1/types_pb.js";
16
17
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
@@ -377,6 +378,14 @@ export declare type ManagementResult = Message<"kusinta.iot.webrtc.v1.Management
377
378
  */
378
379
  value: SpaceInvites;
379
380
  case: "spaceInvites";
381
+ } | {
382
+ /**
383
+ * list_gateway_members
384
+ *
385
+ * @generated from field: kusinta.iot.webrtc.v1.GatewayMembers gateway_members = 13;
386
+ */
387
+ value: GatewayMembers;
388
+ case: "gatewayMembers";
380
389
  } | { case: undefined; value?: undefined };
381
390
  };
382
391
 
@@ -16,13 +16,14 @@ import { file_kusinta_iot_webrtc_v1_command } from "./command_pb.js";
16
16
  import { file_kusinta_iot_webrtc_v1_device_state } from "./device_state_pb.js";
17
17
  import { file_kusinta_iot_webrtc_v1_invite } from "./invite_pb.js";
18
18
  import { file_kusinta_iot_webrtc_v1_management } from "./management_pb.js";
19
+ import { file_kusinta_iot_webrtc_v1_members } from "./members_pb.js";
19
20
  import { file_kusinta_iot_webrtc_v1_permission_push } from "./permission_push_pb.js";
20
21
 
21
22
  /**
22
23
  * Describes the file kusinta/iot/webrtc/v1/envelope.proto.
23
24
  */
24
25
  export const file_kusinta_iot_webrtc_v1_envelope = /*@__PURE__*/
25
- fileDesc("CiRrdXNpbnRhL2lvdC93ZWJydGMvdjEvZW52ZWxvcGUucHJvdG8SFWt1c2ludGEuaW90LndlYnJ0Yy52MSIGCgRQaW5nIgYKBFBvbmciIwoRSGFuZHNoYWtlUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlwKDEFwcEhhbmRzaGFrZRILCgNqd3QYASABKAkSPwoUc3Vic2NyaWJlX2RldmljZV9pZHMYAiADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJJChBTdWJzY3JpYmVEZXZpY2VzEjUKCmRldmljZV9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJLChJVbnN1YnNjcmliZURldmljZXMSNQoKZGV2aWNlX2lkcxgBIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIpMBChNSZWZ1c2VkU3Vic2NyaXB0aW9uEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjUKBGNvZGUYAiABKA4yJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yQ29kZRIPCgdtZXNzYWdlGAMgASgJIpoBCg9TdWJzY3JpcHRpb25BY2sSEwoLaW5fcmVwbHlfdG8YASABKAkSNQoKc3Vic2NyaWJlZBgCIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjsKB3JlZnVzZWQYAyADKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVmdXNlZFN1YnNjcmlwdGlvbiLRAQoTUHJvcGVydHlSZWFkUmVxdWVzdBI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCgZ0YXJnZXQYByABKAsyIy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuQXR0cmlidXRlUmVmSgQIAhAHUg5hdHRyaWJ1dGVfbmFtZVIOY2x1c3Rlcl9pZF9oZXhSCmNsdXN0ZXJfaWRSC2VuZHBvaW50X2lkUhB2ZW5kb3JfZXh0ZW5zaW9uIswBCgxHYXRld2F5RXJyb3ISNQoEY29kZRgBIAEoDjInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5RXJyb3JDb2RlEg8KB21lc3NhZ2UYAiABKAkSQwoIbWV0YWRhdGEYAyADKAsyMS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBItEFChBNYW5hZ2VtZW50UmVzdWx0EhMKC2luX3JlcGx5X3RvGAEgASgJEjQKBWVycm9yGAIgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkdhdGV3YXlFcnJvckgAEiwKBXNwYWNlGAMgASgLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2VIABI2CgpzcGFjZV90cmVlGAQgASgLMiAua3VzaW50YS5pb3Qud2VicnRjLnYxLlNwYWNlVHJlZUgAEjMKA2FjaxgFIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYW5hZ2VtZW50QWNrSAASNAoFbGlua3MYBiABKAsyIy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmtMaXN0SAASQAoNcm9vbV9jbGltYXRlcxgHIAEoCzInLmt1c2ludGEuaW90LmNsaW1hdGUudjEuUm9vbUNsaW1hdGVMaXN0SAASOwoMcm9vbV9oaXN0b3J5GAggASgLMiMua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tSGlzdG9yeUgAEkYKEnByaXZhY3lfZGlzY2xvc3VyZRgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcml2YWN5RGlzY2xvc3VyZUgAElQKGWFwYXJ0bWVudF9jbGltYXRlX3N1bW1hcnkYCiABKAsyLy5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5SAASPAoNaXNzdWVkX2ludml0ZRgLIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Jc3N1ZWRJbnZpdGVIABI8Cg1zcGFjZV9pbnZpdGVzGAwgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNwYWNlSW52aXRlc0gAQggKBnJlc3VsdCL7AQoMU3RhcnRQYWlyaW5nEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEjQKBndpbmRvdxgCIAEoCzIkLmt1c2ludGEuaW90LmNvbW1vbi52MS5QYWlyaW5nV2luZG93EjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEj0KCW93bmVyc2hpcBgEIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlIo8BCg5QYWlyaW5nU3RhcnRlZBITCgtpbl9yZXBseV90bxgBIAEoCRIuCgpleHBpcmVzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI4CgVlcnJvchgDIAEoCzIpLmt1c2ludGEuaW90LmNvbW1vbi52MS5QYWlyaW5nRXJyb3JEZXRhaWwilwEKD1BhaXJpbmdGaW5pc2hlZBITCgtpbl9yZXBseV90bxgBIAEoCRI1CgpkZXZpY2VfaWRzGAIgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSOAoFZXJyb3IYAyABKAsyKS5rdXNpbnRhLmlvdC5jb21tb24udjEuUGFpcmluZ0Vycm9yRGV0YWlsIk0KC0xpbmtDaGFuZ2VkEi0KBGxpbmsYASABKAsyHy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmsSDwoHcmVtb3ZlZBgCIAEoCCKIAwoTQ29ubmVjdG9yRGVzY3JpcHRvchI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZBIUCgxkaXNwbGF5X25hbWUYAiABKAkSIQoZc3VwcG9ydGVkX2RldmljZV90eXBlX2lkcxgDIAMoDRIYChBzdXBwb3J0c19wYWlyaW5nGAQgASgIEh0KFXN1cHBvcnRzX3Byb3Zpc2lvbmluZxgFIAEoCBIVCg1icm9rZXJzX2xpbmtzGAYgASgIEjIKBGtpbmQYByABKA4yJC5rdXNpbnRhLmlvdC5jb21tb24udjEuQ29ubmVjdG9yS2luZBITCgtkZXNjcmlwdGlvbhgIIAEoCRI8Cg5iYWNrZW5kX2hlYWx0aBgJIAEoCzIkLmt1c2ludGEuaW90LmNvbW1vbi52MS5CYWNrZW5kSGVhbHRoEiUKHXN1cHBvcnRzX2JhY2tlbmRfcmVpbml0aWFsaXplGAogASgIIlUKE0Nvbm5lY3RvcnNBbm5vdW5jZWQSPgoKY29ubmVjdG9ycxgBIAMoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25uZWN0b3JEZXNjcmlwdG9yIkcKElJvb21DbGltYXRlQ2hhbmdlZBIxCgRyb29tGAEgASgLMiMua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tQ2xpbWF0ZSJWChJDbGltYXRlTW9kZUNoYW5nZWQSMQoEbW9kZRgBIAEoCzIjLmt1c2ludGEuaW90LmNsaW1hdGUudjEuQ2xpbWF0ZU1vZGUSDQoFZW5kZWQYAiABKAgixgsKDkdhdGV3YXlNZXNzYWdlEhIKCm1lc3NhZ2VfaWQYASABKAkSKwoHc2VudF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASRAoOc3RhdGVfc25hcHNob3QYAyABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlU3RhdGVTbmFwc2hvdEgAEkAKD3Byb3BlcnR5X3JlcG9ydBgEIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm9wZXJ0eVJlcG9ydEgAEkgKEXBlcm1pc3Npb25fdXBkYXRlGAUgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpdmVQZXJtaXNzaW9uVXBkYXRlSAASPgoOY29tbWFuZF9yZXN1bHQYBiABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29tbWFuZFJlc3VsdEgAEisKBHBvbmcYCCABKAsyGy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUG9uZ0gAEkYKEmhhbmRzaGFrZV9yZWplY3RlZBgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5IYW5kc2hha2VSZWplY3RlZEgAEjQKBWVycm9yGAogASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkdhdGV3YXlFcnJvckgAEkIKEHN1YnNjcmlwdGlvbl9hY2sYCyABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuU3Vic2NyaXB0aW9uQWNrSAASOgoMZGV2aWNlX2FkZGVkGAwgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZUFkZGVkSAASPgoOZGV2aWNlX3JlbW92ZWQYDSABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlUmVtb3ZlZEgAEkQKEW1hbmFnZW1lbnRfcmVzdWx0GA4gASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLk1hbmFnZW1lbnRSZXN1bHRIABJACg1kZXZpY2VfZXZlbnRzGBAgASgLMicua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZUV2ZW50QmF0Y2hIABJACg9wYWlyaW5nX3N0YXJ0ZWQYESABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGFpcmluZ1N0YXJ0ZWRIABJCChBwYWlyaW5nX2ZpbmlzaGVkGBIgASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLlBhaXJpbmdGaW5pc2hlZEgAEjoKDGxpbmtfY2hhbmdlZBgTIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaW5rQ2hhbmdlZEgAEkoKFGNvbm5lY3RvcnNfYW5ub3VuY2VkGBQgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLkNvbm5lY3RvcnNBbm5vdW5jZWRIABJJChRyb29tX2NsaW1hdGVfY2hhbmdlZBgVIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tQ2xpbWF0ZUNoYW5nZWRIABJJChRjbGltYXRlX21vZGVfY2hhbmdlZBgWIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DbGltYXRlTW9kZUNoYW5nZWRIABJNChZzZXJ2aWNlX3N0YXR1c19jaGFuZ2VkGBcgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VTdGF0dXNDaGFuZ2VkSAASPAoNc3BhY2VfaW52aXRlcxgYIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TcGFjZUludml0ZXNIAEIJCgdwYXlsb2FkSgQIDxAQSgQIBxAIUhZhdHRyaWJ1dGVfd3JpdGVfcmVzdWx0Ug5wcm9wZXJ0eV9ldmVudCKDBQoKQXBwTWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjgKCWhhbmRzaGFrZRgDIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BcHBIYW5kc2hha2VIABI3Cgdjb21tYW5kGAQgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZUNvbW1hbmRIABJCCgxyZWFkX3JlcXVlc3QYBSABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvcGVydHlSZWFkUmVxdWVzdEgAEisKBHBpbmcYBiABKAsyGy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGluZ0gAEjwKCXN1YnNjcmliZRgHIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TdWJzY3JpYmVEZXZpY2VzSAASQAoLdW5zdWJzY3JpYmUYCCABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuVW5zdWJzY3JpYmVEZXZpY2VzSAASPgoKbWFuYWdlbWVudBgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYW5hZ2VtZW50UmVxdWVzdEgAEkcKD2F0dHJpYnV0ZV93cml0ZRgKIAEoCzIsLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BdHRyaWJ1dGVXcml0ZVJlcXVlc3RIABI8Cg1zdGFydF9wYWlyaW5nGAsgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlN0YXJ0UGFpcmluZ0gAQgkKB3BheWxvYWQqogIKEEdhdGV3YXlFcnJvckNvZGUSIgoeR0FURVdBWV9FUlJPUl9DT0RFX1VOU1BFQ0lGSUVEEAASIwofR0FURVdBWV9FUlJPUl9DT0RFX05PVF9FTlRJVExFRBABEiYKIkdBVEVXQVlfRVJST1JfQ09ERV9JTlZBTElEX1JFUVVFU1QQAhIiCh5HQVRFV0FZX0VSUk9SX0NPREVfVU5BVkFJTEFCTEUQAxIfChtHQVRFV0FZX0VSUk9SX0NPREVfSU5URVJOQUwQBBIsCihHQVRFV0FZX0VSUk9SX0NPREVfU0VTU0lPTl9MSU1JVF9SRUFDSEVEEAUSKgomR0FURVdBWV9FUlJPUl9DT0RFX0ZBSUxFRF9QUkVDT05ESVRJT04QBkICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_pairing, file_kusinta_iot_common_v1_types, file_kusinta_iot_device_v1_device_event, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_webrtc_v1_command, file_kusinta_iot_webrtc_v1_device_state, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_management, file_kusinta_iot_webrtc_v1_permission_push]);
26
+ fileDesc("CiRrdXNpbnRhL2lvdC93ZWJydGMvdjEvZW52ZWxvcGUucHJvdG8SFWt1c2ludGEuaW90LndlYnJ0Yy52MSIGCgRQaW5nIgYKBFBvbmciIwoRSGFuZHNoYWtlUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlwKDEFwcEhhbmRzaGFrZRILCgNqd3QYASABKAkSPwoUc3Vic2NyaWJlX2RldmljZV9pZHMYAiADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJJChBTdWJzY3JpYmVEZXZpY2VzEjUKCmRldmljZV9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJLChJVbnN1YnNjcmliZURldmljZXMSNQoKZGV2aWNlX2lkcxgBIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIpMBChNSZWZ1c2VkU3Vic2NyaXB0aW9uEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjUKBGNvZGUYAiABKA4yJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yQ29kZRIPCgdtZXNzYWdlGAMgASgJIpoBCg9TdWJzY3JpcHRpb25BY2sSEwoLaW5fcmVwbHlfdG8YASABKAkSNQoKc3Vic2NyaWJlZBgCIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjsKB3JlZnVzZWQYAyADKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVmdXNlZFN1YnNjcmlwdGlvbiLRAQoTUHJvcGVydHlSZWFkUmVxdWVzdBI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCgZ0YXJnZXQYByABKAsyIy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuQXR0cmlidXRlUmVmSgQIAhAHUg5hdHRyaWJ1dGVfbmFtZVIOY2x1c3Rlcl9pZF9oZXhSCmNsdXN0ZXJfaWRSC2VuZHBvaW50X2lkUhB2ZW5kb3JfZXh0ZW5zaW9uIswBCgxHYXRld2F5RXJyb3ISNQoEY29kZRgBIAEoDjInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5RXJyb3JDb2RlEg8KB21lc3NhZ2UYAiABKAkSQwoIbWV0YWRhdGEYAyADKAsyMS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIpMGChBNYW5hZ2VtZW50UmVzdWx0EhMKC2luX3JlcGx5X3RvGAEgASgJEjQKBWVycm9yGAIgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkdhdGV3YXlFcnJvckgAEiwKBXNwYWNlGAMgASgLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2VIABI2CgpzcGFjZV90cmVlGAQgASgLMiAua3VzaW50YS5pb3Qud2VicnRjLnYxLlNwYWNlVHJlZUgAEjMKA2FjaxgFIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYW5hZ2VtZW50QWNrSAASNAoFbGlua3MYBiABKAsyIy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmtMaXN0SAASQAoNcm9vbV9jbGltYXRlcxgHIAEoCzInLmt1c2ludGEuaW90LmNsaW1hdGUudjEuUm9vbUNsaW1hdGVMaXN0SAASOwoMcm9vbV9oaXN0b3J5GAggASgLMiMua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tSGlzdG9yeUgAEkYKEnByaXZhY3lfZGlzY2xvc3VyZRgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcml2YWN5RGlzY2xvc3VyZUgAElQKGWFwYXJ0bWVudF9jbGltYXRlX3N1bW1hcnkYCiABKAsyLy5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5SAASPAoNaXNzdWVkX2ludml0ZRgLIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Jc3N1ZWRJbnZpdGVIABI8Cg1zcGFjZV9pbnZpdGVzGAwgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNwYWNlSW52aXRlc0gAEkAKD2dhdGV3YXlfbWVtYmVycxgNIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5TWVtYmVyc0gAQggKBnJlc3VsdCL7AQoMU3RhcnRQYWlyaW5nEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEjQKBndpbmRvdxgCIAEoCzIkLmt1c2ludGEuaW90LmNvbW1vbi52MS5QYWlyaW5nV2luZG93EjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEj0KCW93bmVyc2hpcBgEIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlIo8BCg5QYWlyaW5nU3RhcnRlZBITCgtpbl9yZXBseV90bxgBIAEoCRIuCgpleHBpcmVzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI4CgVlcnJvchgDIAEoCzIpLmt1c2ludGEuaW90LmNvbW1vbi52MS5QYWlyaW5nRXJyb3JEZXRhaWwilwEKD1BhaXJpbmdGaW5pc2hlZBITCgtpbl9yZXBseV90bxgBIAEoCRI1CgpkZXZpY2VfaWRzGAIgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSOAoFZXJyb3IYAyABKAsyKS5rdXNpbnRhLmlvdC5jb21tb24udjEuUGFpcmluZ0Vycm9yRGV0YWlsIk0KC0xpbmtDaGFuZ2VkEi0KBGxpbmsYASABKAsyHy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmsSDwoHcmVtb3ZlZBgCIAEoCCKIAwoTQ29ubmVjdG9yRGVzY3JpcHRvchI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZBIUCgxkaXNwbGF5X25hbWUYAiABKAkSIQoZc3VwcG9ydGVkX2RldmljZV90eXBlX2lkcxgDIAMoDRIYChBzdXBwb3J0c19wYWlyaW5nGAQgASgIEh0KFXN1cHBvcnRzX3Byb3Zpc2lvbmluZxgFIAEoCBIVCg1icm9rZXJzX2xpbmtzGAYgASgIEjIKBGtpbmQYByABKA4yJC5rdXNpbnRhLmlvdC5jb21tb24udjEuQ29ubmVjdG9yS2luZBITCgtkZXNjcmlwdGlvbhgIIAEoCRI8Cg5iYWNrZW5kX2hlYWx0aBgJIAEoCzIkLmt1c2ludGEuaW90LmNvbW1vbi52MS5CYWNrZW5kSGVhbHRoEiUKHXN1cHBvcnRzX2JhY2tlbmRfcmVpbml0aWFsaXplGAogASgIIlUKE0Nvbm5lY3RvcnNBbm5vdW5jZWQSPgoKY29ubmVjdG9ycxgBIAMoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25uZWN0b3JEZXNjcmlwdG9yIkcKElJvb21DbGltYXRlQ2hhbmdlZBIxCgRyb29tGAEgASgLMiMua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tQ2xpbWF0ZSJWChJDbGltYXRlTW9kZUNoYW5nZWQSMQoEbW9kZRgBIAEoCzIjLmt1c2ludGEuaW90LmNsaW1hdGUudjEuQ2xpbWF0ZU1vZGUSDQoFZW5kZWQYAiABKAgixgsKDkdhdGV3YXlNZXNzYWdlEhIKCm1lc3NhZ2VfaWQYASABKAkSKwoHc2VudF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASRAoOc3RhdGVfc25hcHNob3QYAyABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlU3RhdGVTbmFwc2hvdEgAEkAKD3Byb3BlcnR5X3JlcG9ydBgEIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm9wZXJ0eVJlcG9ydEgAEkgKEXBlcm1pc3Npb25fdXBkYXRlGAUgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpdmVQZXJtaXNzaW9uVXBkYXRlSAASPgoOY29tbWFuZF9yZXN1bHQYBiABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29tbWFuZFJlc3VsdEgAEisKBHBvbmcYCCABKAsyGy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUG9uZ0gAEkYKEmhhbmRzaGFrZV9yZWplY3RlZBgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5IYW5kc2hha2VSZWplY3RlZEgAEjQKBWVycm9yGAogASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkdhdGV3YXlFcnJvckgAEkIKEHN1YnNjcmlwdGlvbl9hY2sYCyABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuU3Vic2NyaXB0aW9uQWNrSAASOgoMZGV2aWNlX2FkZGVkGAwgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZUFkZGVkSAASPgoOZGV2aWNlX3JlbW92ZWQYDSABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlUmVtb3ZlZEgAEkQKEW1hbmFnZW1lbnRfcmVzdWx0GA4gASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLk1hbmFnZW1lbnRSZXN1bHRIABJACg1kZXZpY2VfZXZlbnRzGBAgASgLMicua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZUV2ZW50QmF0Y2hIABJACg9wYWlyaW5nX3N0YXJ0ZWQYESABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGFpcmluZ1N0YXJ0ZWRIABJCChBwYWlyaW5nX2ZpbmlzaGVkGBIgASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLlBhaXJpbmdGaW5pc2hlZEgAEjoKDGxpbmtfY2hhbmdlZBgTIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaW5rQ2hhbmdlZEgAEkoKFGNvbm5lY3RvcnNfYW5ub3VuY2VkGBQgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLkNvbm5lY3RvcnNBbm5vdW5jZWRIABJJChRyb29tX2NsaW1hdGVfY2hhbmdlZBgVIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tQ2xpbWF0ZUNoYW5nZWRIABJJChRjbGltYXRlX21vZGVfY2hhbmdlZBgWIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DbGltYXRlTW9kZUNoYW5nZWRIABJNChZzZXJ2aWNlX3N0YXR1c19jaGFuZ2VkGBcgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VTdGF0dXNDaGFuZ2VkSAASPAoNc3BhY2VfaW52aXRlcxgYIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TcGFjZUludml0ZXNIAEIJCgdwYXlsb2FkSgQIDxAQSgQIBxAIUhZhdHRyaWJ1dGVfd3JpdGVfcmVzdWx0Ug5wcm9wZXJ0eV9ldmVudCKDBQoKQXBwTWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjgKCWhhbmRzaGFrZRgDIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BcHBIYW5kc2hha2VIABI3Cgdjb21tYW5kGAQgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZUNvbW1hbmRIABJCCgxyZWFkX3JlcXVlc3QYBSABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvcGVydHlSZWFkUmVxdWVzdEgAEisKBHBpbmcYBiABKAsyGy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGluZ0gAEjwKCXN1YnNjcmliZRgHIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TdWJzY3JpYmVEZXZpY2VzSAASQAoLdW5zdWJzY3JpYmUYCCABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuVW5zdWJzY3JpYmVEZXZpY2VzSAASPgoKbWFuYWdlbWVudBgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYW5hZ2VtZW50UmVxdWVzdEgAEkcKD2F0dHJpYnV0ZV93cml0ZRgKIAEoCzIsLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BdHRyaWJ1dGVXcml0ZVJlcXVlc3RIABI8Cg1zdGFydF9wYWlyaW5nGAsgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlN0YXJ0UGFpcmluZ0gAQgkKB3BheWxvYWQqogIKEEdhdGV3YXlFcnJvckNvZGUSIgoeR0FURVdBWV9FUlJPUl9DT0RFX1VOU1BFQ0lGSUVEEAASIwofR0FURVdBWV9FUlJPUl9DT0RFX05PVF9FTlRJVExFRBABEiYKIkdBVEVXQVlfRVJST1JfQ09ERV9JTlZBTElEX1JFUVVFU1QQAhIiCh5HQVRFV0FZX0VSUk9SX0NPREVfVU5BVkFJTEFCTEUQAxIfChtHQVRFV0FZX0VSUk9SX0NPREVfSU5URVJOQUwQBBIsCihHQVRFV0FZX0VSUk9SX0NPREVfU0VTU0lPTl9MSU1JVF9SRUFDSEVEEAUSKgomR0FURVdBWV9FUlJPUl9DT0RFX0ZBSUxFRF9QUkVDT05ESVRJT04QBkICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_pairing, file_kusinta_iot_common_v1_types, file_kusinta_iot_device_v1_device_event, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_webrtc_v1_command, file_kusinta_iot_webrtc_v1_device_state, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_management, file_kusinta_iot_webrtc_v1_members, file_kusinta_iot_webrtc_v1_permission_push]);
26
27
 
27
28
  /**
28
29
  * Describes the message kusinta.iot.webrtc.v1.Ping.
@@ -62,6 +62,21 @@ export declare type CreateInvite = Message<"kusinta.iot.webrtc.v1.CreateInvite">
62
62
  * @generated from field: string email = 3;
63
63
  */
64
64
  email: string;
65
+
66
+ /**
67
+ * When the technician's access ends, as SetAccessUntil describes it. SERVICE only: set
68
+ * on a RESIDENT invite it is INVALID_REQUEST, as is a time not after now. Unset for no
69
+ * end. Both secrets expire no later than it.
70
+ *
71
+ * It reaches only someone the redeem, or the approval of the join request it makes, makes
72
+ * a technician: a user who held no role but ROLE_RESIDENT before and is not the
73
+ * registering administrator. For anyone else it is ignored, so an invite can neither
74
+ * shorten nor lengthen a member's access, nor put an end on a property owner or an
75
+ * administrator. A join request the invite makes expires no later than it.
76
+ *
77
+ * @generated from field: google.protobuf.Timestamp access_until = 4;
78
+ */
79
+ accessUntil?: Timestamp | undefined;
65
80
  };
66
81
 
67
82
  /**
@@ -254,6 +269,13 @@ export declare type Invite = Message<"kusinta.iot.webrtc.v1.Invite"> & {
254
269
  * @generated from field: google.protobuf.Timestamp email_sent_at = 9;
255
270
  */
256
271
  emailSentAt?: Timestamp | undefined;
272
+
273
+ /**
274
+ * As CreateInvite.access_until.
275
+ *
276
+ * @generated from field: google.protobuf.Timestamp access_until = 10;
277
+ */
278
+ accessUntil?: Timestamp | undefined;
257
279
  };
258
280
 
259
281
  /**
@@ -356,6 +378,15 @@ export declare type JoinRequest = Message<"kusinta.iot.webrtc.v1.JoinRequest"> &
356
378
  * @generated from field: string email = 9;
357
379
  */
358
380
  email: string;
381
+
382
+ /**
383
+ * The end of access the request asks for: CreateInvite.access_until of the invite that
384
+ * was redeemed, which the approval gives as that field says. Unset for none. The request
385
+ * expires no later than it, so it is never approved once the end has passed.
386
+ *
387
+ * @generated from field: google.protobuf.Timestamp access_until = 10;
388
+ */
389
+ accessUntil?: Timestamp | undefined;
359
390
  };
360
391
 
361
392
  /**
@@ -11,7 +11,7 @@ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identit
11
11
  * Describes the file kusinta/iot/webrtc/v1/invite.proto.
12
12
  */
13
13
  export const file_kusinta_iot_webrtc_v1_invite = /*@__PURE__*/
14
- fileDesc("CiJrdXNpbnRhL2lvdC93ZWJydGMvdjEvaW52aXRlLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEijgEKDENyZWF0ZUludml0ZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSOwoIcmVsYXRpb24YAiABKA4yKS5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuTWVtYmVyc2hpcFJlbGF0aW9uEg0KBWVtYWlsGAMgASgJIiEKDFJlc2VuZEludml0ZRIRCglpbnZpdGVfaWQYASABKAkiIQoMUmV2b2tlSW52aXRlEhEKCWludml0ZV9pZBgBIAEoCSIoChNNYXJrSW52aXRlRW1haWxTZW50EhEKCWludml0ZV9pZBgBIAEoCSJGChBMaXN0U3BhY2VJbnZpdGVzEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCIoChJBcHByb3ZlSm9pblJlcXVlc3QSEgoKcmVxdWVzdF9pZBgBIAEoCSIlCg9EZW55Sm9pblJlcXVlc3QSEgoKcmVxdWVzdF9pZBgBIAEoCSKeAwoGSW52aXRlEhEKCWludml0ZV9pZBgBIAEoCRIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSOwoIcmVsYXRpb24YAyABKA4yKS5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuTWVtYmVyc2hpcFJlbGF0aW9uEjMKCmNyZWF0ZWRfYnkYBCABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNAoQdG9rZW5fZXhwaXJlc19hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMwoPY29kZV9leHBpcmVzX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBINCgVlbWFpbBgIIAEoCRIxCg1lbWFpbF9zZW50X2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJaCgxJc3N1ZWRJbnZpdGUSLQoGaW52aXRlGAEgASgLMh0ua3VzaW50YS5pb3Qud2VicnRjLnYxLkludml0ZRINCgV0b2tlbhgCIAEoCRIMCgRjb2RlGAMgASgJIoADCgtKb2luUmVxdWVzdBISCgpyZXF1ZXN0X2lkGAEgASgJEjIKCHNwYWNlX2lkGAIgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI7CghyZWxhdGlvbhgDIAEoDjIpLmt1c2ludGEuaW90LmFjY2Vzcy52MS5NZW1iZXJzaGlwUmVsYXRpb24SMAoHdXNlcl9pZBgEIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBIUCgxkaXNwbGF5X25hbWUYBSABKAkSMwoKaW52aXRlZF9ieRgGIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBIwCgxyZXF1ZXN0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmV4cGlyZXNfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg0KBWVtYWlsGAkgASgJIq0BCgxTcGFjZUludml0ZXMSMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEi4KB2ludml0ZXMYAiADKAsyHS5rdXNpbnRhLmlvdC53ZWJydGMudjEuSW52aXRlEjkKDWpvaW5fcmVxdWVzdHMYAyADKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuSm9pblJlcXVlc3RCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_roles, file_kusinta_iot_identity_v1_identity]);
14
+ fileDesc("CiJrdXNpbnRhL2lvdC93ZWJydGMvdjEvaW52aXRlLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEiwAEKDENyZWF0ZUludml0ZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSOwoIcmVsYXRpb24YAiABKA4yKS5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuTWVtYmVyc2hpcFJlbGF0aW9uEg0KBWVtYWlsGAMgASgJEjAKDGFjY2Vzc191bnRpbBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiIQoMUmVzZW5kSW52aXRlEhEKCWludml0ZV9pZBgBIAEoCSIhCgxSZXZva2VJbnZpdGUSEQoJaW52aXRlX2lkGAEgASgJIigKE01hcmtJbnZpdGVFbWFpbFNlbnQSEQoJaW52aXRlX2lkGAEgASgJIkYKEExpc3RTcGFjZUludml0ZXMSMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIigKEkFwcHJvdmVKb2luUmVxdWVzdBISCgpyZXF1ZXN0X2lkGAEgASgJIiUKD0RlbnlKb2luUmVxdWVzdBISCgpyZXF1ZXN0X2lkGAEgASgJItADCgZJbnZpdGUSEQoJaW52aXRlX2lkGAEgASgJEjIKCHNwYWNlX2lkGAIgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI7CghyZWxhdGlvbhgDIAEoDjIpLmt1c2ludGEuaW90LmFjY2Vzcy52MS5NZW1iZXJzaGlwUmVsYXRpb24SMwoKY3JlYXRlZF9ieRgEIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI0ChB0b2tlbl9leHBpcmVzX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCg9jb2RlX2V4cGlyZXNfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg0KBWVtYWlsGAggASgJEjEKDWVtYWlsX3NlbnRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjAKDGFjY2Vzc191bnRpbBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiWgoMSXNzdWVkSW52aXRlEi0KBmludml0ZRgBIAEoCzIdLmt1c2ludGEuaW90LndlYnJ0Yy52MS5JbnZpdGUSDQoFdG9rZW4YAiABKAkSDAoEY29kZRgDIAEoCSKyAwoLSm9pblJlcXVlc3QSEgoKcmVxdWVzdF9pZBgBIAEoCRIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSOwoIcmVsYXRpb24YAyABKA4yKS5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuTWVtYmVyc2hpcFJlbGF0aW9uEjAKB3VzZXJfaWQYBCABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSFAoMZGlzcGxheV9uYW1lGAUgASgJEjMKCmludml0ZWRfYnkYBiABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSMAoMcmVxdWVzdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpleHBpcmVzX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBINCgVlbWFpbBgJIAEoCRIwCgxhY2Nlc3NfdW50aWwYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIq0BCgxTcGFjZUludml0ZXMSMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEi4KB2ludml0ZXMYAiADKAsyHS5rdXNpbnRhLmlvdC53ZWJydGMudjEuSW52aXRlEjkKDWpvaW5fcmVxdWVzdHMYAyADKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuSm9pblJlcXVlc3RCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_roles, file_kusinta_iot_identity_v1_identity]);
15
15
 
16
16
  /**
17
17
  * Describes the message kusinta.iot.webrtc.v1.CreateInvite.
@@ -14,6 +14,7 @@ import type { ClimateModeKind, ClimateSummaryPeriod } from "../../climate/v1/cli
14
14
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
15
15
  import type { ServiceSignal } from "../../access/v1/acl_pb.js";
16
16
  import type { ApproveJoinRequest, CreateInvite, DenyJoinRequest, ListSpaceInvites, MarkInviteEmailSent, ResendInvite, RevokeInvite } from "./invite_pb.js";
17
+ import type { ListGatewayMembers, RemoveFromGateway, SetAccessUntil, SetMemberRole, SetOwnerOrganisation } from "./members_pb.js";
17
18
 
18
19
  /**
19
20
  * Describes the file kusinta/iot/webrtc/v1/management.proto.
@@ -922,10 +923,9 @@ export declare const GetRoomHistorySchema: GenMessage<GetRoomHistory>;
922
923
  * What the parties who do not live in a private space learn of it — the answer to a
923
924
  * resident asking who can see what in their home, in reply to GetPrivacyDisclosure.
924
925
  *
925
- * It states the policy and the kinds of party it applies to now. It NAMES NOBODY: a resident
926
- * learns that a technician can see the battery of their radiator valve, not which
927
- * technician. Those filed on the home itself are named to its residents in Space.members;
928
- * service reach from a building or floor above is not.
926
+ * It states the policy, the kinds of party it applies to now and the people counted under
927
+ * each (ServiceParty.names): a resident learns which technicians can see the battery of
928
+ * their radiator valve. The names say who has reach, never where anyone lives.
929
929
  *
930
930
  * @generated from message kusinta.iot.webrtc.v1.PrivacyDisclosure
931
931
  */
@@ -942,9 +942,10 @@ export declare type PrivacyDisclosure = Message<"kusinta.iot.webrtc.v1.PrivacyDi
942
942
  * through another membership, were they not its residents — each role once, with what
943
943
  * that role brings here. Each party is listed under every role it holds other than
944
944
  * ROLE_RESIDENT, and sees what its entries say together; one with no other role, or whose
945
- * role the gateway has not yet learnt, counts as ROLE_UNSPECIFIED. The gateway's
946
- * administrator is always listed. So the list reads the same whether or not anyone lives
947
- * in the home, and never understates who has reach or what they see. Devices a resident
945
+ * role the gateway has not yet learnt, counts as ROLE_UNSPECIFIED. ROLE_GATEWAY_ADMIN is
946
+ * always listed, and ROLE_PROPERTY_OWNER whenever anyone holds it, wherever they are
947
+ * filed: both may file themselves on the home. So the list reads the same whether or not
948
+ * anyone lives in the home, and never understates who has reach or what they see. Devices a resident
948
949
  * owns are not shown to service at all.
949
950
  *
950
951
  * @generated from field: repeated kusinta.iot.webrtc.v1.ServiceParty service_parties = 5;
@@ -961,6 +962,24 @@ export declare type PrivacyDisclosure = Message<"kusinta.iot.webrtc.v1.PrivacyDi
961
962
  * @generated from field: kusinta.iot.climate.v1.ClimateSummaryPeriod climate_summary_period = 4;
962
963
  */
963
964
  climateSummaryPeriod: ClimateSummaryPeriod;
965
+
966
+ /**
967
+ * The name of the organisation that owns the property, when one is recorded
968
+ * (SetOwnerOrganisation). Its organisation number is not given here.
969
+ *
970
+ * @generated from field: string owner_organisation_name = 6;
971
+ */
972
+ ownerOrganisationName: string;
973
+
974
+ /**
975
+ * Set when ServiceParty.names are not given to this caller, so that empty lists are not
976
+ * read as nobody being named. Names are given to the home's own residents and to a
977
+ * caller holding ROLE_GATEWAY_ADMIN or ROLE_PROPERTY_OWNER, and withheld from anyone
978
+ * else: a technician who reaches the home learns the kinds of party, not who they are.
979
+ *
980
+ * @generated from field: bool names_withheld = 7;
981
+ */
982
+ namesWithheld: boolean;
964
983
  };
965
984
 
966
985
  /**
@@ -988,6 +1007,20 @@ export declare type ServiceParty = Message<"kusinta.iot.webrtc.v1.ServiceParty">
988
1007
  * @generated from field: repeated kusinta.iot.access.v1.ServiceSignal signals = 2;
989
1008
  */
990
1009
  signals: ServiceSignal[];
1010
+
1011
+ /**
1012
+ * Each person counted under this role, by the name they gave their account
1013
+ * (MemberDetail.name), once each: everyone holding ROLE_GATEWAY_ADMIN or
1014
+ * ROLE_PROPERTY_OWNER, the registering administrator included once the gateway has seen
1015
+ * their token, and everyone else counted here by a SERVICE membership. A person counted
1016
+ * under several roles is named under each. An empty string stands for a person whose name
1017
+ * the gateway has not learnt, so the list is as long as the number of people. Self-chosen,
1018
+ * so the app shows it as the name they gave rather than as a verified identity. Empty for
1019
+ * every party when PrivacyDisclosure.names_withheld is set.
1020
+ *
1021
+ * @generated from field: repeated string names = 3;
1022
+ */
1023
+ names: string[];
991
1024
  };
992
1025
 
993
1026
  /**
@@ -1340,6 +1373,38 @@ export declare type ManagementRequest = Message<"kusinta.iot.webrtc.v1.Managemen
1340
1373
  */
1341
1374
  value: DenyJoinRequest;
1342
1375
  case: "denyJoinRequest";
1376
+ } | {
1377
+ /**
1378
+ * Members; see members.proto.
1379
+ *
1380
+ * @generated from field: kusinta.iot.webrtc.v1.ListGatewayMembers list_gateway_members = 31;
1381
+ */
1382
+ value: ListGatewayMembers;
1383
+ case: "listGatewayMembers";
1384
+ } | {
1385
+ /**
1386
+ * @generated from field: kusinta.iot.webrtc.v1.SetMemberRole set_member_role = 32;
1387
+ */
1388
+ value: SetMemberRole;
1389
+ case: "setMemberRole";
1390
+ } | {
1391
+ /**
1392
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveFromGateway remove_from_gateway = 33;
1393
+ */
1394
+ value: RemoveFromGateway;
1395
+ case: "removeFromGateway";
1396
+ } | {
1397
+ /**
1398
+ * @generated from field: kusinta.iot.webrtc.v1.SetAccessUntil set_access_until = 34;
1399
+ */
1400
+ value: SetAccessUntil;
1401
+ case: "setAccessUntil";
1402
+ } | {
1403
+ /**
1404
+ * @generated from field: kusinta.iot.webrtc.v1.SetOwnerOrganisation set_owner_organisation = 35;
1405
+ */
1406
+ value: SetOwnerOrganisation;
1407
+ case: "setOwnerOrganisation";
1343
1408
  } | { case: undefined; value?: undefined };
1344
1409
  };
1345
1410
 
@@ -13,12 +13,13 @@ import { file_kusinta_iot_link_v1_link } from "../../link/v1/link_pb.js";
13
13
  import { file_kusinta_iot_space_v1_space } from "../../space/v1/space_pb.js";
14
14
  import { file_kusinta_iot_vendor_lorawan_v1_lorawan } from "../../vendor/lorawan/v1/lorawan_pb.js";
15
15
  import { file_kusinta_iot_webrtc_v1_invite } from "./invite_pb.js";
16
+ import { file_kusinta_iot_webrtc_v1_members } from "./members_pb.js";
16
17
 
17
18
  /**
18
19
  * Describes the file kusinta/iot/webrtc/v1/management.proto.
19
20
  */
20
21
  export const file_kusinta_iot_webrtc_v1_management = /*@__PURE__*/
21
- fileDesc("CiZrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWFuYWdlbWVudC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxItYBCgtDcmVhdGVTcGFjZRI0CgpzcGFjZV90eXBlGAEgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBWZsb29yGAQgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgFIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSFgoJdGltZV96b25lGAYgASgJSACIAQFCDAoKX3RpbWVfem9uZSL1AgoLVXBkYXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjkKCnNwYWNlX3R5cGUYAiABKA4yIC5rdXNpbnRhLmlvdC5jb21tb24udjEuU3BhY2VUeXBlSAGIAQESEQoEbmFtZRgDIAEoCUgCiAEBEhgKC2Rlc2NyaXB0aW9uGAQgASgJSAOIAQESEgoFZmxvb3IYBSABKAVIBIgBARI7Cg9wYXJlbnRfc3BhY2VfaWQYBiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkSAASEAoGZGV0YWNoGAcgASgISAASFgoJdGltZV96b25lGAggASgJSAWIAQFCDwoNcGFyZW50X2NoYW5nZUINCgtfc3BhY2VfdHlwZUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCAoGX2Zsb29yQgwKCl90aW1lX3pvbmUiUgoLRGVsZXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg8KB2Nhc2NhZGUYAiABKAgivAEKEUFzc2lnblVzZXJUb1NwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEjsKCHJlbGF0aW9uGAQgASgOMikua3VzaW50YS5pb3QuYWNjZXNzLnYxLk1lbWJlcnNoaXBSZWxhdGlvbkoECAMQBCJ7ChNSZW1vdmVVc2VyRnJvbVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkIn4KElBsYWNlRGV2aWNlSW5TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQigQEKFVJlbW92ZURldmljZUZyb21TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi2AEKC0NsYWltRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEj0KCW93bmVyc2hpcBgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEhgKEHBvc3Nlc3Npb25fcHJvb2YYBCABKAkiRQoNUmVsZWFzZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCKjAQoPUHJvdmlzaW9uRGV2aWNlEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEkUKB2xvcmF3YW4YAiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IubG9yYXdhbi52MS5Mb3Jhd2FuUHJvdmlzaW9uaW5nSABCDQoLY3JlZGVudGlhbHMiRQoKTGlzdFNwYWNlcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCI4CglTcGFjZVRyZWUSKwoGc3BhY2VzGAEgAygLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2UiDwoNTWFuYWdlbWVudEFjayKRAgoQQ3JlYXRlRGV2aWNlTGluaxIxCgZzZW5kZXIYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgCIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAMgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24SKwoEbW9kZRgEIAEoDjIdLmt1c2ludGEuaW90LmxpbmsudjEuTGlua01vZGUSMwoIc2V0dGluZ3MYBSABKAsyIS5rdXNpbnRhLmlvdC5saW5rLnYxLkxpbmtTZXR0aW5ncyIjChBSZW1vdmVEZXZpY2VMaW5rEg8KB2xpbmtfaWQYASABKAkiWAoQVXBkYXRlRGV2aWNlTGluaxIPCgdsaW5rX2lkGAEgASgJEjMKCHNldHRpbmdzGAIgASgLMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rU2V0dGluZ3MiRwoPTGlzdERldmljZUxpbmtzEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkInwKDVNldFJvb21UYXJnZXQSMQoHcm9vbV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSIAoTdGFyZ2V0X2NlbnRpZGVncmVlcxgCIAEoEUgAiAEBQhYKFF90YXJnZXRfY2VudGlkZWdyZWVzIkQKC1Jvb21TZW5zb3JzEjUKCnNlbnNvcl9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJ0CgpSb29tTGltaXRzEh0KEG1pbl9jZW50aWRlZ3JlZXMYASABKBFIAIgBARIdChBtYXhfY2VudGlkZWdyZWVzGAIgASgRSAGIAQFCEwoRX21pbl9jZW50aWRlZ3JlZXNCEwoRX21heF9jZW50aWRlZ3JlZXMi7QEKFENvbmZpZ3VyZVJvb21DbGltYXRlEjEKB3Jvb21faWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjEKBmxpbWl0cxgCIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tTGltaXRzEjMKB3NlbnNvcnMYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUm9vbVNlbnNvcnMSIQoUbG9ja19kZXZpY2VfY29udHJvbHMYBCABKAhIAIgBAUIXChVfbG9ja19kZXZpY2VfY29udHJvbHMikwIKDlNldENsaW1hdGVNb2RlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI1CgRraW5kGAIgASgOMicua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlTW9kZUtpbmQSIQoUc2V0YmFja19jZW50aWRlZ3JlZXMYAyABKBFIAIgBARItCglzdGFydHNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB2VuZHNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhcKFV9zZXRiYWNrX2NlbnRpZGVncmVlcyJLChBMaXN0Um9vbUNsaW1hdGVzEjcKDXJvb3Rfc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIp8BCg5HZXRSb29tSGlzdG9yeRIxCgdyb29tX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBItCglmcm9tX3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIt8BChFQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoPc2VydmljZV9wYXJ0aWVzGAUgAygLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VQYXJ0eRJMChZjbGltYXRlX3N1bW1hcnlfcGVyaW9kGAQgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZEoECAIQA0oECAMQBCJwCgxTZXJ2aWNlUGFydHkSKQoEcm9sZRgBIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjUKB3NpZ25hbHMYAiADKA4yJC5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuU2VydmljZVNpZ25hbCJKChRHZXRQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi7gEKGkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5EjYKDGFwYXJ0bWVudF9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoGcGVyaW9kGAIgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBItCglmcm9tX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKElJlY29ubmVjdENvbm5lY3RvchI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZCLNEAoRTWFuYWdlbWVudFJlcXVlc3QSOgoMY3JlYXRlX3NwYWNlGAEgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZVNwYWNlSAASOgoMdXBkYXRlX3NwYWNlGAIgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLlVwZGF0ZVNwYWNlSAASOgoMZGVsZXRlX3NwYWNlGAMgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkRlbGV0ZVNwYWNlSAASSAoUYXNzaWduX3VzZXJfdG9fc3BhY2UYBCABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXNzaWduVXNlclRvU3BhY2VIABJMChZyZW1vdmVfdXNlcl9mcm9tX3NwYWNlGAUgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZVVzZXJGcm9tU3BhY2VIABJKChVwbGFjZV9kZXZpY2VfaW5fc3BhY2UYBiABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGxhY2VEZXZpY2VJblNwYWNlSAASUAoYcmVtb3ZlX2RldmljZV9mcm9tX3NwYWNlGAcgASgLMiwua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZURldmljZUZyb21TcGFjZUgAEjoKDGNsYWltX2RldmljZRgIIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DbGFpbURldmljZUgAEj4KDnJlbGVhc2VfZGV2aWNlGAkgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbGVhc2VEZXZpY2VIABI4CgtsaXN0X3NwYWNlcxgKIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0U3BhY2VzSAASRQoSY3JlYXRlX2RldmljZV9saW5rGAsgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZURldmljZUxpbmtIABJFChJyZW1vdmVfZGV2aWNlX2xpbmsYDCABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlRGV2aWNlTGlua0gAEkMKEWxpc3RfZGV2aWNlX2xpbmtzGA0gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3REZXZpY2VMaW5rc0gAEkUKEnVwZGF0ZV9kZXZpY2VfbGluaxgOIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5VcGRhdGVEZXZpY2VMaW5rSAASQgoQcHJvdmlzaW9uX2RldmljZRgPIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm92aXNpb25EZXZpY2VIABI/Cg9zZXRfcm9vbV90YXJnZXQYECABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0Um9vbVRhcmdldEgAEk0KFmNvbmZpZ3VyZV9yb29tX2NsaW1hdGUYESABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29uZmlndXJlUm9vbUNsaW1hdGVIABJBChBzZXRfY2xpbWF0ZV9tb2RlGBIgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldENsaW1hdGVNb2RlSAASRQoSbGlzdF9yb29tX2NsaW1hdGVzGBMgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RSb29tQ2xpbWF0ZXNIABJBChBnZXRfcm9vbV9oaXN0b3J5GBQgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLkdldFJvb21IaXN0b3J5SAASTQoWZ2V0X3ByaXZhY3lfZGlzY2xvc3VyZRgVIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HZXRQcml2YWN5RGlzY2xvc3VyZUgAEloKHWdldF9hcGFydG1lbnRfY2xpbWF0ZV9zdW1tYXJ5GBYgASgLMjEua3VzaW50YS5pb3Qud2VicnRjLnYxLkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5SAASSAoTcmVjb25uZWN0X2Nvbm5lY3RvchgXIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZWNvbm5lY3RDb25uZWN0b3JIABI8Cg1jcmVhdGVfaW52aXRlGBggASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZUludml0ZUgAEjwKDXJlc2VuZF9pbnZpdGUYGSABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVzZW5kSW52aXRlSAASPAoNcmV2b2tlX2ludml0ZRgaIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZXZva2VJbnZpdGVIABJMChZtYXJrX2ludml0ZV9lbWFpbF9zZW50GBsgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLk1hcmtJbnZpdGVFbWFpbFNlbnRIABJFChJsaXN0X3NwYWNlX2ludml0ZXMYHCABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdFNwYWNlSW52aXRlc0gAEkkKFGFwcHJvdmVfam9pbl9yZXF1ZXN0GB0gASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLkFwcHJvdmVKb2luUmVxdWVzdEgAEkMKEWRlbnlfam9pbl9yZXF1ZXN0GB4gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLkRlbnlKb2luUmVxdWVzdEgAQgkKB3JlcXVlc3RCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_access_v1_roles, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_vendor_lorawan_v1_lorawan, file_kusinta_iot_webrtc_v1_invite]);
22
+ fileDesc("CiZrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWFuYWdlbWVudC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxItYBCgtDcmVhdGVTcGFjZRI0CgpzcGFjZV90eXBlGAEgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBWZsb29yGAQgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgFIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSFgoJdGltZV96b25lGAYgASgJSACIAQFCDAoKX3RpbWVfem9uZSL1AgoLVXBkYXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjkKCnNwYWNlX3R5cGUYAiABKA4yIC5rdXNpbnRhLmlvdC5jb21tb24udjEuU3BhY2VUeXBlSAGIAQESEQoEbmFtZRgDIAEoCUgCiAEBEhgKC2Rlc2NyaXB0aW9uGAQgASgJSAOIAQESEgoFZmxvb3IYBSABKAVIBIgBARI7Cg9wYXJlbnRfc3BhY2VfaWQYBiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkSAASEAoGZGV0YWNoGAcgASgISAASFgoJdGltZV96b25lGAggASgJSAWIAQFCDwoNcGFyZW50X2NoYW5nZUINCgtfc3BhY2VfdHlwZUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCAoGX2Zsb29yQgwKCl90aW1lX3pvbmUiUgoLRGVsZXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg8KB2Nhc2NhZGUYAiABKAgivAEKEUFzc2lnblVzZXJUb1NwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEjsKCHJlbGF0aW9uGAQgASgOMikua3VzaW50YS5pb3QuYWNjZXNzLnYxLk1lbWJlcnNoaXBSZWxhdGlvbkoECAMQBCJ7ChNSZW1vdmVVc2VyRnJvbVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkIn4KElBsYWNlRGV2aWNlSW5TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQigQEKFVJlbW92ZURldmljZUZyb21TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi2AEKC0NsYWltRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEj0KCW93bmVyc2hpcBgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEhgKEHBvc3Nlc3Npb25fcHJvb2YYBCABKAkiRQoNUmVsZWFzZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCKjAQoPUHJvdmlzaW9uRGV2aWNlEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEkUKB2xvcmF3YW4YAiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IubG9yYXdhbi52MS5Mb3Jhd2FuUHJvdmlzaW9uaW5nSABCDQoLY3JlZGVudGlhbHMiRQoKTGlzdFNwYWNlcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCI4CglTcGFjZVRyZWUSKwoGc3BhY2VzGAEgAygLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2UiDwoNTWFuYWdlbWVudEFjayKRAgoQQ3JlYXRlRGV2aWNlTGluaxIxCgZzZW5kZXIYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgCIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAMgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24SKwoEbW9kZRgEIAEoDjIdLmt1c2ludGEuaW90LmxpbmsudjEuTGlua01vZGUSMwoIc2V0dGluZ3MYBSABKAsyIS5rdXNpbnRhLmlvdC5saW5rLnYxLkxpbmtTZXR0aW5ncyIjChBSZW1vdmVEZXZpY2VMaW5rEg8KB2xpbmtfaWQYASABKAkiWAoQVXBkYXRlRGV2aWNlTGluaxIPCgdsaW5rX2lkGAEgASgJEjMKCHNldHRpbmdzGAIgASgLMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rU2V0dGluZ3MiRwoPTGlzdERldmljZUxpbmtzEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkInwKDVNldFJvb21UYXJnZXQSMQoHcm9vbV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSIAoTdGFyZ2V0X2NlbnRpZGVncmVlcxgCIAEoEUgAiAEBQhYKFF90YXJnZXRfY2VudGlkZWdyZWVzIkQKC1Jvb21TZW5zb3JzEjUKCnNlbnNvcl9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJ0CgpSb29tTGltaXRzEh0KEG1pbl9jZW50aWRlZ3JlZXMYASABKBFIAIgBARIdChBtYXhfY2VudGlkZWdyZWVzGAIgASgRSAGIAQFCEwoRX21pbl9jZW50aWRlZ3JlZXNCEwoRX21heF9jZW50aWRlZ3JlZXMi7QEKFENvbmZpZ3VyZVJvb21DbGltYXRlEjEKB3Jvb21faWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjEKBmxpbWl0cxgCIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tTGltaXRzEjMKB3NlbnNvcnMYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUm9vbVNlbnNvcnMSIQoUbG9ja19kZXZpY2VfY29udHJvbHMYBCABKAhIAIgBAUIXChVfbG9ja19kZXZpY2VfY29udHJvbHMikwIKDlNldENsaW1hdGVNb2RlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI1CgRraW5kGAIgASgOMicua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlTW9kZUtpbmQSIQoUc2V0YmFja19jZW50aWRlZ3JlZXMYAyABKBFIAIgBARItCglzdGFydHNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB2VuZHNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhcKFV9zZXRiYWNrX2NlbnRpZGVncmVlcyJLChBMaXN0Um9vbUNsaW1hdGVzEjcKDXJvb3Rfc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIp8BCg5HZXRSb29tSGlzdG9yeRIxCgdyb29tX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBItCglmcm9tX3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIpgCChFQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoPc2VydmljZV9wYXJ0aWVzGAUgAygLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VQYXJ0eRJMChZjbGltYXRlX3N1bW1hcnlfcGVyaW9kGAQgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBIfChdvd25lcl9vcmdhbmlzYXRpb25fbmFtZRgGIAEoCRIWCg5uYW1lc193aXRoaGVsZBgHIAEoCEoECAIQA0oECAMQBCJ/CgxTZXJ2aWNlUGFydHkSKQoEcm9sZRgBIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjUKB3NpZ25hbHMYAiADKA4yJC5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuU2VydmljZVNpZ25hbBINCgVuYW1lcxgDIAMoCSJKChRHZXRQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi7gEKGkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5EjYKDGFwYXJ0bWVudF9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoGcGVyaW9kGAIgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBItCglmcm9tX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKElJlY29ubmVjdENvbm5lY3RvchI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZCK0EwoRTWFuYWdlbWVudFJlcXVlc3QSOgoMY3JlYXRlX3NwYWNlGAEgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZVNwYWNlSAASOgoMdXBkYXRlX3NwYWNlGAIgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLlVwZGF0ZVNwYWNlSAASOgoMZGVsZXRlX3NwYWNlGAMgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkRlbGV0ZVNwYWNlSAASSAoUYXNzaWduX3VzZXJfdG9fc3BhY2UYBCABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXNzaWduVXNlclRvU3BhY2VIABJMChZyZW1vdmVfdXNlcl9mcm9tX3NwYWNlGAUgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZVVzZXJGcm9tU3BhY2VIABJKChVwbGFjZV9kZXZpY2VfaW5fc3BhY2UYBiABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGxhY2VEZXZpY2VJblNwYWNlSAASUAoYcmVtb3ZlX2RldmljZV9mcm9tX3NwYWNlGAcgASgLMiwua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZURldmljZUZyb21TcGFjZUgAEjoKDGNsYWltX2RldmljZRgIIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DbGFpbURldmljZUgAEj4KDnJlbGVhc2VfZGV2aWNlGAkgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbGVhc2VEZXZpY2VIABI4CgtsaXN0X3NwYWNlcxgKIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0U3BhY2VzSAASRQoSY3JlYXRlX2RldmljZV9saW5rGAsgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZURldmljZUxpbmtIABJFChJyZW1vdmVfZGV2aWNlX2xpbmsYDCABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlRGV2aWNlTGlua0gAEkMKEWxpc3RfZGV2aWNlX2xpbmtzGA0gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3REZXZpY2VMaW5rc0gAEkUKEnVwZGF0ZV9kZXZpY2VfbGluaxgOIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5VcGRhdGVEZXZpY2VMaW5rSAASQgoQcHJvdmlzaW9uX2RldmljZRgPIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm92aXNpb25EZXZpY2VIABI/Cg9zZXRfcm9vbV90YXJnZXQYECABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0Um9vbVRhcmdldEgAEk0KFmNvbmZpZ3VyZV9yb29tX2NsaW1hdGUYESABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29uZmlndXJlUm9vbUNsaW1hdGVIABJBChBzZXRfY2xpbWF0ZV9tb2RlGBIgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldENsaW1hdGVNb2RlSAASRQoSbGlzdF9yb29tX2NsaW1hdGVzGBMgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RSb29tQ2xpbWF0ZXNIABJBChBnZXRfcm9vbV9oaXN0b3J5GBQgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLkdldFJvb21IaXN0b3J5SAASTQoWZ2V0X3ByaXZhY3lfZGlzY2xvc3VyZRgVIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HZXRQcml2YWN5RGlzY2xvc3VyZUgAEloKHWdldF9hcGFydG1lbnRfY2xpbWF0ZV9zdW1tYXJ5GBYgASgLMjEua3VzaW50YS5pb3Qud2VicnRjLnYxLkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5SAASSAoTcmVjb25uZWN0X2Nvbm5lY3RvchgXIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZWNvbm5lY3RDb25uZWN0b3JIABI8Cg1jcmVhdGVfaW52aXRlGBggASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZUludml0ZUgAEjwKDXJlc2VuZF9pbnZpdGUYGSABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVzZW5kSW52aXRlSAASPAoNcmV2b2tlX2ludml0ZRgaIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZXZva2VJbnZpdGVIABJMChZtYXJrX2ludml0ZV9lbWFpbF9zZW50GBsgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLk1hcmtJbnZpdGVFbWFpbFNlbnRIABJFChJsaXN0X3NwYWNlX2ludml0ZXMYHCABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdFNwYWNlSW52aXRlc0gAEkkKFGFwcHJvdmVfam9pbl9yZXF1ZXN0GB0gASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLkFwcHJvdmVKb2luUmVxdWVzdEgAEkMKEWRlbnlfam9pbl9yZXF1ZXN0GB4gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLkRlbnlKb2luUmVxdWVzdEgAEkkKFGxpc3RfZ2F0ZXdheV9tZW1iZXJzGB8gASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RHYXRld2F5TWVtYmVyc0gAEj8KD3NldF9tZW1iZXJfcm9sZRggIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRNZW1iZXJSb2xlSAASRwoTcmVtb3ZlX2Zyb21fZ2F0ZXdheRghIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVGcm9tR2F0ZXdheUgAEkEKEHNldF9hY2Nlc3NfdW50aWwYIiABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0QWNjZXNzVW50aWxIABJNChZzZXRfb3duZXJfb3JnYW5pc2F0aW9uGCMgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldE93bmVyT3JnYW5pc2F0aW9uSABCCQoHcmVxdWVzdEICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_access_v1_roles, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_vendor_lorawan_v1_lorawan, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_members]);
22
23
 
23
24
  /**
24
25
  * Describes the message kusinta.iot.webrtc.v1.CreateSpace.
@@ -0,0 +1,297 @@
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/members.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
+ import type { Message } from "@bufbuild/protobuf";
7
+ import type { SpaceId, UserId } from "../../identity/v1/identity_pb.js";
8
+ import type { MembershipRelation, Role } from "../../access/v1/roles_pb.js";
9
+ import type { Timestamp } from "@bufbuild/protobuf/wkt";
10
+
11
+ /**
12
+ * Describes the file kusinta/iot/webrtc/v1/members.proto.
13
+ */
14
+ export declare const file_kusinta_iot_webrtc_v1_members: GenFile;
15
+
16
+ /**
17
+ * Lists every member of the gateway. Answered with GatewayMembers. Listed to a caller
18
+ * holding ROLE_GATEWAY_ADMIN or ROLE_PROPERTY_OWNER; anyone else is refused as
19
+ * NOT_ENTITLED.
20
+ *
21
+ * This is the one place the gateway says who lives where without the caller reaching the
22
+ * home: those two roles answer for the whole property, and a resident who moves out is
23
+ * removed by them (RemoveFromGateway), so they are shown every member and every membership.
24
+ * Seeing into a home's life — its devices, readings and history — still takes filing on it.
25
+ *
26
+ * @generated from message kusinta.iot.webrtc.v1.ListGatewayMembers
27
+ */
28
+ export declare type ListGatewayMembers = Message<"kusinta.iot.webrtc.v1.ListGatewayMembers"> & {
29
+ };
30
+
31
+ /**
32
+ * Describes the message kusinta.iot.webrtc.v1.ListGatewayMembers.
33
+ * Use `create(ListGatewayMembersSchema)` to create a new message.
34
+ */
35
+ export declare const ListGatewayMembersSchema: GenMessage<ListGatewayMembers>;
36
+
37
+ /**
38
+ * Gives a member ROLE_PROPERTY_OWNER or ROLE_GATEWAY_ADMIN, or takes it away. Answered with
39
+ * ManagementAck. Only a caller holding ROLE_GATEWAY_ADMIN may; any other role named is
40
+ * INVALID_REQUEST.
41
+ *
42
+ * Granting a role already held, or taking away one not held, changes nothing and is
43
+ * acknowledged. A caller may take a role away from themselves: the registering
44
+ * administrator always remains, so the gateway cannot be left without one. Naming
45
+ * ROLE_GATEWAY_ADMIN for the registering administrator, either way, is refused as
46
+ * "registering_admin"; ROLE_PROPERTY_OWNER may be given to them and taken away as to
47
+ * anyone.
48
+ *
49
+ * Granting either role clears any end to the member's access (MemberDetail.access_until):
50
+ * a property owner or an administrator is not there for a job.
51
+ *
52
+ * Taking either role away also ends the pending invites the user created while holding one,
53
+ * unless they keep the other; invites they created as a resident of a home follow their
54
+ * residency, as they always do. The join requests those invites made stay, since another
55
+ * administrator may still answer them. The change reaches the user's open sessions at once.
56
+ *
57
+ * @generated from message kusinta.iot.webrtc.v1.SetMemberRole
58
+ */
59
+ export declare type SetMemberRole = Message<"kusinta.iot.webrtc.v1.SetMemberRole"> & {
60
+ /**
61
+ * @generated from field: kusinta.iot.identity.v1.UserId user_id = 1;
62
+ */
63
+ userId?: UserId | undefined;
64
+
65
+ /**
66
+ * @generated from field: kusinta.iot.access.v1.Role role = 2;
67
+ */
68
+ role: Role;
69
+
70
+ /**
71
+ * true grants the role; false takes it away.
72
+ *
73
+ * @generated from field: bool held = 3;
74
+ */
75
+ held: boolean;
76
+ };
77
+
78
+ /**
79
+ * Describes the message kusinta.iot.webrtc.v1.SetMemberRole.
80
+ * Use `create(SetMemberRoleSchema)` to create a new message.
81
+ */
82
+ export declare const SetMemberRoleSchema: GenMessage<SetMemberRole>;
83
+
84
+ /**
85
+ * Removes a member from the whole gateway in one step: every membership they hold, every
86
+ * role the gateway holds for them, every pending invite they created and every join request
87
+ * of their own. Answered with ManagementAck. Their open sessions end, and the api-server drops
88
+ * them from the gateway. Join requests made through their invites end where those were
89
+ * invites a resident made, as when a residency ends, and stay otherwise.
90
+ *
91
+ * A caller holding ROLE_GATEWAY_ADMIN may remove anyone but the registering administrator
92
+ * ("registering_admin"). A caller holding ROLE_PROPERTY_OWNER, and not ROLE_GATEWAY_ADMIN,
93
+ * may remove only a member who holds neither ROLE_PROPERTY_OWNER nor ROLE_GATEWAY_ADMIN;
94
+ * anyone else, the registering administrator included, is refused NOT_ENTITLED.
95
+ *
96
+ * @generated from message kusinta.iot.webrtc.v1.RemoveFromGateway
97
+ */
98
+ export declare type RemoveFromGateway = Message<"kusinta.iot.webrtc.v1.RemoveFromGateway"> & {
99
+ /**
100
+ * @generated from field: kusinta.iot.identity.v1.UserId user_id = 1;
101
+ */
102
+ userId?: UserId | undefined;
103
+ };
104
+
105
+ /**
106
+ * Describes the message kusinta.iot.webrtc.v1.RemoveFromGateway.
107
+ * Use `create(RemoveFromGatewaySchema)` to create a new message.
108
+ */
109
+ export declare const RemoveFromGatewaySchema: GenMessage<RemoveFromGateway>;
110
+
111
+ /**
112
+ * Sets, moves or clears when a technician's access ends. Answered with ManagementAck. A
113
+ * caller holding ROLE_GATEWAY_ADMIN or ROLE_PROPERTY_OWNER may. Only for a member holding
114
+ * ROLE_TECHNICIAN and no other role but ROLE_RESIDENT ("not_a_technician" otherwise): an end
115
+ * date never reaches a property owner or an administrator.
116
+ *
117
+ * access_until is the instant the access ends; a time not after now is INVALID_REQUEST. The
118
+ * app chooses it, typically the end of a chosen day where the building is. Within a quarter
119
+ * of an hour after it, the gateway takes away the member's ROLE_TECHNICIAN and every SERVICE
120
+ * membership they hold, as an administrator would, and nothing else: a home they live in
121
+ * stays theirs, and their ROLE_TECHNICIAN goes all the same.
122
+ *
123
+ * @generated from message kusinta.iot.webrtc.v1.SetAccessUntil
124
+ */
125
+ export declare type SetAccessUntil = Message<"kusinta.iot.webrtc.v1.SetAccessUntil"> & {
126
+ /**
127
+ * @generated from field: kusinta.iot.identity.v1.UserId user_id = 1;
128
+ */
129
+ userId?: UserId | undefined;
130
+
131
+ /**
132
+ * Unset clears it: the access lasts until someone takes it away.
133
+ *
134
+ * @generated from field: google.protobuf.Timestamp access_until = 2;
135
+ */
136
+ accessUntil?: Timestamp | undefined;
137
+ };
138
+
139
+ /**
140
+ * Describes the message kusinta.iot.webrtc.v1.SetAccessUntil.
141
+ * Use `create(SetAccessUntilSchema)` to create a new message.
142
+ */
143
+ export declare const SetAccessUntilSchema: GenMessage<SetAccessUntil>;
144
+
145
+ /**
146
+ * Records the organisation that owns the property, or clears it when unset or when both
147
+ * fields are empty. An organisation number without a name is INVALID_REQUEST. Answered with
148
+ * ManagementAck. Only a caller holding ROLE_GATEWAY_ADMIN may.
149
+ *
150
+ * @generated from message kusinta.iot.webrtc.v1.SetOwnerOrganisation
151
+ */
152
+ export declare type SetOwnerOrganisation = Message<"kusinta.iot.webrtc.v1.SetOwnerOrganisation"> & {
153
+ /**
154
+ * @generated from field: kusinta.iot.webrtc.v1.OwnerOrganisation organisation = 1;
155
+ */
156
+ organisation?: OwnerOrganisation | undefined;
157
+ };
158
+
159
+ /**
160
+ * Describes the message kusinta.iot.webrtc.v1.SetOwnerOrganisation.
161
+ * Use `create(SetOwnerOrganisationSchema)` to create a new message.
162
+ */
163
+ export declare const SetOwnerOrganisationSchema: GenMessage<SetOwnerOrganisation>;
164
+
165
+ /**
166
+ * The organisation that owns the property. The people who act for it each hold
167
+ * ROLE_PROPERTY_OWNER themselves; this only says whom they act for.
168
+ *
169
+ * @generated from message kusinta.iot.webrtc.v1.OwnerOrganisation
170
+ */
171
+ export declare type OwnerOrganisation = Message<"kusinta.iot.webrtc.v1.OwnerOrganisation"> & {
172
+ /**
173
+ * @generated from field: string name = 1;
174
+ */
175
+ name: string;
176
+
177
+ /**
178
+ * As the organisation's national register gives it; the gateway does not check it. For a
179
+ * sole trader it can be a personal identity number, so it is shown only where
180
+ * GatewayMembers is, never to residents (PrivacyDisclosure carries the name alone).
181
+ *
182
+ * @generated from field: string organisation_number = 2;
183
+ */
184
+ organisationNumber: string;
185
+ };
186
+
187
+ /**
188
+ * Describes the message kusinta.iot.webrtc.v1.OwnerOrganisation.
189
+ * Use `create(OwnerOrganisationSchema)` to create a new message.
190
+ */
191
+ export declare const OwnerOrganisationSchema: GenMessage<OwnerOrganisation>;
192
+
193
+ /**
194
+ * Every member of the gateway, in answer to ListGatewayMembers.
195
+ *
196
+ * @generated from message kusinta.iot.webrtc.v1.GatewayMembers
197
+ */
198
+ export declare type GatewayMembers = Message<"kusinta.iot.webrtc.v1.GatewayMembers"> & {
199
+ /**
200
+ * @generated from field: repeated kusinta.iot.webrtc.v1.MemberDetail members = 1;
201
+ */
202
+ members: MemberDetail[];
203
+
204
+ /**
205
+ * Unset when none is recorded.
206
+ *
207
+ * @generated from field: kusinta.iot.webrtc.v1.OwnerOrganisation owner_organisation = 2;
208
+ */
209
+ ownerOrganisation?: OwnerOrganisation | undefined;
210
+ };
211
+
212
+ /**
213
+ * Describes the message kusinta.iot.webrtc.v1.GatewayMembers.
214
+ * Use `create(GatewayMembersSchema)` to create a new message.
215
+ */
216
+ export declare const GatewayMembersSchema: GenMessage<GatewayMembers>;
217
+
218
+ /**
219
+ * One member, as an administrator or a property owner sees them.
220
+ *
221
+ * @generated from message kusinta.iot.webrtc.v1.MemberDetail
222
+ */
223
+ export declare type MemberDetail = Message<"kusinta.iot.webrtc.v1.MemberDetail"> & {
224
+ /**
225
+ * @generated from field: kusinta.iot.identity.v1.UserId user_id = 1;
226
+ */
227
+ userId?: UserId | undefined;
228
+
229
+ /**
230
+ * The name they gave their account, as the gateway last learnt it: from AppTokenClaims.name
231
+ * when they connect, or from signaling.v1.RedeemInvite.display_name when they redeem with
232
+ * none learnt yet. Self-chosen, so the app shows it as such. Empty when none is learnt. The
233
+ * gateway keeps it only while they are a member, and drops it when they stop being one.
234
+ *
235
+ * @generated from field: string name = 2;
236
+ */
237
+ name: string;
238
+
239
+ /**
240
+ * Every role they hold here, the registering administrator's ROLE_GATEWAY_ADMIN included,
241
+ * each once.
242
+ *
243
+ * @generated from field: repeated kusinta.iot.access.v1.Role roles = 3;
244
+ */
245
+ roles: Role[];
246
+
247
+ /**
248
+ * @generated from field: repeated kusinta.iot.webrtc.v1.MemberSpace memberships = 4;
249
+ */
250
+ memberships: MemberSpace[];
251
+
252
+ /**
253
+ * When a technician's access ends (SetAccessUntil). Unset for no end.
254
+ *
255
+ * @generated from field: google.protobuf.Timestamp access_until = 5;
256
+ */
257
+ accessUntil?: Timestamp | undefined;
258
+
259
+ /**
260
+ * Whether they are the administrator who registered the gateway, as the gateway last saw
261
+ * from a token. Grants nothing on its own; it says that their ROLE_GATEWAY_ADMIN cannot be
262
+ * changed here and that RemoveFromGateway will refuse them.
263
+ *
264
+ * @generated from field: bool registering_admin = 6;
265
+ */
266
+ registeringAdmin: boolean;
267
+ };
268
+
269
+ /**
270
+ * Describes the message kusinta.iot.webrtc.v1.MemberDetail.
271
+ * Use `create(MemberDetailSchema)` to create a new message.
272
+ */
273
+ export declare const MemberDetailSchema: GenMessage<MemberDetail>;
274
+
275
+ /**
276
+ * One space a member is filed on, and how they stand to it.
277
+ *
278
+ * @generated from message kusinta.iot.webrtc.v1.MemberSpace
279
+ */
280
+ export declare type MemberSpace = Message<"kusinta.iot.webrtc.v1.MemberSpace"> & {
281
+ /**
282
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
283
+ */
284
+ spaceId?: SpaceId | undefined;
285
+
286
+ /**
287
+ * @generated from field: kusinta.iot.access.v1.MembershipRelation relation = 2;
288
+ */
289
+ relation: MembershipRelation;
290
+ };
291
+
292
+ /**
293
+ * Describes the message kusinta.iot.webrtc.v1.MemberSpace.
294
+ * Use `create(MemberSpaceSchema)` to create a new message.
295
+ */
296
+ export declare const MemberSpaceSchema: GenMessage<MemberSpace>;
297
+
@@ -0,0 +1,78 @@
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/members.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
+ import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
+ import { file_kusinta_iot_access_v1_roles } from "../../access/v1/roles_pb.js";
8
+ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
9
+
10
+ /**
11
+ * Describes the file kusinta/iot/webrtc/v1/members.proto.
12
+ */
13
+ export const file_kusinta_iot_webrtc_v1_members = /*@__PURE__*/
14
+ fileDesc("CiNrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWVtYmVycy5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxIhQKEkxpc3RHYXRld2F5TWVtYmVycyJ6Cg1TZXRNZW1iZXJSb2xlEjAKB3VzZXJfaWQYASABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSKQoEcm9sZRgCIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEgwKBGhlbGQYAyABKAgiRQoRUmVtb3ZlRnJvbUdhdGV3YXkSMAoHdXNlcl9pZBgBIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZCJ0Cg5TZXRBY2Nlc3NVbnRpbBIwCgd1c2VyX2lkGAEgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEjAKDGFjY2Vzc191bnRpbBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiVgoUU2V0T3duZXJPcmdhbmlzYXRpb24SPgoMb3JnYW5pc2F0aW9uGAEgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLk93bmVyT3JnYW5pc2F0aW9uIj4KEU93bmVyT3JnYW5pc2F0aW9uEgwKBG5hbWUYASABKAkSGwoTb3JnYW5pc2F0aW9uX251bWJlchgCIAEoCSKMAQoOR2F0ZXdheU1lbWJlcnMSNAoHbWVtYmVycxgBIAMoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NZW1iZXJEZXRhaWwSRAoSb3duZXJfb3JnYW5pc2F0aW9uGAIgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLk93bmVyT3JnYW5pc2F0aW9uIoACCgxNZW1iZXJEZXRhaWwSMAoHdXNlcl9pZBgBIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBIMCgRuYW1lGAIgASgJEioKBXJvbGVzGAMgAygOMhsua3VzaW50YS5pb3QuYWNjZXNzLnYxLlJvbGUSNwoLbWVtYmVyc2hpcHMYBCADKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTWVtYmVyU3BhY2USMAoMYWNjZXNzX3VudGlsGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIZChFyZWdpc3RlcmluZ19hZG1pbhgGIAEoCCJ+CgtNZW1iZXJTcGFjZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSOwoIcmVsYXRpb24YAiABKA4yKS5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuTWVtYmVyc2hpcFJlbGF0aW9uQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_roles, file_kusinta_iot_identity_v1_identity]);
15
+
16
+ /**
17
+ * Describes the message kusinta.iot.webrtc.v1.ListGatewayMembers.
18
+ * Use `create(ListGatewayMembersSchema)` to create a new message.
19
+ */
20
+ export const ListGatewayMembersSchema = /*@__PURE__*/
21
+ messageDesc(file_kusinta_iot_webrtc_v1_members, 0);
22
+
23
+ /**
24
+ * Describes the message kusinta.iot.webrtc.v1.SetMemberRole.
25
+ * Use `create(SetMemberRoleSchema)` to create a new message.
26
+ */
27
+ export const SetMemberRoleSchema = /*@__PURE__*/
28
+ messageDesc(file_kusinta_iot_webrtc_v1_members, 1);
29
+
30
+ /**
31
+ * Describes the message kusinta.iot.webrtc.v1.RemoveFromGateway.
32
+ * Use `create(RemoveFromGatewaySchema)` to create a new message.
33
+ */
34
+ export const RemoveFromGatewaySchema = /*@__PURE__*/
35
+ messageDesc(file_kusinta_iot_webrtc_v1_members, 2);
36
+
37
+ /**
38
+ * Describes the message kusinta.iot.webrtc.v1.SetAccessUntil.
39
+ * Use `create(SetAccessUntilSchema)` to create a new message.
40
+ */
41
+ export const SetAccessUntilSchema = /*@__PURE__*/
42
+ messageDesc(file_kusinta_iot_webrtc_v1_members, 3);
43
+
44
+ /**
45
+ * Describes the message kusinta.iot.webrtc.v1.SetOwnerOrganisation.
46
+ * Use `create(SetOwnerOrganisationSchema)` to create a new message.
47
+ */
48
+ export const SetOwnerOrganisationSchema = /*@__PURE__*/
49
+ messageDesc(file_kusinta_iot_webrtc_v1_members, 4);
50
+
51
+ /**
52
+ * Describes the message kusinta.iot.webrtc.v1.OwnerOrganisation.
53
+ * Use `create(OwnerOrganisationSchema)` to create a new message.
54
+ */
55
+ export const OwnerOrganisationSchema = /*@__PURE__*/
56
+ messageDesc(file_kusinta_iot_webrtc_v1_members, 5);
57
+
58
+ /**
59
+ * Describes the message kusinta.iot.webrtc.v1.GatewayMembers.
60
+ * Use `create(GatewayMembersSchema)` to create a new message.
61
+ */
62
+ export const GatewayMembersSchema = /*@__PURE__*/
63
+ messageDesc(file_kusinta_iot_webrtc_v1_members, 6);
64
+
65
+ /**
66
+ * Describes the message kusinta.iot.webrtc.v1.MemberDetail.
67
+ * Use `create(MemberDetailSchema)` to create a new message.
68
+ */
69
+ export const MemberDetailSchema = /*@__PURE__*/
70
+ messageDesc(file_kusinta_iot_webrtc_v1_members, 7);
71
+
72
+ /**
73
+ * Describes the message kusinta.iot.webrtc.v1.MemberSpace.
74
+ * Use `create(MemberSpaceSchema)` to create a new message.
75
+ */
76
+ export const MemberSpaceSchema = /*@__PURE__*/
77
+ messageDesc(file_kusinta_iot_webrtc_v1_members, 8);
78
+