@kusinta/iot-schema 0.2.0-beta.19 → 0.2.0-beta.20

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.
@@ -6,11 +6,13 @@ import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
7
  import type { DeviceOwnershipType, SpaceType } from "../../common/v1/types_pb.js";
8
8
  import type { ConnectorId, DeviceId, SpaceId, UserId } from "../../identity/v1/identity_pb.js";
9
+ import type { MembershipRelation, Role } from "../../access/v1/roles_pb.js";
9
10
  import type { LorawanProvisioning } from "../../vendor/lorawan/v1/lorawan_pb.js";
10
11
  import type { Space } from "../../space/v1/space_pb.js";
11
12
  import type { LinkFunction, LinkMode, LinkSettings } from "../../link/v1/link_pb.js";
12
- import type { ClimateModeKind } from "../../climate/v1/climate_pb.js";
13
+ import type { ClimateModeKind, ClimateSummaryPeriod } from "../../climate/v1/climate_pb.js";
13
14
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
15
+ import type { ServiceSignal } from "../../access/v1/acl_pb.js";
14
16
 
15
17
  /**
16
18
  * Describes the file kusinta/iot/webrtc/v1/management.proto.
@@ -22,6 +24,10 @@ export declare const file_kusinta_iot_webrtc_v1_management: GenFile;
22
24
  * stronger request than it looks: there is no parent whose reach could authorize
23
25
  * it, so it is reserved to the gateway's administrator.
24
26
  *
27
+ * Under an apartment only a room may be created. Creating in a home is guarded as
28
+ * UpdateSpace is, and refused whatever the caller where UpdateSpace's structure rules would
29
+ * refuse it.
30
+ *
25
31
  * @generated from message kusinta.iot.webrtc.v1.CreateSpace
26
32
  */
27
33
  export declare type CreateSpace = Message<"kusinta.iot.webrtc.v1.CreateSpace"> & {
@@ -70,9 +76,22 @@ export declare type CreateSpace = Message<"kusinta.iot.webrtc.v1.CreateSpace"> &
70
76
  export declare const CreateSpaceSchema: GenMessage<CreateSpace>;
71
77
 
72
78
  /**
73
- * Changes a space in place. Every descriptive field carries explicit presence:
74
- * absent means leave it alone, present means set it to this — including to the
75
- * empty string, which is how a description is cleared.
79
+ * Changes a space in place. Changes that would take a space into or out of a home, or move
80
+ * a home, are guarded by the gateway; a caller not allowed is refused as NOT_ENTITLED. A
81
+ * change is refused whatever the caller if it would leave anything but a room under an
82
+ * apartment, an apartment in a home, or — among what the caller can see — a device in two
83
+ * homes or a link across a home's boundary. What the caller cannot see never refuses it: a
84
+ * device a resident owns that would leave its owner's home, enter a home not theirs or sit
85
+ * in two homes is taken out of the moving space instead — staying in its owner's home,
86
+ * filed on the apartment, where it was in it — and any link it would carry across a
87
+ * boundary is removed. Changing the type of a space that has members needs
88
+ * ROLE_PROPERTY_OWNER or ROLE_GATEWAY_ADMIN, who see them, and is refused if it would
89
+ * leave a RESIDENT membership on a room — which can tell them of a membership change since
90
+ * the last quarter hour; that much this refusal discloses.
91
+ *
92
+ * Every descriptive field carries explicit presence: absent means leave it alone, present
93
+ * means set it to this — including to the empty string, which is how a description is
94
+ * cleared.
76
95
  *
77
96
  * @generated from message kusinta.iot.webrtc.v1.UpdateSpace
78
97
  */
@@ -143,7 +162,8 @@ export declare const UpdateSpaceSchema: GenMessage<UpdateSpace>;
143
162
  /**
144
163
  * Deletes a space. Refused if the space still holds devices or sub-spaces unless
145
164
  * cascade is set, so that emptying a building is always something the caller
146
- * asked for rather than something a stale client did by accident.
165
+ * asked for rather than something a stale client did by accident. Deleting a home, or
166
+ * anything in one, is guarded as UpdateSpace is.
147
167
  *
148
168
  * @generated from message kusinta.iot.webrtc.v1.DeleteSpace
149
169
  */
@@ -166,10 +186,17 @@ export declare type DeleteSpace = Message<"kusinta.iot.webrtc.v1.DeleteSpace"> &
166
186
  export declare const DeleteSpaceSchema: GenMessage<DeleteSpace>;
167
187
 
168
188
  /**
169
- * Adds a user to a space, granting them reach of it and everything beneath it.
189
+ * Adds a user to a space, granting them reach of it and everything beneath it — except
190
+ * that a RESIDENT membership reaches no home beneath it (see access.v1.MembershipRelation).
170
191
  * The user need not be known to the gateway beforehand — identities are minted by
171
192
  * the token issuer, and this records that one of them belongs here.
172
193
  *
194
+ * Assigning a user who is already a member changes their relation to the space.
195
+ * RESIDENT is refused on a room; see access.v1.MembershipRelation.
196
+ *
197
+ * Who may change who belongs to a home is restricted by the gateway; a caller not allowed is
198
+ * refused as NOT_ENTITLED. Residents see who is filed on their home in Space.members.
199
+ *
173
200
  * @generated from message kusinta.iot.webrtc.v1.AssignUserToSpace
174
201
  */
175
202
  export declare type AssignUserToSpace = Message<"kusinta.iot.webrtc.v1.AssignUserToSpace"> & {
@@ -182,6 +209,15 @@ export declare type AssignUserToSpace = Message<"kusinta.iot.webrtc.v1.AssignUse
182
209
  * @generated from field: kusinta.iot.identity.v1.UserId user_id = 2;
183
210
  */
184
211
  userId?: UserId | undefined;
212
+
213
+ /**
214
+ * How the user stands to the space — whether they live there or are there for the
215
+ * building. Required: UNSPECIFIED is refused, never defaulted. See
216
+ * access.v1.MembershipRelation for what each lets a member see of a home.
217
+ *
218
+ * @generated from field: kusinta.iot.access.v1.MembershipRelation relation = 4;
219
+ */
220
+ relation: MembershipRelation;
185
221
  };
186
222
 
187
223
  /**
@@ -194,6 +230,8 @@ export declare const AssignUserToSpaceSchema: GenMessage<AssignUserToSpace>;
194
230
  * Removes a user's membership of a space. Losing reach also drops whatever the
195
231
  * user was streaming from it, announced by LivePermissionUpdate.
196
232
  *
233
+ * Removing someone else from a home is guarded as assigning is.
234
+ *
197
235
  * @generated from message kusinta.iot.webrtc.v1.RemoveUserFromSpace
198
236
  */
199
237
  export declare type RemoveUserFromSpace = Message<"kusinta.iot.webrtc.v1.RemoveUserFromSpace"> & {
@@ -218,6 +256,12 @@ export declare const RemoveUserFromSpaceSchema: GenMessage<RemoveUserFromSpace>;
218
256
  * Files a device into a space. A device may sit in several spaces at once; this
219
257
  * is additive, and filing a device where it already sits is a no-op.
220
258
  *
259
+ * Into a home go only the building's own devices and devices its residents own, and a
260
+ * device belongs to one home at most; filing into, out of or beside a home is guarded by
261
+ * the gateway. A caller not allowed is refused as NOT_ENTITLED, and filing that would leave
262
+ * a link the caller can see across a home's boundary is refused whatever the caller; one
263
+ * they cannot see is removed instead.
264
+ *
221
265
  * @generated from message kusinta.iot.webrtc.v1.PlaceDeviceInSpace
222
266
  */
223
267
  export declare type PlaceDeviceInSpace = Message<"kusinta.iot.webrtc.v1.PlaceDeviceInSpace"> & {
@@ -242,6 +286,9 @@ export declare const PlaceDeviceInSpaceSchema: GenMessage<PlaceDeviceInSpace>;
242
286
  * Takes a device out of one space, leaving any others intact. A device in no
243
287
  * space and with no owner is unfiled, and visible only to the administrator.
244
288
  *
289
+ * Taking a device out of a home is guarded as PlaceDeviceInSpace is, and removes its links
290
+ * to devices still in the home.
291
+ *
245
292
  * @generated from message kusinta.iot.webrtc.v1.RemoveDeviceFromSpace
246
293
  */
247
294
  export declare type RemoveDeviceFromSpace = Message<"kusinta.iot.webrtc.v1.RemoveDeviceFromSpace"> & {
@@ -265,7 +312,12 @@ export declare const RemoveDeviceFromSpaceSchema: GenMessage<RemoveDeviceFromSpa
265
312
  /**
266
313
  * Takes ownership of a device. Ownership is reach in its own right: an owner may
267
314
  * see and control their device whatever their gateway-wide role permits, and may
268
- * file it into spaces they belong to.
315
+ * file it into spaces they belong to, and the rooms of a home they live in — though into a
316
+ * home only if they live there (see PlaceDeviceInSpace).
317
+ *
318
+ * Only a RESIDENT claim makes the caller the owner. A COMPANY claim records that the
319
+ * building owns the device, names no person, and grants the caller no reach. Claims of a
320
+ * device in a home, or of one already claimed, are restricted by the gateway.
269
321
  *
270
322
  * @generated from message kusinta.iot.webrtc.v1.ClaimDevice
271
323
  */
@@ -317,8 +369,9 @@ export declare type ClaimDevice = Message<"kusinta.iot.webrtc.v1.ClaimDevice"> &
317
369
  export declare const ClaimDeviceSchema: GenMessage<ClaimDevice>;
318
370
 
319
371
  /**
320
- * Gives up ownership. The device keeps whatever space filing it has; if it has
321
- * none it becomes unfiled.
372
+ * Gives up ownership. The device keeps whatever space filing it has, except that a device in
373
+ * a home stays filed in the home alone, as one of the building's own devices there — as
374
+ * when its owner moves out; if it has none it becomes unfiled.
322
375
  *
323
376
  * @generated from message kusinta.iot.webrtc.v1.ReleaseDevice
324
377
  */
@@ -424,7 +477,9 @@ export declare const ListSpacesSchema: GenMessage<ListSpaces>;
424
477
  *
425
478
  * device_ids on each Space are filtered to what the caller may see. An
426
479
  * unfiltered tree would list every device on the gateway by id, which is the
427
- * enumeration channel the snapshot filter exists to close.
480
+ * enumeration channel the snapshot filter exists to close. To a caller who sees a home as
481
+ * service, what is new in it is listed from the next quarter hour and what is gone at once
482
+ * — except its members, which change only at quarter hours (see Space.members).
428
483
  *
429
484
  * @generated from message kusinta.iot.webrtc.v1.SpaceTree
430
485
  */
@@ -475,6 +530,11 @@ export declare const ManagementAckSchema: GenMessage<ManagementAck>;
475
530
  * writes configuration to the sender and spends its battery, which is a change
476
531
  * to someone else's hardware.
477
532
  *
533
+ * In a home it is the other way round: links between its devices are its residents' to
534
+ * make, change and remove, and a caller who reaches it as service is refused as
535
+ * NOT_ENTITLED. A link between a device in a home and one outside it is refused to anyone.
536
+ * The same holds for UpdateDeviceLink and RemoveDeviceLink.
537
+ *
478
538
  * @generated from message kusinta.iot.webrtc.v1.CreateDeviceLink
479
539
  */
480
540
  export declare type CreateDeviceLink = Message<"kusinta.iot.webrtc.v1.CreateDeviceLink"> & {
@@ -554,7 +614,7 @@ export declare const RemoveDeviceLinkSchema: GenMessage<RemoveDeviceLink>;
554
614
  * Authorized against both ends, as creating and removing the link are: deciding
555
615
  * what temperature a room is held at is directing a device, not adjusting one,
556
616
  * so it takes ownership of the ends or a servicing role, not the permission to
557
- * turn a thermostat up.
617
+ * turn a thermostat up. In a home it is its residents' instead (see CreateDeviceLink).
558
618
  *
559
619
  * @generated from message kusinta.iot.webrtc.v1.UpdateDeviceLink
560
620
  */
@@ -590,6 +650,11 @@ export declare const UpdateDeviceLinkSchema: GenMessage<UpdateDeviceLink>;
590
650
  * Lists links. Unset device_id lists every link among devices the caller can
591
651
  * reach; naming one narrows it to that device's own, in either direction.
592
652
  *
653
+ * A link with an end in a home reaches a caller who sees it as service with
654
+ * DeviceLink.details_withheld set, and what that withholds unset — a new link
655
+ * from the next quarter hour, a removed one at once — and not at all when either end is a
656
+ * device a resident owns.
657
+ *
593
658
  * @generated from message kusinta.iot.webrtc.v1.ListDeviceLinks
594
659
  */
595
660
  export declare type ListDeviceLinks = Message<"kusinta.iot.webrtc.v1.ListDeviceLinks"> & {
@@ -608,10 +673,12 @@ export declare const ListDeviceLinksSchema: GenMessage<ListDeviceLinks>;
608
673
  /**
609
674
  * Sets the temperature a room is to be held at.
610
675
  *
611
- * Authorized as adjusting, not directing: WRITE on the room is enough — a resident in
612
- * their own apartment, as well as owners and filing roles. It is the same act as turning
613
- * a radiator's knob, which a resident can already do; setting up what the room obeys is
614
- * ConfigureRoomClimate, and stays with owners.
676
+ * Authorized as adjusting, not directing: WRITE on the room is enough. It is the same act
677
+ * as turning a radiator's knob; setting up what the room obeys is ConfigureRoomClimate,
678
+ * and stays with owners, except the lock in a home.
679
+ *
680
+ * In a home, only its residents may set it; a caller who reaches the room as service is
681
+ * refused as NOT_ENTITLED.
615
682
  *
616
683
  * Clamped to the room's limits rather than refused outside them, and the clamped value is
617
684
  * what the room's RoomClimate then reports.
@@ -642,8 +709,10 @@ export declare const SetRoomTargetSchema: GenMessage<SetRoomTarget>;
642
709
 
643
710
  /**
644
711
  * The sensors a room measures with, in order of preference. A message of its own so that
645
- * "leave the sensors alone" (unset) differs from "set" on the wire. Set but empty returns
646
- * the room to the default order, every temperature sensor filed in it in filing order.
712
+ * "leave the sensors alone" (unset) differs from "set" on the wire. It orders the
713
+ * building's sensors only (see climate.v1.RoomClimate.sensor_ids); set but empty returns
714
+ * them to the default, every building temperature sensor filed in the room in filing
715
+ * order.
647
716
  *
648
717
  * @generated from message kusinta.iot.webrtc.v1.RoomSensors
649
718
  */
@@ -690,6 +759,14 @@ export declare const RoomLimitsSchema: GenMessage<RoomLimits>;
690
759
  * hand at one of its devices counts. Authorized as directing — owners and filing roles —
691
760
  * because this decides what everybody in the room can do.
692
761
  *
762
+ * One exception: in a home, lock_device_controls is its residents' alone. They may send
763
+ * this request with nothing else set. Outside homes the lock is the owner's, as the rest
764
+ * is. A request that sets anything its caller may not — the lock in a home for service;
765
+ * anything but the lock in a home, or the lock outside one, for a caller with neither
766
+ * ROLE_PROPERTY_OWNER nor a filing role — is refused whole as NOT_ENTITLED, so nothing of
767
+ * it applies. sensors orders only the building's own
768
+ * sensors (see RoomClimate.sensor_ids).
769
+ *
693
770
  * Each field moves alone, as on UpdateSpace: unset leaves it as it is.
694
771
  *
695
772
  * @generated from message kusinta.iot.webrtc.v1.ConfigureRoomClimate
@@ -708,7 +785,8 @@ export declare type ConfigureRoomClimate = Message<"kusinta.iot.webrtc.v1.Config
708
785
  limits?: RoomLimits | undefined;
709
786
 
710
787
  /**
711
- * Only devices filed in this room; any other is refused.
788
+ * Only the building's sensors filed in this room; any other — including a sensor a
789
+ * resident owns — is refused, the same way whether or not it exists.
712
790
  *
713
791
  * @generated from field: kusinta.iot.webrtc.v1.RoomSensors sensors = 3;
714
792
  */
@@ -729,7 +807,18 @@ export declare const ConfigureRoomClimateSchema: GenMessage<ConfigureRoomClimate
729
807
  /**
730
808
  * Switches a mode on a space on, or off with kind UNSPECIFIED. WRITE on the space.
731
809
  * Switching one on needs setback_centidegrees; a mode with nothing to set back to is
732
- * refused.
810
+ * refused. Switching one on is refused on a room inside an apartment, whose rooms follow
811
+ * the apartment's mode alone; such a room carries none (see climate.v1.ClimateMode), and
812
+ * switching one off there is accepted and does nothing — for those who may switch modes in
813
+ * that home at all, which is checked first: anyone else is refused as NOT_ENTITLED.
814
+ *
815
+ * In a home, only its residents may switch one on or off: whether a home stands empty is
816
+ * theirs to say. A caller who reaches it as service is refused as NOT_ENTITLED — except
817
+ * that, while the home had no resident at the last quarter hour, ROLE_PROPERTY_OWNER or
818
+ * ROLE_GATEWAY_ADMIN may switch off a mode that was on then and whose setter is not a
819
+ * resident now, so that no mode outlives everyone who could end it. Any other switch-off
820
+ * from them — no mode on, or one that is a resident's — is accepted and does nothing, so
821
+ * the answer tells them nothing of whether a mode was on or whether anyone has moved in.
733
822
  *
734
823
  * @generated from message kusinta.iot.webrtc.v1.SetClimateMode
735
824
  */
@@ -772,6 +861,10 @@ export declare const SetClimateModeSchema: GenMessage<SetClimateMode>;
772
861
  * Lists the room climates and modes a caller may see. Unset root_space_id lists every
773
862
  * one the caller can reach; naming a space narrows it to that space and those below.
774
863
  *
864
+ * A caller who reaches a room inside an apartment as service gets it with
865
+ * RoomClimate.state_withheld set — what is new from the next quarter hour, what is gone at
866
+ * once — and gets no ClimateMode set on that apartment or its rooms.
867
+ *
775
868
  * @generated from message kusinta.iot.webrtc.v1.ListRoomClimates
776
869
  */
777
870
  export declare type ListRoomClimates = Message<"kusinta.iot.webrtc.v1.ListRoomClimates"> & {
@@ -795,6 +888,11 @@ export declare const ListRoomClimatesSchema: GenMessage<ListRoomClimates>;
795
888
  * back-to-back windows neither repeat nor skip a bucket. Unset to_time means now;
796
889
  * unset from_time means RoomHistory.kept_from. Both are clamped to [kept_from, now].
797
890
  *
891
+ * A room in a home is readable by its residents only, and only from the start of their
892
+ * current residency (see access.v1.MembershipRelation). A caller who reaches it as service is
893
+ * refused as NOT_ENTITLED; one who reaches the apartment itself has
894
+ * GetApartmentClimateSummary instead.
895
+ *
798
896
  * @generated from message kusinta.iot.webrtc.v1.GetRoomHistory
799
897
  */
800
898
  export declare type GetRoomHistory = Message<"kusinta.iot.webrtc.v1.GetRoomHistory"> & {
@@ -820,6 +918,152 @@ export declare type GetRoomHistory = Message<"kusinta.iot.webrtc.v1.GetRoomHisto
820
918
  */
821
919
  export declare const GetRoomHistorySchema: GenMessage<GetRoomHistory>;
822
920
 
921
+ /**
922
+ * What the parties who do not live in a private space learn of it — the answer to a
923
+ * resident asking who can see what in their home, in reply to GetPrivacyDisclosure.
924
+ *
925
+ * It states the policy and the kinds of party it applies to now. It NAMES NOBODY: a resident
926
+ * learns that a technician can see the battery of their radiator valve, not which
927
+ * technician. Those filed on the home itself are named to its residents in Space.members;
928
+ * service reach from a building or floor above is not.
929
+ *
930
+ * @generated from message kusinta.iot.webrtc.v1.PrivacyDisclosure
931
+ */
932
+ export declare type PrivacyDisclosure = Message<"kusinta.iot.webrtc.v1.PrivacyDisclosure"> & {
933
+ /**
934
+ * An apartment, or a room in one.
935
+ *
936
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
937
+ */
938
+ spaceId?: SpaceId | undefined;
939
+
940
+ /**
941
+ * The kinds of party who see this space, or any part of it, as service now — or would
942
+ * through another membership, were they not its residents — each role once, with what
943
+ * that role brings here. Each party is listed under every role it holds other than
944
+ * ROLE_RESIDENT, and sees what its entries say together; one with no other role, or whose
945
+ * role the gateway has not yet learnt, counts as ROLE_UNSPECIFIED. The gateway's
946
+ * administrator is always listed. So the list reads the same whether or not anyone lives
947
+ * in the home, and never understates who has reach or what they see. Devices a resident
948
+ * owns are not shown to service at all. To a caller who sees the space as service, it is
949
+ * answered as it stood at the last quarter hour.
950
+ *
951
+ * @generated from field: repeated kusinta.iot.webrtc.v1.ServiceParty service_parties = 5;
952
+ */
953
+ serviceParties: ServiceParty[];
954
+
955
+ /**
956
+ * How finely the space's climate is summarised for service, as means over periods of
957
+ * this length (climate.v1.ApartmentClimateSummary). UNSPECIFIED: no summary is given.
958
+ * The gateway's own setting, WEEK unless it is configured otherwise; no operation in this
959
+ * contract changes it. A change applies to periods that open after it: service is given
960
+ * no period that opened before the last change.
961
+ *
962
+ * @generated from field: kusinta.iot.climate.v1.ClimateSummaryPeriod climate_summary_period = 4;
963
+ */
964
+ climateSummaryPeriod: ClimateSummaryPeriod;
965
+ };
966
+
967
+ /**
968
+ * Describes the message kusinta.iot.webrtc.v1.PrivacyDisclosure.
969
+ * Use `create(PrivacyDisclosureSchema)` to create a new message.
970
+ */
971
+ export declare const PrivacyDisclosureSchema: GenMessage<PrivacyDisclosure>;
972
+
973
+ /**
974
+ * One kind of party with service reach of a home, and what it sees there. Every service
975
+ * party sees the same kinds of thing of the part of the home it reaches — a whole
976
+ * ServiceStatus, nothing withheld from it — so signals differ between parties only in
977
+ * RESIDENTS. How much of the home that part is, a room or all of it, the disclosure does
978
+ * not say.
979
+ *
980
+ * @generated from message kusinta.iot.webrtc.v1.ServiceParty
981
+ */
982
+ export declare type ServiceParty = Message<"kusinta.iot.webrtc.v1.ServiceParty"> & {
983
+ /**
984
+ * @generated from field: kusinta.iot.access.v1.Role role = 1;
985
+ */
986
+ role: Role;
987
+
988
+ /**
989
+ * @generated from field: repeated kusinta.iot.access.v1.ServiceSignal signals = 2;
990
+ */
991
+ signals: ServiceSignal[];
992
+ };
993
+
994
+ /**
995
+ * Describes the message kusinta.iot.webrtc.v1.ServiceParty.
996
+ * Use `create(ServicePartySchema)` to create a new message.
997
+ */
998
+ export declare const ServicePartySchema: GenMessage<ServiceParty>;
999
+
1000
+ /**
1001
+ * Asks what the parties who do not live in a space learn of it, answered with a
1002
+ * PrivacyDisclosure. For an apartment or a room in one, and refused on any other
1003
+ * space. Needs READ on the space.
1004
+ *
1005
+ * @generated from message kusinta.iot.webrtc.v1.GetPrivacyDisclosure
1006
+ */
1007
+ export declare type GetPrivacyDisclosure = Message<"kusinta.iot.webrtc.v1.GetPrivacyDisclosure"> & {
1008
+ /**
1009
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1010
+ */
1011
+ spaceId?: SpaceId | undefined;
1012
+ };
1013
+
1014
+ /**
1015
+ * Describes the message kusinta.iot.webrtc.v1.GetPrivacyDisclosure.
1016
+ * Use `create(GetPrivacyDisclosureSchema)` to create a new message.
1017
+ */
1018
+ export declare const GetPrivacyDisclosureSchema: GenMessage<GetPrivacyDisclosure>;
1019
+
1020
+ /**
1021
+ * Reads an apartment's climate as means over whole periods, answered with a
1022
+ * climate.v1.ApartmentClimateSummary. Needs READ on the apartment itself. Refused on a
1023
+ * space that is not an apartment, and while the building's time zone (Space.time_zone) is
1024
+ * unknown, since periods are cut at its midnights.
1025
+ *
1026
+ * The range is half-open over the periods' starts: a period is returned when from_time <=
1027
+ * starts_at < to_time. Unset from_time means kept_from; unset to_time means now. Both are
1028
+ * clamped to [kept_from, the start of the period running now — or now, if none is] (see
1029
+ * ApartmentClimateSummary).
1030
+ *
1031
+ * @generated from message kusinta.iot.webrtc.v1.GetApartmentClimateSummary
1032
+ */
1033
+ export declare type GetApartmentClimateSummary = Message<"kusinta.iot.webrtc.v1.GetApartmentClimateSummary"> & {
1034
+ /**
1035
+ * @generated from field: kusinta.iot.identity.v1.SpaceId apartment_id = 1;
1036
+ */
1037
+ apartmentId?: SpaceId | undefined;
1038
+
1039
+ /**
1040
+ * Unset asks for the period the apartment's privacy disclosure names
1041
+ * (PrivacyDisclosure.climate_summary_period), or weeks when it names none. Anyone but the
1042
+ * apartment's residents may ask for that period only, and is refused as NOT_ENTITLED for
1043
+ * any other or when it names none. Its residents may ask for any, and are given only
1044
+ * periods that began in their current residency.
1045
+ *
1046
+ * @generated from field: kusinta.iot.climate.v1.ClimateSummaryPeriod period = 2;
1047
+ */
1048
+ period: ClimateSummaryPeriod;
1049
+
1050
+ /**
1051
+ * @generated from field: google.protobuf.Timestamp from_time = 3;
1052
+ */
1053
+ fromTime?: Timestamp | undefined;
1054
+
1055
+ /**
1056
+ * @generated from field: google.protobuf.Timestamp to_time = 4;
1057
+ */
1058
+ toTime?: Timestamp | undefined;
1059
+ };
1060
+
1061
+ /**
1062
+ * Describes the message kusinta.iot.webrtc.v1.GetApartmentClimateSummary.
1063
+ * Use `create(GetApartmentClimateSummarySchema)` to create a new message.
1064
+ */
1065
+ export declare const GetApartmentClimateSummarySchema: GenMessage<GetApartmentClimateSummary>;
1066
+
823
1067
  /**
824
1068
  * @generated from message kusinta.iot.webrtc.v1.ManagementRequest
825
1069
  */
@@ -947,6 +1191,18 @@ export declare type ManagementRequest = Message<"kusinta.iot.webrtc.v1.Managemen
947
1191
  */
948
1192
  value: GetRoomHistory;
949
1193
  case: "getRoomHistory";
1194
+ } | {
1195
+ /**
1196
+ * @generated from field: kusinta.iot.webrtc.v1.GetPrivacyDisclosure get_privacy_disclosure = 21;
1197
+ */
1198
+ value: GetPrivacyDisclosure;
1199
+ case: "getPrivacyDisclosure";
1200
+ } | {
1201
+ /**
1202
+ * @generated from field: kusinta.iot.webrtc.v1.GetApartmentClimateSummary get_apartment_climate_summary = 22;
1203
+ */
1204
+ value: GetApartmentClimateSummary;
1205
+ case: "getApartmentClimateSummary";
950
1206
  } | { case: undefined; value?: undefined };
951
1207
  };
952
1208
 
@@ -4,6 +4,8 @@
4
4
 
5
5
  import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
6
  import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
+ import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
8
+ import { file_kusinta_iot_access_v1_roles } from "../../access/v1/roles_pb.js";
7
9
  import { file_kusinta_iot_climate_v1_climate } from "../../climate/v1/climate_pb.js";
8
10
  import { file_kusinta_iot_common_v1_types } from "../../common/v1/types_pb.js";
9
11
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
@@ -15,7 +17,7 @@ import { file_kusinta_iot_vendor_lorawan_v1_lorawan } from "../../vendor/lorawan
15
17
  * Describes the file kusinta/iot/webrtc/v1/management.proto.
16
18
  */
17
19
  export const file_kusinta_iot_webrtc_v1_management = /*@__PURE__*/
18
- fileDesc("CiZrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWFuYWdlbWVudC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxItYBCgtDcmVhdGVTcGFjZRI0CgpzcGFjZV90eXBlGAEgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBWZsb29yGAQgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgFIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSFgoJdGltZV96b25lGAYgASgJSACIAQFCDAoKX3RpbWVfem9uZSL1AgoLVXBkYXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjkKCnNwYWNlX3R5cGUYAiABKA4yIC5rdXNpbnRhLmlvdC5jb21tb24udjEuU3BhY2VUeXBlSAGIAQESEQoEbmFtZRgDIAEoCUgCiAEBEhgKC2Rlc2NyaXB0aW9uGAQgASgJSAOIAQESEgoFZmxvb3IYBSABKAVIBIgBARI7Cg9wYXJlbnRfc3BhY2VfaWQYBiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkSAASEAoGZGV0YWNoGAcgASgISAASFgoJdGltZV96b25lGAggASgJSAWIAQFCDwoNcGFyZW50X2NoYW5nZUINCgtfc3BhY2VfdHlwZUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCAoGX2Zsb29yQgwKCl90aW1lX3pvbmUiUgoLRGVsZXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg8KB2Nhc2NhZGUYAiABKAgifwoRQXNzaWduVXNlclRvU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjAKB3VzZXJfaWQYAiABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWRKBAgDEAQiewoTUmVtb3ZlVXNlckZyb21TcGFjZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSMAoHdXNlcl9pZBgCIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZCJ+ChJQbGFjZURldmljZUluU3BhY2USNAoJZGV2aWNlX2lkGAEgASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSMgoIc3BhY2VfaWQYAiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIoEBChVSZW1vdmVEZXZpY2VGcm9tU3BhY2USNAoJZGV2aWNlX2lkGAEgASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSMgoIc3BhY2VfaWQYAiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkItgBCgtDbGFpbURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBI9Cglvd25lcnNoaXAYAiABKA4yKi5rdXNpbnRhLmlvdC5jb21tb24udjEuRGV2aWNlT3duZXJzaGlwVHlwZRI6ChBpbml0aWFsX3NwYWNlX2lkGAMgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIYChBwb3NzZXNzaW9uX3Byb29mGAQgASgJIkUKDVJlbGVhc2VEZXZpY2USNAoJZGV2aWNlX2lkGAEgASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQiowEKD1Byb3Zpc2lvbkRldmljZRI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZBJFCgdsb3Jhd2FuGAIgASgLMjIua3VzaW50YS5pb3QudmVuZG9yLmxvcmF3YW4udjEuTG9yYXdhblByb3Zpc2lvbmluZ0gAQg0KC2NyZWRlbnRpYWxzIkUKCkxpc3RTcGFjZXMSNwoNcm9vdF9zcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQiOAoJU3BhY2VUcmVlEisKBnNwYWNlcxgBIAMoCzIbLmt1c2ludGEuaW90LnNwYWNlLnYxLlNwYWNlIg8KDU1hbmFnZW1lbnRBY2sikQIKEENyZWF0ZURldmljZUxpbmsSMQoGc2VuZGVyGAEgASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSMwoIcmVjZWl2ZXIYAiABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghmdW5jdGlvbhgDIAEoDjIhLmt1c2ludGEuaW90LmxpbmsudjEuTGlua0Z1bmN0aW9uEisKBG1vZGUYBCABKA4yHS5rdXNpbnRhLmlvdC5saW5rLnYxLkxpbmtNb2RlEjMKCHNldHRpbmdzGAUgASgLMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rU2V0dGluZ3MiIwoQUmVtb3ZlRGV2aWNlTGluaxIPCgdsaW5rX2lkGAEgASgJIlgKEFVwZGF0ZURldmljZUxpbmsSDwoHbGlua19pZBgBIAEoCRIzCghzZXR0aW5ncxgCIAEoCzIhLmt1c2ludGEuaW90LmxpbmsudjEuTGlua1NldHRpbmdzIkcKD0xpc3REZXZpY2VMaW5rcxI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJ8Cg1TZXRSb29tVGFyZ2V0EjEKB3Jvb21faWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEiAKE3RhcmdldF9jZW50aWRlZ3JlZXMYAiABKBFIAIgBAUIWChRfdGFyZ2V0X2NlbnRpZGVncmVlcyJECgtSb29tU2Vuc29ycxI1CgpzZW5zb3JfaWRzGAEgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQidAoKUm9vbUxpbWl0cxIdChBtaW5fY2VudGlkZWdyZWVzGAEgASgRSACIAQESHQoQbWF4X2NlbnRpZGVncmVlcxgCIAEoEUgBiAEBQhMKEV9taW5fY2VudGlkZWdyZWVzQhMKEV9tYXhfY2VudGlkZWdyZWVzIu0BChRDb25maWd1cmVSb29tQ2xpbWF0ZRIxCgdyb29tX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIxCgZsaW1pdHMYAiABKAsyIS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUm9vbUxpbWl0cxIzCgdzZW5zb3JzGAMgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLlJvb21TZW5zb3JzEiEKFGxvY2tfZGV2aWNlX2NvbnRyb2xzGAQgASgISACIAQFCFwoVX2xvY2tfZGV2aWNlX2NvbnRyb2xzIpMCCg5TZXRDbGltYXRlTW9kZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSNQoEa2luZBgCIAEoDjInLmt1c2ludGEuaW90LmNsaW1hdGUudjEuQ2xpbWF0ZU1vZGVLaW5kEiEKFHNldGJhY2tfY2VudGlkZWdyZWVzGAMgASgRSACIAQESLQoJc3RhcnRzX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCgdlbmRzX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIXChVfc2V0YmFja19jZW50aWRlZ3JlZXMiSwoQTGlzdFJvb21DbGltYXRlcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCKfAQoOR2V0Um9vbUhpc3RvcnkSMQoHcm9vbV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSLQoJZnJvbV90aW1lGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCgd0b190aW1lGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCL5CgoRTWFuYWdlbWVudFJlcXVlc3QSOgoMY3JlYXRlX3NwYWNlGAEgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZVNwYWNlSAASOgoMdXBkYXRlX3NwYWNlGAIgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLlVwZGF0ZVNwYWNlSAASOgoMZGVsZXRlX3NwYWNlGAMgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkRlbGV0ZVNwYWNlSAASSAoUYXNzaWduX3VzZXJfdG9fc3BhY2UYBCABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXNzaWduVXNlclRvU3BhY2VIABJMChZyZW1vdmVfdXNlcl9mcm9tX3NwYWNlGAUgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZVVzZXJGcm9tU3BhY2VIABJKChVwbGFjZV9kZXZpY2VfaW5fc3BhY2UYBiABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGxhY2VEZXZpY2VJblNwYWNlSAASUAoYcmVtb3ZlX2RldmljZV9mcm9tX3NwYWNlGAcgASgLMiwua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZURldmljZUZyb21TcGFjZUgAEjoKDGNsYWltX2RldmljZRgIIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DbGFpbURldmljZUgAEj4KDnJlbGVhc2VfZGV2aWNlGAkgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbGVhc2VEZXZpY2VIABI4CgtsaXN0X3NwYWNlcxgKIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0U3BhY2VzSAASRQoSY3JlYXRlX2RldmljZV9saW5rGAsgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZURldmljZUxpbmtIABJFChJyZW1vdmVfZGV2aWNlX2xpbmsYDCABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlRGV2aWNlTGlua0gAEkMKEWxpc3RfZGV2aWNlX2xpbmtzGA0gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3REZXZpY2VMaW5rc0gAEkUKEnVwZGF0ZV9kZXZpY2VfbGluaxgOIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5VcGRhdGVEZXZpY2VMaW5rSAASQgoQcHJvdmlzaW9uX2RldmljZRgPIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm92aXNpb25EZXZpY2VIABI/Cg9zZXRfcm9vbV90YXJnZXQYECABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0Um9vbVRhcmdldEgAEk0KFmNvbmZpZ3VyZV9yb29tX2NsaW1hdGUYESABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29uZmlndXJlUm9vbUNsaW1hdGVIABJBChBzZXRfY2xpbWF0ZV9tb2RlGBIgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldENsaW1hdGVNb2RlSAASRQoSbGlzdF9yb29tX2NsaW1hdGVzGBMgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RSb29tQ2xpbWF0ZXNIABJBChBnZXRfcm9vbV9oaXN0b3J5GBQgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLkdldFJvb21IaXN0b3J5SABCCQoHcmVxdWVzdEICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_vendor_lorawan_v1_lorawan]);
20
+ fileDesc("CiZrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWFuYWdlbWVudC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxItYBCgtDcmVhdGVTcGFjZRI0CgpzcGFjZV90eXBlGAEgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBWZsb29yGAQgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgFIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSFgoJdGltZV96b25lGAYgASgJSACIAQFCDAoKX3RpbWVfem9uZSL1AgoLVXBkYXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjkKCnNwYWNlX3R5cGUYAiABKA4yIC5rdXNpbnRhLmlvdC5jb21tb24udjEuU3BhY2VUeXBlSAGIAQESEQoEbmFtZRgDIAEoCUgCiAEBEhgKC2Rlc2NyaXB0aW9uGAQgASgJSAOIAQESEgoFZmxvb3IYBSABKAVIBIgBARI7Cg9wYXJlbnRfc3BhY2VfaWQYBiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkSAASEAoGZGV0YWNoGAcgASgISAASFgoJdGltZV96b25lGAggASgJSAWIAQFCDwoNcGFyZW50X2NoYW5nZUINCgtfc3BhY2VfdHlwZUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCAoGX2Zsb29yQgwKCl90aW1lX3pvbmUiUgoLRGVsZXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg8KB2Nhc2NhZGUYAiABKAgivAEKEUFzc2lnblVzZXJUb1NwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEjsKCHJlbGF0aW9uGAQgASgOMikua3VzaW50YS5pb3QuYWNjZXNzLnYxLk1lbWJlcnNoaXBSZWxhdGlvbkoECAMQBCJ7ChNSZW1vdmVVc2VyRnJvbVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkIn4KElBsYWNlRGV2aWNlSW5TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQigQEKFVJlbW92ZURldmljZUZyb21TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi2AEKC0NsYWltRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEj0KCW93bmVyc2hpcBgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEhgKEHBvc3Nlc3Npb25fcHJvb2YYBCABKAkiRQoNUmVsZWFzZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCKjAQoPUHJvdmlzaW9uRGV2aWNlEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEkUKB2xvcmF3YW4YAiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IubG9yYXdhbi52MS5Mb3Jhd2FuUHJvdmlzaW9uaW5nSABCDQoLY3JlZGVudGlhbHMiRQoKTGlzdFNwYWNlcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCI4CglTcGFjZVRyZWUSKwoGc3BhY2VzGAEgAygLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2UiDwoNTWFuYWdlbWVudEFjayKRAgoQQ3JlYXRlRGV2aWNlTGluaxIxCgZzZW5kZXIYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgCIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAMgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24SKwoEbW9kZRgEIAEoDjIdLmt1c2ludGEuaW90LmxpbmsudjEuTGlua01vZGUSMwoIc2V0dGluZ3MYBSABKAsyIS5rdXNpbnRhLmlvdC5saW5rLnYxLkxpbmtTZXR0aW5ncyIjChBSZW1vdmVEZXZpY2VMaW5rEg8KB2xpbmtfaWQYASABKAkiWAoQVXBkYXRlRGV2aWNlTGluaxIPCgdsaW5rX2lkGAEgASgJEjMKCHNldHRpbmdzGAIgASgLMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rU2V0dGluZ3MiRwoPTGlzdERldmljZUxpbmtzEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkInwKDVNldFJvb21UYXJnZXQSMQoHcm9vbV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSIAoTdGFyZ2V0X2NlbnRpZGVncmVlcxgCIAEoEUgAiAEBQhYKFF90YXJnZXRfY2VudGlkZWdyZWVzIkQKC1Jvb21TZW5zb3JzEjUKCnNlbnNvcl9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJ0CgpSb29tTGltaXRzEh0KEG1pbl9jZW50aWRlZ3JlZXMYASABKBFIAIgBARIdChBtYXhfY2VudGlkZWdyZWVzGAIgASgRSAGIAQFCEwoRX21pbl9jZW50aWRlZ3JlZXNCEwoRX21heF9jZW50aWRlZ3JlZXMi7QEKFENvbmZpZ3VyZVJvb21DbGltYXRlEjEKB3Jvb21faWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjEKBmxpbWl0cxgCIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tTGltaXRzEjMKB3NlbnNvcnMYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUm9vbVNlbnNvcnMSIQoUbG9ja19kZXZpY2VfY29udHJvbHMYBCABKAhIAIgBAUIXChVfbG9ja19kZXZpY2VfY29udHJvbHMikwIKDlNldENsaW1hdGVNb2RlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI1CgRraW5kGAIgASgOMicua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlTW9kZUtpbmQSIQoUc2V0YmFja19jZW50aWRlZ3JlZXMYAyABKBFIAIgBARItCglzdGFydHNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB2VuZHNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhcKFV9zZXRiYWNrX2NlbnRpZGVncmVlcyJLChBMaXN0Um9vbUNsaW1hdGVzEjcKDXJvb3Rfc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIp8BCg5HZXRSb29tSGlzdG9yeRIxCgdyb29tX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBItCglmcm9tX3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIt8BChFQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoPc2VydmljZV9wYXJ0aWVzGAUgAygLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VQYXJ0eRJMChZjbGltYXRlX3N1bW1hcnlfcGVyaW9kGAQgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZEoECAIQA0oECAMQBCJwCgxTZXJ2aWNlUGFydHkSKQoEcm9sZRgBIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjUKB3NpZ25hbHMYAiADKA4yJC5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuU2VydmljZVNpZ25hbCJKChRHZXRQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi7gEKGkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5EjYKDGFwYXJ0bWVudF9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoGcGVyaW9kGAIgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBItCglmcm9tX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIqQMChFNYW5hZ2VtZW50UmVxdWVzdBI6CgxjcmVhdGVfc3BhY2UYASABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ3JlYXRlU3BhY2VIABI6Cgx1cGRhdGVfc3BhY2UYAiABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuVXBkYXRlU3BhY2VIABI6CgxkZWxldGVfc3BhY2UYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGVsZXRlU3BhY2VIABJIChRhc3NpZ25fdXNlcl90b19zcGFjZRgEIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Bc3NpZ25Vc2VyVG9TcGFjZUgAEkwKFnJlbW92ZV91c2VyX2Zyb21fc3BhY2UYBSABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlVXNlckZyb21TcGFjZUgAEkoKFXBsYWNlX2RldmljZV9pbl9zcGFjZRgGIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QbGFjZURldmljZUluU3BhY2VIABJQChhyZW1vdmVfZGV2aWNlX2Zyb21fc3BhY2UYByABKAsyLC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlRGV2aWNlRnJvbVNwYWNlSAASOgoMY2xhaW1fZGV2aWNlGAggASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkNsYWltRGV2aWNlSAASPgoOcmVsZWFzZV9kZXZpY2UYCSABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVsZWFzZURldmljZUgAEjgKC2xpc3Rfc3BhY2VzGAogASgLMiEua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RTcGFjZXNIABJFChJjcmVhdGVfZGV2aWNlX2xpbmsYCyABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ3JlYXRlRGV2aWNlTGlua0gAEkUKEnJlbW92ZV9kZXZpY2VfbGluaxgMIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVEZXZpY2VMaW5rSAASQwoRbGlzdF9kZXZpY2VfbGlua3MYDSABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdERldmljZUxpbmtzSAASRQoSdXBkYXRlX2RldmljZV9saW5rGA4gASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLlVwZGF0ZURldmljZUxpbmtIABJCChBwcm92aXNpb25fZGV2aWNlGA8gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLlByb3Zpc2lvbkRldmljZUgAEj8KD3NldF9yb29tX3RhcmdldBgQIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRSb29tVGFyZ2V0SAASTQoWY29uZmlndXJlX3Jvb21fY2xpbWF0ZRgRIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25maWd1cmVSb29tQ2xpbWF0ZUgAEkEKEHNldF9jbGltYXRlX21vZGUYEiABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0Q2xpbWF0ZU1vZGVIABJFChJsaXN0X3Jvb21fY2xpbWF0ZXMYEyABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdFJvb21DbGltYXRlc0gAEkEKEGdldF9yb29tX2hpc3RvcnkYFCABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2V0Um9vbUhpc3RvcnlIABJNChZnZXRfcHJpdmFjeV9kaXNjbG9zdXJlGBUgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLkdldFByaXZhY3lEaXNjbG9zdXJlSAASWgodZ2V0X2FwYXJ0bWVudF9jbGltYXRlX3N1bW1hcnkYFiABKAsyMS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2V0QXBhcnRtZW50Q2xpbWF0ZVN1bW1hcnlIAEIJCgdyZXF1ZXN0QgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_access_v1_roles, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_vendor_lorawan_v1_lorawan]);
19
21
 
20
22
  /**
21
23
  * Describes the message kusinta.iot.webrtc.v1.CreateSpace.
@@ -185,10 +187,38 @@ export const ListRoomClimatesSchema = /*@__PURE__*/
185
187
  export const GetRoomHistorySchema = /*@__PURE__*/
186
188
  messageDesc(file_kusinta_iot_webrtc_v1_management, 23);
187
189
 
190
+ /**
191
+ * Describes the message kusinta.iot.webrtc.v1.PrivacyDisclosure.
192
+ * Use `create(PrivacyDisclosureSchema)` to create a new message.
193
+ */
194
+ export const PrivacyDisclosureSchema = /*@__PURE__*/
195
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 24);
196
+
197
+ /**
198
+ * Describes the message kusinta.iot.webrtc.v1.ServiceParty.
199
+ * Use `create(ServicePartySchema)` to create a new message.
200
+ */
201
+ export const ServicePartySchema = /*@__PURE__*/
202
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 25);
203
+
204
+ /**
205
+ * Describes the message kusinta.iot.webrtc.v1.GetPrivacyDisclosure.
206
+ * Use `create(GetPrivacyDisclosureSchema)` to create a new message.
207
+ */
208
+ export const GetPrivacyDisclosureSchema = /*@__PURE__*/
209
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 26);
210
+
211
+ /**
212
+ * Describes the message kusinta.iot.webrtc.v1.GetApartmentClimateSummary.
213
+ * Use `create(GetApartmentClimateSummarySchema)` to create a new message.
214
+ */
215
+ export const GetApartmentClimateSummarySchema = /*@__PURE__*/
216
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 27);
217
+
188
218
  /**
189
219
  * Describes the message kusinta.iot.webrtc.v1.ManagementRequest.
190
220
  * Use `create(ManagementRequestSchema)` to create a new message.
191
221
  */
192
222
  export const ManagementRequestSchema = /*@__PURE__*/
193
- messageDesc(file_kusinta_iot_webrtc_v1_management, 24);
223
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 28);
194
224
 
@@ -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 { EffectivePermissions } from "../../access/v1/acl_pb.js";
8
- import type { DeviceId } from "../../identity/v1/identity_pb.js";
8
+ import type { DeviceId, SpaceId } from "../../identity/v1/identity_pb.js";
9
9
 
10
10
  /**
11
11
  * Describes the file kusinta/iot/webrtc/v1/permission_push.proto.
@@ -13,8 +13,24 @@ import type { DeviceId } from "../../identity/v1/identity_pb.js";
13
13
  export declare const file_kusinta_iot_webrtc_v1_permission_push: GenFile;
14
14
 
15
15
  /**
16
- * Pushed to the app whenever the user's effective permissions change.
17
- * change_reason values: "DEVICE_ASSIGNED", "DEVICE_UNASSIGNED", "RESIDENT_CHANGED", "CONSTRAINT_UPDATED"
16
+ * Pushed to the app whenever the user's effective permissions change. A change that takes
17
+ * away what the user may see or do takes effect and is sent at once. What a user newly sees
18
+ * of a home as service — a device filed into it, a home newly reached — is judged at
19
+ * quarter hours instead: here and in a snapshot it is as it stood at the last one, even
20
+ * when the push is for another change, and it is sent at the next quarter hour with
21
+ * change_reason empty and new_permissions.valid_at that quarter hour, so that no push
22
+ * tells when, or why, a home changed. A resident who becomes service loses the resident
23
+ * view at once — the home's devices are listed in removed_devices, so the app drops what it
24
+ * holds of them — and gains the service view at the next quarter hour, when they come back
25
+ * in added_devices as service and their stretch of seeing the home as service begins. A
26
+ * member who becomes a resident gains the resident view at once: the home's devices come
27
+ * again in added_devices, each with a DeviceAdded carrying its full Device, and the app
28
+ * drops the ServiceStatus it held of them until their next one. A quarter-hour
29
+ * push that brings a home newly seen as service lists it in reset_spaces, so the app reads
30
+ * its rooms and links then.
31
+ * change_reason values: "DEVICE_ASSIGNED", "DEVICE_UNASSIGNED", "RESIDENT_CHANGED",
32
+ * "CONSTRAINT_UPDATED"; empty whenever the change concerns a home the user sees, or saw, as
33
+ * service — held or not — so that no push says why a home changed.
18
34
  *
19
35
  * @generated from message kusinta.iot.webrtc.v1.LivePermissionUpdate
20
36
  */
@@ -34,7 +50,8 @@ export declare type LivePermissionUpdate = Message<"kusinta.iot.webrtc.v1.LivePe
34
50
 
35
51
  /**
36
52
  * Devices the user may no longer see. The gateway has already dropped these from
37
- * the app's interest set — no property events follow, and no unsubscribe is needed.
53
+ * the app's interest set — no property events follow, and no unsubscribe is needed. The
54
+ * app drops what it holds of them, their ServiceStatus included.
38
55
  *
39
56
  * @generated from field: repeated kusinta.iot.identity.v1.DeviceId removed_devices = 3;
40
57
  */
@@ -44,6 +61,19 @@ export declare type LivePermissionUpdate = Message<"kusinta.iot.webrtc.v1.LivePe
44
61
  * @generated from field: string change_reason = 4;
45
62
  */
46
63
  changeReason: string;
64
+
65
+ /**
66
+ * Spaces whose climate, modes and links the user sees differently from now — whenever how
67
+ * they see a home changes: they moved in or out, became service or resident, lost the
68
+ * space, or newly see it as service. The app drops everything it holds of each and of the
69
+ * spaces beneath it, and reads them again (ListSpaces, ListRoomClimates, ListDeviceLinks)
70
+ * if it may.
71
+ * A loss, or a wider view as a resident, is sent at once; a home newly seen as service, at
72
+ * the quarter hour it is seen from.
73
+ *
74
+ * @generated from field: repeated kusinta.iot.identity.v1.SpaceId reset_spaces = 5;
75
+ */
76
+ resetSpaces: SpaceId[];
47
77
  };
48
78
 
49
79
  /**
@@ -10,7 +10,7 @@ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identit
10
10
  * Describes the file kusinta/iot/webrtc/v1/permission_push.proto.
11
11
  */
12
12
  export const file_kusinta_iot_webrtc_v1_permission_push = /*@__PURE__*/
13
- fileDesc("CitrdXNpbnRhL2lvdC93ZWJydGMvdjEvcGVybWlzc2lvbl9wdXNoLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEi6QEKFExpdmVQZXJtaXNzaW9uVXBkYXRlEkQKD25ld19wZXJtaXNzaW9ucxgBIAEoCzIrLmt1c2ludGEuaW90LmFjY2Vzcy52MS5FZmZlY3RpdmVQZXJtaXNzaW9ucxI4Cg1hZGRlZF9kZXZpY2VzGAIgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSOgoPcmVtb3ZlZF9kZXZpY2VzGAMgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSFQoNY2hhbmdlX3JlYXNvbhgEIAEoCUICSAFiBnByb3RvMw", [file_kusinta_iot_access_v1_acl, file_kusinta_iot_identity_v1_identity]);
13
+ fileDesc("CitrdXNpbnRhL2lvdC93ZWJydGMvdjEvcGVybWlzc2lvbl9wdXNoLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEioQIKFExpdmVQZXJtaXNzaW9uVXBkYXRlEkQKD25ld19wZXJtaXNzaW9ucxgBIAEoCzIrLmt1c2ludGEuaW90LmFjY2Vzcy52MS5FZmZlY3RpdmVQZXJtaXNzaW9ucxI4Cg1hZGRlZF9kZXZpY2VzGAIgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSOgoPcmVtb3ZlZF9kZXZpY2VzGAMgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSFQoNY2hhbmdlX3JlYXNvbhgEIAEoCRI2CgxyZXNldF9zcGFjZXMYBSADKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkQgJIAWIGcHJvdG8z", [file_kusinta_iot_access_v1_acl, file_kusinta_iot_identity_v1_identity]);
14
14
 
15
15
  /**
16
16
  * Describes the message kusinta.iot.webrtc.v1.LivePermissionUpdate.