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

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 (26) hide show
  1. package/package.json +2 -1
  2. package/src/kusinta/iot/access/v1/acl_pb.d.ts +4 -3
  3. package/src/kusinta/iot/access/v1/roles_pb.d.ts +27 -1
  4. package/src/kusinta/iot/access/v1/roles_pb.js +17 -2
  5. package/src/kusinta/iot/commissioning/v1/commissioning_pb.d.ts +154 -2
  6. package/src/kusinta/iot/commissioning/v1/commissioning_pb.js +30 -1
  7. package/src/kusinta/iot/common/v1/types_pb.d.ts +57 -0
  8. package/src/kusinta/iot/common/v1/types_pb.js +16 -3
  9. package/src/kusinta/iot/connector/v1/connector_pb.d.ts +183 -1
  10. package/src/kusinta/iot/connector/v1/connector_pb.js +45 -23
  11. package/src/kusinta/iot/device/v1/descriptor_pb.d.ts +13 -3
  12. package/src/kusinta/iot/device/v1/descriptor_pb.js +1 -1
  13. package/src/kusinta/iot/reporting/v1/reporting_pb.d.ts +6 -3
  14. package/src/kusinta/iot/signaling/v1/signaling_pb.d.ts +16 -0
  15. package/src/kusinta/iot/signaling/v1/signaling_pb.js +1 -1
  16. package/src/kusinta/iot/space/v1/space_pb.d.ts +22 -0
  17. package/src/kusinta/iot/space/v1/space_pb.js +1 -1
  18. package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +58 -1
  19. package/src/kusinta/iot/webrtc/v1/envelope_pb.js +2 -1
  20. package/src/kusinta/iot/webrtc/v1/household_pb.d.ts +490 -0
  21. package/src/kusinta/iot/webrtc/v1/household_pb.js +120 -0
  22. package/src/kusinta/iot/webrtc/v1/invite_pb.d.ts +19 -15
  23. package/src/kusinta/iot/webrtc/v1/management_pb.d.ts +265 -9
  24. package/src/kusinta/iot/webrtc/v1/management_pb.js +38 -2
  25. package/src/kusinta/iot/webrtc/v1/members_pb.d.ts +52 -10
  26. package/src/kusinta/iot/webrtc/v1/members_pb.js +1 -1
@@ -6,9 +6,10 @@ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"
6
6
  import type { Message } from "@bufbuild/protobuf";
7
7
  import type { ConnectorId, DeviceId, GatewayId } from "../../identity/v1/identity_pb.js";
8
8
  import type { BackendFailureReason, BackendHealth, ConnectorKind, ConnectorTransport } from "../../common/v1/types_pb.js";
9
+ import type { LinkedService } from "../../accountlink/v1/account_link_pb.js";
10
+ import type { Timestamp } from "@bufbuild/protobuf/wkt";
9
11
  import type { Device } from "../../device/v1/device_pb.js";
10
12
  import type { DeviceLink, LinkFunction, LinkState } from "../../link/v1/link_pb.js";
11
- import type { Timestamp } from "@bufbuild/protobuf/wkt";
12
13
  import type { AttributeWriteRequest, CommandError, DeviceCommand } from "../../webrtc/v1/command_pb.js";
13
14
  import type { PairingErrorDetail, PairingWindow } from "../../common/v1/pairing_pb.js";
14
15
  import type { PropertyUpdateBatch } from "../../device/v1/property_update_pb.js";
@@ -117,6 +118,23 @@ export declare type ConnectorInfo = Message<"kusinta.iot.connector.v1.ConnectorI
117
118
  * @generated from field: bool supports_backend_reinitialize = 12;
118
119
  */
119
120
  supportsBackendReinitialize: boolean;
121
+
122
+ /**
123
+ * The linked services (accountlink.v1) whose accounts this connector reads devices from,
124
+ * with access tokens the gateway hands it (CredentialsUpdate). Declaring a service asks
125
+ * for its tokens; it does not earn them. The gateway sends a service's tokens only to a
126
+ * connector_id it trusts for that service, only after accepting its handshake, and to
127
+ * one live session at a time: a second session claiming the same service gets none, and
128
+ * a session that ends loses its links with it. Trust is the gateway's own setting, made
129
+ * by its administrators, naming the connector_id per service; with none made for a
130
+ * service, the gateway sends its tokens to no connector. A connector_id counts only on a
131
+ * session the gateway's transport authenticated as that connector (a local socket only
132
+ * the gateway's connectors can open, or mutual TLS); claimed in a handshake alone, it
133
+ * earns nothing.
134
+ *
135
+ * @generated from field: repeated kusinta.iot.accountlink.v1.LinkedService consumes_credentials = 13;
136
+ */
137
+ consumesCredentials: LinkedService[];
120
138
  };
121
139
 
122
140
  /**
@@ -125,6 +143,116 @@ export declare type ConnectorInfo = Message<"kusinta.iot.connector.v1.ConnectorI
125
143
  */
126
144
  export declare const ConnectorInfoSchema: GenMessage<ConnectorInfo>;
127
145
 
146
+ /**
147
+ * An access token for one account link (accountlink.v1): one home's grant at a third-party
148
+ * service, handed to the connector that reads that home's devices there. The gateway holds
149
+ * the token pair and refreshes it; only the short-lived access token crosses, never a
150
+ * refresh token or a client secret. Neither side writes it to disk or a log, nor puts it in
151
+ * BackendHealthReport.detail or an error message, and the connector sends it nowhere but
152
+ * in calls to that service's own API.
153
+ *
154
+ * Sent after every refresh, at least five minutes before the previous token's expires_at,
155
+ * and for a link made while the session is up. After a handshake, every live link arrives
156
+ * in one CredentialsSnapshot instead.
157
+ *
158
+ * Once expires_at plus 60 seconds of clock skew passes without a newer token, or the
159
+ * service refuses a live token as unauthorised (revoked at the service), the connector
160
+ * stops reading the link and reports the link's devices unreachable, the way it reports any
161
+ * unreachable device, until an update arrives. That is the link's state, not the backend's:
162
+ * it does not put the backend in doubt or report it failing, and a connector with no live
163
+ * link reports its backend OK.
164
+ *
165
+ * An update may carry another account's grant under the same id (the home linked again,
166
+ * replaced its link, or relinked after the old grant lapsed). The connector reads with it
167
+ * from then on and removes the link's devices the account no longer has (DeviceRemoval);
168
+ * the devices it still has keep their ids.
169
+ *
170
+ * @generated from message kusinta.iot.connector.v1.CredentialsUpdate
171
+ */
172
+ export declare type CredentialsUpdate = Message<"kusinta.iot.connector.v1.CredentialsUpdate"> & {
173
+ /**
174
+ * Opaque; it names no home, person or account. Stable for one home and service for as
175
+ * long as the home has that service linked: replacing the link, relinking after it
176
+ * needed relinking, or a cancelled replacement arrives as an update under the same id, so
177
+ * a device read through it keeps its id and its history. A link made after the old one
178
+ * ended (unlinked, or the home handed over or wiped) has a new id, so nothing of the
179
+ * previous household's carries over. The gateway revokes a replaced
180
+ * grant at the service itself. A device read through two links, as when two homes link
181
+ * one account, has a distinct id per link. Not related to a device link's id
182
+ * (CreateLink).
183
+ *
184
+ * @generated from field: string account_link_id = 1;
185
+ */
186
+ accountLinkId: string;
187
+
188
+ /**
189
+ * @generated from field: kusinta.iot.accountlink.v1.LinkedService service = 2;
190
+ */
191
+ service: LinkedService;
192
+
193
+ /**
194
+ * @generated from field: string access_token = 3;
195
+ */
196
+ accessToken: string;
197
+
198
+ /**
199
+ * Always set. When the service states no lifetime, the gateway states one of at most an
200
+ * hour.
201
+ *
202
+ * @generated from field: google.protobuf.Timestamp expires_at = 4;
203
+ */
204
+ expiresAt?: Timestamp | undefined;
205
+ };
206
+
207
+ /**
208
+ * Describes the message kusinta.iot.connector.v1.CredentialsUpdate.
209
+ * Use `create(CredentialsUpdateSchema)` to create a new message.
210
+ */
211
+ export declare const CredentialsUpdateSchema: GenMessage<CredentialsUpdate>;
212
+
213
+ /**
214
+ * Every live account link for the services this connector declares, sent once after each
215
+ * accepted handshake and before any CredentialsUpdate on that session. Empty when there
216
+ * are none. The connector drops every link it knows that is not listed, removing its
217
+ * devices (DeviceRemoval), so a link that ended while the connector was away does not
218
+ * survive the reconnect.
219
+ *
220
+ * @generated from message kusinta.iot.connector.v1.CredentialsSnapshot
221
+ */
222
+ export declare type CredentialsSnapshot = Message<"kusinta.iot.connector.v1.CredentialsSnapshot"> & {
223
+ /**
224
+ * @generated from field: repeated kusinta.iot.connector.v1.CredentialsUpdate links = 1;
225
+ */
226
+ links: CredentialsUpdate[];
227
+ };
228
+
229
+ /**
230
+ * Describes the message kusinta.iot.connector.v1.CredentialsSnapshot.
231
+ * Use `create(CredentialsSnapshotSchema)` to create a new message.
232
+ */
233
+ export declare const CredentialsSnapshotSchema: GenMessage<CredentialsSnapshot>;
234
+
235
+ /**
236
+ * An account link ended: unlinked, its home handed over, or wiped. Not sent for a
237
+ * replacement, which is an update under the same id. Sent before the gateway revokes the
238
+ * grant at the service. The connector drops the token at once, stops
239
+ * reading the link and removes its devices (DeviceRemoval).
240
+ *
241
+ * @generated from message kusinta.iot.connector.v1.CredentialsRevoked
242
+ */
243
+ export declare type CredentialsRevoked = Message<"kusinta.iot.connector.v1.CredentialsRevoked"> & {
244
+ /**
245
+ * @generated from field: string account_link_id = 1;
246
+ */
247
+ accountLinkId: string;
248
+ };
249
+
250
+ /**
251
+ * Describes the message kusinta.iot.connector.v1.CredentialsRevoked.
252
+ * Use `create(CredentialsRevokedSchema)` to create a new message.
253
+ */
254
+ export declare const CredentialsRevokedSchema: GenMessage<CredentialsRevoked>;
255
+
128
256
  /**
129
257
  * @generated from message kusinta.iot.connector.v1.ConnectorHandshake
130
258
  */
@@ -182,6 +310,18 @@ export declare type ConnectorHandshake = Message<"kusinta.iot.connector.v1.Conne
182
310
  * @generated from field: kusinta.iot.connector.v1.BackendHealthReport backend_health = 4;
183
311
  */
184
312
  backendHealth?: BackendHealthReport | undefined;
313
+
314
+ /**
315
+ * For each device in known_devices read through an account link, that link's
316
+ * account_link_id, keyed by the device's id: the handshake's form of
317
+ * DeviceAnnouncement.account_link_id, so a reconnecting connector's linked devices are
318
+ * filed in their homes again. A known device absent here is read through no link. The
319
+ * map only restores a filing the gateway already recorded for that device and link, and
320
+ * only for a link it is sending this session; it never files a device anew.
321
+ *
322
+ * @generated from field: map<string, string> known_device_account_links = 5;
323
+ */
324
+ knownDeviceAccountLinks: { [key: string]: string };
185
325
  };
186
326
 
187
327
  /**
@@ -531,6 +671,15 @@ export declare type HandshakeAck = Message<"kusinta.iot.connector.v1.HandshakeAc
531
671
  * @generated from field: bool supports_backend_health = 4;
532
672
  */
533
673
  supportsBackendHealth: boolean;
674
+
675
+ /**
676
+ * The gateway sends account link tokens (CredentialsSnapshot, CredentialsUpdate) to a
677
+ * connector that declares ConnectorInfo.consumes_credentials and that it trusts for the
678
+ * service. Unset, no token will arrive on this session; the connector reads no link.
679
+ *
680
+ * @generated from field: bool sends_credentials = 5;
681
+ */
682
+ sendsCredentials: boolean;
534
683
  };
535
684
 
536
685
  /**
@@ -573,6 +722,19 @@ export declare type DeviceAnnouncement = Message<"kusinta.iot.connector.v1.Devic
573
722
  * @generated from field: string pairing_request_id = 3;
574
723
  */
575
724
  pairingRequestId: string;
725
+
726
+ /**
727
+ * The account link (CredentialsUpdate) the device is read through, empty for a device
728
+ * that is not. The gateway files the device in that link's home and nowhere else, and
729
+ * accepts only an id it sent this session and has not revoked; a device naming any other
730
+ * is filed in no home, and the gateway logs the mismatch. A
731
+ * device read through two links, as when two homes link the same account, is announced
732
+ * once per link under distinct device ids, each in its own home; revoking one link
733
+ * removes only that link's.
734
+ *
735
+ * @generated from field: string account_link_id = 4;
736
+ */
737
+ accountLinkId: string;
576
738
  };
577
739
 
578
740
  /**
@@ -1081,6 +1243,26 @@ export declare type SessionResponse = Message<"kusinta.iot.connector.v1.SessionR
1081
1243
  */
1082
1244
  value: ReinitializeBackend;
1083
1245
  case: "reinitializeBackend";
1246
+ } | {
1247
+ /**
1248
+ * A linked account's access token, and its end; see CredentialsUpdate.
1249
+ *
1250
+ * @generated from field: kusinta.iot.connector.v1.CredentialsUpdate credentials_update = 15;
1251
+ */
1252
+ value: CredentialsUpdate;
1253
+ case: "credentialsUpdate";
1254
+ } | {
1255
+ /**
1256
+ * @generated from field: kusinta.iot.connector.v1.CredentialsRevoked credentials_revoked = 16;
1257
+ */
1258
+ value: CredentialsRevoked;
1259
+ case: "credentialsRevoked";
1260
+ } | {
1261
+ /**
1262
+ * @generated from field: kusinta.iot.connector.v1.CredentialsSnapshot credentials_snapshot = 17;
1263
+ */
1264
+ value: CredentialsSnapshot;
1265
+ case: "credentialsSnapshot";
1084
1266
  } | { case: undefined; value?: undefined };
1085
1267
  };
1086
1268
 
@@ -4,6 +4,7 @@
4
4
 
5
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_accountlink_v1_account_link } from "../../accountlink/v1/account_link_pb.js";
7
8
  import { file_kusinta_iot_common_v1_pairing } from "../../common/v1/pairing_pb.js";
8
9
  import { file_kusinta_iot_common_v1_types } from "../../common/v1/types_pb.js";
9
10
  import { file_kusinta_iot_device_v1_device } from "../../device/v1/device_pb.js";
@@ -17,7 +18,7 @@ import { file_kusinta_iot_webrtc_v1_command } from "../../webrtc/v1/command_pb.j
17
18
  * Describes the file kusinta/iot/connector/v1/connector.proto.
18
19
  */
19
20
  export const file_kusinta_iot_connector_v1_connector = /*@__PURE__*/
20
- fileDesc("CihrdXNpbnRhL2lvdC9jb25uZWN0b3IvdjEvY29ubmVjdG9yLnByb3RvEhhrdXNpbnRhLmlvdC5jb25uZWN0b3IudjEipQMKDUNvbm5lY3RvckluZm8SOgoMY29ubmVjdG9yX2lkGAEgASgLMiQua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuQ29ubmVjdG9ySWQSFAoMZGlzcGxheV9uYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAkSPAoJdHJhbnNwb3J0GAQgASgOMikua3VzaW50YS5pb3QuY29tbW9uLnYxLkNvbm5lY3RvclRyYW5zcG9ydBIQCghlbmRwb2ludBgFIAEoCRIhChlzdXBwb3J0ZWRfZGV2aWNlX3R5cGVfaWRzGAYgAygNEhgKEHN1cHBvcnRzX3BhaXJpbmcYByABKAgSHQoVc3VwcG9ydHNfcHJvdmlzaW9uaW5nGAggASgIEhUKDWJyb2tlcnNfbGlua3MYCSABKAgSMgoEa2luZBgKIAEoDjIkLmt1c2ludGEuaW90LmNvbW1vbi52MS5Db25uZWN0b3JLaW5kEhMKC2Rlc2NyaXB0aW9uGAsgASgJEiUKHXN1cHBvcnRzX2JhY2tlbmRfcmVpbml0aWFsaXplGAwgASgIIv4BChJDb25uZWN0b3JIYW5kc2hha2USNQoEaW5mbxgBIAEoCzInLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5Db25uZWN0b3JJbmZvEjQKDWtub3duX2RldmljZXMYAiADKAsyHS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRGV2aWNlEjQKC2tub3duX2xpbmtzGAMgAygLMh8ua3VzaW50YS5pb3QubGluay52MS5EZXZpY2VMaW5rEkUKDmJhY2tlbmRfaGVhbHRoGAQgASgLMi0ua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkJhY2tlbmRIZWFsdGhSZXBvcnQiWwoTQmFja2VuZEhlYWx0aFJlcG9ydBI0CgZoZWFsdGgYASABKAsyJC5rdXNpbnRhLmlvdC5jb21tb24udjEuQmFja2VuZEhlYWx0aBIOCgZkZXRhaWwYAiABKAkiKQoTUmVpbml0aWFsaXplQmFja2VuZBISCgpyZXF1ZXN0X2lkGAEgASgJIrwBChlSZWluaXRpYWxpemVCYWNrZW5kUmVzdWx0EhIKCnJlcXVlc3RfaWQYASABKAkSPgoHb3V0Y29tZRgCIAEoDjItLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5SZWluaXRpYWxpemVPdXRjb21lEjsKBnJlYXNvbhgDIAEoDjIrLmt1c2ludGEuaW90LmNvbW1vbi52MS5CYWNrZW5kRmFpbHVyZVJlYXNvbhIOCgZkZXRhaWwYBCABKAkiugEKCkNyZWF0ZUxpbmsSDwoHbGlua19pZBgBIAEoCRIxCgZzZW5kZXIYAiABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgDIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAQgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24iugEKClJlbW92ZUxpbmsSDwoHbGlua19pZBgBIAEoCRIxCgZzZW5kZXIYAiABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgDIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAQgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24iQQoJTGlzdExpbmtzEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIm0KCkxpbmtSZXN1bHQSDwoHbGlua19pZBgBIAEoCRIPCgdzdWNjZXNzGAIgASgIEi0KBXN0YXRlGAMgASgOMh4ua3VzaW50YS5pb3QubGluay52MS5MaW5rU3RhdGUSDgoGZGV0YWlsGAQgASgJIj8KDUxpbmtzUmVwb3J0ZWQSLgoFbGlua3MYASADKAsyHy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmsiiQEKDEhhbmRzaGFrZUFjaxIQCghhY2NlcHRlZBgBIAEoCBIOCgZyZWFzb24YAiABKAkSNgoKZ2F0ZXdheV9pZBgDIAEoCzIiLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkdhdGV3YXlJZBIfChdzdXBwb3J0c19iYWNrZW5kX2hlYWx0aBgEIAEoCCJxChJEZXZpY2VBbm5vdW5jZW1lbnQSLQoGZGV2aWNlGAIgASgLMh0ua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZRIaChJwYWlyaW5nX3JlcXVlc3RfaWQYAyABKAlKBAgBEAJSCmRlc2NyaXB0b3IiVQoNRGV2aWNlUmVtb3ZhbBI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIOCgZyZWFzb24YAiABKAkiCwoJSGVhcnRCZWF0IkcKD1N1YnNjcmliZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJJChFVbnN1YnNjcmliZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJBCgxHYXRld2F5RXJyb3ISDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEhIKCnJlcXVlc3RfaWQYAyABKAki7QEKFkNvbm5lY3RvckNvbW1hbmRSZXN1bHQSEgoKcmVxdWVzdF9pZBgBIAEoCRIPCgdzdWNjZXNzGAIgASgIEjAKDGNvbXBsZXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMgoFZXJyb3IYBSABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29tbWFuZEVycm9yEjMKCnNldHRsZXNfYnkYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQFCDQoLX3NldHRsZXNfYnlKBAgDEAQiXAoQRW50ZXJQYWlyaW5nTW9kZRISCgpyZXF1ZXN0X2lkGAEgASgJEjQKBndpbmRvdxgCIAEoCzIkLmt1c2ludGEuaW90LmNvbW1vbi52MS5QYWlyaW5nV2luZG93IqMBChFQYWlyaW5nTW9kZVJlc3VsdBISCgpyZXF1ZXN0X2lkGAEgASgJEhAKCGFjY2VwdGVkGAIgASgIEjgKBWVycm9yGAMgASgLMikua3VzaW50YS5pb3QuY29tbW9uLnYxLlBhaXJpbmdFcnJvckRldGFpbBIuCgpleHBpcmVzX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJ8ChBQYWlyaW5nTW9kZUVuZGVkEhIKCnJlcXVlc3RfaWQYASABKAkSGgoSZGV2aWNlc19hdHRyaWJ1dGVkGAIgASgNEjgKBWVycm9yGAMgASgLMikua3VzaW50YS5pb3QuY29tbW9uLnYxLlBhaXJpbmdFcnJvckRldGFpbCL2BwoOU2Vzc2lvblJlcXVlc3QSEgoKbWVzc2FnZV9pZBgBIAEoCRIrCgdzZW50X2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJBCgloYW5kc2hha2UYAyABKAsyLC5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuQ29ubmVjdG9ySGFuZHNoYWtlSAASRQoPcHJvcGVydHlfdXBkYXRlGAQgASgLMioua3VzaW50YS5pb3QuZGV2aWNlLnYxLlByb3BlcnR5VXBkYXRlQmF0Y2hIABJIChBkZXZpY2VfYW5ub3VuY2VkGAUgASgLMiwua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkRldmljZUFubm91bmNlbWVudEgAEkEKDmRldmljZV9yZW1vdmVkGAYgASgLMicua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkRldmljZVJlbW92YWxIABJKCg5jb21tYW5kX3Jlc3VsdBgHIAEoCzIwLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5Db25uZWN0b3JDb21tYW5kUmVzdWx0SAASOAoJaGVhcnRiZWF0GAggASgLMiMua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkhlYXJ0QmVhdEgAEkAKDWRldmljZV9ldmVudHMYCSABKAsyJy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRGV2aWNlRXZlbnRCYXRjaEgAEkoKE3BhaXJpbmdfbW9kZV9yZXN1bHQYCiABKAsyKy5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuUGFpcmluZ01vZGVSZXN1bHRIABJIChJwYWlyaW5nX21vZGVfZW5kZWQYCyABKAsyKi5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuUGFpcmluZ01vZGVFbmRlZEgAEjsKC2xpbmtfcmVzdWx0GAwgASgLMiQua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkxpbmtSZXN1bHRIABJBCg5saW5rc19yZXBvcnRlZBgNIAEoCzInLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5MaW5rc1JlcG9ydGVkSAASRwoOYmFja2VuZF9oZWFsdGgYDiABKAsyLS5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuQmFja2VuZEhlYWx0aFJlcG9ydEgAEloKG3JlaW5pdGlhbGl6ZV9iYWNrZW5kX3Jlc3VsdBgPIAEoCzIzLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5SZWluaXRpYWxpemVCYWNrZW5kUmVzdWx0SABCCQoHcGF5bG9hZCLBBgoPU2Vzc2lvblJlc3BvbnNlEhIKCm1lc3NhZ2VfaWQYASABKAkSKwoHc2VudF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASPwoNaGFuZHNoYWtlX2FjaxgDIAEoCzImLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5IYW5kc2hha2VBY2tIABI+CglzdWJzY3JpYmUYBSABKAsyKS5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuU3Vic2NyaWJlRGV2aWNlSAASQgoLdW5zdWJzY3JpYmUYBiABKAsyKy5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuVW5zdWJzY3JpYmVEZXZpY2VIABI3CgVlcnJvchgHIAEoCzImLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5HYXRld2F5RXJyb3JIABI/Cg9leGVjdXRlX2NvbW1hbmQYCCABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlQ29tbWFuZEgAEk8KF2V4ZWN1dGVfYXR0cmlidXRlX3dyaXRlGAkgASgLMiwua3VzaW50YS5pb3Qud2VicnRjLnYxLkF0dHJpYnV0ZVdyaXRlUmVxdWVzdEgAEkgKEmVudGVyX3BhaXJpbmdfbW9kZRgKIAEoCzIqLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5FbnRlclBhaXJpbmdNb2RlSAASOwoLY3JlYXRlX2xpbmsYCyABKAsyJC5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuQ3JlYXRlTGlua0gAEjsKC3JlbW92ZV9saW5rGAwgASgLMiQua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLlJlbW92ZUxpbmtIABI5CgpsaXN0X2xpbmtzGA0gASgLMiMua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkxpc3RMaW5rc0gAEk0KFHJlaW5pdGlhbGl6ZV9iYWNrZW5kGA4gASgLMi0ua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLlJlaW5pdGlhbGl6ZUJhY2tlbmRIAEIJCgdwYXlsb2FkSgQIBBAFKqMBChNSZWluaXRpYWxpemVPdXRjb21lEiQKIFJFSU5JVElBTElaRV9PVVRDT01FX1VOU1BFQ0lGSUVEEAASHQoZUkVJTklUSUFMSVpFX09VVENPTUVfRE9ORRABEh8KG1JFSU5JVElBTElaRV9PVVRDT01FX0ZBSUxFRBACEiYKIlJFSU5JVElBTElaRV9PVVRDT01FX05PVF9TVVBQT1JURUQQA0ICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_common_v1_pairing, file_kusinta_iot_common_v1_types, file_kusinta_iot_device_v1_device, file_kusinta_iot_device_v1_device_event, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_webrtc_v1_command]);
21
+ fileDesc("CihrdXNpbnRhL2lvdC9jb25uZWN0b3IvdjEvY29ubmVjdG9yLnByb3RvEhhrdXNpbnRhLmlvdC5jb25uZWN0b3IudjEi7gMKDUNvbm5lY3RvckluZm8SOgoMY29ubmVjdG9yX2lkGAEgASgLMiQua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuQ29ubmVjdG9ySWQSFAoMZGlzcGxheV9uYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAkSPAoJdHJhbnNwb3J0GAQgASgOMikua3VzaW50YS5pb3QuY29tbW9uLnYxLkNvbm5lY3RvclRyYW5zcG9ydBIQCghlbmRwb2ludBgFIAEoCRIhChlzdXBwb3J0ZWRfZGV2aWNlX3R5cGVfaWRzGAYgAygNEhgKEHN1cHBvcnRzX3BhaXJpbmcYByABKAgSHQoVc3VwcG9ydHNfcHJvdmlzaW9uaW5nGAggASgIEhUKDWJyb2tlcnNfbGlua3MYCSABKAgSMgoEa2luZBgKIAEoDjIkLmt1c2ludGEuaW90LmNvbW1vbi52MS5Db25uZWN0b3JLaW5kEhMKC2Rlc2NyaXB0aW9uGAsgASgJEiUKHXN1cHBvcnRzX2JhY2tlbmRfcmVpbml0aWFsaXplGAwgASgIEkcKFGNvbnN1bWVzX2NyZWRlbnRpYWxzGA0gAygOMikua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuTGlua2VkU2VydmljZSKuAQoRQ3JlZGVudGlhbHNVcGRhdGUSFwoPYWNjb3VudF9saW5rX2lkGAEgASgJEjoKB3NlcnZpY2UYAiABKA4yKS5rdXNpbnRhLmlvdC5hY2NvdW50bGluay52MS5MaW5rZWRTZXJ2aWNlEhQKDGFjY2Vzc190b2tlbhgDIAEoCRIuCgpleHBpcmVzX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJRChNDcmVkZW50aWFsc1NuYXBzaG90EjoKBWxpbmtzGAEgAygLMisua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkNyZWRlbnRpYWxzVXBkYXRlIi0KEkNyZWRlbnRpYWxzUmV2b2tlZBIXCg9hY2NvdW50X2xpbmtfaWQYASABKAkirQMKEkNvbm5lY3RvckhhbmRzaGFrZRI1CgRpbmZvGAEgASgLMicua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkNvbm5lY3RvckluZm8SNAoNa25vd25fZGV2aWNlcxgCIAMoCzIdLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2USNAoLa25vd25fbGlua3MYAyADKAsyHy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmsSRQoOYmFja2VuZF9oZWFsdGgYBCABKAsyLS5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuQmFja2VuZEhlYWx0aFJlcG9ydBJtChprbm93bl9kZXZpY2VfYWNjb3VudF9saW5rcxgFIAMoCzJJLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5Db25uZWN0b3JIYW5kc2hha2UuS25vd25EZXZpY2VBY2NvdW50TGlua3NFbnRyeRo+ChxLbm93bkRldmljZUFjY291bnRMaW5rc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiWwoTQmFja2VuZEhlYWx0aFJlcG9ydBI0CgZoZWFsdGgYASABKAsyJC5rdXNpbnRhLmlvdC5jb21tb24udjEuQmFja2VuZEhlYWx0aBIOCgZkZXRhaWwYAiABKAkiKQoTUmVpbml0aWFsaXplQmFja2VuZBISCgpyZXF1ZXN0X2lkGAEgASgJIrwBChlSZWluaXRpYWxpemVCYWNrZW5kUmVzdWx0EhIKCnJlcXVlc3RfaWQYASABKAkSPgoHb3V0Y29tZRgCIAEoDjItLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5SZWluaXRpYWxpemVPdXRjb21lEjsKBnJlYXNvbhgDIAEoDjIrLmt1c2ludGEuaW90LmNvbW1vbi52MS5CYWNrZW5kRmFpbHVyZVJlYXNvbhIOCgZkZXRhaWwYBCABKAkiugEKCkNyZWF0ZUxpbmsSDwoHbGlua19pZBgBIAEoCRIxCgZzZW5kZXIYAiABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgDIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAQgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24iugEKClJlbW92ZUxpbmsSDwoHbGlua19pZBgBIAEoCRIxCgZzZW5kZXIYAiABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgDIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAQgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24iQQoJTGlzdExpbmtzEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIm0KCkxpbmtSZXN1bHQSDwoHbGlua19pZBgBIAEoCRIPCgdzdWNjZXNzGAIgASgIEi0KBXN0YXRlGAMgASgOMh4ua3VzaW50YS5pb3QubGluay52MS5MaW5rU3RhdGUSDgoGZGV0YWlsGAQgASgJIj8KDUxpbmtzUmVwb3J0ZWQSLgoFbGlua3MYASADKAsyHy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmsipAEKDEhhbmRzaGFrZUFjaxIQCghhY2NlcHRlZBgBIAEoCBIOCgZyZWFzb24YAiABKAkSNgoKZ2F0ZXdheV9pZBgDIAEoCzIiLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkdhdGV3YXlJZBIfChdzdXBwb3J0c19iYWNrZW5kX2hlYWx0aBgEIAEoCBIZChFzZW5kc19jcmVkZW50aWFscxgFIAEoCCKKAQoSRGV2aWNlQW5ub3VuY2VtZW50Ei0KBmRldmljZRgCIAEoCzIdLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2USGgoScGFpcmluZ19yZXF1ZXN0X2lkGAMgASgJEhcKD2FjY291bnRfbGlua19pZBgEIAEoCUoECAEQAlIKZGVzY3JpcHRvciJVCg1EZXZpY2VSZW1vdmFsEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEg4KBnJlYXNvbhgCIAEoCSILCglIZWFydEJlYXQiRwoPU3Vic2NyaWJlRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIkkKEVVuc3Vic2NyaWJlRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIkEKDEdhdGV3YXlFcnJvchIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKcmVxdWVzdF9pZBgDIAEoCSLtAQoWQ29ubmVjdG9yQ29tbWFuZFJlc3VsdBISCgpyZXF1ZXN0X2lkGAEgASgJEg8KB3N1Y2Nlc3MYAiABKAgSMAoMY29tcGxldGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIyCgVlcnJvchgFIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db21tYW5kRXJyb3ISMwoKc2V0dGxlc19ieRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBAUINCgtfc2V0dGxlc19ieUoECAMQBCJcChBFbnRlclBhaXJpbmdNb2RlEhIKCnJlcXVlc3RfaWQYASABKAkSNAoGd2luZG93GAIgASgLMiQua3VzaW50YS5pb3QuY29tbW9uLnYxLlBhaXJpbmdXaW5kb3ciowEKEVBhaXJpbmdNb2RlUmVzdWx0EhIKCnJlcXVlc3RfaWQYASABKAkSEAoIYWNjZXB0ZWQYAiABKAgSOAoFZXJyb3IYAyABKAsyKS5rdXNpbnRhLmlvdC5jb21tb24udjEuUGFpcmluZ0Vycm9yRGV0YWlsEi4KCmV4cGlyZXNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wInwKEFBhaXJpbmdNb2RlRW5kZWQSEgoKcmVxdWVzdF9pZBgBIAEoCRIaChJkZXZpY2VzX2F0dHJpYnV0ZWQYAiABKA0SOAoFZXJyb3IYAyABKAsyKS5rdXNpbnRhLmlvdC5jb21tb24udjEuUGFpcmluZ0Vycm9yRGV0YWlsIvYHCg5TZXNzaW9uUmVxdWVzdBISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkEKCWhhbmRzaGFrZRgDIAEoCzIsLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5Db25uZWN0b3JIYW5kc2hha2VIABJFCg9wcm9wZXJ0eV91cGRhdGUYBCABKAsyKi5rdXNpbnRhLmlvdC5kZXZpY2UudjEuUHJvcGVydHlVcGRhdGVCYXRjaEgAEkgKEGRldmljZV9hbm5vdW5jZWQYBSABKAsyLC5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuRGV2aWNlQW5ub3VuY2VtZW50SAASQQoOZGV2aWNlX3JlbW92ZWQYBiABKAsyJy5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuRGV2aWNlUmVtb3ZhbEgAEkoKDmNvbW1hbmRfcmVzdWx0GAcgASgLMjAua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkNvbm5lY3RvckNvbW1hbmRSZXN1bHRIABI4CgloZWFydGJlYXQYCCABKAsyIy5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuSGVhcnRCZWF0SAASQAoNZGV2aWNlX2V2ZW50cxgJIAEoCzInLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2VFdmVudEJhdGNoSAASSgoTcGFpcmluZ19tb2RlX3Jlc3VsdBgKIAEoCzIrLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5QYWlyaW5nTW9kZVJlc3VsdEgAEkgKEnBhaXJpbmdfbW9kZV9lbmRlZBgLIAEoCzIqLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5QYWlyaW5nTW9kZUVuZGVkSAASOwoLbGlua19yZXN1bHQYDCABKAsyJC5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuTGlua1Jlc3VsdEgAEkEKDmxpbmtzX3JlcG9ydGVkGA0gASgLMicua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkxpbmtzUmVwb3J0ZWRIABJHCg5iYWNrZW5kX2hlYWx0aBgOIAEoCzItLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5CYWNrZW5kSGVhbHRoUmVwb3J0SAASWgobcmVpbml0aWFsaXplX2JhY2tlbmRfcmVzdWx0GA8gASgLMjMua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLlJlaW5pdGlhbGl6ZUJhY2tlbmRSZXN1bHRIAEIJCgdwYXlsb2FkIqgICg9TZXNzaW9uUmVzcG9uc2USEgoKbWVzc2FnZV9pZBgBIAEoCRIrCgdzZW50X2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI/Cg1oYW5kc2hha2VfYWNrGAMgASgLMiYua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkhhbmRzaGFrZUFja0gAEj4KCXN1YnNjcmliZRgFIAEoCzIpLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5TdWJzY3JpYmVEZXZpY2VIABJCCgt1bnN1YnNjcmliZRgGIAEoCzIrLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5VbnN1YnNjcmliZURldmljZUgAEjcKBWVycm9yGAcgASgLMiYua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkdhdGV3YXlFcnJvckgAEj8KD2V4ZWN1dGVfY29tbWFuZBgIIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VDb21tYW5kSAASTwoXZXhlY3V0ZV9hdHRyaWJ1dGVfd3JpdGUYCSABKAsyLC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXR0cmlidXRlV3JpdGVSZXF1ZXN0SAASSAoSZW50ZXJfcGFpcmluZ19tb2RlGAogASgLMioua3VzaW50YS5pb3QuY29ubmVjdG9yLnYxLkVudGVyUGFpcmluZ01vZGVIABI7CgtjcmVhdGVfbGluaxgLIAEoCzIkLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5DcmVhdGVMaW5rSAASOwoLcmVtb3ZlX2xpbmsYDCABKAsyJC5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuUmVtb3ZlTGlua0gAEjkKCmxpc3RfbGlua3MYDSABKAsyIy5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuTGlzdExpbmtzSAASTQoUcmVpbml0aWFsaXplX2JhY2tlbmQYDiABKAsyLS5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuUmVpbml0aWFsaXplQmFja2VuZEgAEkkKEmNyZWRlbnRpYWxzX3VwZGF0ZRgPIAEoCzIrLmt1c2ludGEuaW90LmNvbm5lY3Rvci52MS5DcmVkZW50aWFsc1VwZGF0ZUgAEksKE2NyZWRlbnRpYWxzX3Jldm9rZWQYECABKAsyLC5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuQ3JlZGVudGlhbHNSZXZva2VkSAASTQoUY3JlZGVudGlhbHNfc25hcHNob3QYESABKAsyLS5rdXNpbnRhLmlvdC5jb25uZWN0b3IudjEuQ3JlZGVudGlhbHNTbmFwc2hvdEgAQgkKB3BheWxvYWRKBAgEEAUqowEKE1JlaW5pdGlhbGl6ZU91dGNvbWUSJAogUkVJTklUSUFMSVpFX09VVENPTUVfVU5TUEVDSUZJRUQQABIdChlSRUlOSVRJQUxJWkVfT1VUQ09NRV9ET05FEAESHwobUkVJTklUSUFMSVpFX09VVENPTUVfRkFJTEVEEAISJgoiUkVJTklUSUFMSVpFX09VVENPTUVfTk9UX1NVUFBPUlRFRBADQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_accountlink_v1_account_link, file_kusinta_iot_common_v1_pairing, file_kusinta_iot_common_v1_types, file_kusinta_iot_device_v1_device, file_kusinta_iot_device_v1_device_event, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_webrtc_v1_command]);
21
22
 
22
23
  /**
23
24
  * Describes the message kusinta.iot.connector.v1.ConnectorInfo.
@@ -26,159 +27,180 @@ export const file_kusinta_iot_connector_v1_connector = /*@__PURE__*/
26
27
  export const ConnectorInfoSchema = /*@__PURE__*/
27
28
  messageDesc(file_kusinta_iot_connector_v1_connector, 0);
28
29
 
30
+ /**
31
+ * Describes the message kusinta.iot.connector.v1.CredentialsUpdate.
32
+ * Use `create(CredentialsUpdateSchema)` to create a new message.
33
+ */
34
+ export const CredentialsUpdateSchema = /*@__PURE__*/
35
+ messageDesc(file_kusinta_iot_connector_v1_connector, 1);
36
+
37
+ /**
38
+ * Describes the message kusinta.iot.connector.v1.CredentialsSnapshot.
39
+ * Use `create(CredentialsSnapshotSchema)` to create a new message.
40
+ */
41
+ export const CredentialsSnapshotSchema = /*@__PURE__*/
42
+ messageDesc(file_kusinta_iot_connector_v1_connector, 2);
43
+
44
+ /**
45
+ * Describes the message kusinta.iot.connector.v1.CredentialsRevoked.
46
+ * Use `create(CredentialsRevokedSchema)` to create a new message.
47
+ */
48
+ export const CredentialsRevokedSchema = /*@__PURE__*/
49
+ messageDesc(file_kusinta_iot_connector_v1_connector, 3);
50
+
29
51
  /**
30
52
  * Describes the message kusinta.iot.connector.v1.ConnectorHandshake.
31
53
  * Use `create(ConnectorHandshakeSchema)` to create a new message.
32
54
  */
33
55
  export const ConnectorHandshakeSchema = /*@__PURE__*/
34
- messageDesc(file_kusinta_iot_connector_v1_connector, 1);
56
+ messageDesc(file_kusinta_iot_connector_v1_connector, 4);
35
57
 
36
58
  /**
37
59
  * Describes the message kusinta.iot.connector.v1.BackendHealthReport.
38
60
  * Use `create(BackendHealthReportSchema)` to create a new message.
39
61
  */
40
62
  export const BackendHealthReportSchema = /*@__PURE__*/
41
- messageDesc(file_kusinta_iot_connector_v1_connector, 2);
63
+ messageDesc(file_kusinta_iot_connector_v1_connector, 5);
42
64
 
43
65
  /**
44
66
  * Describes the message kusinta.iot.connector.v1.ReinitializeBackend.
45
67
  * Use `create(ReinitializeBackendSchema)` to create a new message.
46
68
  */
47
69
  export const ReinitializeBackendSchema = /*@__PURE__*/
48
- messageDesc(file_kusinta_iot_connector_v1_connector, 3);
70
+ messageDesc(file_kusinta_iot_connector_v1_connector, 6);
49
71
 
50
72
  /**
51
73
  * Describes the message kusinta.iot.connector.v1.ReinitializeBackendResult.
52
74
  * Use `create(ReinitializeBackendResultSchema)` to create a new message.
53
75
  */
54
76
  export const ReinitializeBackendResultSchema = /*@__PURE__*/
55
- messageDesc(file_kusinta_iot_connector_v1_connector, 4);
77
+ messageDesc(file_kusinta_iot_connector_v1_connector, 7);
56
78
 
57
79
  /**
58
80
  * Describes the message kusinta.iot.connector.v1.CreateLink.
59
81
  * Use `create(CreateLinkSchema)` to create a new message.
60
82
  */
61
83
  export const CreateLinkSchema = /*@__PURE__*/
62
- messageDesc(file_kusinta_iot_connector_v1_connector, 5);
84
+ messageDesc(file_kusinta_iot_connector_v1_connector, 8);
63
85
 
64
86
  /**
65
87
  * Describes the message kusinta.iot.connector.v1.RemoveLink.
66
88
  * Use `create(RemoveLinkSchema)` to create a new message.
67
89
  */
68
90
  export const RemoveLinkSchema = /*@__PURE__*/
69
- messageDesc(file_kusinta_iot_connector_v1_connector, 6);
91
+ messageDesc(file_kusinta_iot_connector_v1_connector, 9);
70
92
 
71
93
  /**
72
94
  * Describes the message kusinta.iot.connector.v1.ListLinks.
73
95
  * Use `create(ListLinksSchema)` to create a new message.
74
96
  */
75
97
  export const ListLinksSchema = /*@__PURE__*/
76
- messageDesc(file_kusinta_iot_connector_v1_connector, 7);
98
+ messageDesc(file_kusinta_iot_connector_v1_connector, 10);
77
99
 
78
100
  /**
79
101
  * Describes the message kusinta.iot.connector.v1.LinkResult.
80
102
  * Use `create(LinkResultSchema)` to create a new message.
81
103
  */
82
104
  export const LinkResultSchema = /*@__PURE__*/
83
- messageDesc(file_kusinta_iot_connector_v1_connector, 8);
105
+ messageDesc(file_kusinta_iot_connector_v1_connector, 11);
84
106
 
85
107
  /**
86
108
  * Describes the message kusinta.iot.connector.v1.LinksReported.
87
109
  * Use `create(LinksReportedSchema)` to create a new message.
88
110
  */
89
111
  export const LinksReportedSchema = /*@__PURE__*/
90
- messageDesc(file_kusinta_iot_connector_v1_connector, 9);
112
+ messageDesc(file_kusinta_iot_connector_v1_connector, 12);
91
113
 
92
114
  /**
93
115
  * Describes the message kusinta.iot.connector.v1.HandshakeAck.
94
116
  * Use `create(HandshakeAckSchema)` to create a new message.
95
117
  */
96
118
  export const HandshakeAckSchema = /*@__PURE__*/
97
- messageDesc(file_kusinta_iot_connector_v1_connector, 10);
119
+ messageDesc(file_kusinta_iot_connector_v1_connector, 13);
98
120
 
99
121
  /**
100
122
  * Describes the message kusinta.iot.connector.v1.DeviceAnnouncement.
101
123
  * Use `create(DeviceAnnouncementSchema)` to create a new message.
102
124
  */
103
125
  export const DeviceAnnouncementSchema = /*@__PURE__*/
104
- messageDesc(file_kusinta_iot_connector_v1_connector, 11);
126
+ messageDesc(file_kusinta_iot_connector_v1_connector, 14);
105
127
 
106
128
  /**
107
129
  * Describes the message kusinta.iot.connector.v1.DeviceRemoval.
108
130
  * Use `create(DeviceRemovalSchema)` to create a new message.
109
131
  */
110
132
  export const DeviceRemovalSchema = /*@__PURE__*/
111
- messageDesc(file_kusinta_iot_connector_v1_connector, 12);
133
+ messageDesc(file_kusinta_iot_connector_v1_connector, 15);
112
134
 
113
135
  /**
114
136
  * Describes the message kusinta.iot.connector.v1.HeartBeat.
115
137
  * Use `create(HeartBeatSchema)` to create a new message.
116
138
  */
117
139
  export const HeartBeatSchema = /*@__PURE__*/
118
- messageDesc(file_kusinta_iot_connector_v1_connector, 13);
140
+ messageDesc(file_kusinta_iot_connector_v1_connector, 16);
119
141
 
120
142
  /**
121
143
  * Describes the message kusinta.iot.connector.v1.SubscribeDevice.
122
144
  * Use `create(SubscribeDeviceSchema)` to create a new message.
123
145
  */
124
146
  export const SubscribeDeviceSchema = /*@__PURE__*/
125
- messageDesc(file_kusinta_iot_connector_v1_connector, 14);
147
+ messageDesc(file_kusinta_iot_connector_v1_connector, 17);
126
148
 
127
149
  /**
128
150
  * Describes the message kusinta.iot.connector.v1.UnsubscribeDevice.
129
151
  * Use `create(UnsubscribeDeviceSchema)` to create a new message.
130
152
  */
131
153
  export const UnsubscribeDeviceSchema = /*@__PURE__*/
132
- messageDesc(file_kusinta_iot_connector_v1_connector, 15);
154
+ messageDesc(file_kusinta_iot_connector_v1_connector, 18);
133
155
 
134
156
  /**
135
157
  * Describes the message kusinta.iot.connector.v1.GatewayError.
136
158
  * Use `create(GatewayErrorSchema)` to create a new message.
137
159
  */
138
160
  export const GatewayErrorSchema = /*@__PURE__*/
139
- messageDesc(file_kusinta_iot_connector_v1_connector, 16);
161
+ messageDesc(file_kusinta_iot_connector_v1_connector, 19);
140
162
 
141
163
  /**
142
164
  * Describes the message kusinta.iot.connector.v1.ConnectorCommandResult.
143
165
  * Use `create(ConnectorCommandResultSchema)` to create a new message.
144
166
  */
145
167
  export const ConnectorCommandResultSchema = /*@__PURE__*/
146
- messageDesc(file_kusinta_iot_connector_v1_connector, 17);
168
+ messageDesc(file_kusinta_iot_connector_v1_connector, 20);
147
169
 
148
170
  /**
149
171
  * Describes the message kusinta.iot.connector.v1.EnterPairingMode.
150
172
  * Use `create(EnterPairingModeSchema)` to create a new message.
151
173
  */
152
174
  export const EnterPairingModeSchema = /*@__PURE__*/
153
- messageDesc(file_kusinta_iot_connector_v1_connector, 18);
175
+ messageDesc(file_kusinta_iot_connector_v1_connector, 21);
154
176
 
155
177
  /**
156
178
  * Describes the message kusinta.iot.connector.v1.PairingModeResult.
157
179
  * Use `create(PairingModeResultSchema)` to create a new message.
158
180
  */
159
181
  export const PairingModeResultSchema = /*@__PURE__*/
160
- messageDesc(file_kusinta_iot_connector_v1_connector, 19);
182
+ messageDesc(file_kusinta_iot_connector_v1_connector, 22);
161
183
 
162
184
  /**
163
185
  * Describes the message kusinta.iot.connector.v1.PairingModeEnded.
164
186
  * Use `create(PairingModeEndedSchema)` to create a new message.
165
187
  */
166
188
  export const PairingModeEndedSchema = /*@__PURE__*/
167
- messageDesc(file_kusinta_iot_connector_v1_connector, 20);
189
+ messageDesc(file_kusinta_iot_connector_v1_connector, 23);
168
190
 
169
191
  /**
170
192
  * Describes the message kusinta.iot.connector.v1.SessionRequest.
171
193
  * Use `create(SessionRequestSchema)` to create a new message.
172
194
  */
173
195
  export const SessionRequestSchema = /*@__PURE__*/
174
- messageDesc(file_kusinta_iot_connector_v1_connector, 21);
196
+ messageDesc(file_kusinta_iot_connector_v1_connector, 24);
175
197
 
176
198
  /**
177
199
  * Describes the message kusinta.iot.connector.v1.SessionResponse.
178
200
  * Use `create(SessionResponseSchema)` to create a new message.
179
201
  */
180
202
  export const SessionResponseSchema = /*@__PURE__*/
181
- messageDesc(file_kusinta_iot_connector_v1_connector, 22);
203
+ messageDesc(file_kusinta_iot_connector_v1_connector, 25);
182
204
 
183
205
  /**
184
206
  * Describes the enum kusinta.iot.connector.v1.ReinitializeOutcome.
@@ -5,7 +5,7 @@
5
5
  import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
7
  import type { ConnectorId, DeviceId, SpaceId, UserId } from "../../identity/v1/identity_pb.js";
8
- import type { DeviceLifecycleState, DeviceOwnershipType } from "../../common/v1/types_pb.js";
8
+ import type { AssetOwner, DeviceLifecycleState, DeviceOwnershipType } from "../../common/v1/types_pb.js";
9
9
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
10
10
  import type { LinkCapability } from "../../link/v1/link_pb.js";
11
11
  import type { HomematicDeviceIdentity } from "../../vendor/homematic/v1/homematic_pb.js";
@@ -21,8 +21,8 @@ export declare const file_kusinta_iot_device_v1_descriptor: GenFile;
21
21
  * Device.endpoints.
22
22
  *
23
23
  * Field bands: 1-2 identity, 3-10 Matter BasicInformation, 11-12 placement,
24
- * 13-16 ownership and lifecycle, 18-19 vendor identity and bridging.
25
- * 2 and 17 are burned; the next free number is 20.
24
+ * 13-16 and 21 ownership and lifecycle, 18-20 vendor identity, bridging and linking.
25
+ * 2 and 17 are burned; the next free number is 22.
26
26
  *
27
27
  * @generated from message kusinta.iot.device.v1.DeviceDescriptor
28
28
  */
@@ -101,6 +101,16 @@ export declare type DeviceDescriptor = Message<"kusinta.iot.device.v1.DeviceDesc
101
101
  */
102
102
  ownerUserId?: UserId | undefined;
103
103
 
104
+ /**
105
+ * Who owns it as an asset, where ownership is COMPANY: see common.v1.AssetOwner, which
106
+ * decides nobody's access. Set by the gateway from its own records (webrtc.v1.SetAssetOwner)
107
+ * and given to whoever is given the descriptor; a connector leaves it unset, and the gateway
108
+ * ignores it from one.
109
+ *
110
+ * @generated from field: kusinta.iot.common.v1.AssetOwner asset_owner = 21;
111
+ */
112
+ assetOwner?: AssetOwner | undefined;
113
+
104
114
  /**
105
115
  * Unset when it is withheld from the recipient: in a service view, and from anyone when
106
116
  * it dates from before their current residency in the home, or from a home they did not
@@ -13,7 +13,7 @@ import { file_kusinta_iot_vendor_homematic_v1_homematic } from "../../vendor/hom
13
13
  * Describes the file kusinta/iot/device/v1/descriptor.proto.
14
14
  */
15
15
  export const file_kusinta_iot_device_v1_descriptor = /*@__PURE__*/
16
- fileDesc("CiZrdXNpbnRhL2lvdC9kZXZpY2UvdjEvZGVzY3JpcHRvci5wcm90bxIVa3VzaW50YS5pb3QuZGV2aWNlLnYxIvkGChBEZXZpY2VEZXNjcmlwdG9yEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEhMKC3ZlbmRvcl9uYW1lGAMgASgJEhQKDHByb2R1Y3RfbmFtZRgEIAEoCRIVCg1zZXJpYWxfbnVtYmVyGAUgASgJEhIKCm5vZGVfbGFiZWwYBiABKAkSEQoJdmVuZG9yX2lkGAcgASgNEhIKCnByb2R1Y3RfaWQYCCABKA0SHwoXaGFyZHdhcmVfdmVyc2lvbl9zdHJpbmcYCSABKAkSHwoXc29mdHdhcmVfdmVyc2lvbl9zdHJpbmcYCiABKAkSOgoMY29ubmVjdG9yX2lkGAsgASgLMiQua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuQ29ubmVjdG9ySWQSMgoIc3BhY2VfaWQYDCABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEj0KCW93bmVyc2hpcBgNIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEj4KCWxpZmVjeWNsZRgOIAEoDjIrLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VMaWZlY3ljbGVTdGF0ZRI2Cg1vd25lcl91c2VyX2lkGA8gASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEi4KCmNsYWltZWRfYXQYECABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjoKCmJyaWRnZWRfYnkYEyABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZEgBiAEBEj4KEWxpbmtfY2FwYWJpbGl0aWVzGBQgAygLMiMua3VzaW50YS5pb3QubGluay52MS5MaW5rQ2FwYWJpbGl0eRJNCglob21lbWF0aWMYEiABKAsyOC5rdXNpbnRhLmlvdC52ZW5kb3IuaG9tZW1hdGljLnYxLkhvbWVtYXRpY0RldmljZUlkZW50aXR5SABCEQoPdmVuZG9yX2lkZW50aXR5Qg0KC19icmlkZ2VkX2J5SgQIAhADSgQIERASUhVtYXR0ZXJfZGV2aWNlX3R5cGVfaWRSCWVuZHBvaW50c0ICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_vendor_homematic_v1_homematic]);
16
+ fileDesc("CiZrdXNpbnRhL2lvdC9kZXZpY2UvdjEvZGVzY3JpcHRvci5wcm90bxIVa3VzaW50YS5pb3QuZGV2aWNlLnYxIrEHChBEZXZpY2VEZXNjcmlwdG9yEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEhMKC3ZlbmRvcl9uYW1lGAMgASgJEhQKDHByb2R1Y3RfbmFtZRgEIAEoCRIVCg1zZXJpYWxfbnVtYmVyGAUgASgJEhIKCm5vZGVfbGFiZWwYBiABKAkSEQoJdmVuZG9yX2lkGAcgASgNEhIKCnByb2R1Y3RfaWQYCCABKA0SHwoXaGFyZHdhcmVfdmVyc2lvbl9zdHJpbmcYCSABKAkSHwoXc29mdHdhcmVfdmVyc2lvbl9zdHJpbmcYCiABKAkSOgoMY29ubmVjdG9yX2lkGAsgASgLMiQua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuQ29ubmVjdG9ySWQSMgoIc3BhY2VfaWQYDCABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEj0KCW93bmVyc2hpcBgNIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEj4KCWxpZmVjeWNsZRgOIAEoDjIrLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VMaWZlY3ljbGVTdGF0ZRI2Cg1vd25lcl91c2VyX2lkGA8gASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEjYKC2Fzc2V0X293bmVyGBUgASgLMiEua3VzaW50YS5pb3QuY29tbW9uLnYxLkFzc2V0T3duZXISLgoKY2xhaW1lZF9hdBgQIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASOgoKYnJpZGdlZF9ieRgTIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkSAGIAQESPgoRbGlua19jYXBhYmlsaXRpZXMYFCADKAsyIy5rdXNpbnRhLmlvdC5saW5rLnYxLkxpbmtDYXBhYmlsaXR5Ek0KCWhvbWVtYXRpYxgSIAEoCzI4Lmt1c2ludGEuaW90LnZlbmRvci5ob21lbWF0aWMudjEuSG9tZW1hdGljRGV2aWNlSWRlbnRpdHlIAEIRCg92ZW5kb3JfaWRlbnRpdHlCDQoLX2JyaWRnZWRfYnlKBAgCEANKBAgREBJSFW1hdHRlcl9kZXZpY2VfdHlwZV9pZFIJZW5kcG9pbnRzQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_vendor_homematic_v1_homematic]);
17
17
 
18
18
  /**
19
19
  * Describes the message kusinta.iot.device.v1.DeviceDescriptor.
@@ -568,9 +568,12 @@ export declare const ReportServiceReachResponseSchema: GenMessage<ReportServiceR
568
568
  * gateway affects and to name where a problem is. The fields of space.v1.Space it needs and
569
569
  * no more: who is filed on a space, and which devices are in it, stay on the gateway.
570
570
  *
571
- * name is the space's name as filed. Building staff see it in the app already, but the name
572
- * of a home may carry personal data ("Apt 101 – Andersson"), so it is stored by the api-server
573
- * as personal data: something an operator's data protection assessment covers.
571
+ * name is the space's name as filed (space.v1.Space.name). For an apartment that is the
572
+ * building's own identifier for it, which the property owner gives and only staff change; the
573
+ * household's own name for its home (space.v1.Space.home_name) is never sent here, and never
574
+ * leaves the gateway. A name staff gave may still carry personal data ("Apt 101 – Andersson"),
575
+ * so it is stored by the api-server as personal data: something an operator's data protection
576
+ * assessment covers.
574
577
  *
575
578
  * @generated from message kusinta.iot.reporting.v1.ServedSpace
576
579
  */
@@ -1147,6 +1147,22 @@ export enum RedeemOutcome {
1147
1147
  * @generated from enum value: REDEEM_OUTCOME_WRONG_ACCOUNT = 4;
1148
1148
  */
1149
1149
  WRONG_ACCOUNT = 4,
1150
+
1151
+ /**
1152
+ * The invite appoints a household admin (webrtc.v1 household.proto, STAFF APPOINTMENT),
1153
+ * and this user may not be appointed: they created it, or hold a staff role on the gateway.
1154
+ * Also the answer to anyone outside the departing household redeeming a RESIDENT or
1155
+ * HOUSEHOLD_ADMIN invite on a home whose vacated handover is pending (webrtc.v1
1156
+ * household.proto, VACANCY). Leaves the invite pending, for the person it was meant for.
1157
+ * Answered only to a user whose secret matched a live invite, so it tells nothing about
1158
+ * which secrets exist. An
1159
+ * appointment invite on a home that is no longer empty is no invite, and answers INVALID.
1160
+ *
1161
+ * Rollout order: the api-server handles it before a gateway sends it.
1162
+ *
1163
+ * @generated from enum value: REDEEM_OUTCOME_NOT_ELIGIBLE = 5;
1164
+ */
1165
+ NOT_ELIGIBLE = 5,
1150
1166
  }
1151
1167
 
1152
1168
  /**
@@ -12,7 +12,7 @@ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identit
12
12
  * Describes the file kusinta/iot/signaling/v1/signaling.proto.
13
13
  */
14
14
  export const file_kusinta_iot_signaling_v1_signaling = /*@__PURE__*/
15
- fileDesc("CihrdXNpbnRhL2lvdC9zaWduYWxpbmcvdjEvc2lnbmFsaW5nLnByb3RvEhhrdXNpbnRhLmlvdC5zaWduYWxpbmcudjEiFwoIU2RwT2ZmZXISCwoDc2RwGAEgASgJIhgKCVNkcEFuc3dlchILCgNzZHAYASABKAkiSwoMSWNlQ2FuZGlkYXRlEhEKCWNhbmRpZGF0ZRgBIAEoCRIPCgdzZHBfbWlkGAIgASgJEhcKD3NkcF9tbGluZV9pbmRleBgDIAEoBSILCglIZWFydEJlYXQiTgoNVXNlckhhbmRzaGFrZRI9ChF0YXJnZXRfZ2F0ZXdheV9pZBgBIAEoCzIiLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkdhdGV3YXlJZCJTChBVc2VySGFuZHNoYWtlQWNrEhAKCGFjY2VwdGVkGAEgASgIEg4KBnJlYXNvbhgCIAEoCRIdChVoZWFydGJlYXRfaW50ZXJ2YWxfbXMYAyABKA0isgYKFUdhdGV3YXlDb25uZWN0UmVxdWVzdBI3Cg50YXJnZXRfdXNlcl9pZBgBIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBISCgpzZXNzaW9uX2lkGAUgASgJEjUKBmFuc3dlchgCIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBBbnN3ZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAEjgKCWhlYXJ0YmVhdBgEIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5IZWFydEJlYXRIABJMChRyZWRlZW1faW52aXRlX3Jlc3VsdBgGIAEoCzIsLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5SZWRlZW1JbnZpdGVSZXN1bHRIABJgCh52b3VjaGVkX2FkbWluaXN0cmF0b3JzX2FwcGxpZWQYByABKAsyNi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVm91Y2hlZEFkbWluaXN0cmF0b3JzQXBwbGllZEgAElQKGHRyYW5zZmVyX291dGNvbWVfYXBwbGllZBgIIAEoCzIwLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5UcmFuc2Zlck91dGNvbWVBcHBsaWVkSAASNwoFd2lwZWQYCSABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuR2F0ZXdheVdpcGVkSAASTAoTYWNjb3VudF9saW5rX3Jlc3VsdBgKIAEoCzItLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLkFjY291bnRMaW5rUmVzdWx0SAASQQoNcmVmcmVzaF90b2tlbhgLIAEoCzIoLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLlJlZnJlc2hUb2tlbkgAEj8KDHJldm9rZV90b2tlbhgMIAEoCzInLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLlJldm9rZVRva2VuSABCCQoHcGF5bG9hZCLvBgoWR2F0ZXdheUNvbm5lY3RSZXNwb25zZRI1Cgxmcm9tX3VzZXJfaWQYASABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSEgoKc2Vzc2lvbl9pZBgEIAEoCRIzCgVvZmZlchgCIAEoCzIiLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBPZmZlckgAEj8KDWljZV9jYW5kaWRhdGUYAyABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuSWNlQ2FuZGlkYXRlSAASPwoNcmVkZWVtX2ludml0ZRgFIAEoCzImLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5SZWRlZW1JbnZpdGVIABJRChZ2b3VjaGVkX2FkbWluaXN0cmF0b3JzGAYgASgLMi8ua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlZvdWNoZWRBZG1pbmlzdHJhdG9yc0gAEkUKEHRyYW5zZmVyX291dGNvbWUYByABKAsyKS5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVHJhbnNmZXJPdXRjb21lSAASRgoNc3RyZWFtX29wZW5lZBgIIAEoCzItLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5HYXRld2F5U3RyZWFtT3BlbmVkSAASQwoPZ2F0ZXdheV9kZWxldGVkGAkgASgLMigua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkdhdGV3YXlEZWxldGVkSAASQwoOYWNjb3VudF9saW5rZWQYCiABKAsyKS5rdXNpbnRhLmlvdC5hY2NvdW50bGluay52MS5BY2NvdW50TGlua2VkSAASRQoPdG9rZW5fcmVmcmVzaGVkGAsgASgLMioua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuVG9rZW5SZWZyZXNoZWRIABJBCg10b2tlbl9yZXZva2VkGAwgASgLMigua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuVG9rZW5SZXZva2VkSAASUgoWYWNjb3VudF9saW5rX2NhbmNlbGxlZBgNIAEoCzIwLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLkFjY291bnRMaW5rQ2FuY2VsbGVkSABCCQoHcGF5bG9hZCJ7CgxSZWRlZW1JbnZpdGUSEgoKcmVxdWVzdF9pZBgBIAEoCRIPCgV0b2tlbhgCIAEoCUgAEg4KBGNvZGUYAyABKAlIABIUCgxkaXNwbGF5X25hbWUYBCABKAkSFgoOdmVyaWZpZWRfZW1haWwYBSABKAlCCAoGc2VjcmV0ImIKElJlZGVlbUludml0ZVJlc3VsdBISCgpyZXF1ZXN0X2lkGAEgASgJEjgKB291dGNvbWUYAiABKA4yJy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuUmVkZWVtT3V0Y29tZSIuChNHYXRld2F5U3RyZWFtT3BlbmVkEhcKD293bmVyc2hpcF9lcG9jaBgBIAEoCSJdCg5HYXRld2F5RGVsZXRlZBIXCg9vd25lcnNoaXBfZXBvY2gYASABKAkSMgoFc2NvcGUYAiABKA4yIy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuV2lwZVNjb3BlIp4BCgxHYXRld2F5V2lwZWQSFwoPb3duZXJzaGlwX2Vwb2NoGAEgASgJEjIKBXNjb3BlGAIgASgOMiMua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLldpcGVTY29wZRJBCgtsZWZ0X2JlaGluZBgDIAMoCzIsLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5QYWlyaW5nc0xlZnRCZWhpbmQiXgoSUGFpcmluZ3NMZWZ0QmVoaW5kEjIKBGtpbmQYASABKA4yJC5rdXNpbnRhLmlvdC5jb21tb24udjEuQ29ubmVjdG9yS2luZBIUCgxkaXNwbGF5X25hbWUYAiABKAkiqwEKFVZvdWNoZWRBZG1pbmlzdHJhdG9ycxIPCgd2ZXJzaW9uGAEgASgEEjcKDmFkbWluaXN0cmF0b3JzGAIgAygLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEhkKEW9yZ2FuaXNhdGlvbl9uYW1lGAMgASgJEi0KCWlzc3VlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiLwocVm91Y2hlZEFkbWluaXN0cmF0b3JzQXBwbGllZBIPCgd2ZXJzaW9uGAEgASgEIqsBCg9UcmFuc2Zlck91dGNvbWUSEwoLdHJhbnNmZXJfaWQYASABKAkSRwoOYWRtaW5pc3RyYXRvcnMYAiABKAsyLy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVm91Y2hlZEFkbWluaXN0cmF0b3JzEjoKCG91dGdvaW5nGAMgAygLMigua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLk91dGdvaW5nQ2hvaWNlIrMBCg5PdXRnb2luZ0Nob2ljZRIwCgd1c2VyX2lkGAEgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEj0KBmNob2ljZRgCIAEoDjItLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5PdXRnb2luZ1N0YWZmQ2hvaWNlEjAKDGFjY2Vzc191bnRpbBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiLQoWVHJhbnNmZXJPdXRjb21lQXBwbGllZBITCgt0cmFuc2Zlcl9pZBgBIAEoCSLnAQoSVXNlckNvbm5lY3RSZXF1ZXN0EhIKCnNlc3Npb25faWQYBCABKAkSPAoJaGFuZHNoYWtlGAEgASgLMicua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJIYW5kc2hha2VIABIzCgVvZmZlchgCIAEoCzIiLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBPZmZlckgAEj8KDWljZV9jYW5kaWRhdGUYAyABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuSWNlQ2FuZGlkYXRlSABCCQoHcGF5bG9hZCKrAgoTVXNlckNvbm5lY3RSZXNwb25zZRISCgpzZXNzaW9uX2lkGAQgASgJEkMKDWhhbmRzaGFrZV9hY2sYASABKAsyKi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVXNlckhhbmRzaGFrZUFja0gAEjUKBmFuc3dlchgCIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBBbnN3ZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAEjgKCWhlYXJ0YmVhdBgFIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5IZWFydEJlYXRIAEIJCgdwYXlsb2FkIm8KEVVzZXJMaXN0ZW5SZXF1ZXN0EjoKCWhhbmRzaGFrZRgBIAEoCzInLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5Vc2VySGFuZHNoYWtlEhIKCnNlc3Npb25faWQYBCABKAlKBAgCEANKBAgDEAQiVQoSVXNlckxpc3RlblJlc3BvbnNlEj8KCHJlc3BvbnNlGAEgASgLMi0ua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJDb25uZWN0UmVzcG9uc2UitwEKD1VzZXJTZW5kUmVxdWVzdBISCgpzZXNzaW9uX2lkGAQgASgJEjMKBW9mZmVyGAIgASgLMiIua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlNkcE9mZmVySAASPwoNaWNlX2NhbmRpZGF0ZRgDIAEoCzImLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5JY2VDYW5kaWRhdGVIAEIJCgdwYXlsb2FkSgQIARACUgloYW5kc2hha2UiEgoQVXNlclNlbmRSZXNwb25zZSqtAQoNUmVkZWVtT3V0Y29tZRIeChpSRURFRU1fT1VUQ09NRV9VTlNQRUNJRklFRBAAEhkKFVJFREVFTV9PVVRDT01FX0pPSU5FRBABEiMKH1JFREVFTV9PVVRDT01FX1BFTkRJTkdfQVBQUk9WQUwQAhIaChZSRURFRU1fT1VUQ09NRV9JTlZBTElEEAMSIAocUkVERUVNX09VVENPTUVfV1JPTkdfQUNDT1VOVBAEKmgKCVdpcGVTY29wZRIaChZXSVBFX1NDT1BFX1VOU1BFQ0lGSUVEEAASIQodV0lQRV9TQ09QRV9QRU9QTEVfQU5EX0hJU1RPUlkQARIcChhXSVBFX1NDT1BFX0ZBQ1RPUllfUkVTRVQQAiqLAQoTT3V0Z29pbmdTdGFmZkNob2ljZRIlCiFPVVRHT0lOR19TVEFGRl9DSE9JQ0VfVU5TUEVDSUZJRUQQABIfChtPVVRHT0lOR19TVEFGRl9DSE9JQ0VfTEVBVkUQARIsCihPVVRHT0lOR19TVEFGRl9DSE9JQ0VfU1RBWV9BU19URUNITklDSUFOEAJCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_accountlink_v1_account_link, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity]);
15
+ fileDesc("CihrdXNpbnRhL2lvdC9zaWduYWxpbmcvdjEvc2lnbmFsaW5nLnByb3RvEhhrdXNpbnRhLmlvdC5zaWduYWxpbmcudjEiFwoIU2RwT2ZmZXISCwoDc2RwGAEgASgJIhgKCVNkcEFuc3dlchILCgNzZHAYASABKAkiSwoMSWNlQ2FuZGlkYXRlEhEKCWNhbmRpZGF0ZRgBIAEoCRIPCgdzZHBfbWlkGAIgASgJEhcKD3NkcF9tbGluZV9pbmRleBgDIAEoBSILCglIZWFydEJlYXQiTgoNVXNlckhhbmRzaGFrZRI9ChF0YXJnZXRfZ2F0ZXdheV9pZBgBIAEoCzIiLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkdhdGV3YXlJZCJTChBVc2VySGFuZHNoYWtlQWNrEhAKCGFjY2VwdGVkGAEgASgIEg4KBnJlYXNvbhgCIAEoCRIdChVoZWFydGJlYXRfaW50ZXJ2YWxfbXMYAyABKA0isgYKFUdhdGV3YXlDb25uZWN0UmVxdWVzdBI3Cg50YXJnZXRfdXNlcl9pZBgBIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBISCgpzZXNzaW9uX2lkGAUgASgJEjUKBmFuc3dlchgCIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBBbnN3ZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAEjgKCWhlYXJ0YmVhdBgEIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5IZWFydEJlYXRIABJMChRyZWRlZW1faW52aXRlX3Jlc3VsdBgGIAEoCzIsLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5SZWRlZW1JbnZpdGVSZXN1bHRIABJgCh52b3VjaGVkX2FkbWluaXN0cmF0b3JzX2FwcGxpZWQYByABKAsyNi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVm91Y2hlZEFkbWluaXN0cmF0b3JzQXBwbGllZEgAElQKGHRyYW5zZmVyX291dGNvbWVfYXBwbGllZBgIIAEoCzIwLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5UcmFuc2Zlck91dGNvbWVBcHBsaWVkSAASNwoFd2lwZWQYCSABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuR2F0ZXdheVdpcGVkSAASTAoTYWNjb3VudF9saW5rX3Jlc3VsdBgKIAEoCzItLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLkFjY291bnRMaW5rUmVzdWx0SAASQQoNcmVmcmVzaF90b2tlbhgLIAEoCzIoLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLlJlZnJlc2hUb2tlbkgAEj8KDHJldm9rZV90b2tlbhgMIAEoCzInLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLlJldm9rZVRva2VuSABCCQoHcGF5bG9hZCLvBgoWR2F0ZXdheUNvbm5lY3RSZXNwb25zZRI1Cgxmcm9tX3VzZXJfaWQYASABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSEgoKc2Vzc2lvbl9pZBgEIAEoCRIzCgVvZmZlchgCIAEoCzIiLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBPZmZlckgAEj8KDWljZV9jYW5kaWRhdGUYAyABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuSWNlQ2FuZGlkYXRlSAASPwoNcmVkZWVtX2ludml0ZRgFIAEoCzImLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5SZWRlZW1JbnZpdGVIABJRChZ2b3VjaGVkX2FkbWluaXN0cmF0b3JzGAYgASgLMi8ua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlZvdWNoZWRBZG1pbmlzdHJhdG9yc0gAEkUKEHRyYW5zZmVyX291dGNvbWUYByABKAsyKS5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVHJhbnNmZXJPdXRjb21lSAASRgoNc3RyZWFtX29wZW5lZBgIIAEoCzItLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5HYXRld2F5U3RyZWFtT3BlbmVkSAASQwoPZ2F0ZXdheV9kZWxldGVkGAkgASgLMigua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkdhdGV3YXlEZWxldGVkSAASQwoOYWNjb3VudF9saW5rZWQYCiABKAsyKS5rdXNpbnRhLmlvdC5hY2NvdW50bGluay52MS5BY2NvdW50TGlua2VkSAASRQoPdG9rZW5fcmVmcmVzaGVkGAsgASgLMioua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuVG9rZW5SZWZyZXNoZWRIABJBCg10b2tlbl9yZXZva2VkGAwgASgLMigua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuVG9rZW5SZXZva2VkSAASUgoWYWNjb3VudF9saW5rX2NhbmNlbGxlZBgNIAEoCzIwLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLkFjY291bnRMaW5rQ2FuY2VsbGVkSABCCQoHcGF5bG9hZCJ7CgxSZWRlZW1JbnZpdGUSEgoKcmVxdWVzdF9pZBgBIAEoCRIPCgV0b2tlbhgCIAEoCUgAEg4KBGNvZGUYAyABKAlIABIUCgxkaXNwbGF5X25hbWUYBCABKAkSFgoOdmVyaWZpZWRfZW1haWwYBSABKAlCCAoGc2VjcmV0ImIKElJlZGVlbUludml0ZVJlc3VsdBISCgpyZXF1ZXN0X2lkGAEgASgJEjgKB291dGNvbWUYAiABKA4yJy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuUmVkZWVtT3V0Y29tZSIuChNHYXRld2F5U3RyZWFtT3BlbmVkEhcKD293bmVyc2hpcF9lcG9jaBgBIAEoCSJdCg5HYXRld2F5RGVsZXRlZBIXCg9vd25lcnNoaXBfZXBvY2gYASABKAkSMgoFc2NvcGUYAiABKA4yIy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuV2lwZVNjb3BlIp4BCgxHYXRld2F5V2lwZWQSFwoPb3duZXJzaGlwX2Vwb2NoGAEgASgJEjIKBXNjb3BlGAIgASgOMiMua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLldpcGVTY29wZRJBCgtsZWZ0X2JlaGluZBgDIAMoCzIsLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5QYWlyaW5nc0xlZnRCZWhpbmQiXgoSUGFpcmluZ3NMZWZ0QmVoaW5kEjIKBGtpbmQYASABKA4yJC5rdXNpbnRhLmlvdC5jb21tb24udjEuQ29ubmVjdG9yS2luZBIUCgxkaXNwbGF5X25hbWUYAiABKAkiqwEKFVZvdWNoZWRBZG1pbmlzdHJhdG9ycxIPCgd2ZXJzaW9uGAEgASgEEjcKDmFkbWluaXN0cmF0b3JzGAIgAygLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEhkKEW9yZ2FuaXNhdGlvbl9uYW1lGAMgASgJEi0KCWlzc3VlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiLwocVm91Y2hlZEFkbWluaXN0cmF0b3JzQXBwbGllZBIPCgd2ZXJzaW9uGAEgASgEIqsBCg9UcmFuc2Zlck91dGNvbWUSEwoLdHJhbnNmZXJfaWQYASABKAkSRwoOYWRtaW5pc3RyYXRvcnMYAiABKAsyLy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVm91Y2hlZEFkbWluaXN0cmF0b3JzEjoKCG91dGdvaW5nGAMgAygLMigua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLk91dGdvaW5nQ2hvaWNlIrMBCg5PdXRnb2luZ0Nob2ljZRIwCgd1c2VyX2lkGAEgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEj0KBmNob2ljZRgCIAEoDjItLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5PdXRnb2luZ1N0YWZmQ2hvaWNlEjAKDGFjY2Vzc191bnRpbBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiLQoWVHJhbnNmZXJPdXRjb21lQXBwbGllZBITCgt0cmFuc2Zlcl9pZBgBIAEoCSLnAQoSVXNlckNvbm5lY3RSZXF1ZXN0EhIKCnNlc3Npb25faWQYBCABKAkSPAoJaGFuZHNoYWtlGAEgASgLMicua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJIYW5kc2hha2VIABIzCgVvZmZlchgCIAEoCzIiLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBPZmZlckgAEj8KDWljZV9jYW5kaWRhdGUYAyABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuSWNlQ2FuZGlkYXRlSABCCQoHcGF5bG9hZCKrAgoTVXNlckNvbm5lY3RSZXNwb25zZRISCgpzZXNzaW9uX2lkGAQgASgJEkMKDWhhbmRzaGFrZV9hY2sYASABKAsyKi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVXNlckhhbmRzaGFrZUFja0gAEjUKBmFuc3dlchgCIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBBbnN3ZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAEjgKCWhlYXJ0YmVhdBgFIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5IZWFydEJlYXRIAEIJCgdwYXlsb2FkIm8KEVVzZXJMaXN0ZW5SZXF1ZXN0EjoKCWhhbmRzaGFrZRgBIAEoCzInLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5Vc2VySGFuZHNoYWtlEhIKCnNlc3Npb25faWQYBCABKAlKBAgCEANKBAgDEAQiVQoSVXNlckxpc3RlblJlc3BvbnNlEj8KCHJlc3BvbnNlGAEgASgLMi0ua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJDb25uZWN0UmVzcG9uc2UitwEKD1VzZXJTZW5kUmVxdWVzdBISCgpzZXNzaW9uX2lkGAQgASgJEjMKBW9mZmVyGAIgASgLMiIua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlNkcE9mZmVySAASPwoNaWNlX2NhbmRpZGF0ZRgDIAEoCzImLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5JY2VDYW5kaWRhdGVIAEIJCgdwYXlsb2FkSgQIARACUgloYW5kc2hha2UiEgoQVXNlclNlbmRSZXNwb25zZSrOAQoNUmVkZWVtT3V0Y29tZRIeChpSRURFRU1fT1VUQ09NRV9VTlNQRUNJRklFRBAAEhkKFVJFREVFTV9PVVRDT01FX0pPSU5FRBABEiMKH1JFREVFTV9PVVRDT01FX1BFTkRJTkdfQVBQUk9WQUwQAhIaChZSRURFRU1fT1VUQ09NRV9JTlZBTElEEAMSIAocUkVERUVNX09VVENPTUVfV1JPTkdfQUNDT1VOVBAEEh8KG1JFREVFTV9PVVRDT01FX05PVF9FTElHSUJMRRAFKmgKCVdpcGVTY29wZRIaChZXSVBFX1NDT1BFX1VOU1BFQ0lGSUVEEAASIQodV0lQRV9TQ09QRV9QRU9QTEVfQU5EX0hJU1RPUlkQARIcChhXSVBFX1NDT1BFX0ZBQ1RPUllfUkVTRVQQAiqLAQoTT3V0Z29pbmdTdGFmZkNob2ljZRIlCiFPVVRHT0lOR19TVEFGRl9DSE9JQ0VfVU5TUEVDSUZJRUQQABIfChtPVVRHT0lOR19TVEFGRl9DSE9JQ0VfTEVBVkUQARIsCihPVVRHT0lOR19TVEFGRl9DSE9JQ0VfU1RBWV9BU19URUNITklDSUFOEAJCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_accountlink_v1_account_link, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity]);
16
16
 
17
17
  /**
18
18
  * Describes the message kusinta.iot.signaling.v1.SdpOffer.
@@ -29,6 +29,13 @@ export declare type Space = Message<"kusinta.iot.space.v1.Space"> & {
29
29
  spaceType: SpaceType;
30
30
 
31
31
  /**
32
+ * On an apartment, the building's fixed, readable identifier for it — its number, say "Lgh
33
+ * 1102" — given by the property owner or the gateway's administrators when it is created and
34
+ * changed only by them (webrtc.v1.CreateSpace, webrtc.v1.UpdateSpace); never a generated id,
35
+ * and never touched by a household's handover. An apartment created before this rule keeps
36
+ * the name it has, unchanged, as that identifier. The household's own name for the home is
37
+ * home_name.
38
+ *
32
39
  * @generated from field: string name = 3;
33
40
  */
34
41
  name: string;
@@ -130,6 +137,21 @@ export declare type Space = Message<"kusinta.iot.space.v1.Space"> & {
130
137
  * @generated from field: bool members_withheld = 14;
131
138
  */
132
139
  membersWithheld: boolean;
140
+
141
+ /**
142
+ * On an apartment, the name its household gave the home (webrtc.v1.SetHomeName), which may
143
+ * name them ("The Svenssons"). Given to the home's residents only: empty for anyone else,
144
+ * so a client shows it to residents alone and the apartment's name to everyone. Wiped at
145
+ * the home's handover. Empty on every other space.
146
+ *
147
+ * No other field carries it. Wherever the wire names an apartment to anyone — pushes,
148
+ * problems, invites and what is shown of them before redeeming, privacy disclosures, and
149
+ * reporting.v1.ServedSpace.name to the api-server — it is name, never this: the household's
150
+ * own name never leaves the gateway but to the home's residents.
151
+ *
152
+ * @generated from field: string home_name = 15;
153
+ */
154
+ homeName: string;
133
155
  };
134
156
 
135
157
  /**