@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kusinta/iot-schema",
3
- "version": "0.2.0-beta.40",
3
+ "version": "0.2.0-beta.42",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "files": ["src"],
@@ -36,6 +36,7 @@
36
36
  "./webrtc/app-token": "./src/kusinta/iot/webrtc/v1/app_token_pb.js",
37
37
  "./webrtc/command": "./src/kusinta/iot/webrtc/v1/command_pb.js",
38
38
  "./webrtc/device-state": "./src/kusinta/iot/webrtc/v1/device_state_pb.js",
39
+ "./webrtc/household": "./src/kusinta/iot/webrtc/v1/household_pb.js",
39
40
  "./webrtc/invite": "./src/kusinta/iot/webrtc/v1/invite_pb.js",
40
41
  "./webrtc/members": "./src/kusinta/iot/webrtc/v1/members_pb.js",
41
42
  "./webrtc/management": "./src/kusinta/iot/webrtc/v1/management_pb.js",
@@ -315,7 +315,8 @@ export declare type DeviceAcl = Message<"kusinta.iot.access.v1.DeviceAcl"> & {
315
315
  * description only: its endpoints with their device types and implemented lists, and no
316
316
  * property value. What keeps it working comes as a webrtc.v1.ServiceStatus instead. An
317
317
  * app should show its readings as withheld, not missing. RESIDENT: the user lives in the
318
- * home the device is filed in, whether or not they also own it. UNSPECIFIED: neither
318
+ * home the device is filed in, whether or not they also own it; a household admin is given
319
+ * RESIDENT here too, since they see the device as any resident does. UNSPECIFIED: neither
319
320
  * applies — the device is not in a home, or the user reaches it only by owning it.
320
321
  *
321
322
  * Descriptive, like role: allowed_actions and the ref lists are what is enforced.
@@ -432,8 +433,8 @@ export enum ServiceSignal {
432
433
 
433
434
  /**
434
435
  * What the device is — its description, every field of device.v1.DeviceDescriptor but
435
- * claimed_at: type, name, vendor, product, serial number, versions, ownership, lifecycle
436
- * and connector; its endpoints and what each supports — and where it is filed. A
436
+ * claimed_at: type, name, vendor, product, serial number, versions, ownership, asset
437
+ * owner, lifecycle and connector; its endpoints and what each supports — and where it is filed. A
437
438
  * bridged_by naming a device the recipient may not see, such as a bridge a resident owns,
438
439
  * is unset. Always disclosed together with FIRMWARE, whose
439
440
  * version it carries. Not when it was claimed: the only times service is given of a
@@ -191,6 +191,15 @@ export declare const PermissionActionSchema: GenEnum<PermissionAction>;
191
191
  * looks after a building's plant room is filed there as SERVICE. RESIDENT is refused on a
192
192
  * room: a home's residents live in all of it.
193
193
  *
194
+ * HOUSEHOLD ADMIN. HOUSEHOLD_ADMIN is RESIDENT and more: a resident who also governs the
195
+ * home (webrtc.v1 household.proto). It is held on an apartment and nowhere else, and is never
196
+ * a role: the app's token, and every role the gateway holds, are the same with it as without
197
+ * it. Wherever this schema says RESIDENT, a resident or a home's residents, it means
198
+ * HOUSEHOLD_ADMIN too, unless it names HOUSEHOLD_ADMIN apart: what a household admin sees of
199
+ * the home, and when from, is exactly what a resident sees. A change between RESIDENT and
200
+ * HOUSEHOLD_ADMIN on the same apartment continues the residency below, with its id and its
201
+ * since; it is no relation change in the sense the residency rules use.
202
+ *
194
203
  * A HOME is an apartment and the rooms in it. What a user learns of a home depends on how
195
204
  * they reach it; where several apply, the first wins:
196
205
  *
@@ -201,6 +210,11 @@ export declare const PermissionActionSchema: GenEnum<PermissionAction>;
201
210
  * carry — a reading's timestamp included — is unset for them, save a
202
211
  * webrtc.v1.ServiceStatus, which always carries its times and so gives none before the first
203
212
  * quarter hour of their residency, from that quarter hour on.
213
+ * * As an installer under a commissioning grant on the home, while it is active — the
214
+ * service view below, and on top of it what commissioning.v1 (GRANTS) lists: the home's
215
+ * commissioning and heating records, and the readings a test they run is judged by while
216
+ * it runs. Never its history, savings, comfort settings or device events, nor who lives
217
+ * there.
204
218
  * * As service — SERVICE on the apartment, a room in it, or a building or floor above it,
205
219
  * or as the gateway's administrator. Of the building's own devices in what they reach of
206
220
  * the home — any
@@ -241,7 +255,8 @@ export declare const PermissionActionSchema: GenEnum<PermissionAction>;
241
255
  * newly in the home does, as it happens; that much a release shows.
242
256
  *
243
257
  * Who may change a home's members, move its spaces or file devices into and out of it is
244
- * restricted by the gateway, and a refused caller gets NOT_ENTITLED. This keeps a home's
258
+ * restricted by the gateway, and a refused caller gets NOT_ENTITLED; within the household it
259
+ * is its household admins' (webrtc.v1 household.proto). This keeps a home's
245
260
  * life — its readings, history and modes — from anyone but its residents by default; those
246
261
  * who service the building get the service view above and no more. It does not keep the
247
262
  * property owner or the administrator out by force — they hold the building's filing
@@ -292,6 +307,17 @@ export enum MembershipRelation {
292
307
  * @generated from enum value: MEMBERSHIP_RELATION_SERVICE = 2;
293
308
  */
294
309
  SERVICE = 2,
310
+
311
+ /**
312
+ * Lives there and governs the home: a resident who may also manage it (webrtc.v1
313
+ * household.proto). On an apartment only; refused anywhere else.
314
+ *
315
+ * Rollout order: an app whose schema predates this value cannot tell it from an unknown
316
+ * relation, so app handling ships before or with the gateway that records it.
317
+ *
318
+ * @generated from enum value: MEMBERSHIP_RELATION_HOUSEHOLD_ADMIN = 3;
319
+ */
320
+ HOUSEHOLD_ADMIN = 3,
295
321
  }
296
322
 
297
323
  /**
@@ -8,7 +8,7 @@ import { enumDesc, fileDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
8
8
  * Describes the file kusinta/iot/access/v1/roles.proto.
9
9
  */
10
10
  export const file_kusinta_iot_access_v1_roles = /*@__PURE__*/
11
- fileDesc("CiFrdXNpbnRhL2lvdC9hY2Nlc3MvdjEvcm9sZXMucHJvdG8SFWt1c2ludGEuaW90LmFjY2Vzcy52MSp1CgRSb2xlEhQKEFJPTEVfVU5TUEVDSUZJRUQQABIRCg1ST0xFX1JFU0lERU5UEAESFwoTUk9MRV9QUk9QRVJUWV9PV05FUhACEhMKD1JPTEVfVEVDSE5JQ0lBThADEhYKElJPTEVfR0FURVdBWV9BRE1JThAEKq0BChBQZXJtaXNzaW9uQWN0aW9uEiEKHVBFUk1JU1NJT05fQUNUSU9OX1VOU1BFQ0lGSUVEEAASGgoWUEVSTUlTU0lPTl9BQ1RJT05fUkVBRBABEhsKF1BFUk1JU1NJT05fQUNUSU9OX1dSSVRFEAISHwobUEVSTUlTU0lPTl9BQ1RJT05fU1VCU0NSSUJFEAMSHAoYUEVSTUlTU0lPTl9BQ1RJT05fSU5WT0tFEAQqfAoSTWVtYmVyc2hpcFJlbGF0aW9uEiMKH01FTUJFUlNISVBfUkVMQVRJT05fVU5TUEVDSUZJRUQQABIgChxNRU1CRVJTSElQX1JFTEFUSU9OX1JFU0lERU5UEAESHwobTUVNQkVSU0hJUF9SRUxBVElPTl9TRVJWSUNFEAJCAkgBYgZwcm90bzM");
11
+ fileDesc("CiFrdXNpbnRhL2lvdC9hY2Nlc3MvdjEvcm9sZXMucHJvdG8SFWt1c2ludGEuaW90LmFjY2Vzcy52MSp1CgRSb2xlEhQKEFJPTEVfVU5TUEVDSUZJRUQQABIRCg1ST0xFX1JFU0lERU5UEAESFwoTUk9MRV9QUk9QRVJUWV9PV05FUhACEhMKD1JPTEVfVEVDSE5JQ0lBThADEhYKElJPTEVfR0FURVdBWV9BRE1JThAEKq0BChBQZXJtaXNzaW9uQWN0aW9uEiEKHVBFUk1JU1NJT05fQUNUSU9OX1VOU1BFQ0lGSUVEEAASGgoWUEVSTUlTU0lPTl9BQ1RJT05fUkVBRBABEhsKF1BFUk1JU1NJT05fQUNUSU9OX1dSSVRFEAISHwobUEVSTUlTU0lPTl9BQ1RJT05fU1VCU0NSSUJFEAMSHAoYUEVSTUlTU0lPTl9BQ1RJT05fSU5WT0tFEAQqpQEKEk1lbWJlcnNoaXBSZWxhdGlvbhIjCh9NRU1CRVJTSElQX1JFTEFUSU9OX1VOU1BFQ0lGSUVEEAASIAocTUVNQkVSU0hJUF9SRUxBVElPTl9SRVNJREVOVBABEh8KG01FTUJFUlNISVBfUkVMQVRJT05fU0VSVklDRRACEicKI01FTUJFUlNISVBfUkVMQVRJT05fSE9VU0VIT0xEX0FETUlOEANCAkgBYgZwcm90bzM");
12
12
 
13
13
  /**
14
14
  * Describes the enum kusinta.iot.access.v1.Role.
@@ -95,6 +95,15 @@ export const MembershipRelationSchema = /*@__PURE__*/
95
95
  * looks after a building's plant room is filed there as SERVICE. RESIDENT is refused on a
96
96
  * room: a home's residents live in all of it.
97
97
  *
98
+ * HOUSEHOLD ADMIN. HOUSEHOLD_ADMIN is RESIDENT and more: a resident who also governs the
99
+ * home (webrtc.v1 household.proto). It is held on an apartment and nowhere else, and is never
100
+ * a role: the app's token, and every role the gateway holds, are the same with it as without
101
+ * it. Wherever this schema says RESIDENT, a resident or a home's residents, it means
102
+ * HOUSEHOLD_ADMIN too, unless it names HOUSEHOLD_ADMIN apart: what a household admin sees of
103
+ * the home, and when from, is exactly what a resident sees. A change between RESIDENT and
104
+ * HOUSEHOLD_ADMIN on the same apartment continues the residency below, with its id and its
105
+ * since; it is no relation change in the sense the residency rules use.
106
+ *
98
107
  * A HOME is an apartment and the rooms in it. What a user learns of a home depends on how
99
108
  * they reach it; where several apply, the first wins:
100
109
  *
@@ -105,6 +114,11 @@ export const MembershipRelationSchema = /*@__PURE__*/
105
114
  * carry — a reading's timestamp included — is unset for them, save a
106
115
  * webrtc.v1.ServiceStatus, which always carries its times and so gives none before the first
107
116
  * quarter hour of their residency, from that quarter hour on.
117
+ * * As an installer under a commissioning grant on the home, while it is active — the
118
+ * service view below, and on top of it what commissioning.v1 (GRANTS) lists: the home's
119
+ * commissioning and heating records, and the readings a test they run is judged by while
120
+ * it runs. Never its history, savings, comfort settings or device events, nor who lives
121
+ * there.
108
122
  * * As service — SERVICE on the apartment, a room in it, or a building or floor above it,
109
123
  * or as the gateway's administrator. Of the building's own devices in what they reach of
110
124
  * the home — any
@@ -145,7 +159,8 @@ export const MembershipRelationSchema = /*@__PURE__*/
145
159
  * newly in the home does, as it happens; that much a release shows.
146
160
  *
147
161
  * Who may change a home's members, move its spaces or file devices into and out of it is
148
- * restricted by the gateway, and a refused caller gets NOT_ENTITLED. This keeps a home's
162
+ * restricted by the gateway, and a refused caller gets NOT_ENTITLED; within the household it
163
+ * is its household admins' (webrtc.v1 household.proto). This keeps a home's
149
164
  * life — its readings, history and modes — from anyone but its residents by default; those
150
165
  * who service the building get the service view above and no more. It does not keep the
151
166
  * property owner or the administrator out by force — they hold the building's filing
@@ -618,6 +618,123 @@ export declare type CommissioningRecord = Message<"kusinta.iot.commissioning.v1.
618
618
  */
619
619
  export declare const CommissioningRecordSchema: GenMessage<CommissioningRecord>;
620
620
 
621
+ /**
622
+ * One installer's grant to commission one space (see the file comment, GRANTS).
623
+ *
624
+ * @generated from message kusinta.iot.commissioning.v1.CommissioningGrant
625
+ */
626
+ export declare type CommissioningGrant = Message<"kusinta.iot.commissioning.v1.CommissioningGrant"> & {
627
+ /**
628
+ * Minted by the gateway, opaque.
629
+ *
630
+ * @generated from field: string grant_id = 1;
631
+ */
632
+ grantId: string;
633
+
634
+ /**
635
+ * A home's apartment, or a space outside homes.
636
+ *
637
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 2;
638
+ */
639
+ spaceId?: SpaceId | undefined;
640
+
641
+ /**
642
+ * The installer who asked for it, and the name they gave their account
643
+ * (webrtc.v1.AppTokenClaims.name) as the gateway last learnt it, so the household knows
644
+ * whom it lets in; empty when none is learnt. Self-chosen, as webrtc.v1.MemberDetail.name
645
+ * is.
646
+ *
647
+ * @generated from field: kusinta.iot.identity.v1.UserId installer = 3;
648
+ */
649
+ installer?: UserId | undefined;
650
+
651
+ /**
652
+ * @generated from field: string installer_name = 4;
653
+ */
654
+ installerName: string;
655
+
656
+ /**
657
+ * @generated from field: kusinta.iot.commissioning.v1.CommissioningGrantState state = 5;
658
+ */
659
+ state: CommissioningGrantState;
660
+
661
+ /**
662
+ * @generated from field: google.protobuf.Timestamp requested_at = 6;
663
+ */
664
+ requestedAt?: Timestamp | undefined;
665
+
666
+ /**
667
+ * When a request lapses unanswered: 7 days after requested_at, as
668
+ * webrtc.v1.PromotionRequest.expires_at. REQUESTED only.
669
+ *
670
+ * @generated from field: google.protobuf.Timestamp expires_at = 7;
671
+ */
672
+ expiresAt?: Timestamp | undefined;
673
+
674
+ /**
675
+ * When it is active, as granted, within the bounds webrtc.v1.AnswerCommissioningGrant sets.
676
+ * GRANTED only.
677
+ *
678
+ * @generated from field: google.protobuf.Timestamp starts_at = 8;
679
+ */
680
+ startsAt?: Timestamp | undefined;
681
+
682
+ /**
683
+ * @generated from field: google.protobuf.Timestamp ends_at = 9;
684
+ */
685
+ endsAt?: Timestamp | undefined;
686
+
687
+ /**
688
+ * Who granted it, and when. GRANTED only. granted_by is given to the home's residents, and
689
+ * for a space outside homes to the property owner and the gateway's administrators; to the
690
+ * installer it is unset, since a resident's user id would tell them who lives in the home.
691
+ *
692
+ * @generated from field: kusinta.iot.identity.v1.UserId granted_by = 10;
693
+ */
694
+ grantedBy?: UserId | undefined;
695
+
696
+ /**
697
+ * @generated from field: google.protobuf.Timestamp granted_at = 11;
698
+ */
699
+ grantedAt?: Timestamp | undefined;
700
+ };
701
+
702
+ /**
703
+ * Describes the message kusinta.iot.commissioning.v1.CommissioningGrant.
704
+ * Use `create(CommissioningGrantSchema)` to create a new message.
705
+ */
706
+ export declare const CommissioningGrantSchema: GenMessage<CommissioningGrant>;
707
+
708
+ /**
709
+ * The grants on one space that have not ended, as listed to one caller: the answer to
710
+ * webrtc.v1.ListCommissioningGrants, and pushed whole as webrtc.v1.GatewayMessage
711
+ * .commissioning_grants to every session that may list them whenever one is requested,
712
+ * answered or ended before its time — to the installer, their own grants alone. Nothing is
713
+ * pushed when a grant starts, ends or lapses at the time it states: a client reads those from
714
+ * starts_at, ends_at and expires_at.
715
+ *
716
+ * @generated from message kusinta.iot.commissioning.v1.CommissioningGrants
717
+ */
718
+ export declare type CommissioningGrants = Message<"kusinta.iot.commissioning.v1.CommissioningGrants"> & {
719
+ /**
720
+ * The space the grants are on, on a push; unset on a listing.
721
+ *
722
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
723
+ */
724
+ spaceId?: SpaceId | undefined;
725
+
726
+ /**
727
+ * @generated from field: repeated kusinta.iot.commissioning.v1.CommissioningGrant grants = 2;
728
+ */
729
+ grants: CommissioningGrant[];
730
+ };
731
+
732
+ /**
733
+ * Describes the message kusinta.iot.commissioning.v1.CommissioningGrants.
734
+ * Use `create(CommissioningGrantsSchema)` to create a new message.
735
+ */
736
+ export declare const CommissioningGrantsSchema: GenMessage<CommissioningGrants>;
737
+
621
738
  /**
622
739
  * Who answers a fact, or ran or concluded a test.
623
740
  *
@@ -637,14 +754,14 @@ export enum Party {
637
754
  OWNER_ORGANISATION = 1,
638
755
 
639
756
  /**
640
- * A household admin of the home.
757
+ * A household admin of the home (access.v1.MEMBERSHIP_RELATION_HOUSEHOLD_ADMIN).
641
758
  *
642
759
  * @generated from enum value: PARTY_HOUSEHOLD = 2;
643
760
  */
644
761
  HOUSEHOLD = 2,
645
762
 
646
763
  /**
647
- * An installer under a commissioning grant.
764
+ * An installer under a commissioning grant (CommissioningGrant).
648
765
  *
649
766
  * @generated from enum value: PARTY_INSTALLER = 3;
650
767
  */
@@ -1126,3 +1243,38 @@ export enum TestFailure {
1126
1243
  */
1127
1244
  export declare const TestFailureSchema: GenEnum<TestFailure>;
1128
1245
 
1246
+ /**
1247
+ * Where a commissioning grant stands (see the file comment, GRANTS). An ended grant has no
1248
+ * state: it is listed no more.
1249
+ *
1250
+ * @generated from enum kusinta.iot.commissioning.v1.CommissioningGrantState
1251
+ */
1252
+ export enum CommissioningGrantState {
1253
+ /**
1254
+ * A state this schema does not know: read as REQUESTED, which covers nothing.
1255
+ *
1256
+ * @generated from enum value: COMMISSIONING_GRANT_STATE_UNSPECIFIED = 0;
1257
+ */
1258
+ UNSPECIFIED = 0,
1259
+
1260
+ /**
1261
+ * Asked for by the installer and not yet answered. Covers nothing. Lapses unanswered at
1262
+ * expires_at.
1263
+ *
1264
+ * @generated from enum value: COMMISSIONING_GRANT_STATE_REQUESTED = 1;
1265
+ */
1266
+ REQUESTED = 1,
1267
+
1268
+ /**
1269
+ * Granted. Active from starts_at until ends_at; before starts_at it covers nothing yet.
1270
+ *
1271
+ * @generated from enum value: COMMISSIONING_GRANT_STATE_GRANTED = 2;
1272
+ */
1273
+ GRANTED = 2,
1274
+ }
1275
+
1276
+ /**
1277
+ * Describes the enum kusinta.iot.commissioning.v1.CommissioningGrantState.
1278
+ */
1279
+ export declare const CommissioningGrantStateSchema: GenEnum<CommissioningGrantState>;
1280
+
@@ -11,7 +11,7 @@ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identit
11
11
  * Describes the file kusinta/iot/commissioning/v1/commissioning.proto.
12
12
  */
13
13
  export const file_kusinta_iot_commissioning_v1_commissioning = /*@__PURE__*/
14
- fileDesc("CjBrdXNpbnRhL2lvdC9jb21taXNzaW9uaW5nL3YxL2NvbW1pc3Npb25pbmcucHJvdG8SHGt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEizwEKClByb3ZlbmFuY2USMgoFcGFydHkYASABKA4yIy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlBhcnR5EjgKCGV2aWRlbmNlGAIgASgOMiYua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5FdmlkZW5jZRImCgJhdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKwoCYnkYBCABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQiLgoKQmluZGluZ1JlZhIRCglyZWNvcmRfaWQYASABKAkSDQoFZmllbGQYAiABKAkiMwoLVGVtcGxhdGVSZWYSEwoLdGVtcGxhdGVfaWQYASABKAkSDwoHdmVyc2lvbhgCIAEoDSL0BAoRQ29tbWlzc2lvbmluZ0ZhY3QSDwoHZmFjdF9pZBgBIAEoCRIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSEQoJcmVjb3JkX2lkGAMgASgJEgsKA2tleRgEIAEoCRI2CgV2YWx1ZRgFIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5BdHRyaWJ1dGVWYWx1ZUgAEhEKB3Vua25vd24YBiABKAhIABI1CghhbnN3ZXJlchgHIAEoDjIjLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuUGFydHkSOgoJbmVjZXNzaXR5GAggASgOMicua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5OZWNlc3NpdHkSNgoHZmVhdHVyZRgJIAEoDjIlLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZRI8Cgpwcm92ZW5hbmNlGAogASgLMigua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Qcm92ZW5hbmNlEhAKCHJldmlzaW9uGA0gASgEEkAKDWRldmlhdGVzX2Zyb20YDyABKAsyKS5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlbXBsYXRlUmVmEjYKBXRvcGljGBAgASgOMicua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5GYWN0VG9waWNCCAoGYW5zd2VySgQICxANSgQIDhAPUgVzY29wZVIQdGVtcGxhdGVfdmVyc2lvblILdGVtcGxhdGVfaWQiegoMVGVtcGxhdGVGYWN0EgsKA2tleRgBIAEoCRIVCg1zdWJqZWN0X2xhYmVsGAIgASgJEjQKBXZhbHVlGAMgASgLMiUua3VzaW50YS5pb3QuZGV2aWNlLnYxLkF0dHJpYnV0ZVZhbHVlSgQIBBAFUgpwcm92ZW5hbmNlIvMBCg1Ib3VzZVRlbXBsYXRlEhMKC3RlbXBsYXRlX2lkGAEgASgJEjUKC2J1aWxkaW5nX2lkGAIgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIMCgRuYW1lGAMgASgJEg8KB3ZlcnNpb24YBCABKA0SOQoFZmFjdHMYBSADKAsyKi5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlbXBsYXRlRmFjdBI8Cgpwcm92ZW5hbmNlGAYgASgLMigua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Qcm92ZW5hbmNlItsCCgROZWVkEhIKCGZhY3Rfa2V5GAEgASgJSAASNgoEdGVzdBgCIAEoDjImLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuVGVzdEtpbmRIABIyCghzcGFjZV9pZBgDIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSNQoIYW5zd2VyZXIYBSABKA4yIy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlBhcnR5EjkKB2JpbmRpbmcYByABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWYSOwoKZmFjdF90b3BpYxgIIAEoDjInLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmFjdFRvcGljQgYKBHdoYXRKBAgEEAVKBAgGEAdSCXJlY29yZF9pZFIFZmllbGQi2AEKDEZlYXR1cmVCbG9jaxI5CgZyZWFzb24YASABKA4yKS5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJsb2NrUmVhc29uEjQKCWRldmljZV9pZBgDIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjkKB2JpbmRpbmcYBSABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWZKBAgCEANKBAgEEAVSCXJlY29yZF9pZFIFZmllbGQi8QEKDUZlYXR1cmVTdGF0dXMSNgoHZmVhdHVyZRgBIAEoDjIlLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZRI5CgVzdGF0ZRgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZVN0YXRlEjEKBW5lZWRzGAMgAygLMiIua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5OZWVkEjoKBmJsb2NrcxgEIAMoCzIqLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZUJsb2NrIrcEChFDb21taXNzaW9uaW5nVGVzdBIPCgd0ZXN0X2lkGAEgASgJEjQKBGtpbmQYAiABKA4yJi5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlc3RLaW5kEjkKB2JpbmRpbmcYDSABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWYSNAoJZGV2aWNlX2lkGAUgASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSNgoFc3RhdGUYBiABKA4yJy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlc3RTdGF0ZRI6CgdmYWlsdXJlGAcgASgOMikua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5UZXN0RmFpbHVyZRIuCgpzdGFydGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCgdlbmRzX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgtmaW5pc2hlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASPAoKcHJvdmVuYW5jZRgLIAEoCzIoLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuUHJvdmVuYW5jZRISCgpzdXBlcnNlZGVkGAwgASgISgQIAxAFUglyZWNvcmRfaWRSBWZpZWxkIvMCChRDb21taXNzaW9uaW5nUHJvZmlsZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPgoFZmFjdHMYAiADKAsyLy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkNvbW1pc3Npb25pbmdGYWN0Ej4KBXRlc3RzGAMgAygLMi8ua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Db21taXNzaW9uaW5nVGVzdBI9CghmZWF0dXJlcxgEIAMoCzIrLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZVN0YXR1cxI9Cgh0ZW1wbGF0ZRgGIAEoCzIrLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuSG91c2VUZW1wbGF0ZRIWCg5uZWVkc193aXRoaGVsZBgHIAEoCEoECAUQBlILdGVtcGxhdGVfaWQiTgoJSG9tZVNldHVwEjEKB2hvbWVfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg4KBnNldF91cBgCIAEoCCJECgpIb21lU2V0dXBzEjYKBWhvbWVzGAEgAygLMicua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Ib21lU2V0dXAi4gEKE0NvbW1pc3Npb25pbmdSZWNvcmQSPwoEZmFjdBgBIAEoCzIvLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuQ29tbWlzc2lvbmluZ0ZhY3RIABI/CgR0ZXN0GAIgASgLMi8ua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Db21taXNzaW9uaW5nVGVzdEgAEj8KCHRlbXBsYXRlGAMgASgLMisua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Ib3VzZVRlbXBsYXRlSABCCAoGcmVjb3JkKnsKBVBhcnR5EhUKEVBBUlRZX1VOU1BFQ0lGSUVEEAASHAoYUEFSVFlfT1dORVJfT1JHQU5JU0FUSU9OEAESEwoPUEFSVFlfSE9VU0VIT0xEEAISEwoPUEFSVFlfSU5TVEFMTEVSEAMSEwoPUEFSVFlfQVVUT01BVElDEAQqcQoJTmVjZXNzaXR5EhkKFU5FQ0VTU0lUWV9VTlNQRUNJRklFRBAAEhYKEk5FQ0VTU0lUWV9SRVFVSVJFRBABEhkKFU5FQ0VTU0lUWV9GT1JfRkVBVFVSRRACEhYKEk5FQ0VTU0lUWV9PUFRJT05BTBADKqgBCghFdmlkZW5jZRIYChRFVklERU5DRV9VTlNQRUNJRklFRBAAEhMKD0VWSURFTkNFX1NUQVRFRBABEhIKDkVWSURFTkNFX1BIT1RPEAISFAoQRVZJREVOQ0VfRFJBV0lORxADEhYKEkVWSURFTkNFX0lOU1BFQ1RFRBAEEhUKEUVWSURFTkNFX01FQVNVUkVEEAUSFAoQRVZJREVOQ0VfREVSSVZFRBAGKqACCglGYWN0VG9waWMSGgoWRkFDVF9UT1BJQ19VTlNQRUNJRklFRBAAEhcKE0ZBQ1RfVE9QSUNfQlVJTERJTkcQARIUChBGQUNUX1RPUElDX1JPT01TEAISGgoWRkFDVF9UT1BJQ19IRUFUX1NPVVJDRRADEhwKGEZBQ1RfVE9QSUNfRkxPT1JfSEVBVElORxAEEhwKGEZBQ1RfVE9QSUNfQ09NRk9SVF9MT0FEUxAFEhoKFkZBQ1RfVE9QSUNfRUxFQ1RSSUNJVFkQBhIfChtGQUNUX1RPUElDX0RJU1RSSUNUX0hFQVRJTkcQBxIbChdGQUNUX1RPUElDX0NPTk5FQ1RJVklUWRAIEhYKEkZBQ1RfVE9QSUNfQ09NRk9SVBAJKqkBCgdGZWF0dXJlEhcKE0ZFQVRVUkVfVU5TUEVDSUZJRUQQABIXChNGRUFUVVJFX0ZMT09SX1pPTkVTEAESEQoNRkVBVFVSRV9QTEFOVBACEhkKFUZFQVRVUkVfQ09NRk9SVF9MT0FEUxADEhAKDEZFQVRVUkVfQ09TVBAEEhYKEkZFQVRVUkVfUEVBS19HVUFSRBAFEhQKEEZFQVRVUkVfUExBTk5JTkcQBiqFAQoMRmVhdHVyZVN0YXRlEh0KGUZFQVRVUkVfU1RBVEVfVU5TUEVDSUZJRUQQABIXChNGRUFUVVJFX1NUQVRFX1dPUktTEAESFwoTRkVBVFVSRV9TVEFURV9ORUVEUxACEiQKIEZFQVRVUkVfU1RBVEVfQkxPQ0tFRF9GT1JfU0FGRVRZEAMq9wEKC0Jsb2NrUmVhc29uEhwKGEJMT0NLX1JFQVNPTl9VTlNQRUNJRklFRBAAEhwKGEJMT0NLX1JFQVNPTl9URVNUX0ZBSUxFRBABEiIKHkJMT0NLX1JFQVNPTl9PVVRQVVRfTk9UX0xFQVNFRBACEiUKIUJMT0NLX1JFQVNPTl9QT1dFUl9PTl9OT1RfQVRfUkVTVBADEhwKGEJMT0NLX1JFQVNPTl9ERVZJQ0VfR09ORRAEEiIKHkJMT0NLX1JFQVNPTl9DT05UUk9MX1JPT01fR09ORRAFEh8KG0JMT0NLX1JFQVNPTl9MRUFTRV9UT09fTE9ORxAGKn4KCFRlc3RLaW5kEhkKFVRFU1RfS0lORF9VTlNQRUNJRklFRBAAEhoKFlRFU1RfS0lORF9PVVRQVVRfTEVBU0UQARIZChVURVNUX0tJTkRfWk9ORV9FRkZFQ1QQAhIgChxURVNUX0tJTkRfUFVNUF9BTExfWk9ORVNfT0ZGEAMqhQEKCVRlc3RTdGF0ZRIaChZURVNUX1NUQVRFX1VOU1BFQ0lGSUVEEAASFgoSVEVTVF9TVEFURV9SVU5OSU5HEAESFQoRVEVTVF9TVEFURV9QQVNTRUQQAhIVChFURVNUX1NUQVRFX0ZBSUxFRBADEhYKElRFU1RfU1RBVEVfQUJPUlRFRBAEKp0CCgtUZXN0RmFpbHVyZRIcChhURVNUX0ZBSUxVUkVfVU5TUEVDSUZJRUQQABIlCiFURVNUX0ZBSUxVUkVfUE9XRVJfT05fTk9UX0FUX1JFU1QQARIgChxURVNUX0ZBSUxVUkVfTk9fU1RBVEVfQ0hBTkdFEAISIgoeVEVTVF9GQUlMVVJFX0xFQVNFX05PVF9SRU5FV0VEEAMSJwojVEVTVF9GQUlMVVJFX0RJRF9OT1RfUkVUVVJOX1RPX1JFU1QQBBIjCh9URVNUX0ZBSUxVUkVfREVWSUNFX1VOUkVBQ0hBQkxFEAUSGgoWVEVTVF9GQUlMVVJFX05PX0VGRkVDVBAGEhkKFVRFU1RfRkFJTFVSRV9PQlNFUlZFRBAHQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_cluster_state, file_kusinta_iot_identity_v1_identity]);
14
+ fileDesc("CjBrdXNpbnRhL2lvdC9jb21taXNzaW9uaW5nL3YxL2NvbW1pc3Npb25pbmcucHJvdG8SHGt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEizwEKClByb3ZlbmFuY2USMgoFcGFydHkYASABKA4yIy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlBhcnR5EjgKCGV2aWRlbmNlGAIgASgOMiYua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5FdmlkZW5jZRImCgJhdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKwoCYnkYBCABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQiLgoKQmluZGluZ1JlZhIRCglyZWNvcmRfaWQYASABKAkSDQoFZmllbGQYAiABKAkiMwoLVGVtcGxhdGVSZWYSEwoLdGVtcGxhdGVfaWQYASABKAkSDwoHdmVyc2lvbhgCIAEoDSL0BAoRQ29tbWlzc2lvbmluZ0ZhY3QSDwoHZmFjdF9pZBgBIAEoCRIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSEQoJcmVjb3JkX2lkGAMgASgJEgsKA2tleRgEIAEoCRI2CgV2YWx1ZRgFIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5BdHRyaWJ1dGVWYWx1ZUgAEhEKB3Vua25vd24YBiABKAhIABI1CghhbnN3ZXJlchgHIAEoDjIjLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuUGFydHkSOgoJbmVjZXNzaXR5GAggASgOMicua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5OZWNlc3NpdHkSNgoHZmVhdHVyZRgJIAEoDjIlLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZRI8Cgpwcm92ZW5hbmNlGAogASgLMigua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Qcm92ZW5hbmNlEhAKCHJldmlzaW9uGA0gASgEEkAKDWRldmlhdGVzX2Zyb20YDyABKAsyKS5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlbXBsYXRlUmVmEjYKBXRvcGljGBAgASgOMicua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5GYWN0VG9waWNCCAoGYW5zd2VySgQICxANSgQIDhAPUgVzY29wZVIQdGVtcGxhdGVfdmVyc2lvblILdGVtcGxhdGVfaWQiegoMVGVtcGxhdGVGYWN0EgsKA2tleRgBIAEoCRIVCg1zdWJqZWN0X2xhYmVsGAIgASgJEjQKBXZhbHVlGAMgASgLMiUua3VzaW50YS5pb3QuZGV2aWNlLnYxLkF0dHJpYnV0ZVZhbHVlSgQIBBAFUgpwcm92ZW5hbmNlIvMBCg1Ib3VzZVRlbXBsYXRlEhMKC3RlbXBsYXRlX2lkGAEgASgJEjUKC2J1aWxkaW5nX2lkGAIgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIMCgRuYW1lGAMgASgJEg8KB3ZlcnNpb24YBCABKA0SOQoFZmFjdHMYBSADKAsyKi5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlbXBsYXRlRmFjdBI8Cgpwcm92ZW5hbmNlGAYgASgLMigua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Qcm92ZW5hbmNlItsCCgROZWVkEhIKCGZhY3Rfa2V5GAEgASgJSAASNgoEdGVzdBgCIAEoDjImLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuVGVzdEtpbmRIABIyCghzcGFjZV9pZBgDIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSNQoIYW5zd2VyZXIYBSABKA4yIy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlBhcnR5EjkKB2JpbmRpbmcYByABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWYSOwoKZmFjdF90b3BpYxgIIAEoDjInLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmFjdFRvcGljQgYKBHdoYXRKBAgEEAVKBAgGEAdSCXJlY29yZF9pZFIFZmllbGQi2AEKDEZlYXR1cmVCbG9jaxI5CgZyZWFzb24YASABKA4yKS5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJsb2NrUmVhc29uEjQKCWRldmljZV9pZBgDIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjkKB2JpbmRpbmcYBSABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWZKBAgCEANKBAgEEAVSCXJlY29yZF9pZFIFZmllbGQi8QEKDUZlYXR1cmVTdGF0dXMSNgoHZmVhdHVyZRgBIAEoDjIlLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZRI5CgVzdGF0ZRgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZVN0YXRlEjEKBW5lZWRzGAMgAygLMiIua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5OZWVkEjoKBmJsb2NrcxgEIAMoCzIqLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZUJsb2NrIrcEChFDb21taXNzaW9uaW5nVGVzdBIPCgd0ZXN0X2lkGAEgASgJEjQKBGtpbmQYAiABKA4yJi5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlc3RLaW5kEjkKB2JpbmRpbmcYDSABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWYSNAoJZGV2aWNlX2lkGAUgASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSNgoFc3RhdGUYBiABKA4yJy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlc3RTdGF0ZRI6CgdmYWlsdXJlGAcgASgOMikua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5UZXN0RmFpbHVyZRIuCgpzdGFydGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCgdlbmRzX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgtmaW5pc2hlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASPAoKcHJvdmVuYW5jZRgLIAEoCzIoLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuUHJvdmVuYW5jZRISCgpzdXBlcnNlZGVkGAwgASgISgQIAxAFUglyZWNvcmRfaWRSBWZpZWxkIvMCChRDb21taXNzaW9uaW5nUHJvZmlsZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPgoFZmFjdHMYAiADKAsyLy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkNvbW1pc3Npb25pbmdGYWN0Ej4KBXRlc3RzGAMgAygLMi8ua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Db21taXNzaW9uaW5nVGVzdBI9CghmZWF0dXJlcxgEIAMoCzIrLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZVN0YXR1cxI9Cgh0ZW1wbGF0ZRgGIAEoCzIrLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuSG91c2VUZW1wbGF0ZRIWCg5uZWVkc193aXRoaGVsZBgHIAEoCEoECAUQBlILdGVtcGxhdGVfaWQiTgoJSG9tZVNldHVwEjEKB2hvbWVfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg4KBnNldF91cBgCIAEoCCJECgpIb21lU2V0dXBzEjYKBWhvbWVzGAEgAygLMicua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Ib21lU2V0dXAi4gEKE0NvbW1pc3Npb25pbmdSZWNvcmQSPwoEZmFjdBgBIAEoCzIvLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuQ29tbWlzc2lvbmluZ0ZhY3RIABI/CgR0ZXN0GAIgASgLMi8ua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Db21taXNzaW9uaW5nVGVzdEgAEj8KCHRlbXBsYXRlGAMgASgLMisua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Ib3VzZVRlbXBsYXRlSABCCAoGcmVjb3JkIo8EChJDb21taXNzaW9uaW5nR3JhbnQSEAoIZ3JhbnRfaWQYASABKAkSMgoIc3BhY2VfaWQYAiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjIKCWluc3RhbGxlchgDIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBIWCg5pbnN0YWxsZXJfbmFtZRgEIAEoCRJECgVzdGF0ZRgFIAEoDjI1Lmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuQ29tbWlzc2lvbmluZ0dyYW50U3RhdGUSMAoMcmVxdWVzdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpleHBpcmVzX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBItCglzdGFydHNfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB2VuZHNfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmdyYW50ZWRfYnkYCiABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSLgoKZ3JhbnRlZF9hdBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiiwEKE0NvbW1pc3Npb25pbmdHcmFudHMSMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEkAKBmdyYW50cxgCIAMoCzIwLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuQ29tbWlzc2lvbmluZ0dyYW50KnsKBVBhcnR5EhUKEVBBUlRZX1VOU1BFQ0lGSUVEEAASHAoYUEFSVFlfT1dORVJfT1JHQU5JU0FUSU9OEAESEwoPUEFSVFlfSE9VU0VIT0xEEAISEwoPUEFSVFlfSU5TVEFMTEVSEAMSEwoPUEFSVFlfQVVUT01BVElDEAQqcQoJTmVjZXNzaXR5EhkKFU5FQ0VTU0lUWV9VTlNQRUNJRklFRBAAEhYKEk5FQ0VTU0lUWV9SRVFVSVJFRBABEhkKFU5FQ0VTU0lUWV9GT1JfRkVBVFVSRRACEhYKEk5FQ0VTU0lUWV9PUFRJT05BTBADKqgBCghFdmlkZW5jZRIYChRFVklERU5DRV9VTlNQRUNJRklFRBAAEhMKD0VWSURFTkNFX1NUQVRFRBABEhIKDkVWSURFTkNFX1BIT1RPEAISFAoQRVZJREVOQ0VfRFJBV0lORxADEhYKEkVWSURFTkNFX0lOU1BFQ1RFRBAEEhUKEUVWSURFTkNFX01FQVNVUkVEEAUSFAoQRVZJREVOQ0VfREVSSVZFRBAGKqACCglGYWN0VG9waWMSGgoWRkFDVF9UT1BJQ19VTlNQRUNJRklFRBAAEhcKE0ZBQ1RfVE9QSUNfQlVJTERJTkcQARIUChBGQUNUX1RPUElDX1JPT01TEAISGgoWRkFDVF9UT1BJQ19IRUFUX1NPVVJDRRADEhwKGEZBQ1RfVE9QSUNfRkxPT1JfSEVBVElORxAEEhwKGEZBQ1RfVE9QSUNfQ09NRk9SVF9MT0FEUxAFEhoKFkZBQ1RfVE9QSUNfRUxFQ1RSSUNJVFkQBhIfChtGQUNUX1RPUElDX0RJU1RSSUNUX0hFQVRJTkcQBxIbChdGQUNUX1RPUElDX0NPTk5FQ1RJVklUWRAIEhYKEkZBQ1RfVE9QSUNfQ09NRk9SVBAJKqkBCgdGZWF0dXJlEhcKE0ZFQVRVUkVfVU5TUEVDSUZJRUQQABIXChNGRUFUVVJFX0ZMT09SX1pPTkVTEAESEQoNRkVBVFVSRV9QTEFOVBACEhkKFUZFQVRVUkVfQ09NRk9SVF9MT0FEUxADEhAKDEZFQVRVUkVfQ09TVBAEEhYKEkZFQVRVUkVfUEVBS19HVUFSRBAFEhQKEEZFQVRVUkVfUExBTk5JTkcQBiqFAQoMRmVhdHVyZVN0YXRlEh0KGUZFQVRVUkVfU1RBVEVfVU5TUEVDSUZJRUQQABIXChNGRUFUVVJFX1NUQVRFX1dPUktTEAESFwoTRkVBVFVSRV9TVEFURV9ORUVEUxACEiQKIEZFQVRVUkVfU1RBVEVfQkxPQ0tFRF9GT1JfU0FGRVRZEAMq9wEKC0Jsb2NrUmVhc29uEhwKGEJMT0NLX1JFQVNPTl9VTlNQRUNJRklFRBAAEhwKGEJMT0NLX1JFQVNPTl9URVNUX0ZBSUxFRBABEiIKHkJMT0NLX1JFQVNPTl9PVVRQVVRfTk9UX0xFQVNFRBACEiUKIUJMT0NLX1JFQVNPTl9QT1dFUl9PTl9OT1RfQVRfUkVTVBADEhwKGEJMT0NLX1JFQVNPTl9ERVZJQ0VfR09ORRAEEiIKHkJMT0NLX1JFQVNPTl9DT05UUk9MX1JPT01fR09ORRAFEh8KG0JMT0NLX1JFQVNPTl9MRUFTRV9UT09fTE9ORxAGKn4KCFRlc3RLaW5kEhkKFVRFU1RfS0lORF9VTlNQRUNJRklFRBAAEhoKFlRFU1RfS0lORF9PVVRQVVRfTEVBU0UQARIZChVURVNUX0tJTkRfWk9ORV9FRkZFQ1QQAhIgChxURVNUX0tJTkRfUFVNUF9BTExfWk9ORVNfT0ZGEAMqhQEKCVRlc3RTdGF0ZRIaChZURVNUX1NUQVRFX1VOU1BFQ0lGSUVEEAASFgoSVEVTVF9TVEFURV9SVU5OSU5HEAESFQoRVEVTVF9TVEFURV9QQVNTRUQQAhIVChFURVNUX1NUQVRFX0ZBSUxFRBADEhYKElRFU1RfU1RBVEVfQUJPUlRFRBAEKp0CCgtUZXN0RmFpbHVyZRIcChhURVNUX0ZBSUxVUkVfVU5TUEVDSUZJRUQQABIlCiFURVNUX0ZBSUxVUkVfUE9XRVJfT05fTk9UX0FUX1JFU1QQARIgChxURVNUX0ZBSUxVUkVfTk9fU1RBVEVfQ0hBTkdFEAISIgoeVEVTVF9GQUlMVVJFX0xFQVNFX05PVF9SRU5FV0VEEAMSJwojVEVTVF9GQUlMVVJFX0RJRF9OT1RfUkVUVVJOX1RPX1JFU1QQBBIjCh9URVNUX0ZBSUxVUkVfREVWSUNFX1VOUkVBQ0hBQkxFEAUSGgoWVEVTVF9GQUlMVVJFX05PX0VGRkVDVBAGEhkKFVRFU1RfRkFJTFVSRV9PQlNFUlZFRBAHKpQBChdDb21taXNzaW9uaW5nR3JhbnRTdGF0ZRIpCiVDT01NSVNTSU9OSU5HX0dSQU5UX1NUQVRFX1VOU1BFQ0lGSUVEEAASJwojQ09NTUlTU0lPTklOR19HUkFOVF9TVEFURV9SRVFVRVNURUQQARIlCiFDT01NSVNTSU9OSU5HX0dSQU5UX1NUQVRFX0dSQU5URUQQAkICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_cluster_state, file_kusinta_iot_identity_v1_identity]);
15
15
 
16
16
  /**
17
17
  * Describes the message kusinta.iot.commissioning.v1.Provenance.
@@ -111,6 +111,20 @@ export const HomeSetupsSchema = /*@__PURE__*/
111
111
  export const CommissioningRecordSchema = /*@__PURE__*/
112
112
  messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 13);
113
113
 
114
+ /**
115
+ * Describes the message kusinta.iot.commissioning.v1.CommissioningGrant.
116
+ * Use `create(CommissioningGrantSchema)` to create a new message.
117
+ */
118
+ export const CommissioningGrantSchema = /*@__PURE__*/
119
+ messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 14);
120
+
121
+ /**
122
+ * Describes the message kusinta.iot.commissioning.v1.CommissioningGrants.
123
+ * Use `create(CommissioningGrantsSchema)` to create a new message.
124
+ */
125
+ export const CommissioningGrantsSchema = /*@__PURE__*/
126
+ messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 15);
127
+
114
128
  /**
115
129
  * Describes the enum kusinta.iot.commissioning.v1.Party.
116
130
  */
@@ -244,3 +258,18 @@ export const TestFailureSchema = /*@__PURE__*/
244
258
  export const TestFailure = /*@__PURE__*/
245
259
  tsEnum(TestFailureSchema);
246
260
 
261
+ /**
262
+ * Describes the enum kusinta.iot.commissioning.v1.CommissioningGrantState.
263
+ */
264
+ export const CommissioningGrantStateSchema = /*@__PURE__*/
265
+ enumDesc(file_kusinta_iot_commissioning_v1_commissioning, 10);
266
+
267
+ /**
268
+ * Where a commissioning grant stands (see the file comment, GRANTS). An ended grant has no
269
+ * state: it is listed no more.
270
+ *
271
+ * @generated from enum kusinta.iot.commissioning.v1.CommissioningGrantState
272
+ */
273
+ export const CommissioningGrantState = /*@__PURE__*/
274
+ tsEnum(CommissioningGrantStateSchema);
275
+
@@ -4,12 +4,64 @@
4
4
 
5
5
  import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
+ import type { SpaceId } from "../../identity/v1/identity_pb.js";
7
8
 
8
9
  /**
9
10
  * Describes the file kusinta/iot/common/v1/types.proto.
10
11
  */
11
12
  export declare const file_kusinta_iot_common_v1_types: GenFile;
12
13
 
14
+ /**
15
+ * Who owns one of the building's own devices as an asset: who paid for it, for billing and
16
+ * for what becomes of it when a household or the gateway's owner changes. Distinct from
17
+ * DeviceOwnershipType, which says whether a person owns a device outright; a device a person
18
+ * owns has no asset owner.
19
+ *
20
+ * VISIBILITY NEVER FOLLOWS IT. What anyone sees of a device, or may do to it, is decided by
21
+ * the space it is filed in and how they stand to that space (access.v1.MembershipRelation),
22
+ * never by its asset owner: a device the organisation owns in someone's home is seen by the
23
+ * organisation's people as service and no more, and a device a household owns gives that
24
+ * household nothing beyond what living in the home gives it. Setting or changing an asset
25
+ * owner changes no one's access.
26
+ *
27
+ * Unset: not recorded. On a device whose ownership is COMPANY, anything that depends on it
28
+ * reads an unset owner as owner_organisation; a device a person owns has none, and is theirs.
29
+ *
30
+ * @generated from message kusinta.iot.common.v1.AssetOwner
31
+ */
32
+ export declare type AssetOwner = Message<"kusinta.iot.common.v1.AssetOwner"> & {
33
+ /**
34
+ * @generated from oneof kusinta.iot.common.v1.AssetOwner.owner
35
+ */
36
+ owner: {
37
+ /**
38
+ * The organisation that owns the gateway (signaling.v1.GatewayStreamOpened, OWNER OF
39
+ * RECORD), whichever that is: such an asset goes with the gateway when it moves to
40
+ * another organisation. Only true is sent; false is refused.
41
+ *
42
+ * @generated from field: bool owner_organisation = 1;
43
+ */
44
+ value: boolean;
45
+ case: "ownerOrganisation";
46
+ } | {
47
+ /**
48
+ * The household of a home, named by the home's apartment. Keyed to the home, never to a
49
+ * person: when the household changes, the asset stays with the home for the next one
50
+ * (webrtc.v1 household.proto, HANDOVER).
51
+ *
52
+ * @generated from field: kusinta.iot.identity.v1.SpaceId household_home_id = 2;
53
+ */
54
+ value: SpaceId;
55
+ case: "householdHomeId";
56
+ } | { case: undefined; value?: undefined };
57
+ };
58
+
59
+ /**
60
+ * Describes the message kusinta.iot.common.v1.AssetOwner.
61
+ * Use `create(AssetOwnerSchema)` to create a new message.
62
+ */
63
+ export declare const AssetOwnerSchema: GenMessage<AssetOwner>;
64
+
13
65
  /**
14
66
  * @generated from message kusinta.iot.common.v1.ErrorDetail
15
67
  */
@@ -108,6 +160,11 @@ export enum SpaceType {
108
160
  export declare const SpaceTypeSchema: GenEnum<SpaceType>;
109
161
 
110
162
  /**
163
+ * Whether a person owns a device outright. COMPANY: no person does; it is one of the
164
+ * building's own devices. RESIDENT: a person does (device.v1.DeviceDescriptor.owner_user_id),
165
+ * for a device of their own that they may take with them. Who paid for one of the
166
+ * building's own devices is a separate question, answered by AssetOwner.
167
+ *
111
168
  * @generated from enum kusinta.iot.common.v1.DeviceOwnershipType
112
169
  */
113
170
  export enum DeviceOwnershipType {
@@ -3,26 +3,34 @@
3
3
  /* eslint-disable */
4
4
 
5
5
  import { enumDesc, fileDesc, messageDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
6
+ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
6
7
 
7
8
  /**
8
9
  * Describes the file kusinta/iot/common/v1/types.proto.
9
10
  */
10
11
  export const file_kusinta_iot_common_v1_types = /*@__PURE__*/
11
- fileDesc("CiFrdXNpbnRhL2lvdC9jb21tb24vdjEvdHlwZXMucHJvdG8SFWt1c2ludGEuaW90LmNvbW1vbi52MSKhAQoLRXJyb3JEZXRhaWwSDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEkIKCG1ldGFkYXRhGAMgAygLMjAua3VzaW50YS5pb3QuY29tbW9uLnYxLkVycm9yRGV0YWlsLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIoYBCg1CYWNrZW5kSGVhbHRoEjgKBXN0YXRlGAEgASgOMikua3VzaW50YS5pb3QuY29tbW9uLnYxLkJhY2tlbmRIZWFsdGhTdGF0ZRI7CgZyZWFzb24YAiABKA4yKy5rdXNpbnRhLmlvdC5jb21tb24udjEuQmFja2VuZEZhaWx1cmVSZWFzb24qoQEKCVNwYWNlVHlwZRIaChZTUEFDRV9UWVBFX1VOU1BFQ0lGSUVEEAASFwoTU1BBQ0VfVFlQRV9CVUlMRElORxABEhQKEFNQQUNFX1RZUEVfRkxPT1IQAhIYChRTUEFDRV9UWVBFX0FQQVJUTUVOVBADEhMKD1NQQUNFX1RZUEVfUk9PTRAEEhoKFlNQQUNFX1RZUEVfQ09NTU9OX0FSRUEQBSqDAQoTRGV2aWNlT3duZXJzaGlwVHlwZRIlCiFERVZJQ0VfT1dORVJTSElQX1RZUEVfVU5TUEVDSUZJRUQQABIhCh1ERVZJQ0VfT1dORVJTSElQX1RZUEVfQ09NUEFOWRABEiIKHkRFVklDRV9PV05FUlNISVBfVFlQRV9SRVNJREVOVBACKuEBChREZXZpY2VMaWZlY3ljbGVTdGF0ZRImCiJERVZJQ0VfTElGRUNZQ0xFX1NUQVRFX1VOU1BFQ0lGSUVEEAASKAokREVWSUNFX0xJRkVDWUNMRV9TVEFURV9QRU5ESU5HX0NMQUlNEAESIAocREVWSUNFX0xJRkVDWUNMRV9TVEFURV9PV05FRBACEisKJ0RFVklDRV9MSUZFQ1lDTEVfU1RBVEVfUEVORElOR19UUkFOU0ZFUhADEigKJERFVklDRV9MSUZFQ1lDTEVfU1RBVEVfQlVJTERJTkdfUE9PTBAEKoABChJDb25uZWN0b3JUcmFuc3BvcnQSIwofQ09OTkVDVE9SX1RSQU5TUE9SVF9VTlNQRUNJRklFRBAAEiMKH0NPTk5FQ1RPUl9UUkFOU1BPUlRfVU5JWF9TT0NLRVQQARIgChxDT05ORUNUT1JfVFJBTlNQT1JUX01UTFNfVENQEAIqbAoNQ29ubmVjdG9yS2luZBIeChpDT05ORUNUT1JfS0lORF9VTlNQRUNJRklFRBAAEh8KG0NPTk5FQ1RPUl9LSU5EX0hPTUVNQVRJQ19JUBABEhoKFkNPTk5FQ1RPUl9LSU5EX0xPUkFXQU4QAip5ChJCYWNrZW5kSGVhbHRoU3RhdGUSJAogQkFDS0VORF9IRUFMVEhfU1RBVEVfVU5TUEVDSUZJRUQQABIbChdCQUNLRU5EX0hFQUxUSF9TVEFURV9PSxABEiAKHEJBQ0tFTkRfSEVBTFRIX1NUQVRFX0ZBSUxJTkcQAiqHAgoUQmFja2VuZEZhaWx1cmVSZWFzb24SJgoiQkFDS0VORF9GQUlMVVJFX1JFQVNPTl9VTlNQRUNJRklFRBAAEiYKIkJBQ0tFTkRfRkFJTFVSRV9SRUFTT05fVU5SRUFDSEFCTEUQARImCiJCQUNLRU5EX0ZBSUxVUkVfUkVBU09OX0FVVEhfRkFJTEVEEAISKAokQkFDS0VORF9GQUlMVVJFX1JFQVNPTl9CQUNLRU5EX0VSUk9SEAMSKAokQkFDS0VORF9GQUlMVVJFX1JFQVNPTl9NSVNDT05GSUdVUkVEEAQSIwofQkFDS0VORF9GQUlMVVJFX1JFQVNPTl9JTlRFUk5BTBAFQgJIAWIGcHJvdG8z");
12
+ fileDesc("CiFrdXNpbnRhL2lvdC9jb21tb24vdjEvdHlwZXMucHJvdG8SFWt1c2ludGEuaW90LmNvbW1vbi52MSJyCgpBc3NldE93bmVyEhwKEm93bmVyX29yZ2FuaXNhdGlvbhgBIAEoCEgAEj0KEWhvdXNlaG9sZF9ob21lX2lkGAIgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZEgAQgcKBW93bmVyIqEBCgtFcnJvckRldGFpbBIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSQgoIbWV0YWRhdGEYAyADKAsyMC5rdXNpbnRhLmlvdC5jb21tb24udjEuRXJyb3JEZXRhaWwuTWV0YWRhdGFFbnRyeRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEihgEKDUJhY2tlbmRIZWFsdGgSOAoFc3RhdGUYASABKA4yKS5rdXNpbnRhLmlvdC5jb21tb24udjEuQmFja2VuZEhlYWx0aFN0YXRlEjsKBnJlYXNvbhgCIAEoDjIrLmt1c2ludGEuaW90LmNvbW1vbi52MS5CYWNrZW5kRmFpbHVyZVJlYXNvbiqhAQoJU3BhY2VUeXBlEhoKFlNQQUNFX1RZUEVfVU5TUEVDSUZJRUQQABIXChNTUEFDRV9UWVBFX0JVSUxESU5HEAESFAoQU1BBQ0VfVFlQRV9GTE9PUhACEhgKFFNQQUNFX1RZUEVfQVBBUlRNRU5UEAMSEwoPU1BBQ0VfVFlQRV9ST09NEAQSGgoWU1BBQ0VfVFlQRV9DT01NT05fQVJFQRAFKoMBChNEZXZpY2VPd25lcnNoaXBUeXBlEiUKIURFVklDRV9PV05FUlNISVBfVFlQRV9VTlNQRUNJRklFRBAAEiEKHURFVklDRV9PV05FUlNISVBfVFlQRV9DT01QQU5ZEAESIgoeREVWSUNFX09XTkVSU0hJUF9UWVBFX1JFU0lERU5UEAIq4QEKFERldmljZUxpZmVjeWNsZVN0YXRlEiYKIkRFVklDRV9MSUZFQ1lDTEVfU1RBVEVfVU5TUEVDSUZJRUQQABIoCiRERVZJQ0VfTElGRUNZQ0xFX1NUQVRFX1BFTkRJTkdfQ0xBSU0QARIgChxERVZJQ0VfTElGRUNZQ0xFX1NUQVRFX09XTkVEEAISKwonREVWSUNFX0xJRkVDWUNMRV9TVEFURV9QRU5ESU5HX1RSQU5TRkVSEAMSKAokREVWSUNFX0xJRkVDWUNMRV9TVEFURV9CVUlMRElOR19QT09MEAQqgAEKEkNvbm5lY3RvclRyYW5zcG9ydBIjCh9DT05ORUNUT1JfVFJBTlNQT1JUX1VOU1BFQ0lGSUVEEAASIwofQ09OTkVDVE9SX1RSQU5TUE9SVF9VTklYX1NPQ0tFVBABEiAKHENPTk5FQ1RPUl9UUkFOU1BPUlRfTVRMU19UQ1AQAipsCg1Db25uZWN0b3JLaW5kEh4KGkNPTk5FQ1RPUl9LSU5EX1VOU1BFQ0lGSUVEEAASHwobQ09OTkVDVE9SX0tJTkRfSE9NRU1BVElDX0lQEAESGgoWQ09OTkVDVE9SX0tJTkRfTE9SQVdBThACKnkKEkJhY2tlbmRIZWFsdGhTdGF0ZRIkCiBCQUNLRU5EX0hFQUxUSF9TVEFURV9VTlNQRUNJRklFRBAAEhsKF0JBQ0tFTkRfSEVBTFRIX1NUQVRFX09LEAESIAocQkFDS0VORF9IRUFMVEhfU1RBVEVfRkFJTElORxACKocCChRCYWNrZW5kRmFpbHVyZVJlYXNvbhImCiJCQUNLRU5EX0ZBSUxVUkVfUkVBU09OX1VOU1BFQ0lGSUVEEAASJgoiQkFDS0VORF9GQUlMVVJFX1JFQVNPTl9VTlJFQUNIQUJMRRABEiYKIkJBQ0tFTkRfRkFJTFVSRV9SRUFTT05fQVVUSF9GQUlMRUQQAhIoCiRCQUNLRU5EX0ZBSUxVUkVfUkVBU09OX0JBQ0tFTkRfRVJST1IQAxIoCiRCQUNLRU5EX0ZBSUxVUkVfUkVBU09OX01JU0NPTkZJR1VSRUQQBBIjCh9CQUNLRU5EX0ZBSUxVUkVfUkVBU09OX0lOVEVSTkFMEAVCAkgBYgZwcm90bzM", [file_kusinta_iot_identity_v1_identity]);
13
+
14
+ /**
15
+ * Describes the message kusinta.iot.common.v1.AssetOwner.
16
+ * Use `create(AssetOwnerSchema)` to create a new message.
17
+ */
18
+ export const AssetOwnerSchema = /*@__PURE__*/
19
+ messageDesc(file_kusinta_iot_common_v1_types, 0);
12
20
 
13
21
  /**
14
22
  * Describes the message kusinta.iot.common.v1.ErrorDetail.
15
23
  * Use `create(ErrorDetailSchema)` to create a new message.
16
24
  */
17
25
  export const ErrorDetailSchema = /*@__PURE__*/
18
- messageDesc(file_kusinta_iot_common_v1_types, 0);
26
+ messageDesc(file_kusinta_iot_common_v1_types, 1);
19
27
 
20
28
  /**
21
29
  * Describes the message kusinta.iot.common.v1.BackendHealth.
22
30
  * Use `create(BackendHealthSchema)` to create a new message.
23
31
  */
24
32
  export const BackendHealthSchema = /*@__PURE__*/
25
- messageDesc(file_kusinta_iot_common_v1_types, 1);
33
+ messageDesc(file_kusinta_iot_common_v1_types, 2);
26
34
 
27
35
  /**
28
36
  * Describes the enum kusinta.iot.common.v1.SpaceType.
@@ -43,6 +51,11 @@ export const DeviceOwnershipTypeSchema = /*@__PURE__*/
43
51
  enumDesc(file_kusinta_iot_common_v1_types, 1);
44
52
 
45
53
  /**
54
+ * Whether a person owns a device outright. COMPANY: no person does; it is one of the
55
+ * building's own devices. RESIDENT: a person does (device.v1.DeviceDescriptor.owner_user_id),
56
+ * for a device of their own that they may take with them. Who paid for one of the
57
+ * building's own devices is a separate question, answered by AssetOwner.
58
+ *
46
59
  * @generated from enum kusinta.iot.common.v1.DeviceOwnershipType
47
60
  */
48
61
  export const DeviceOwnershipType = /*@__PURE__*/