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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/package.json +12 -1
  2. package/src/kusinta/iot/access/v1/acl_pb.d.ts +119 -2
  3. package/src/kusinta/iot/access/v1/acl_pb.js +20 -3
  4. package/src/kusinta/iot/access/v1/roles_pb.d.ts +131 -4
  5. package/src/kusinta/iot/access/v1/roles_pb.js +110 -5
  6. package/src/kusinta/iot/accountlink/v1/account_link_pb.d.ts +583 -0
  7. package/src/kusinta/iot/accountlink/v1/account_link_pb.js +160 -0
  8. package/src/kusinta/iot/climate/v1/climate_pb.d.ts +1041 -0
  9. package/src/kusinta/iot/climate/v1/climate_pb.js +206 -0
  10. package/src/kusinta/iot/commissioning/v1/commissioning_pb.d.ts +1128 -0
  11. package/src/kusinta/iot/commissioning/v1/commissioning_pb.js +246 -0
  12. package/src/kusinta/iot/common/v1/pairing_pb.d.ts +217 -0
  13. package/src/kusinta/iot/common/v1/pairing_pb.js +50 -0
  14. package/src/kusinta/iot/common/v1/types_pb.d.ts +175 -0
  15. package/src/kusinta/iot/common/v1/types_pb.js +70 -1
  16. package/src/kusinta/iot/connector/v1/connector_pb.d.ts +691 -2
  17. package/src/kusinta/iot/connector/v1/connector_pb.js +104 -13
  18. package/src/kusinta/iot/device/v1/cluster_state_pb.d.ts +213 -1
  19. package/src/kusinta/iot/device/v1/cluster_state_pb.js +37 -2
  20. package/src/kusinta/iot/device/v1/descriptor_pb.d.ts +22 -2
  21. package/src/kusinta/iot/device/v1/descriptor_pb.js +2 -1
  22. package/src/kusinta/iot/device/v1/device_event_pb.d.ts +87 -5
  23. package/src/kusinta/iot/device/v1/device_event_pb.js +1 -1
  24. package/src/kusinta/iot/device/v1/device_pb.d.ts +164 -11
  25. package/src/kusinta/iot/device/v1/device_pb.js +33 -2
  26. package/src/kusinta/iot/device/v1/properties_pb.d.ts +26 -5
  27. package/src/kusinta/iot/device/v1/properties_pb.js +1 -1
  28. package/src/kusinta/iot/device/v1/property_update_pb.d.ts +28 -2
  29. package/src/kusinta/iot/device/v1/property_update_pb.js +2 -1
  30. package/src/kusinta/iot/heating/v1/heating_pb.d.ts +619 -0
  31. package/src/kusinta/iot/heating/v1/heating_pb.js +118 -0
  32. package/src/kusinta/iot/link/v1/link_pb.d.ts +438 -0
  33. package/src/kusinta/iot/link/v1/link_pb.js +121 -0
  34. package/src/kusinta/iot/registration/v1/registration_pb.d.ts +18 -0
  35. package/src/kusinta/iot/registration/v1/registration_pb.js +1 -1
  36. package/src/kusinta/iot/reporting/v1/reporting_pb.d.ts +1225 -0
  37. package/src/kusinta/iot/reporting/v1/reporting_pb.js +238 -0
  38. package/src/kusinta/iot/reporting/v1/reporting_service_pb.d.ts +63 -0
  39. package/src/kusinta/iot/reporting/v1/reporting_service_pb.js +24 -0
  40. package/src/kusinta/iot/signaling/v1/signaling_pb.d.ts +920 -7
  41. package/src/kusinta/iot/signaling/v1/signaling_pb.js +163 -4
  42. package/src/kusinta/iot/signaling/v1/signaling_service_pb.d.ts +24 -1
  43. package/src/kusinta/iot/signaling/v1/signaling_service_pb.js +1 -1
  44. package/src/kusinta/iot/space/v1/space_pb.d.ts +107 -2
  45. package/src/kusinta/iot/space/v1/space_pb.js +10 -1
  46. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.d.ts +19 -3
  47. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.js +1 -1
  48. package/src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.d.ts +69 -0
  49. package/src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.js +19 -0
  50. package/src/kusinta/iot/vendor/v1/vendor_options_pb.d.ts +4 -4
  51. package/src/kusinta/iot/vendor/v1/vendor_options_pb.js +4 -4
  52. package/src/kusinta/iot/webrtc/v1/app_token_pb.d.ts +48 -5
  53. package/src/kusinta/iot/webrtc/v1/app_token_pb.js +1 -1
  54. package/src/kusinta/iot/webrtc/v1/command_pb.d.ts +56 -0
  55. package/src/kusinta/iot/webrtc/v1/command_pb.js +1 -1
  56. package/src/kusinta/iot/webrtc/v1/device_state_pb.d.ts +179 -5
  57. package/src/kusinta/iot/webrtc/v1/device_state_pb.js +35 -6
  58. package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +607 -3
  59. package/src/kusinta/iot/webrtc/v1/envelope_pb.js +68 -3
  60. package/src/kusinta/iot/webrtc/v1/invite_pb.d.ts +498 -0
  61. package/src/kusinta/iot/webrtc/v1/invite_pb.js +108 -0
  62. package/src/kusinta/iot/webrtc/v1/management_pb.d.ts +1687 -75
  63. package/src/kusinta/iot/webrtc/v1/management_pb.js +261 -5
  64. package/src/kusinta/iot/webrtc/v1/members_pb.d.ts +536 -0
  65. package/src/kusinta/iot/webrtc/v1/members_pb.js +113 -0
  66. package/src/kusinta/iot/webrtc/v1/permission_push_pb.d.ts +66 -4
  67. package/src/kusinta/iot/webrtc/v1/permission_push_pb.js +10 -2
@@ -5,8 +5,19 @@
5
5
  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
- import type { DeviceId, SpaceId, UserId } from "../../identity/v1/identity_pb.js";
8
+ import type { ConnectorId, DeviceId, SpaceId, UserId } from "../../identity/v1/identity_pb.js";
9
+ import type { MembershipRelation, Role } from "../../access/v1/roles_pb.js";
10
+ import type { LorawanProvisioning } from "../../vendor/lorawan/v1/lorawan_pb.js";
9
11
  import type { Space } from "../../space/v1/space_pb.js";
12
+ import type { LinkFunction, LinkMode, LinkSettings } from "../../link/v1/link_pb.js";
13
+ import type { ClimateModeKind, ClimateSummaryPeriod } from "../../climate/v1/climate_pb.js";
14
+ import type { Timestamp } from "@bufbuild/protobuf/wkt";
15
+ import type { ServiceSignal } from "../../access/v1/acl_pb.js";
16
+ import type { ComfortLoad, ComfortWindow, FloorZone, HeatingCircuit, HeatingPlant } from "../../heating/v1/heating_pb.js";
17
+ import type { LinkedService } from "../../accountlink/v1/account_link_pb.js";
18
+ import type { BindingRef, CommissioningFact, HouseTemplate, TestKind, TestState } from "../../commissioning/v1/commissioning_pb.js";
19
+ import type { ApproveJoinRequest, CreateInvite, DenyJoinRequest, ListSpaceInvites, MarkInviteEmailSent, ResendInvite, RevokeInvite } from "./invite_pb.js";
20
+ import type { AnswerPromotion, ListGatewayMembers, ListPromotionRequests, RemoveFromGateway, RequestPromotion, SetAccessUntil, SetMemberRole, SetOwnerOrganisation } from "./members_pb.js";
10
21
 
11
22
  /**
12
23
  * Describes the file kusinta/iot/webrtc/v1/management.proto.
@@ -18,6 +29,10 @@ export declare const file_kusinta_iot_webrtc_v1_management: GenFile;
18
29
  * stronger request than it looks: there is no parent whose reach could authorize
19
30
  * it, so it is reserved to the gateway's administrator.
20
31
  *
32
+ * Under an apartment only a room may be created. Creating in a home is guarded as
33
+ * UpdateSpace is, and refused whatever the caller where UpdateSpace's structure rules would
34
+ * refuse it.
35
+ *
21
36
  * @generated from message kusinta.iot.webrtc.v1.CreateSpace
22
37
  */
23
38
  export declare type CreateSpace = Message<"kusinta.iot.webrtc.v1.CreateSpace"> & {
@@ -49,6 +64,14 @@ export declare type CreateSpace = Message<"kusinta.iot.webrtc.v1.CreateSpace"> &
49
64
  * @generated from field: kusinta.iot.identity.v1.SpaceId parent_space_id = 5;
50
65
  */
51
66
  parentSpaceId?: SpaceId | undefined;
67
+
68
+ /**
69
+ * An IANA time zone name, e.g. "Europe/Stockholm". Accepted only on a building — a
70
+ * top-level space — and refused on any other. Unset leaves it unknown.
71
+ *
72
+ * @generated from field: optional string time_zone = 6;
73
+ */
74
+ timeZone?: string | undefined;
52
75
  };
53
76
 
54
77
  /**
@@ -58,9 +81,21 @@ export declare type CreateSpace = Message<"kusinta.iot.webrtc.v1.CreateSpace"> &
58
81
  export declare const CreateSpaceSchema: GenMessage<CreateSpace>;
59
82
 
60
83
  /**
61
- * Changes a space in place. Every descriptive field carries explicit presence:
62
- * absent means leave it alone, present means set it to this — including to the
63
- * empty string, which is how a description is cleared.
84
+ * Changes a space in place. Changes that would take a space into or out of a home, or move
85
+ * a home, are guarded by the gateway; a caller not allowed is refused as NOT_ENTITLED. A
86
+ * change is refused whatever the caller if it would leave anything but a room under an
87
+ * apartment, an apartment in a home, or — among what the caller can see — a device in two
88
+ * homes or a link across a home's boundary. What the caller cannot see never refuses it: a
89
+ * device a resident owns that would leave its owner's home, enter a home not theirs or sit
90
+ * in two homes is taken out of the moving space instead — staying in its owner's home,
91
+ * filed on the apartment, where it was in it — and any link it would carry across a
92
+ * boundary is removed. Changing the type of a space that has members needs
93
+ * ROLE_PROPERTY_OWNER or ROLE_GATEWAY_ADMIN, who see them, and is refused if it would
94
+ * leave a RESIDENT membership on a room.
95
+ *
96
+ * Every descriptive field carries explicit presence: absent means leave it alone, present
97
+ * means set it to this — including to the empty string, which is how a description is
98
+ * cleared.
64
99
  *
65
100
  * @generated from message kusinta.iot.webrtc.v1.UpdateSpace
66
101
  */
@@ -111,6 +146,15 @@ export declare type UpdateSpace = Message<"kusinta.iot.webrtc.v1.UpdateSpace"> &
111
146
  value: boolean;
112
147
  case: "detach";
113
148
  } | { case: undefined; value?: undefined };
149
+
150
+ /**
151
+ * An IANA time zone name, e.g. "Europe/Stockholm". Accepted only on a building — a
152
+ * top-level space — and refused on any other. Unset leaves it unchanged; the empty
153
+ * string clears it.
154
+ *
155
+ * @generated from field: optional string time_zone = 8;
156
+ */
157
+ timeZone?: string | undefined;
114
158
  };
115
159
 
116
160
  /**
@@ -122,7 +166,8 @@ export declare const UpdateSpaceSchema: GenMessage<UpdateSpace>;
122
166
  /**
123
167
  * Deletes a space. Refused if the space still holds devices or sub-spaces unless
124
168
  * cascade is set, so that emptying a building is always something the caller
125
- * asked for rather than something a stale client did by accident.
169
+ * asked for rather than something a stale client did by accident. Deleting a home, or
170
+ * anything in one, is guarded as UpdateSpace is.
126
171
  *
127
172
  * @generated from message kusinta.iot.webrtc.v1.DeleteSpace
128
173
  */
@@ -145,10 +190,22 @@ export declare type DeleteSpace = Message<"kusinta.iot.webrtc.v1.DeleteSpace"> &
145
190
  export declare const DeleteSpaceSchema: GenMessage<DeleteSpace>;
146
191
 
147
192
  /**
148
- * Adds a user to a space, granting them reach of it and everything beneath it.
193
+ * Adds a user to a space, granting them reach of it and everything beneath it — except
194
+ * that a RESIDENT membership reaches no home beneath it (see access.v1.MembershipRelation).
149
195
  * The user need not be known to the gateway beforehand — identities are minted by
150
196
  * the token issuer, and this records that one of them belongs here.
151
197
  *
198
+ * Assigning a user who is already a member changes their relation to the space.
199
+ * RESIDENT is refused on a room; see access.v1.MembershipRelation.
200
+ *
201
+ * Who may change who belongs to a home is restricted by the gateway; a caller not allowed is
202
+ * refused as NOT_ENTITLED. Residents see who is filed on their home in Space.members.
203
+ *
204
+ * A membership the caller is not told of under this user id (a residency, to anyone outside
205
+ * its household: access.v1.MembershipRelation, RESIDENCY IDS) is never changed through it:
206
+ * assigning onto it is refused as NOT_ENTITLED, and RemoveUserFromSpace answers as for one
207
+ * that does not exist. user_id is never a residency id.
208
+ *
152
209
  * @generated from message kusinta.iot.webrtc.v1.AssignUserToSpace
153
210
  */
154
211
  export declare type AssignUserToSpace = Message<"kusinta.iot.webrtc.v1.AssignUserToSpace"> & {
@@ -161,6 +218,15 @@ export declare type AssignUserToSpace = Message<"kusinta.iot.webrtc.v1.AssignUse
161
218
  * @generated from field: kusinta.iot.identity.v1.UserId user_id = 2;
162
219
  */
163
220
  userId?: UserId | undefined;
221
+
222
+ /**
223
+ * How the user stands to the space — whether they live there or are there for the
224
+ * building. Required: UNSPECIFIED is refused, never defaulted. See
225
+ * access.v1.MembershipRelation for what each lets a member see of a home.
226
+ *
227
+ * @generated from field: kusinta.iot.access.v1.MembershipRelation relation = 4;
228
+ */
229
+ relation: MembershipRelation;
164
230
  };
165
231
 
166
232
  /**
@@ -173,6 +239,15 @@ export declare const AssignUserToSpaceSchema: GenMessage<AssignUserToSpace>;
173
239
  * Removes a user's membership of a space. Losing reach also drops whatever the
174
240
  * user was streaming from it, announced by LivePermissionUpdate.
175
241
  *
242
+ * Removing someone else from a home is guarded as assigning is. A membership the caller is
243
+ * not told of under the user id given (see AssignUserToSpace) is answered as one that does
244
+ * not exist, and stays.
245
+ *
246
+ * user_id may be a residency id (access.v1.MembershipRelation, RESIDENCY IDS): it then ends
247
+ * that residency, if space_id is its home, and answers as for one that does not exist
248
+ * otherwise. This is how a property owner or an administrator ends the residency of
249
+ * someone who moved out.
250
+ *
176
251
  * @generated from message kusinta.iot.webrtc.v1.RemoveUserFromSpace
177
252
  */
178
253
  export declare type RemoveUserFromSpace = Message<"kusinta.iot.webrtc.v1.RemoveUserFromSpace"> & {
@@ -197,6 +272,12 @@ export declare const RemoveUserFromSpaceSchema: GenMessage<RemoveUserFromSpace>;
197
272
  * Files a device into a space. A device may sit in several spaces at once; this
198
273
  * is additive, and filing a device where it already sits is a no-op.
199
274
  *
275
+ * Into a home go only the building's own devices and devices its residents own, and a
276
+ * device belongs to one home at most; filing into, out of or beside a home is guarded by
277
+ * the gateway. A caller not allowed is refused as NOT_ENTITLED, and filing that would leave
278
+ * a link the caller can see across a home's boundary is refused whatever the caller; one
279
+ * they cannot see is removed instead.
280
+ *
200
281
  * @generated from message kusinta.iot.webrtc.v1.PlaceDeviceInSpace
201
282
  */
202
283
  export declare type PlaceDeviceInSpace = Message<"kusinta.iot.webrtc.v1.PlaceDeviceInSpace"> & {
@@ -221,6 +302,9 @@ export declare const PlaceDeviceInSpaceSchema: GenMessage<PlaceDeviceInSpace>;
221
302
  * Takes a device out of one space, leaving any others intact. A device in no
222
303
  * space and with no owner is unfiled, and visible only to the administrator.
223
304
  *
305
+ * Taking a device out of a home is guarded as PlaceDeviceInSpace is, and removes its links
306
+ * to devices still in the home.
307
+ *
224
308
  * @generated from message kusinta.iot.webrtc.v1.RemoveDeviceFromSpace
225
309
  */
226
310
  export declare type RemoveDeviceFromSpace = Message<"kusinta.iot.webrtc.v1.RemoveDeviceFromSpace"> & {
@@ -244,7 +328,12 @@ export declare const RemoveDeviceFromSpaceSchema: GenMessage<RemoveDeviceFromSpa
244
328
  /**
245
329
  * Takes ownership of a device. Ownership is reach in its own right: an owner may
246
330
  * see and control their device whatever their gateway-wide role permits, and may
247
- * file it into spaces they belong to.
331
+ * file it into spaces they belong to, and the rooms of a home they live in — though into a
332
+ * home only if they live there (see PlaceDeviceInSpace).
333
+ *
334
+ * Only a RESIDENT claim makes the caller the owner. A COMPANY claim records that the
335
+ * building owns the device, names no person, and grants the caller no reach. Claims of a
336
+ * device in a home, or of one already claimed, are restricted by the gateway.
248
337
  *
249
338
  * @generated from message kusinta.iot.webrtc.v1.ClaimDevice
250
339
  */
@@ -265,8 +354,18 @@ export declare type ClaimDevice = Message<"kusinta.iot.webrtc.v1.ClaimDevice"> &
265
354
  initialSpaceId?: SpaceId | undefined;
266
355
 
267
356
  /**
268
- * Evidence the claimant is standing at the device: the serial printed on it,
269
- * matched against DeviceDescriptor.serial_number. Required precisely when the
357
+ * Evidence the claimant is standing at the device: the identifier printed on it,
358
+ * matched against DeviceDescriptor.serial_number.
359
+ *
360
+ * The match is by SUFFIX, because what a connector announces is not always the whole
361
+ * of what is printed and the announced value is commonly the tail of the printed one.
362
+ * Both sides are normalised first — lowercased, with whitespace and ASCII hyphens
363
+ * removed, since a label prints the value in groups and a scan does not — and the proof
364
+ * is accepted when what remains ends with the announced serial. Spelled out because two
365
+ * gateways normalising differently would accept different proofs for the same device.
366
+ *
367
+ * A serial shorter than eight characters cannot be proved at all: under a suffix rule a
368
+ * short one is proved by almost anything ending with it. Required precisely when the
270
369
  * caller cannot already reach the device, which is the ordinary case for a
271
370
  * resident claiming something they just bought — an unfiled device is invisible
272
371
  * to them, so possession is the only thing left that can distinguish them from
@@ -286,8 +385,9 @@ export declare type ClaimDevice = Message<"kusinta.iot.webrtc.v1.ClaimDevice"> &
286
385
  export declare const ClaimDeviceSchema: GenMessage<ClaimDevice>;
287
386
 
288
387
  /**
289
- * Gives up ownership. The device keeps whatever space filing it has; if it has
290
- * none it becomes unfiled.
388
+ * Gives up ownership. The device keeps whatever space filing it has, except that a device in
389
+ * a home stays filed in the home alone, as one of the building's own devices there — as
390
+ * when its owner moves out; if it has none it becomes unfiled.
291
391
  *
292
392
  * @generated from message kusinta.iot.webrtc.v1.ReleaseDevice
293
393
  */
@@ -304,6 +404,66 @@ export declare type ReleaseDevice = Message<"kusinta.iot.webrtc.v1.ReleaseDevice
304
404
  */
305
405
  export declare const ReleaseDeviceSchema: GenMessage<ReleaseDevice>;
306
406
 
407
+ /**
408
+ * Registers a device with the system that will admit it, so that it can join
409
+ * later. For a technology where a device is enrolled as a record rather than
410
+ * adopted during a window — see common.v1.PairingWindow for the other case, where
411
+ * something joins a hub during a window and the arrival is attributed to the
412
+ * caller. A LoRaWAN device has no window: it is written into a network server and
413
+ * joins whenever it is next powered, which may be minutes, days, or never.
414
+ *
415
+ * Answered with the ordinary ManagementAck. A provision writes a record and returns
416
+ * nothing to show; the device itself is announced by device_added if and when it
417
+ * joins, the same path every other device takes — which is why this adds no
418
+ * ManagementResult arm. A new result arm is a compile error in a consumer that
419
+ * matches the result exhaustively; a new request arm is not.
420
+ *
421
+ * Registering and owning stay two operations. ClaimDevice records the caller and
422
+ * carries possession_proof, so a device that has not joined yet is still claimable
423
+ * by whoever holds it — and because the connector derives the device id and the
424
+ * serial from the identifier here, that claim can be made before the join.
425
+ *
426
+ * Provisioning the same identifier twice is an upsert: it replaces the credentials
427
+ * rather than being refused as a conflict, so correcting a mistyped key does not
428
+ * require removing the device first. Removing a record is a distinct act from
429
+ * giving up ownership (ReleaseDevice) and is left to a later operation.
430
+ *
431
+ * @generated from message kusinta.iot.webrtc.v1.ProvisionDevice
432
+ */
433
+ export declare type ProvisionDevice = Message<"kusinta.iot.webrtc.v1.ProvisionDevice"> & {
434
+ /**
435
+ * Required, unlike a pairing window's connector target. A registration is written
436
+ * to one specific registry; there is no sensible "open them all and see what
437
+ * joins". The app names it from the connector enumeration, targeting a connector
438
+ * that declares ConnectorInfo.supports_provisioning.
439
+ *
440
+ * @generated from field: kusinta.iot.identity.v1.ConnectorId connector_id = 1;
441
+ */
442
+ connectorId?: ConnectorId | undefined;
443
+
444
+ /**
445
+ * What the registry needs to admit the device, which differs entirely by
446
+ * technology — a oneof per technology rather than a flat set of fields, for the
447
+ * reason LinkSettings gives: the second technology to arrive must not turn this
448
+ * into a bag of unrelated optionals named after the first.
449
+ *
450
+ * @generated from oneof kusinta.iot.webrtc.v1.ProvisionDevice.credentials
451
+ */
452
+ credentials: {
453
+ /**
454
+ * @generated from field: kusinta.iot.vendor.lorawan.v1.LorawanProvisioning lorawan = 2;
455
+ */
456
+ value: LorawanProvisioning;
457
+ case: "lorawan";
458
+ } | { case: undefined; value?: undefined };
459
+ };
460
+
461
+ /**
462
+ * Describes the message kusinta.iot.webrtc.v1.ProvisionDevice.
463
+ * Use `create(ProvisionDeviceSchema)` to create a new message.
464
+ */
465
+ export declare const ProvisionDeviceSchema: GenMessage<ProvisionDevice>;
466
+
307
467
  /**
308
468
  * Asks for the spaces the caller can reach. Unset root_space_id means all of
309
469
  * them, which for most users is one apartment and for an administrator is the
@@ -333,7 +493,9 @@ export declare const ListSpacesSchema: GenMessage<ListSpaces>;
333
493
  *
334
494
  * device_ids on each Space are filtered to what the caller may see. An
335
495
  * unfiltered tree would list every device on the gateway by id, which is the
336
- * enumeration channel the snapshot filter exists to close.
496
+ * enumeration channel the snapshot filter exists to close. To a caller who sees a home as
497
+ * service, what is new in it is listed as it happens and what is gone at once, its members
498
+ * included where they are shown (see Space.members).
337
499
  *
338
500
  * @generated from message kusinta.iot.webrtc.v1.SpaceTree
339
501
  */
@@ -373,73 +535,1523 @@ export declare const ManagementAckSchema: GenMessage<ManagementAck>;
373
535
  * message kind, so these can never be gated by a table keyed on the envelope case
374
536
  * the way device messages are. Keeping them behind one case means one place that
375
537
  * must authorize, and one refusal path that must not leak whether a target exists.
538
+ * Links one device to another, so the sender leads the receiver. The gateway
539
+ * resolves which underlying connections that needs and asks the connector for
540
+ * them; a caller names two devices and what the link is for.
376
541
  *
377
- * @generated from message kusinta.iot.webrtc.v1.ManagementRequest
542
+ * Authorized against both ends, and not symmetrically. Leading a device is a
543
+ * standing grant of control over it, so the receiver requires ownership or a
544
+ * servicing role. The sender's requirement depends on the mode: a gateway-kept
545
+ * link only reads what the caller can already see, while a device-to-device one
546
+ * writes configuration to the sender and spends its battery, which is a change
547
+ * to someone else's hardware.
548
+ *
549
+ * In a home it is the other way round: links between its devices are its residents' to
550
+ * make, change and remove, and a caller who reaches it as service is refused as
551
+ * NOT_ENTITLED. A link between a device in a home and one outside it is refused to anyone.
552
+ * The same holds for UpdateDeviceLink and RemoveDeviceLink.
553
+ *
554
+ * @generated from message kusinta.iot.webrtc.v1.CreateDeviceLink
378
555
  */
379
- export declare type ManagementRequest = Message<"kusinta.iot.webrtc.v1.ManagementRequest"> & {
556
+ export declare type CreateDeviceLink = Message<"kusinta.iot.webrtc.v1.CreateDeviceLink"> & {
380
557
  /**
381
- * @generated from oneof kusinta.iot.webrtc.v1.ManagementRequest.request
558
+ * @generated from field: kusinta.iot.identity.v1.DeviceId sender = 1;
382
559
  */
383
- request: {
384
- /**
385
- * @generated from field: kusinta.iot.webrtc.v1.CreateSpace create_space = 1;
386
- */
387
- value: CreateSpace;
388
- case: "createSpace";
389
- } | {
390
- /**
391
- * @generated from field: kusinta.iot.webrtc.v1.UpdateSpace update_space = 2;
392
- */
393
- value: UpdateSpace;
394
- case: "updateSpace";
395
- } | {
396
- /**
397
- * @generated from field: kusinta.iot.webrtc.v1.DeleteSpace delete_space = 3;
398
- */
399
- value: DeleteSpace;
400
- case: "deleteSpace";
401
- } | {
402
- /**
403
- * @generated from field: kusinta.iot.webrtc.v1.AssignUserToSpace assign_user_to_space = 4;
404
- */
405
- value: AssignUserToSpace;
406
- case: "assignUserToSpace";
407
- } | {
408
- /**
409
- * @generated from field: kusinta.iot.webrtc.v1.RemoveUserFromSpace remove_user_from_space = 5;
410
- */
411
- value: RemoveUserFromSpace;
412
- case: "removeUserFromSpace";
413
- } | {
414
- /**
415
- * @generated from field: kusinta.iot.webrtc.v1.PlaceDeviceInSpace place_device_in_space = 6;
416
- */
417
- value: PlaceDeviceInSpace;
418
- case: "placeDeviceInSpace";
419
- } | {
420
- /**
421
- * @generated from field: kusinta.iot.webrtc.v1.RemoveDeviceFromSpace remove_device_from_space = 7;
422
- */
423
- value: RemoveDeviceFromSpace;
424
- case: "removeDeviceFromSpace";
425
- } | {
426
- /**
427
- * @generated from field: kusinta.iot.webrtc.v1.ClaimDevice claim_device = 8;
428
- */
429
- value: ClaimDevice;
430
- case: "claimDevice";
431
- } | {
432
- /**
433
- * @generated from field: kusinta.iot.webrtc.v1.ReleaseDevice release_device = 9;
434
- */
435
- value: ReleaseDevice;
436
- case: "releaseDevice";
437
- } | {
438
- /**
439
- * @generated from field: kusinta.iot.webrtc.v1.ListSpaces list_spaces = 10;
440
- */
441
- value: ListSpaces;
442
- case: "listSpaces";
560
+ sender?: DeviceId | undefined;
561
+
562
+ /**
563
+ * @generated from field: kusinta.iot.identity.v1.DeviceId receiver = 2;
564
+ */
565
+ receiver?: DeviceId | undefined;
566
+
567
+ /**
568
+ * @generated from field: kusinta.iot.link.v1.LinkFunction function = 3;
569
+ */
570
+ function: LinkFunction;
571
+
572
+ /**
573
+ * Unset lets the gateway choose, which prefers a device-to-device link where
574
+ * one can be brokered: it survives a gateway outage and runs at the devices'
575
+ * own rate. Name one to override that.
576
+ *
577
+ * @generated from field: kusinta.iot.link.v1.LinkMode mode = 4;
578
+ */
579
+ mode: LinkMode;
580
+
581
+ /**
582
+ * How a gateway-kept link is to behave, set as it is made. Carried here as
583
+ * well as on UpdateDeviceLink so that a link does not have to exist in a
584
+ * configured-by-nobody state first — a soft climate link created without a
585
+ * target is one that holds the room at nothing until a second request
586
+ * arrives, and every reader would have to handle that transient forever.
587
+ *
588
+ * Unset is still allowed and still means unconfigured, since a hard link has
589
+ * nothing to configure and a caller may genuinely not know the target yet.
590
+ *
591
+ * @generated from field: kusinta.iot.link.v1.LinkSettings settings = 5;
592
+ */
593
+ settings?: LinkSettings | undefined;
594
+ };
595
+
596
+ /**
597
+ * Describes the message kusinta.iot.webrtc.v1.CreateDeviceLink.
598
+ * Use `create(CreateDeviceLinkSchema)` to create a new message.
599
+ */
600
+ export declare const CreateDeviceLinkSchema: GenMessage<CreateDeviceLink>;
601
+
602
+ /**
603
+ * Removes a link. Note that on at least one vendor, removing a link disturbs the
604
+ * receiver's own settings and the connector must repair them, so this is not the
605
+ * no-op it appears to be.
606
+ *
607
+ * @generated from message kusinta.iot.webrtc.v1.RemoveDeviceLink
608
+ */
609
+ export declare type RemoveDeviceLink = Message<"kusinta.iot.webrtc.v1.RemoveDeviceLink"> & {
610
+ /**
611
+ * @generated from field: string link_id = 1;
612
+ */
613
+ linkId: string;
614
+ };
615
+
616
+ /**
617
+ * Describes the message kusinta.iot.webrtc.v1.RemoveDeviceLink.
618
+ * Use `create(RemoveDeviceLinkSchema)` to create a new message.
619
+ */
620
+ export declare const RemoveDeviceLinkSchema: GenMessage<RemoveDeviceLink>;
621
+
622
+ /**
623
+ * Changes how a gateway-kept link behaves — for a climate lead, the temperature
624
+ * it is to hold.
625
+ *
626
+ * Refused on a link that has nothing to configure — see LinkSettings — rather
627
+ * than accepted as a no-op, so that a caller who has mistaken which link they
628
+ * are holding is told.
629
+ *
630
+ * Authorized against both ends, as creating and removing the link are: deciding
631
+ * what temperature a room is held at is directing a device, not adjusting one,
632
+ * so it takes ownership of the ends or a servicing role, not the permission to
633
+ * turn a thermostat up. In a home it is its residents' instead (see CreateDeviceLink).
634
+ *
635
+ * @generated from message kusinta.iot.webrtc.v1.UpdateDeviceLink
636
+ */
637
+ export declare type UpdateDeviceLink = Message<"kusinta.iot.webrtc.v1.UpdateDeviceLink"> & {
638
+ /**
639
+ * @generated from field: string link_id = 1;
640
+ */
641
+ linkId: string;
642
+
643
+ /**
644
+ * Replaces the link's settings rather than patching them: the settings of one
645
+ * function are few and are set together, so there is no half-update worth
646
+ * expressing. This is why it does not follow UpdateSpace's per-field optional
647
+ * shape, which exists for a message whose fields genuinely move alone.
648
+ *
649
+ * Unset is refused rather than being given a meaning. It would have to mean
650
+ * either "leave everything alone", making the request a no-op, or "clear the
651
+ * settings", which is the one thing that reads like an accident — and the
652
+ * wire cannot tell those two callers apart.
653
+ *
654
+ * @generated from field: kusinta.iot.link.v1.LinkSettings settings = 2;
655
+ */
656
+ settings?: LinkSettings | undefined;
657
+ };
658
+
659
+ /**
660
+ * Describes the message kusinta.iot.webrtc.v1.UpdateDeviceLink.
661
+ * Use `create(UpdateDeviceLinkSchema)` to create a new message.
662
+ */
663
+ export declare const UpdateDeviceLinkSchema: GenMessage<UpdateDeviceLink>;
664
+
665
+ /**
666
+ * Lists links. Unset device_id lists every link among devices the caller can
667
+ * reach; naming one narrows it to that device's own, in either direction.
668
+ *
669
+ * A link with an end in a home reaches a caller who sees it as service with
670
+ * DeviceLink.details_withheld set, and what that withholds unset — a new link
671
+ * as it is made, a removed one at once — and not at all when either end is a
672
+ * device a resident owns.
673
+ *
674
+ * @generated from message kusinta.iot.webrtc.v1.ListDeviceLinks
675
+ */
676
+ export declare type ListDeviceLinks = Message<"kusinta.iot.webrtc.v1.ListDeviceLinks"> & {
677
+ /**
678
+ * @generated from field: kusinta.iot.identity.v1.DeviceId device_id = 1;
679
+ */
680
+ deviceId?: DeviceId | undefined;
681
+ };
682
+
683
+ /**
684
+ * Describes the message kusinta.iot.webrtc.v1.ListDeviceLinks.
685
+ * Use `create(ListDeviceLinksSchema)` to create a new message.
686
+ */
687
+ export declare const ListDeviceLinksSchema: GenMessage<ListDeviceLinks>;
688
+
689
+ /**
690
+ * Sets the temperature a room is to be held at.
691
+ *
692
+ * Authorized as adjusting, not directing: WRITE on the room is enough. It is the same act
693
+ * as turning a radiator's knob; setting up what the room obeys is ConfigureRoomClimate,
694
+ * and stays with owners, except the lock in a home.
695
+ *
696
+ * In a home, only its residents may set it; a caller who reaches the room as service is
697
+ * refused as NOT_ENTITLED.
698
+ *
699
+ * Clamped to the room's limits rather than refused outside them, and the clamped value is
700
+ * what the room's RoomClimate then reports.
701
+ *
702
+ * @generated from message kusinta.iot.webrtc.v1.SetRoomTarget
703
+ */
704
+ export declare type SetRoomTarget = Message<"kusinta.iot.webrtc.v1.SetRoomTarget"> & {
705
+ /**
706
+ * @generated from field: kusinta.iot.identity.v1.SpaceId room_id = 1;
707
+ */
708
+ roomId?: SpaceId | undefined;
709
+
710
+ /**
711
+ * Unset clears the target: the room goes back to having none (NO_TARGET) and its
712
+ * devices to their own behaviour. With presence, so that a request that forgot the
713
+ * field is not read as 0 °C and clamped to the room's minimum.
714
+ *
715
+ * @generated from field: optional sint32 target_centidegrees = 2;
716
+ */
717
+ targetCentidegrees?: number | undefined;
718
+ };
719
+
720
+ /**
721
+ * Describes the message kusinta.iot.webrtc.v1.SetRoomTarget.
722
+ * Use `create(SetRoomTargetSchema)` to create a new message.
723
+ */
724
+ export declare const SetRoomTargetSchema: GenMessage<SetRoomTarget>;
725
+
726
+ /**
727
+ * The sensors a room measures with, in order of preference. A message of its own so that
728
+ * "leave the sensors alone" (unset) differs from "set" on the wire. It orders the
729
+ * building's sensors only (see climate.v1.RoomClimate.sensor_ids); set but empty returns
730
+ * them to the default, every building temperature sensor filed in the room in filing
731
+ * order.
732
+ *
733
+ * @generated from message kusinta.iot.webrtc.v1.RoomSensors
734
+ */
735
+ export declare type RoomSensors = Message<"kusinta.iot.webrtc.v1.RoomSensors"> & {
736
+ /**
737
+ * @generated from field: repeated kusinta.iot.identity.v1.DeviceId sensor_ids = 1;
738
+ */
739
+ sensorIds: DeviceId[];
740
+ };
741
+
742
+ /**
743
+ * Describes the message kusinta.iot.webrtc.v1.RoomSensors.
744
+ * Use `create(RoomSensorsSchema)` to create a new message.
745
+ */
746
+ export declare const RoomSensorsSchema: GenMessage<RoomSensors>;
747
+
748
+ /**
749
+ * A room's limits. A message of its own so that "leave the limits alone" (unset) differs
750
+ * from "set" — and, set, an unset bound inside it removes that bound, which a bare
751
+ * optional on the request could not say.
752
+ *
753
+ * @generated from message kusinta.iot.webrtc.v1.RoomLimits
754
+ */
755
+ export declare type RoomLimits = Message<"kusinta.iot.webrtc.v1.RoomLimits"> & {
756
+ /**
757
+ * @generated from field: optional sint32 min_centidegrees = 1;
758
+ */
759
+ minCentidegrees?: number | undefined;
760
+
761
+ /**
762
+ * @generated from field: optional sint32 max_centidegrees = 2;
763
+ */
764
+ maxCentidegrees?: number | undefined;
765
+ };
766
+
767
+ /**
768
+ * Describes the message kusinta.iot.webrtc.v1.RoomLimits.
769
+ * Use `create(RoomLimitsSchema)` to create a new message.
770
+ */
771
+ export declare const RoomLimitsSchema: GenMessage<RoomLimits>;
772
+
773
+ /**
774
+ * Configures what a room obeys: its limits, its sensors, and whether a change made by
775
+ * hand at one of its devices counts. Authorized as directing — owners and filing roles —
776
+ * because this decides what everybody in the room can do.
777
+ *
778
+ * One exception: in a home, lock_device_controls is its residents' alone. They may send
779
+ * this request with nothing else set. Outside homes the lock is the owner's, as the rest
780
+ * is. A request that sets anything its caller may not — the lock in a home for service;
781
+ * anything but the lock in a home, or the lock outside one, for a caller with neither
782
+ * ROLE_PROPERTY_OWNER nor a filing role — is refused whole as NOT_ENTITLED, so nothing of
783
+ * it applies. sensors orders only the building's own
784
+ * sensors (see RoomClimate.sensor_ids).
785
+ *
786
+ * Each field moves alone, as on UpdateSpace: unset leaves it as it is.
787
+ *
788
+ * @generated from message kusinta.iot.webrtc.v1.ConfigureRoomClimate
789
+ */
790
+ export declare type ConfigureRoomClimate = Message<"kusinta.iot.webrtc.v1.ConfigureRoomClimate"> & {
791
+ /**
792
+ * @generated from field: kusinta.iot.identity.v1.SpaceId room_id = 1;
793
+ */
794
+ roomId?: SpaceId | undefined;
795
+
796
+ /**
797
+ * Replaces both bounds; see RoomLimits.
798
+ *
799
+ * @generated from field: kusinta.iot.webrtc.v1.RoomLimits limits = 2;
800
+ */
801
+ limits?: RoomLimits | undefined;
802
+
803
+ /**
804
+ * Only the building's sensors filed in this room; any other — including a sensor a
805
+ * resident owns — is refused, the same way whether or not it exists.
806
+ *
807
+ * @generated from field: kusinta.iot.webrtc.v1.RoomSensors sensors = 3;
808
+ */
809
+ sensors?: RoomSensors | undefined;
810
+
811
+ /**
812
+ * @generated from field: optional bool lock_device_controls = 4;
813
+ */
814
+ lockDeviceControls?: boolean | undefined;
815
+ };
816
+
817
+ /**
818
+ * Describes the message kusinta.iot.webrtc.v1.ConfigureRoomClimate.
819
+ * Use `create(ConfigureRoomClimateSchema)` to create a new message.
820
+ */
821
+ export declare const ConfigureRoomClimateSchema: GenMessage<ConfigureRoomClimate>;
822
+
823
+ /**
824
+ * Switches a mode on a space on, or off with kind UNSPECIFIED. WRITE on the space.
825
+ * Switching one on needs setback_centidegrees; a mode with nothing to set back to is
826
+ * refused. Switching one on is refused on a room inside an apartment, whose rooms follow
827
+ * the apartment's mode alone; such a room carries none (see climate.v1.ClimateMode), and
828
+ * switching one off there is accepted and does nothing — for those who may switch modes in
829
+ * that home at all, which is checked first: anyone else is refused as NOT_ENTITLED.
830
+ *
831
+ * In a home, only its residents may switch one on or off: whether a home stands empty is
832
+ * theirs to say. A caller who reaches it as service is refused as NOT_ENTITLED — except
833
+ * that, while the home has no resident, ROLE_PROPERTY_OWNER or ROLE_GATEWAY_ADMIN may
834
+ * switch off a mode that is on and whose setter is not a resident, so that no mode
835
+ * outlives everyone who could end it. Any other switch-off from them — no mode on, or one
836
+ * that is a resident's — is accepted and does nothing, so the answer tells them nothing of
837
+ * whether a mode was on or whether anyone has moved in.
838
+ *
839
+ * @generated from message kusinta.iot.webrtc.v1.SetClimateMode
840
+ */
841
+ export declare type SetClimateMode = Message<"kusinta.iot.webrtc.v1.SetClimateMode"> & {
842
+ /**
843
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
844
+ */
845
+ spaceId?: SpaceId | undefined;
846
+
847
+ /**
848
+ * @generated from field: kusinta.iot.climate.v1.ClimateModeKind kind = 2;
849
+ */
850
+ kind: ClimateModeKind;
851
+
852
+ /**
853
+ * @generated from field: optional sint32 setback_centidegrees = 3;
854
+ */
855
+ setbackCentidegrees?: number | undefined;
856
+
857
+ /**
858
+ * HOLIDAY only; both required there. Refused on AWAY.
859
+ *
860
+ * @generated from field: google.protobuf.Timestamp starts_at = 4;
861
+ */
862
+ startsAt?: Timestamp | undefined;
863
+
864
+ /**
865
+ * @generated from field: google.protobuf.Timestamp ends_at = 5;
866
+ */
867
+ endsAt?: Timestamp | undefined;
868
+ };
869
+
870
+ /**
871
+ * Describes the message kusinta.iot.webrtc.v1.SetClimateMode.
872
+ * Use `create(SetClimateModeSchema)` to create a new message.
873
+ */
874
+ export declare const SetClimateModeSchema: GenMessage<SetClimateMode>;
875
+
876
+ /**
877
+ * Lists the room climates and modes a caller may see. Unset root_space_id lists every
878
+ * one the caller can reach; naming a space narrows it to that space and those below.
879
+ *
880
+ * A caller who reaches a room inside an apartment as service gets it with
881
+ * RoomClimate.state_withheld set — what is new as it happens, what is gone at once — and
882
+ * gets no ClimateMode set on that apartment or its rooms.
883
+ *
884
+ * @generated from message kusinta.iot.webrtc.v1.ListRoomClimates
885
+ */
886
+ export declare type ListRoomClimates = Message<"kusinta.iot.webrtc.v1.ListRoomClimates"> & {
887
+ /**
888
+ * @generated from field: kusinta.iot.identity.v1.SpaceId root_space_id = 1;
889
+ */
890
+ rootSpaceId?: SpaceId | undefined;
891
+ };
892
+
893
+ /**
894
+ * Describes the message kusinta.iot.webrtc.v1.ListRoomClimates.
895
+ * Use `create(ListRoomClimatesSchema)` to create a new message.
896
+ */
897
+ export declare const ListRoomClimatesSchema: GenMessage<ListRoomClimates>;
898
+
899
+ /**
900
+ * Reads a room's history, answered with a climate.v1.RoomHistory of fixed 15-minute
901
+ * buckets aligned to UTC quarter hours (:00, :15, :30, :45). Needs READ on the room.
902
+ *
903
+ * The range is half-open: a bucket is returned when from_time <= at < to_time, so
904
+ * back-to-back windows neither repeat nor skip a bucket. Unset to_time means now;
905
+ * unset from_time means RoomHistory.kept_from. Both are clamped to [kept_from, now].
906
+ *
907
+ * A room in a home is readable by its residents only, and only from the start of their
908
+ * current residency (see access.v1.MembershipRelation). A caller who reaches it as service is
909
+ * refused as NOT_ENTITLED; one who reaches the apartment itself has
910
+ * GetApartmentClimateSummary instead.
911
+ *
912
+ * @generated from message kusinta.iot.webrtc.v1.GetRoomHistory
913
+ */
914
+ export declare type GetRoomHistory = Message<"kusinta.iot.webrtc.v1.GetRoomHistory"> & {
915
+ /**
916
+ * @generated from field: kusinta.iot.identity.v1.SpaceId room_id = 1;
917
+ */
918
+ roomId?: SpaceId | undefined;
919
+
920
+ /**
921
+ * @generated from field: google.protobuf.Timestamp from_time = 2;
922
+ */
923
+ fromTime?: Timestamp | undefined;
924
+
925
+ /**
926
+ * @generated from field: google.protobuf.Timestamp to_time = 3;
927
+ */
928
+ toTime?: Timestamp | undefined;
929
+ };
930
+
931
+ /**
932
+ * Describes the message kusinta.iot.webrtc.v1.GetRoomHistory.
933
+ * Use `create(GetRoomHistorySchema)` to create a new message.
934
+ */
935
+ export declare const GetRoomHistorySchema: GenMessage<GetRoomHistory>;
936
+
937
+ /**
938
+ * What the parties who do not live in a private space learn of it — the answer to a
939
+ * resident asking who can see what in their home, in reply to GetPrivacyDisclosure.
940
+ *
941
+ * It states the policy, the kinds of party it applies to now and the people counted under
942
+ * each (ServiceParty.names): a resident learns which technicians can see the battery of
943
+ * their radiator valve. The names say who has reach, never where anyone lives.
944
+ *
945
+ * @generated from message kusinta.iot.webrtc.v1.PrivacyDisclosure
946
+ */
947
+ export declare type PrivacyDisclosure = Message<"kusinta.iot.webrtc.v1.PrivacyDisclosure"> & {
948
+ /**
949
+ * An apartment, or a room in one.
950
+ *
951
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
952
+ */
953
+ spaceId?: SpaceId | undefined;
954
+
955
+ /**
956
+ * The kinds of party who see this space, or any part of it, as service now — or would
957
+ * through another membership, were they not its residents — each role once, with what
958
+ * that role brings here. Each party is listed under every role it holds other than
959
+ * ROLE_RESIDENT, and sees what its entries say together; one with no other role, or whose
960
+ * role the gateway has not yet learnt, counts as ROLE_UNSPECIFIED. ROLE_GATEWAY_ADMIN is
961
+ * always listed, and ROLE_PROPERTY_OWNER whenever anyone holds it, wherever they are
962
+ * filed: both may file themselves on the home. So the list reads the same whether or not
963
+ * anyone lives in the home, and never understates who has reach or what they see. Devices a resident
964
+ * owns are not shown to service at all.
965
+ *
966
+ * @generated from field: repeated kusinta.iot.webrtc.v1.ServiceParty service_parties = 5;
967
+ */
968
+ serviceParties: ServiceParty[];
969
+
970
+ /**
971
+ * How finely the space's climate is summarised for service, as means over periods of
972
+ * this length (climate.v1.ApartmentClimateSummary). UNSPECIFIED: no summary is given.
973
+ * The gateway's own setting, WEEK unless it is configured otherwise; no operation in this
974
+ * contract changes it. A change applies to periods that open after it: service is given
975
+ * no period that opened before the last change.
976
+ *
977
+ * @generated from field: kusinta.iot.climate.v1.ClimateSummaryPeriod climate_summary_period = 4;
978
+ */
979
+ climateSummaryPeriod: ClimateSummaryPeriod;
980
+
981
+ /**
982
+ * The name of the organisation that owns the gateway, and so the property, as the vouched
983
+ * set gives it (signaling.v1.VouchedAdministrators.organisation_name); empty while the
984
+ * gateway holds no vouched set. Never its organisation number. SetOwnerOrganisation, which
985
+ * once set it, is superseded.
986
+ *
987
+ * @generated from field: string owner_organisation_name = 6;
988
+ */
989
+ ownerOrganisationName: string;
990
+
991
+ /**
992
+ * Set when ServiceParty.names are not given to this caller, so that empty lists are not
993
+ * read as nobody being named. Names are given to the home's own residents and to a
994
+ * caller holding ROLE_GATEWAY_ADMIN or ROLE_PROPERTY_OWNER, and withheld from anyone
995
+ * else: a technician who reaches the home learns the kinds of party, not who they are.
996
+ *
997
+ * @generated from field: bool names_withheld = 7;
998
+ */
999
+ namesWithheld: boolean;
1000
+ };
1001
+
1002
+ /**
1003
+ * Describes the message kusinta.iot.webrtc.v1.PrivacyDisclosure.
1004
+ * Use `create(PrivacyDisclosureSchema)` to create a new message.
1005
+ */
1006
+ export declare const PrivacyDisclosureSchema: GenMessage<PrivacyDisclosure>;
1007
+
1008
+ /**
1009
+ * One kind of party with service reach of a home, and what it sees there. Every service
1010
+ * party sees the same kinds of thing of the part of the home it reaches — a whole
1011
+ * ServiceStatus, nothing withheld from it — so signals differ between parties only in
1012
+ * RESIDENTS. How much of the home that part is, a room or all of it, the disclosure does
1013
+ * not say.
1014
+ *
1015
+ * @generated from message kusinta.iot.webrtc.v1.ServiceParty
1016
+ */
1017
+ export declare type ServiceParty = Message<"kusinta.iot.webrtc.v1.ServiceParty"> & {
1018
+ /**
1019
+ * @generated from field: kusinta.iot.access.v1.Role role = 1;
1020
+ */
1021
+ role: Role;
1022
+
1023
+ /**
1024
+ * @generated from field: repeated kusinta.iot.access.v1.ServiceSignal signals = 2;
1025
+ */
1026
+ signals: ServiceSignal[];
1027
+
1028
+ /**
1029
+ * Each person counted under this role, by the name they gave their account
1030
+ * (AppTokenClaims.name), once each: everyone holding ROLE_GATEWAY_ADMIN or
1031
+ * ROLE_PROPERTY_OWNER, every vouched administrator included whether or not the gateway has
1032
+ * seen their token, and everyone else counted here by a SERVICE membership. A person counted
1033
+ * under several roles is named under each. An empty string stands for a person whose name
1034
+ * the gateway has not learnt, so the list is as long as the number of people. Self-chosen,
1035
+ * so the app shows it as the name they gave rather than as a verified identity. Empty for
1036
+ * every party when PrivacyDisclosure.names_withheld is set.
1037
+ *
1038
+ * @generated from field: repeated string names = 3;
1039
+ */
1040
+ names: string[];
1041
+ };
1042
+
1043
+ /**
1044
+ * Describes the message kusinta.iot.webrtc.v1.ServiceParty.
1045
+ * Use `create(ServicePartySchema)` to create a new message.
1046
+ */
1047
+ export declare const ServicePartySchema: GenMessage<ServiceParty>;
1048
+
1049
+ /**
1050
+ * Asks what the parties who do not live in a space learn of it, answered with a
1051
+ * PrivacyDisclosure. For an apartment or a room in one, and refused on any other
1052
+ * space. Needs READ on the space.
1053
+ *
1054
+ * @generated from message kusinta.iot.webrtc.v1.GetPrivacyDisclosure
1055
+ */
1056
+ export declare type GetPrivacyDisclosure = Message<"kusinta.iot.webrtc.v1.GetPrivacyDisclosure"> & {
1057
+ /**
1058
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1059
+ */
1060
+ spaceId?: SpaceId | undefined;
1061
+ };
1062
+
1063
+ /**
1064
+ * Describes the message kusinta.iot.webrtc.v1.GetPrivacyDisclosure.
1065
+ * Use `create(GetPrivacyDisclosureSchema)` to create a new message.
1066
+ */
1067
+ export declare const GetPrivacyDisclosureSchema: GenMessage<GetPrivacyDisclosure>;
1068
+
1069
+ /**
1070
+ * Reads an apartment's climate as means over whole periods, answered with a
1071
+ * climate.v1.ApartmentClimateSummary. Needs READ on the apartment itself. Refused on a
1072
+ * space that is not an apartment, and while the building's time zone (Space.time_zone) is
1073
+ * unknown, since periods are cut at its midnights.
1074
+ *
1075
+ * The range is half-open over the periods' starts: a period is returned when from_time <=
1076
+ * starts_at < to_time. Unset from_time means kept_from; unset to_time means now. Both are
1077
+ * clamped to [kept_from, the start of the period running now — or now, if none is] (see
1078
+ * ApartmentClimateSummary).
1079
+ *
1080
+ * @generated from message kusinta.iot.webrtc.v1.GetApartmentClimateSummary
1081
+ */
1082
+ export declare type GetApartmentClimateSummary = Message<"kusinta.iot.webrtc.v1.GetApartmentClimateSummary"> & {
1083
+ /**
1084
+ * @generated from field: kusinta.iot.identity.v1.SpaceId apartment_id = 1;
1085
+ */
1086
+ apartmentId?: SpaceId | undefined;
1087
+
1088
+ /**
1089
+ * Unset asks for the period the apartment's privacy disclosure names
1090
+ * (PrivacyDisclosure.climate_summary_period), or weeks when it names none. Anyone but the
1091
+ * apartment's residents may ask for that period only, and is refused as NOT_ENTITLED for
1092
+ * any other or when it names none. Its residents may ask for any, and are given only
1093
+ * periods that began in their current residency.
1094
+ *
1095
+ * @generated from field: kusinta.iot.climate.v1.ClimateSummaryPeriod period = 2;
1096
+ */
1097
+ period: ClimateSummaryPeriod;
1098
+
1099
+ /**
1100
+ * @generated from field: google.protobuf.Timestamp from_time = 3;
1101
+ */
1102
+ fromTime?: Timestamp | undefined;
1103
+
1104
+ /**
1105
+ * @generated from field: google.protobuf.Timestamp to_time = 4;
1106
+ */
1107
+ toTime?: Timestamp | undefined;
1108
+ };
1109
+
1110
+ /**
1111
+ * Describes the message kusinta.iot.webrtc.v1.GetApartmentClimateSummary.
1112
+ * Use `create(GetApartmentClimateSummarySchema)` to create a new message.
1113
+ */
1114
+ export declare const GetApartmentClimateSummarySchema: GenMessage<GetApartmentClimateSummary>;
1115
+
1116
+ /**
1117
+ * Asks the gateway to have a connector re-initialise its backend connection: reconnect to
1118
+ * its radio central or network server. Meant to be offered while a
1119
+ * reporting.v1.PROBLEM_KIND_CONNECTOR_ERROR is open for the connector — its
1120
+ * ConnectorDescriptor.backend_health is FAILING — and only for a connector listed in
1121
+ * ConnectorsAnnounced. A request for a connector that is not listed is refused, as
1122
+ * CONNECTOR_OFFLINE or UNKNOWN_CONNECTOR below. For a listed one it is accepted whatever its
1123
+ * health, since re-initialising a healthy backend is harmless.
1124
+ *
1125
+ * Authorized against the caller's role alone, as StartPairing is: a connector is not a
1126
+ * target the caller reaches the way a space is. ROLE_TECHNICIAN and ROLE_GATEWAY_ADMIN may
1127
+ * ask; anyone else is refused as NOT_ENTITLED, before the connector is looked up, so the
1128
+ * refusal says nothing of which connectors exist.
1129
+ *
1130
+ * The gateway forwards it as connector.v1.ReinitializeBackend and answers once the
1131
+ * connector has: with ManagementAck when the attempt was made. That says the attempt
1132
+ * finished, not that it worked. Whether it worked is the connector's backend health, and
1133
+ * when that changed the gateway pushes it in ConnectorsAnnounced before the ack. One
1134
+ * request at a time per connector.
1135
+ *
1136
+ * So a failure found only by attempting — credentials the backend rejects, a backend that
1137
+ * does not answer — is not a refusal. It arrives as a ManagementAck, with the backend
1138
+ * health it left (FAILING, e.g. with AUTH_FAILED, UNREACHABLE or BACKEND_ERROR) already
1139
+ * pushed: after the ack, the app reads ConnectorDescriptor.backend_health for the outcome,
1140
+ * and a FAILING health there means the reconnect did not help. The app handles any reason
1141
+ * there, one its schema does not know included. No push precedes the ack when the attempt
1142
+ * left health as it was; the descriptor the app holds is then still the outcome.
1143
+ *
1144
+ * A refusal is a GatewayError whose metadata "reason" says which, as CommandError.metadata
1145
+ * describes, and whose "detail" is a sentence the app may show. The app branches on
1146
+ * "reason" for this operation; the code is only the fallback for a reason it does not know,
1147
+ * since GatewayErrorCode is too coarse to say what to do here. The role refusal above is
1148
+ * the code NOT_ENTITLED alone, with no "reason"; the reasons are for a caller who may ask:
1149
+ * "UNKNOWN_CONNECTOR" UNAVAILABLE. The gateway does not track a connector by that id:
1150
+ * it never had one, or has stopped tracking it. Not a client bug:
1151
+ * the list the app holds may be stale.
1152
+ * "CONNECTOR_OFFLINE" UNAVAILABLE. A connector the gateway tracks, whose stream to the
1153
+ * gateway is down now, before or while the request was
1154
+ * outstanding; that is CONNECTOR_OFFLINE, and a reconnect of its
1155
+ * backend cannot help it.
1156
+ * "NOT_SUPPORTED" FAILED_PRECONDITION. The connector does not declare
1157
+ * ConnectorDescriptor.supports_backend_reinitialize, or declared it
1158
+ * and answered that it has nothing to re-initialise. Not a client
1159
+ * bug, and not worth retrying as is.
1160
+ * "ALREADY_IN_PROGRESS" UNAVAILABLE. A reconnect of this connector is outstanding, from
1161
+ * this caller or another. It ends within 60 seconds of being
1162
+ * asked, answered or timed out; retry after that. Only the caller
1163
+ * who asked is answered, but a change of health it causes reaches
1164
+ * every session in ConnectorsAnnounced.
1165
+ * "TIMED_OUT" UNAVAILABLE. The connector did not answer within the gateway's
1166
+ * deadline. The attempt may still finish, and its outcome still
1167
+ * arrives as backend health.
1168
+ * "REINITIALIZE_FAILED" The connector could not attempt it at all
1169
+ * (connector.v1.REINITIALIZE_OUTCOME_FAILED, or an outcome the
1170
+ * gateway's schema does not know, read as FAILED). The code
1171
+ * depends on the reason: FAILED_PRECONDITION when it is
1172
+ * MISCONFIGURED, which needs a person to correct the connector's
1173
+ * configuration before asking again can help; UNAVAILABLE for
1174
+ * any other — INTERNAL, UNSPECIFIED, a value the gateway does not
1175
+ * know — since a retry may work. Rejected credentials are never
1176
+ * this: they are found by attempting, and come back as an ack
1177
+ * (see above). metadata "backend_failure" is always set: the
1178
+ * common.v1.BackendFailureReason by its enum name, e.g.
1179
+ * "BACKEND_FAILURE_REASON_MISCONFIGURED". A reason that is
1180
+ * UNSPECIFIED, or a value the gateway's schema does not know, is
1181
+ * sent as "BACKEND_FAILURE_REASON_BACKEND_ERROR", as
1182
+ * BackendFailureReason has it; an app reading a name its own
1183
+ * schema does not know treats it as BACKEND_ERROR too.
1184
+ * The connector's own detail is never in a refusal; GatewayError.message is the gateway's.
1185
+ *
1186
+ * @generated from message kusinta.iot.webrtc.v1.ReconnectConnector
1187
+ */
1188
+ export declare type ReconnectConnector = Message<"kusinta.iot.webrtc.v1.ReconnectConnector"> & {
1189
+ /**
1190
+ * As ConnectorDescriptor.connector_id, and the id a CONNECTOR_ERROR problem's subject
1191
+ * names (reporting.v1.ProblemSubject.connector_id).
1192
+ *
1193
+ * @generated from field: kusinta.iot.identity.v1.ConnectorId connector_id = 1;
1194
+ */
1195
+ connectorId?: ConnectorId | undefined;
1196
+ };
1197
+
1198
+ /**
1199
+ * Describes the message kusinta.iot.webrtc.v1.ReconnectConnector.
1200
+ * Use `create(ReconnectConnectorSchema)` to create a new message.
1201
+ */
1202
+ export declare const ReconnectConnectorSchema: GenMessage<ReconnectConnector>;
1203
+
1204
+ /**
1205
+ * Lists the heating records (heating.v1) a caller may see under a space: unset
1206
+ * root_space_id lists every one the caller can reach. Answered with a HeatingLayout.
1207
+ *
1208
+ * @generated from message kusinta.iot.webrtc.v1.ListHeating
1209
+ */
1210
+ export declare type ListHeating = Message<"kusinta.iot.webrtc.v1.ListHeating"> & {
1211
+ /**
1212
+ * @generated from field: kusinta.iot.identity.v1.SpaceId root_space_id = 1;
1213
+ */
1214
+ rootSpaceId?: SpaceId | undefined;
1215
+ };
1216
+
1217
+ /**
1218
+ * Describes the message kusinta.iot.webrtc.v1.ListHeating.
1219
+ * Use `create(ListHeatingSchema)` to create a new message.
1220
+ */
1221
+ export declare const ListHeatingSchema: GenMessage<ListHeating>;
1222
+
1223
+ /**
1224
+ * Creates a plant (empty plant_id) or replaces one. Answered with the HeatingRecord as
1225
+ * stored. The puts of heating records refuse, with metadata "reason":
1226
+ *
1227
+ * INVALID_REQUEST
1228
+ * "ZONE_CONTROL_ROOM" a floor zone whose control room is unset or not one of its rooms.
1229
+ * "ZONE_ROOMS_ACROSS_HOMES" a floor zone with rooms in two homes, or in a home and outside
1230
+ * homes.
1231
+ * "ZONE_AREA_SHARES" a floor zone with a room listed twice, a share of 0, or shares
1232
+ * that do not sum to 1000.
1233
+ * "ROOM_OUTSIDE_PLANT" a zone room outside its plant's space; metadata "room_id" names it.
1234
+ * "ZONE_NOT_ON_FLOOR" a floor zone on a circuit that is not a floor circuit.
1235
+ * "SG_READY_HALF_BOUND" one SG Ready input bound without the other.
1236
+ * "CONTROL_EMPTY" a plant control that binds no input.
1237
+ * "NO_ENDPOINT" an attribute on the Matter branch with no endpoint_id.
1238
+ * "WINDOWS_IN_PUT" a comfort load put with windows (see SetComfortWindows).
1239
+ *
1240
+ * FAILED_PRECONDITION
1241
+ * "STALE_REVISION" the record changed since the revision the request names.
1242
+ * "CHILDREN_INVALID" a plant or circuit put that would leave a record under it
1243
+ * invalid: a circuit with zones no longer a floor circuit, or a
1244
+ * space or plant change leaving a zone's room outside its plant.
1245
+ * "OUTPUT_BOUND_TWICE" an output already bound in another role or record.
1246
+ * "OUTPUT_NOT_LEASED" an output whose write its producer does not state as leased.
1247
+ * "REST_STATE" an output whose lapse value, read through closed_value, does not
1248
+ * leave the contact where its role rests.
1249
+ *
1250
+ * A refusal about one binding names it in metadata "field", by its proto field name:
1251
+ * "sg_ready_block", "sg_ready_boost", "add_on_heater_block", "meter", "output",
1252
+ * "supply_probe", "return_probe".
1253
+ *
1254
+ * A device or room the caller cannot reach, a parent it may not use (see heating.v1) and an
1255
+ * id that does not exist are all refused as NOT_ENTITLED with the same metadata, so no answer
1256
+ * tells one from another. HAS_CHILDREN, CHILDREN_INVALID and OUTPUT_BOUND_TWICE may count
1257
+ * records the caller cannot see — a zone in a home under a circuit outside it. That one bit
1258
+ * is accepted, as it is for the members listing; their metadata never names or counts such
1259
+ * a record.
1260
+ *
1261
+ * @generated from message kusinta.iot.webrtc.v1.PutHeatingPlant
1262
+ */
1263
+ export declare type PutHeatingPlant = Message<"kusinta.iot.webrtc.v1.PutHeatingPlant"> & {
1264
+ /**
1265
+ * @generated from field: kusinta.iot.heating.v1.HeatingPlant plant = 1;
1266
+ */
1267
+ plant?: HeatingPlant | undefined;
1268
+ };
1269
+
1270
+ /**
1271
+ * Describes the message kusinta.iot.webrtc.v1.PutHeatingPlant.
1272
+ * Use `create(PutHeatingPlantSchema)` to create a new message.
1273
+ */
1274
+ export declare const PutHeatingPlantSchema: GenMessage<PutHeatingPlant>;
1275
+
1276
+ /**
1277
+ * Creates or replaces a circuit of a plant; as PutHeatingPlant.
1278
+ *
1279
+ * @generated from message kusinta.iot.webrtc.v1.PutHeatingCircuit
1280
+ */
1281
+ export declare type PutHeatingCircuit = Message<"kusinta.iot.webrtc.v1.PutHeatingCircuit"> & {
1282
+ /**
1283
+ * @generated from field: kusinta.iot.heating.v1.HeatingCircuit circuit = 1;
1284
+ */
1285
+ circuit?: HeatingCircuit | undefined;
1286
+ };
1287
+
1288
+ /**
1289
+ * Describes the message kusinta.iot.webrtc.v1.PutHeatingCircuit.
1290
+ * Use `create(PutHeatingCircuitSchema)` to create a new message.
1291
+ */
1292
+ export declare const PutHeatingCircuitSchema: GenMessage<PutHeatingCircuit>;
1293
+
1294
+ /**
1295
+ * Creates or replaces a floor zone of a floor circuit; as PutHeatingPlant.
1296
+ *
1297
+ * @generated from message kusinta.iot.webrtc.v1.PutFloorZone
1298
+ */
1299
+ export declare type PutFloorZone = Message<"kusinta.iot.webrtc.v1.PutFloorZone"> & {
1300
+ /**
1301
+ * @generated from field: kusinta.iot.heating.v1.FloorZone zone = 1;
1302
+ */
1303
+ zone?: FloorZone | undefined;
1304
+ };
1305
+
1306
+ /**
1307
+ * Describes the message kusinta.iot.webrtc.v1.PutFloorZone.
1308
+ * Use `create(PutFloorZoneSchema)` to create a new message.
1309
+ */
1310
+ export declare const PutFloorZoneSchema: GenMessage<PutFloorZone>;
1311
+
1312
+ /**
1313
+ * Creates or replaces a comfort load's room, name and output, keeping its windows; as
1314
+ * PutHeatingPlant.
1315
+ *
1316
+ * @generated from message kusinta.iot.webrtc.v1.PutComfortLoad
1317
+ */
1318
+ export declare type PutComfortLoad = Message<"kusinta.iot.webrtc.v1.PutComfortLoad"> & {
1319
+ /**
1320
+ * @generated from field: kusinta.iot.heating.v1.ComfortLoad comfort_load = 1;
1321
+ */
1322
+ comfortLoad?: ComfortLoad | undefined;
1323
+ };
1324
+
1325
+ /**
1326
+ * Describes the message kusinta.iot.webrtc.v1.PutComfortLoad.
1327
+ * Use `create(PutComfortLoadSchema)` to create a new message.
1328
+ */
1329
+ export declare const PutComfortLoadSchema: GenMessage<PutComfortLoad>;
1330
+
1331
+ /**
1332
+ * Removes a heating record by its id, naming the revision it removes. Refused as
1333
+ * FAILED_PRECONDITION with metadata "reason" "STALE_REVISION" when it changed since, and
1334
+ * "HAS_CHILDREN" while records lie under it — a plant's circuits, a circuit's zones — so
1335
+ * nothing is removed that the caller did not name. Its outputs are returned to rest at once
1336
+ * (see heating.v1). Acked.
1337
+ *
1338
+ * @generated from message kusinta.iot.webrtc.v1.RemoveHeatingRecord
1339
+ */
1340
+ export declare type RemoveHeatingRecord = Message<"kusinta.iot.webrtc.v1.RemoveHeatingRecord"> & {
1341
+ /**
1342
+ * @generated from field: string id = 1;
1343
+ */
1344
+ id: string;
1345
+
1346
+ /**
1347
+ * @generated from field: uint64 revision = 2;
1348
+ */
1349
+ revision: bigint;
1350
+ };
1351
+
1352
+ /**
1353
+ * Describes the message kusinta.iot.webrtc.v1.RemoveHeatingRecord.
1354
+ * Use `create(RemoveHeatingRecordSchema)` to create a new message.
1355
+ */
1356
+ export declare const RemoveHeatingRecordSchema: GenMessage<RemoveHeatingRecord>;
1357
+
1358
+ /**
1359
+ * Replaces a comfort load's windows: a resident's setting, apart from the binding and its
1360
+ * revision. Answered with the HeatingRecord as stored. Refused as FAILED_PRECONDITION
1361
+ * "STALE_REVISION" when windows_revision is set and the windows changed since, and as
1362
+ * INVALID_REQUEST "WINDOW" for a window that ComfortWindow does not allow or more than 16.
1363
+ * From an installer under a commissioning grant, NOT_ENTITLED.
1364
+ *
1365
+ * @generated from message kusinta.iot.webrtc.v1.SetComfortWindows
1366
+ */
1367
+ export declare type SetComfortWindows = Message<"kusinta.iot.webrtc.v1.SetComfortWindows"> & {
1368
+ /**
1369
+ * @generated from field: string comfort_load_id = 1;
1370
+ */
1371
+ comfortLoadId: string;
1372
+
1373
+ /**
1374
+ * @generated from field: repeated kusinta.iot.heating.v1.ComfortWindow windows = 2;
1375
+ */
1376
+ windows: ComfortWindow[];
1377
+
1378
+ /**
1379
+ * The ComfortLoad.windows_revision these windows replace. Unset: whatever is stored.
1380
+ *
1381
+ * @generated from field: optional uint64 windows_revision = 3;
1382
+ */
1383
+ windowsRevision?: bigint | undefined;
1384
+ };
1385
+
1386
+ /**
1387
+ * Describes the message kusinta.iot.webrtc.v1.SetComfortWindows.
1388
+ * Use `create(SetComfortWindowsSchema)` to create a new message.
1389
+ */
1390
+ export declare const SetComfortWindowsSchema: GenMessage<SetComfortWindows>;
1391
+
1392
+ /**
1393
+ * Asks for a nonce to link one home's account at a third-party service
1394
+ * (accountlink.v1.AccountLinkNonce). Only a household admin of the home — the resident
1395
+ * relation that governs a home's own settings — is issued one; anyone else is refused as
1396
+ * NOT_ENTITLED, as is a home the caller cannot reach. A service this gateway does not
1397
+ * support is refused as INVALID_REQUEST.
1398
+ *
1399
+ * @generated from message kusinta.iot.webrtc.v1.RequestAccountLinkNonce
1400
+ */
1401
+ export declare type RequestAccountLinkNonce = Message<"kusinta.iot.webrtc.v1.RequestAccountLinkNonce"> & {
1402
+ /**
1403
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 1;
1404
+ */
1405
+ homeId?: SpaceId | undefined;
1406
+
1407
+ /**
1408
+ * @generated from field: kusinta.iot.accountlink.v1.LinkedService service = 2;
1409
+ */
1410
+ service: LinkedService;
1411
+ };
1412
+
1413
+ /**
1414
+ * Describes the message kusinta.iot.webrtc.v1.RequestAccountLinkNonce.
1415
+ * Use `create(RequestAccountLinkNonceSchema)` to create a new message.
1416
+ */
1417
+ export declare const RequestAccountLinkNonceSchema: GenMessage<RequestAccountLinkNonce>;
1418
+
1419
+ /**
1420
+ * Lists a home's linked accounts and their status, answered with an AccountLinks. Given to
1421
+ * the home's residents; anyone else is refused as NOT_ENTITLED.
1422
+ *
1423
+ * @generated from message kusinta.iot.webrtc.v1.ListAccountLinks
1424
+ */
1425
+ export declare type ListAccountLinks = Message<"kusinta.iot.webrtc.v1.ListAccountLinks"> & {
1426
+ /**
1427
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 1;
1428
+ */
1429
+ homeId?: SpaceId | undefined;
1430
+ };
1431
+
1432
+ /**
1433
+ * Describes the message kusinta.iot.webrtc.v1.ListAccountLinks.
1434
+ * Use `create(ListAccountLinksSchema)` to create a new message.
1435
+ */
1436
+ export declare const ListAccountLinksSchema: GenMessage<ListAccountLinks>;
1437
+
1438
+ /**
1439
+ * Unlinks a home's account at one service: the gateway reads no more through it and revokes
1440
+ * it (accountlink.v1.RevokeToken). A household admin of the home only; anyone else is refused
1441
+ * as NOT_ENTITLED. A service with no link is acked all the same. Acked.
1442
+ *
1443
+ * @generated from message kusinta.iot.webrtc.v1.UnlinkAccount
1444
+ */
1445
+ export declare type UnlinkAccount = Message<"kusinta.iot.webrtc.v1.UnlinkAccount"> & {
1446
+ /**
1447
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 1;
1448
+ */
1449
+ homeId?: SpaceId | undefined;
1450
+
1451
+ /**
1452
+ * @generated from field: kusinta.iot.accountlink.v1.LinkedService service = 2;
1453
+ */
1454
+ service: LinkedService;
1455
+ };
1456
+
1457
+ /**
1458
+ * Describes the message kusinta.iot.webrtc.v1.UnlinkAccount.
1459
+ * Use `create(UnlinkAccountSchema)` to create a new message.
1460
+ */
1461
+ export declare const UnlinkAccountSchema: GenMessage<UnlinkAccount>;
1462
+
1463
+ /**
1464
+ * Lists a space's commissioning (commissioning.v1): for a home, its facts, tests and feature
1465
+ * states; for a space outside homes, its facts and the tests on records there. Answered
1466
+ * with a CommissioningProfile, filtered as commissioning.v1 says. A home asked by a caller
1467
+ * who is not given its commissioning is refused as NOT_ENTITLED.
1468
+ *
1469
+ * @generated from message kusinta.iot.webrtc.v1.ListCommissioning
1470
+ */
1471
+ export declare type ListCommissioning = Message<"kusinta.iot.webrtc.v1.ListCommissioning"> & {
1472
+ /**
1473
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1474
+ */
1475
+ spaceId?: SpaceId | undefined;
1476
+ };
1477
+
1478
+ /**
1479
+ * Describes the message kusinta.iot.webrtc.v1.ListCommissioning.
1480
+ * Use `create(ListCommissioningSchema)` to create a new message.
1481
+ */
1482
+ export declare const ListCommissioningSchema: GenMessage<ListCommissioning>;
1483
+
1484
+ /**
1485
+ * Creates a fact (empty fact_id) or replaces one. Answered with the CommissioningRecord as
1486
+ * stored. The gateway sets answerer, necessity, feature, topic and provenance, save
1487
+ * provenance.evidence, which the caller states. Refused with metadata "reason":
1488
+ *
1489
+ * INVALID_REQUEST
1490
+ * "UNKNOWN_KEY" a key the gateway's catalogue does not hold.
1491
+ * "VALUE_TYPE" a value of another type than the key takes, a string outside the
1492
+ * key's closed list, unknown false, or no answer.
1493
+ * "SUBJECT" a record_id that is not a heating record within space_id, or a key
1494
+ * that is not about that kind of space or record.
1495
+ * "ANSWERER" a key the caller's party does not answer.
1496
+ * "EVIDENCE" evidence the caller's party may not give, or less than the key
1497
+ * requires.
1498
+ * "TEMPLATE_VERSION" a new or changed deviates_from naming a template or version the
1499
+ * home's template never was, or set on a home that follows no
1500
+ * template. One carried over unchanged from the stored fact is kept,
1501
+ * even after the home moved to another template.
1502
+ *
1503
+ * FAILED_PRECONDITION
1504
+ * "STALE_REVISION" the fact changed since the revision the request names.
1505
+ * "FACT_EXISTS" a create for a space, record and key that already have a fact;
1506
+ * metadata "fact_id" names it. One answer per key.
1507
+ * "SET_BY_TEST" a key only a test sets.
1508
+ *
1509
+ * A space or record the caller cannot reach, and a fact_id that does not exist, are refused
1510
+ * as NOT_ENTITLED with the same metadata.
1511
+ *
1512
+ * @generated from message kusinta.iot.webrtc.v1.PutCommissioningFact
1513
+ */
1514
+ export declare type PutCommissioningFact = Message<"kusinta.iot.webrtc.v1.PutCommissioningFact"> & {
1515
+ /**
1516
+ * @generated from field: kusinta.iot.commissioning.v1.CommissioningFact fact = 1;
1517
+ */
1518
+ fact?: CommissioningFact | undefined;
1519
+ };
1520
+
1521
+ /**
1522
+ * Describes the message kusinta.iot.webrtc.v1.PutCommissioningFact.
1523
+ * Use `create(PutCommissioningFactSchema)` to create a new message.
1524
+ */
1525
+ export declare const PutCommissioningFactSchema: GenMessage<PutCommissioningFact>;
1526
+
1527
+ /**
1528
+ * Removes a fact by its id, naming the revision it removes; as PutCommissioningFact. A fact
1529
+ * set by a test is replaced only by running it again: refused as FAILED_PRECONDITION
1530
+ * "SET_BY_TEST". Acked.
1531
+ *
1532
+ * @generated from message kusinta.iot.webrtc.v1.RemoveCommissioningFact
1533
+ */
1534
+ export declare type RemoveCommissioningFact = Message<"kusinta.iot.webrtc.v1.RemoveCommissioningFact"> & {
1535
+ /**
1536
+ * @generated from field: string fact_id = 1;
1537
+ */
1538
+ factId: string;
1539
+
1540
+ /**
1541
+ * @generated from field: uint64 revision = 2;
1542
+ */
1543
+ revision: bigint;
1544
+ };
1545
+
1546
+ /**
1547
+ * Describes the message kusinta.iot.webrtc.v1.RemoveCommissioningFact.
1548
+ * Use `create(RemoveCommissioningFactSchema)` to create a new message.
1549
+ */
1550
+ export declare const RemoveCommissioningFactSchema: GenMessage<RemoveCommissioningFact>;
1551
+
1552
+ /**
1553
+ * Creates a house template (empty template_id) or replaces one, naming the version it
1554
+ * replaces. From the property owner or the gateway's administrators, reaching the building;
1555
+ * anyone else is refused as NOT_ENTITLED. Answered with the CommissioningRecord as stored.
1556
+ * Refused as FAILED_PRECONDITION "STALE_REVISION" when the template changed since, as
1557
+ * INVALID_REQUEST "UNKNOWN_KEY" or "VALUE_TYPE" as PutCommissioningFact, and as
1558
+ * INVALID_REQUEST "EVIDENCE" for a key a template may not answer (commissioning.v1,
1559
+ * TEMPLATES); metadata "key" names it.
1560
+ *
1561
+ * @generated from message kusinta.iot.webrtc.v1.PutHouseTemplate
1562
+ */
1563
+ export declare type PutHouseTemplate = Message<"kusinta.iot.webrtc.v1.PutHouseTemplate"> & {
1564
+ /**
1565
+ * @generated from field: kusinta.iot.commissioning.v1.HouseTemplate template = 1;
1566
+ */
1567
+ template?: HouseTemplate | undefined;
1568
+ };
1569
+
1570
+ /**
1571
+ * Describes the message kusinta.iot.webrtc.v1.PutHouseTemplate.
1572
+ * Use `create(PutHouseTemplateSchema)` to create a new message.
1573
+ */
1574
+ export declare const PutHouseTemplateSchema: GenMessage<PutHouseTemplate>;
1575
+
1576
+ /**
1577
+ * Says which house template a home follows; an empty template_id, none. From the property
1578
+ * owner or the gateway's administrators; anyone else is refused as NOT_ENTITLED. A template
1579
+ * of another building is refused as INVALID_REQUEST "TEMPLATE_BUILDING". Deviations recorded
1580
+ * against another template stay, naming the version they were recorded against. Acked.
1581
+ *
1582
+ * @generated from message kusinta.iot.webrtc.v1.SetHomeTemplate
1583
+ */
1584
+ export declare type SetHomeTemplate = Message<"kusinta.iot.webrtc.v1.SetHomeTemplate"> & {
1585
+ /**
1586
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 1;
1587
+ */
1588
+ homeId?: SpaceId | undefined;
1589
+
1590
+ /**
1591
+ * @generated from field: string template_id = 2;
1592
+ */
1593
+ templateId: string;
1594
+ };
1595
+
1596
+ /**
1597
+ * Describes the message kusinta.iot.webrtc.v1.SetHomeTemplate.
1598
+ * Use `create(SetHomeTemplateSchema)` to create a new message.
1599
+ */
1600
+ export declare const SetHomeTemplateSchema: GenMessage<SetHomeTemplate>;
1601
+
1602
+ /**
1603
+ * Starts a commissioning test (commissioning.v1.TestKind) on a heating record, answered with
1604
+ * the CommissioningRecord of the test, RUNNING. Its changes of state, the start included,
1605
+ * are pushed (GatewayMessage.commissioning_test), save the start to the session that
1606
+ * started it, which has it as the reply. Run by whoever may bind the outputs it drives
1607
+ * (heating.v1); PUMP_ALL_ZONES_OFF by an installer under a commissioning grant only. Refused
1608
+ * with metadata "reason":
1609
+ *
1610
+ * INVALID_REQUEST
1611
+ * "TEST_SUBJECT" a kind that does not run on that record, or for OUTPUT_LEASE a
1612
+ * binding field that is empty or not a bound output of it; for the
1613
+ * other kinds, a binding field that is not empty.
1614
+ *
1615
+ * FAILED_PRECONDITION
1616
+ * "TEST_RUNNING" a test already drives one of its outputs.
1617
+ * "NEEDS_PASS" ZONE_EFFECT or PUMP_ALL_ZONES_OFF on outputs without a current
1618
+ * OUTPUT_LEASE pass; metadata "record_id" names one.
1619
+ * "OUTPUT_NOT_LEASED" an output its producer does not state as leased, with a lapse value
1620
+ * at rest (heating.v1), so no test could leave it at rest.
1621
+ * "READ_LATENCY" OUTPUT_LEASE on an output whose producer does not state its reads
1622
+ * REAL_TIME: a pass judged against a guessed latency is none.
1623
+ * "LEASE_BOUNDS" OUTPUT_LEASE on an output whose lease bounds admit no lease of 60
1624
+ * seconds to 5 minutes, so the test could not end by its ends_at.
1625
+ *
1626
+ * A record the caller cannot reach is refused as NOT_ENTITLED.
1627
+ *
1628
+ * @generated from message kusinta.iot.webrtc.v1.RunCommissioningTest
1629
+ */
1630
+ export declare type RunCommissioningTest = Message<"kusinta.iot.webrtc.v1.RunCommissioningTest"> & {
1631
+ /**
1632
+ * @generated from field: kusinta.iot.commissioning.v1.TestKind kind = 1;
1633
+ */
1634
+ kind: TestKind;
1635
+
1636
+ /**
1637
+ * binding.field for OUTPUT_LEASE only.
1638
+ *
1639
+ * @generated from field: kusinta.iot.commissioning.v1.BindingRef binding = 4;
1640
+ */
1641
+ binding?: BindingRef | undefined;
1642
+ };
1643
+
1644
+ /**
1645
+ * Describes the message kusinta.iot.webrtc.v1.RunCommissioningTest.
1646
+ * Use `create(RunCommissioningTestSchema)` to create a new message.
1647
+ */
1648
+ export declare const RunCommissioningTestSchema: GenMessage<RunCommissioningTest>;
1649
+
1650
+ /**
1651
+ * Ends a running test. verdict ABORTED stops any test, from whoever started it or may run
1652
+ * it; PASSED or FAILED concludes a PUMP_ALL_ZONES_OFF test, from an installer under a
1653
+ * commissioning grant only. Any other verdict, or PASSED or FAILED on another kind, is
1654
+ * refused as INVALID_REQUEST "VERDICT". Its outputs return to their normal control at once,
1655
+ * floor zones switching on no faster than "floor.max_zones_switching_on" allows. Answered
1656
+ * with the CommissioningRecord of the test. A test that has ended is refused as
1657
+ * FAILED_PRECONDITION "TEST_ENDED".
1658
+ *
1659
+ * @generated from message kusinta.iot.webrtc.v1.ConcludeCommissioningTest
1660
+ */
1661
+ export declare type ConcludeCommissioningTest = Message<"kusinta.iot.webrtc.v1.ConcludeCommissioningTest"> & {
1662
+ /**
1663
+ * @generated from field: string test_id = 1;
1664
+ */
1665
+ testId: string;
1666
+
1667
+ /**
1668
+ * @generated from field: kusinta.iot.commissioning.v1.TestState verdict = 2;
1669
+ */
1670
+ verdict: TestState;
1671
+ };
1672
+
1673
+ /**
1674
+ * Describes the message kusinta.iot.webrtc.v1.ConcludeCommissioningTest.
1675
+ * Use `create(ConcludeCommissioningTestSchema)` to create a new message.
1676
+ */
1677
+ export declare const ConcludeCommissioningTestSchema: GenMessage<ConcludeCommissioningTest>;
1678
+
1679
+ /**
1680
+ * Lists whether each home under a space is set up (commissioning.v1.HomeSetup): unset
1681
+ * root_space_id, every home the caller reaches. For the property owner and the gateway's
1682
+ * administrators; anyone else is refused as NOT_ENTITLED. Answered with a HomeSetups.
1683
+ *
1684
+ * @generated from message kusinta.iot.webrtc.v1.ListHomeSetups
1685
+ */
1686
+ export declare type ListHomeSetups = Message<"kusinta.iot.webrtc.v1.ListHomeSetups"> & {
1687
+ /**
1688
+ * @generated from field: kusinta.iot.identity.v1.SpaceId root_space_id = 1;
1689
+ */
1690
+ rootSpaceId?: SpaceId | undefined;
1691
+ };
1692
+
1693
+ /**
1694
+ * Describes the message kusinta.iot.webrtc.v1.ListHomeSetups.
1695
+ * Use `create(ListHomeSetupsSchema)` to create a new message.
1696
+ */
1697
+ export declare const ListHomeSetupsSchema: GenMessage<ListHomeSetups>;
1698
+
1699
+ /**
1700
+ * @generated from message kusinta.iot.webrtc.v1.ManagementRequest
1701
+ */
1702
+ export declare type ManagementRequest = Message<"kusinta.iot.webrtc.v1.ManagementRequest"> & {
1703
+ /**
1704
+ * @generated from oneof kusinta.iot.webrtc.v1.ManagementRequest.request
1705
+ */
1706
+ request: {
1707
+ /**
1708
+ * @generated from field: kusinta.iot.webrtc.v1.CreateSpace create_space = 1;
1709
+ */
1710
+ value: CreateSpace;
1711
+ case: "createSpace";
1712
+ } | {
1713
+ /**
1714
+ * @generated from field: kusinta.iot.webrtc.v1.UpdateSpace update_space = 2;
1715
+ */
1716
+ value: UpdateSpace;
1717
+ case: "updateSpace";
1718
+ } | {
1719
+ /**
1720
+ * @generated from field: kusinta.iot.webrtc.v1.DeleteSpace delete_space = 3;
1721
+ */
1722
+ value: DeleteSpace;
1723
+ case: "deleteSpace";
1724
+ } | {
1725
+ /**
1726
+ * @generated from field: kusinta.iot.webrtc.v1.AssignUserToSpace assign_user_to_space = 4;
1727
+ */
1728
+ value: AssignUserToSpace;
1729
+ case: "assignUserToSpace";
1730
+ } | {
1731
+ /**
1732
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveUserFromSpace remove_user_from_space = 5;
1733
+ */
1734
+ value: RemoveUserFromSpace;
1735
+ case: "removeUserFromSpace";
1736
+ } | {
1737
+ /**
1738
+ * @generated from field: kusinta.iot.webrtc.v1.PlaceDeviceInSpace place_device_in_space = 6;
1739
+ */
1740
+ value: PlaceDeviceInSpace;
1741
+ case: "placeDeviceInSpace";
1742
+ } | {
1743
+ /**
1744
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveDeviceFromSpace remove_device_from_space = 7;
1745
+ */
1746
+ value: RemoveDeviceFromSpace;
1747
+ case: "removeDeviceFromSpace";
1748
+ } | {
1749
+ /**
1750
+ * @generated from field: kusinta.iot.webrtc.v1.ClaimDevice claim_device = 8;
1751
+ */
1752
+ value: ClaimDevice;
1753
+ case: "claimDevice";
1754
+ } | {
1755
+ /**
1756
+ * @generated from field: kusinta.iot.webrtc.v1.ReleaseDevice release_device = 9;
1757
+ */
1758
+ value: ReleaseDevice;
1759
+ case: "releaseDevice";
1760
+ } | {
1761
+ /**
1762
+ * @generated from field: kusinta.iot.webrtc.v1.ListSpaces list_spaces = 10;
1763
+ */
1764
+ value: ListSpaces;
1765
+ case: "listSpaces";
1766
+ } | {
1767
+ /**
1768
+ * @generated from field: kusinta.iot.webrtc.v1.CreateDeviceLink create_device_link = 11;
1769
+ */
1770
+ value: CreateDeviceLink;
1771
+ case: "createDeviceLink";
1772
+ } | {
1773
+ /**
1774
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveDeviceLink remove_device_link = 12;
1775
+ */
1776
+ value: RemoveDeviceLink;
1777
+ case: "removeDeviceLink";
1778
+ } | {
1779
+ /**
1780
+ * @generated from field: kusinta.iot.webrtc.v1.ListDeviceLinks list_device_links = 13;
1781
+ */
1782
+ value: ListDeviceLinks;
1783
+ case: "listDeviceLinks";
1784
+ } | {
1785
+ /**
1786
+ * @generated from field: kusinta.iot.webrtc.v1.UpdateDeviceLink update_device_link = 14;
1787
+ */
1788
+ value: UpdateDeviceLink;
1789
+ case: "updateDeviceLink";
1790
+ } | {
1791
+ /**
1792
+ * @generated from field: kusinta.iot.webrtc.v1.ProvisionDevice provision_device = 15;
1793
+ */
1794
+ value: ProvisionDevice;
1795
+ case: "provisionDevice";
1796
+ } | {
1797
+ /**
1798
+ * @generated from field: kusinta.iot.webrtc.v1.SetRoomTarget set_room_target = 16;
1799
+ */
1800
+ value: SetRoomTarget;
1801
+ case: "setRoomTarget";
1802
+ } | {
1803
+ /**
1804
+ * @generated from field: kusinta.iot.webrtc.v1.ConfigureRoomClimate configure_room_climate = 17;
1805
+ */
1806
+ value: ConfigureRoomClimate;
1807
+ case: "configureRoomClimate";
1808
+ } | {
1809
+ /**
1810
+ * @generated from field: kusinta.iot.webrtc.v1.SetClimateMode set_climate_mode = 18;
1811
+ */
1812
+ value: SetClimateMode;
1813
+ case: "setClimateMode";
1814
+ } | {
1815
+ /**
1816
+ * @generated from field: kusinta.iot.webrtc.v1.ListRoomClimates list_room_climates = 19;
1817
+ */
1818
+ value: ListRoomClimates;
1819
+ case: "listRoomClimates";
1820
+ } | {
1821
+ /**
1822
+ * @generated from field: kusinta.iot.webrtc.v1.GetRoomHistory get_room_history = 20;
1823
+ */
1824
+ value: GetRoomHistory;
1825
+ case: "getRoomHistory";
1826
+ } | {
1827
+ /**
1828
+ * @generated from field: kusinta.iot.webrtc.v1.GetPrivacyDisclosure get_privacy_disclosure = 21;
1829
+ */
1830
+ value: GetPrivacyDisclosure;
1831
+ case: "getPrivacyDisclosure";
1832
+ } | {
1833
+ /**
1834
+ * @generated from field: kusinta.iot.webrtc.v1.GetApartmentClimateSummary get_apartment_climate_summary = 22;
1835
+ */
1836
+ value: GetApartmentClimateSummary;
1837
+ case: "getApartmentClimateSummary";
1838
+ } | {
1839
+ /**
1840
+ * @generated from field: kusinta.iot.webrtc.v1.ReconnectConnector reconnect_connector = 23;
1841
+ */
1842
+ value: ReconnectConnector;
1843
+ case: "reconnectConnector";
1844
+ } | {
1845
+ /**
1846
+ * Invites; see invite.proto.
1847
+ *
1848
+ * @generated from field: kusinta.iot.webrtc.v1.CreateInvite create_invite = 24;
1849
+ */
1850
+ value: CreateInvite;
1851
+ case: "createInvite";
1852
+ } | {
1853
+ /**
1854
+ * @generated from field: kusinta.iot.webrtc.v1.ResendInvite resend_invite = 25;
1855
+ */
1856
+ value: ResendInvite;
1857
+ case: "resendInvite";
1858
+ } | {
1859
+ /**
1860
+ * @generated from field: kusinta.iot.webrtc.v1.RevokeInvite revoke_invite = 26;
1861
+ */
1862
+ value: RevokeInvite;
1863
+ case: "revokeInvite";
1864
+ } | {
1865
+ /**
1866
+ * @generated from field: kusinta.iot.webrtc.v1.MarkInviteEmailSent mark_invite_email_sent = 27;
1867
+ */
1868
+ value: MarkInviteEmailSent;
1869
+ case: "markInviteEmailSent";
1870
+ } | {
1871
+ /**
1872
+ * @generated from field: kusinta.iot.webrtc.v1.ListSpaceInvites list_space_invites = 28;
1873
+ */
1874
+ value: ListSpaceInvites;
1875
+ case: "listSpaceInvites";
1876
+ } | {
1877
+ /**
1878
+ * @generated from field: kusinta.iot.webrtc.v1.ApproveJoinRequest approve_join_request = 29;
1879
+ */
1880
+ value: ApproveJoinRequest;
1881
+ case: "approveJoinRequest";
1882
+ } | {
1883
+ /**
1884
+ * @generated from field: kusinta.iot.webrtc.v1.DenyJoinRequest deny_join_request = 30;
1885
+ */
1886
+ value: DenyJoinRequest;
1887
+ case: "denyJoinRequest";
1888
+ } | {
1889
+ /**
1890
+ * Members; see members.proto.
1891
+ *
1892
+ * @generated from field: kusinta.iot.webrtc.v1.ListGatewayMembers list_gateway_members = 31;
1893
+ */
1894
+ value: ListGatewayMembers;
1895
+ case: "listGatewayMembers";
1896
+ } | {
1897
+ /**
1898
+ * @generated from field: kusinta.iot.webrtc.v1.SetMemberRole set_member_role = 32;
1899
+ */
1900
+ value: SetMemberRole;
1901
+ case: "setMemberRole";
1902
+ } | {
1903
+ /**
1904
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveFromGateway remove_from_gateway = 33;
1905
+ */
1906
+ value: RemoveFromGateway;
1907
+ case: "removeFromGateway";
1908
+ } | {
1909
+ /**
1910
+ * @generated from field: kusinta.iot.webrtc.v1.SetAccessUntil set_access_until = 34;
1911
+ */
1912
+ value: SetAccessUntil;
1913
+ case: "setAccessUntil";
1914
+ } | {
1915
+ /**
1916
+ * Superseded, and refused as INVALID_REQUEST; see SetOwnerOrganisation.
1917
+ *
1918
+ * @generated from field: kusinta.iot.webrtc.v1.SetOwnerOrganisation set_owner_organisation = 35 [deprecated = true];
1919
+ * @deprecated
1920
+ */
1921
+ value: SetOwnerOrganisation;
1922
+ case: "setOwnerOrganisation";
1923
+ } | {
1924
+ /**
1925
+ * Promotion requests; see members.proto.
1926
+ *
1927
+ * @generated from field: kusinta.iot.webrtc.v1.RequestPromotion request_promotion = 36;
1928
+ */
1929
+ value: RequestPromotion;
1930
+ case: "requestPromotion";
1931
+ } | {
1932
+ /**
1933
+ * @generated from field: kusinta.iot.webrtc.v1.AnswerPromotion answer_promotion = 37;
1934
+ */
1935
+ value: AnswerPromotion;
1936
+ case: "answerPromotion";
1937
+ } | {
1938
+ /**
1939
+ * @generated from field: kusinta.iot.webrtc.v1.ListPromotionRequests list_promotion_requests = 38;
1940
+ */
1941
+ value: ListPromotionRequests;
1942
+ case: "listPromotionRequests";
1943
+ } | {
1944
+ /**
1945
+ * Heating records; see heating.v1.
1946
+ *
1947
+ * @generated from field: kusinta.iot.webrtc.v1.ListHeating list_heating = 39;
1948
+ */
1949
+ value: ListHeating;
1950
+ case: "listHeating";
1951
+ } | {
1952
+ /**
1953
+ * @generated from field: kusinta.iot.webrtc.v1.PutHeatingPlant put_heating_plant = 40;
1954
+ */
1955
+ value: PutHeatingPlant;
1956
+ case: "putHeatingPlant";
1957
+ } | {
1958
+ /**
1959
+ * @generated from field: kusinta.iot.webrtc.v1.PutHeatingCircuit put_heating_circuit = 41;
1960
+ */
1961
+ value: PutHeatingCircuit;
1962
+ case: "putHeatingCircuit";
1963
+ } | {
1964
+ /**
1965
+ * @generated from field: kusinta.iot.webrtc.v1.PutFloorZone put_floor_zone = 42;
1966
+ */
1967
+ value: PutFloorZone;
1968
+ case: "putFloorZone";
1969
+ } | {
1970
+ /**
1971
+ * @generated from field: kusinta.iot.webrtc.v1.PutComfortLoad put_comfort_load = 43;
1972
+ */
1973
+ value: PutComfortLoad;
1974
+ case: "putComfortLoad";
1975
+ } | {
1976
+ /**
1977
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveHeatingRecord remove_heating_record = 44;
1978
+ */
1979
+ value: RemoveHeatingRecord;
1980
+ case: "removeHeatingRecord";
1981
+ } | {
1982
+ /**
1983
+ * @generated from field: kusinta.iot.webrtc.v1.SetComfortWindows set_comfort_windows = 45;
1984
+ */
1985
+ value: SetComfortWindows;
1986
+ case: "setComfortWindows";
1987
+ } | {
1988
+ /**
1989
+ * @generated from field: kusinta.iot.webrtc.v1.RequestAccountLinkNonce request_account_link_nonce = 46;
1990
+ */
1991
+ value: RequestAccountLinkNonce;
1992
+ case: "requestAccountLinkNonce";
1993
+ } | {
1994
+ /**
1995
+ * @generated from field: kusinta.iot.webrtc.v1.ListAccountLinks list_account_links = 47;
1996
+ */
1997
+ value: ListAccountLinks;
1998
+ case: "listAccountLinks";
1999
+ } | {
2000
+ /**
2001
+ * @generated from field: kusinta.iot.webrtc.v1.UnlinkAccount unlink_account = 48;
2002
+ */
2003
+ value: UnlinkAccount;
2004
+ case: "unlinkAccount";
2005
+ } | {
2006
+ /**
2007
+ * Commissioning; see commissioning.v1.
2008
+ *
2009
+ * @generated from field: kusinta.iot.webrtc.v1.ListCommissioning list_commissioning = 49;
2010
+ */
2011
+ value: ListCommissioning;
2012
+ case: "listCommissioning";
2013
+ } | {
2014
+ /**
2015
+ * @generated from field: kusinta.iot.webrtc.v1.PutCommissioningFact put_commissioning_fact = 50;
2016
+ */
2017
+ value: PutCommissioningFact;
2018
+ case: "putCommissioningFact";
2019
+ } | {
2020
+ /**
2021
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveCommissioningFact remove_commissioning_fact = 51;
2022
+ */
2023
+ value: RemoveCommissioningFact;
2024
+ case: "removeCommissioningFact";
2025
+ } | {
2026
+ /**
2027
+ * @generated from field: kusinta.iot.webrtc.v1.PutHouseTemplate put_house_template = 52;
2028
+ */
2029
+ value: PutHouseTemplate;
2030
+ case: "putHouseTemplate";
2031
+ } | {
2032
+ /**
2033
+ * @generated from field: kusinta.iot.webrtc.v1.SetHomeTemplate set_home_template = 53;
2034
+ */
2035
+ value: SetHomeTemplate;
2036
+ case: "setHomeTemplate";
2037
+ } | {
2038
+ /**
2039
+ * @generated from field: kusinta.iot.webrtc.v1.RunCommissioningTest run_commissioning_test = 54;
2040
+ */
2041
+ value: RunCommissioningTest;
2042
+ case: "runCommissioningTest";
2043
+ } | {
2044
+ /**
2045
+ * @generated from field: kusinta.iot.webrtc.v1.ConcludeCommissioningTest conclude_commissioning_test = 55;
2046
+ */
2047
+ value: ConcludeCommissioningTest;
2048
+ case: "concludeCommissioningTest";
2049
+ } | {
2050
+ /**
2051
+ * @generated from field: kusinta.iot.webrtc.v1.ListHomeSetups list_home_setups = 56;
2052
+ */
2053
+ value: ListHomeSetups;
2054
+ case: "listHomeSetups";
443
2055
  } | { case: undefined; value?: undefined };
444
2056
  };
445
2057