@kusinta/iot-schema 0.2.0-beta.33 → 0.2.0-beta.35

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.
@@ -5,6 +5,8 @@
5
5
  import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
7
  import type { GatewayId, UserId } from "../../identity/v1/identity_pb.js";
8
+ import type { ConnectorKind } from "../../common/v1/types_pb.js";
9
+ import type { Timestamp } from "@bufbuild/protobuf/wkt";
8
10
 
9
11
  /**
10
12
  * Describes the file kusinta/iot/signaling/v1/signaling.proto.
@@ -174,7 +176,8 @@ export declare const UserHandshakeAckSchema: GenMessage<UserHandshakeAck>;
174
176
  */
175
177
  export declare type GatewayConnectRequest = Message<"kusinta.iot.signaling.v1.GatewayConnectRequest"> & {
176
178
  /**
177
- * On redeem_invite_result, the user who redeemed (RedeemInvite).
179
+ * On redeem_invite_result, the user who redeemed (RedeemInvite). Unset on an
180
+ * acknowledgement, which is to no user.
178
181
  *
179
182
  * @generated from field: kusinta.iot.identity.v1.UserId target_user_id = 1;
180
183
  */
@@ -183,7 +186,7 @@ export declare type GatewayConnectRequest = Message<"kusinta.iot.signaling.v1.Ga
183
186
  /**
184
187
  * The session of target_user_id this message answers. See the contract above.
185
188
  * Ignored on a heartbeat, which carries no routing target at all, and on
186
- * redeem_invite_result, which belongs to no session.
189
+ * redeem_invite_result and the acknowledgements, which belong to no session.
187
190
  *
188
191
  * @generated from field: string session_id = 5;
189
192
  */
@@ -216,6 +219,24 @@ export declare type GatewayConnectRequest = Message<"kusinta.iot.signaling.v1.Ga
216
219
  */
217
220
  value: RedeemInviteResult;
218
221
  case: "redeemInviteResult";
222
+ } | {
223
+ /**
224
+ * @generated from field: kusinta.iot.signaling.v1.VouchedAdministratorsApplied vouched_administrators_applied = 7;
225
+ */
226
+ value: VouchedAdministratorsApplied;
227
+ case: "vouchedAdministratorsApplied";
228
+ } | {
229
+ /**
230
+ * @generated from field: kusinta.iot.signaling.v1.TransferOutcomeApplied transfer_outcome_applied = 8;
231
+ */
232
+ value: TransferOutcomeApplied;
233
+ case: "transferOutcomeApplied";
234
+ } | {
235
+ /**
236
+ * @generated from field: kusinta.iot.signaling.v1.GatewayWiped wiped = 9;
237
+ */
238
+ value: GatewayWiped;
239
+ case: "wiped";
219
240
  } | { case: undefined; value?: undefined };
220
241
  };
221
242
 
@@ -233,7 +254,9 @@ export declare const GatewayConnectRequestSchema: GenMessage<GatewayConnectReque
233
254
  export declare type GatewayConnectResponse = Message<"kusinta.iot.signaling.v1.GatewayConnectResponse"> & {
234
255
  /**
235
256
  * On redeem_invite, the user redeeming: the sub of the token the api-server
236
- * verified, and never a value the user supplied.
257
+ * verified, and never a value the user supplied. Unset on what concerns the
258
+ * gateway itself (stream_opened, vouched_administrators, transfer_outcome,
259
+ * gateway_deleted), which is from no user.
237
260
  *
238
261
  * @generated from field: kusinta.iot.identity.v1.UserId from_user_id = 1;
239
262
  */
@@ -242,7 +265,8 @@ export declare type GatewayConnectResponse = Message<"kusinta.iot.signaling.v1.G
242
265
  /**
243
266
  * The session of from_user_id this message originates from — the value the
244
267
  * gateway must echo on the GatewayConnectRequest that answers it. See the
245
- * contract above. Unset on redeem_invite, which belongs to no session.
268
+ * contract above. Unset on redeem_invite and on what concerns the gateway
269
+ * itself, which belong to no session.
246
270
  *
247
271
  * @generated from field: string session_id = 4;
248
272
  */
@@ -269,6 +293,30 @@ export declare type GatewayConnectResponse = Message<"kusinta.iot.signaling.v1.G
269
293
  */
270
294
  value: RedeemInvite;
271
295
  case: "redeemInvite";
296
+ } | {
297
+ /**
298
+ * @generated from field: kusinta.iot.signaling.v1.VouchedAdministrators vouched_administrators = 6;
299
+ */
300
+ value: VouchedAdministrators;
301
+ case: "vouchedAdministrators";
302
+ } | {
303
+ /**
304
+ * @generated from field: kusinta.iot.signaling.v1.TransferOutcome transfer_outcome = 7;
305
+ */
306
+ value: TransferOutcome;
307
+ case: "transferOutcome";
308
+ } | {
309
+ /**
310
+ * @generated from field: kusinta.iot.signaling.v1.GatewayStreamOpened stream_opened = 8;
311
+ */
312
+ value: GatewayStreamOpened;
313
+ case: "streamOpened";
314
+ } | {
315
+ /**
316
+ * @generated from field: kusinta.iot.signaling.v1.GatewayDeleted gateway_deleted = 9;
317
+ */
318
+ value: GatewayDeleted;
319
+ case: "gatewayDeleted";
272
320
  } | { case: undefined; value?: undefined };
273
321
  };
274
322
 
@@ -376,6 +424,397 @@ export declare type RedeemInviteResult = Message<"kusinta.iot.signaling.v1.Redee
376
424
  */
377
425
  export declare const RedeemInviteResultSchema: GenMessage<RedeemInviteResult>;
378
426
 
427
+ /**
428
+ * The api-server's first message on every GatewayConnect stream, sent before any other. It
429
+ * carries the ownership epoch of the gateway's owner record.
430
+ *
431
+ * OWNER OF RECORD. A gateway is owned by an organisation, which the api-server keeps; the
432
+ * organisation's administrators are the gateway's vouched administrators. The api-server
433
+ * vouches for them twice: in the token of each session one of them opens
434
+ * (webrtc.v1.AppTokenClaims.roles), and to the gateway, as the whole set
435
+ * (VouchedAdministrators). Neither can be changed on the gateway. A gateway moves to another
436
+ * organisation only by a transfer the receiving organisation accepted (TransferOutcome).
437
+ *
438
+ * OWNERSHIP EPOCH. An opaque id the api-server gives each owner record of a gateway. It is new
439
+ * at the first registration after the gateway was deleted, and only then: a revoke, a
440
+ * re-registration by the owning organisation and a transfer all keep it. The gateway takes it
441
+ * from the api-server's answer to its own registration (registration.v1.RegistrationComplete)
442
+ * and from this message, and from nowhere else: never from an app session, nor from anything an
443
+ * app hands over, the registration token included. It keeps the epoch it holds across restarts.
444
+ *
445
+ * Given an epoch other than the one it holds, the gateway wipes people and history (see
446
+ * GatewayDeleted, WIPE), space names included, before it admits any session or applies anything
447
+ * else from that registration or stream, and then holds the new epoch. A gateway holding no epoch takes the first it is given and wipes nothing. The
448
+ * epoch it holds, given again, changes nothing, so the same epoch twice wipes once.
449
+ *
450
+ * A gateway that holds an epoch treats a stream on which anything arrives before this message,
451
+ * or this message with an empty epoch, as not open: it applies nothing from it and closes it.
452
+ * So the api-server must send this message first on every stream before a gateway that
453
+ * requires it is deployed.
454
+ *
455
+ * @generated from message kusinta.iot.signaling.v1.GatewayStreamOpened
456
+ */
457
+ export declare type GatewayStreamOpened = Message<"kusinta.iot.signaling.v1.GatewayStreamOpened"> & {
458
+ /**
459
+ * @generated from field: string ownership_epoch = 1;
460
+ */
461
+ ownershipEpoch: string;
462
+ };
463
+
464
+ /**
465
+ * Describes the message kusinta.iot.signaling.v1.GatewayStreamOpened.
466
+ * Use `create(GatewayStreamOpenedSchema)` to create a new message.
467
+ */
468
+ export declare const GatewayStreamOpenedSchema: GenMessage<GatewayStreamOpened>;
469
+
470
+ /**
471
+ * The gateway was deleted at the api-server, api-server → gateway: the owner record with
472
+ * ownership_epoch has ended, and the gateway decommissions at once. Sent to a connected gateway
473
+ * before the api-server ends its stream, and answered with GatewayWiped. A gateway offline when
474
+ * it is deleted learns it from the new epoch at its next registration instead
475
+ * (GatewayStreamOpened, OWNERSHIP EPOCH), and wipes then just as it would have now.
476
+ *
477
+ * A delete is not a revoke. A revoke ends the gateway's certificate and keeps its owner: it sends
478
+ * no notice and wipes nothing, and a revoked gateway registered again by the owning organisation
479
+ * keeps everything. A delete ends the owner record itself, so the gateway starts empty for
480
+ * whoever registers it next, and nothing about people is carried to an organisation that did not
481
+ * choose it.
482
+ *
483
+ * A notice naming the epoch the gateway holds makes it wipe at once, in the scope asked and
484
+ * before it applies anything else, and then hold no epoch. A repeat of the notice it last applied
485
+ * is acknowledged again as before and changes nothing; a notice naming any other epoch is
486
+ * ignored.
487
+ *
488
+ * WIPE. A wipe of people and history (WIPE_SCOPE_PEOPLE_AND_HISTORY) keeps the building's setup:
489
+ * its spaces, with their structure and types; its devices and how they are filed; device links;
490
+ * connector configuration; the building's time zone; and the gateway's own credentials and the
491
+ * settings that are not about people. Everything about people goes: every user, role,
492
+ * membership and residency, with its residency id; every invite, join request and promotion
493
+ * request; every name and email address; the vouched administrators and their version; every end
494
+ * of access; every device's ownership, an owned device staying filed where it is, released, as
495
+ * one of the building's own; every contact; and everything recorded per home — room history,
496
+ * climate summaries, events, targets, modes and routines — including what is still queued for the
497
+ * api-server about any of them, and the gateway's own records of who did what. Every open session
498
+ * ends, and none is admitted until the wipe is done.
499
+ *
500
+ * Logs. A wipe takes what the gateway itself keeps; the operating system's log of the host it
501
+ * runs on is not the gateway's to erase, and what it holds stays until the host's own retention
502
+ * drops it. A gateway SHOULD NOT write user ids or names to that log in normal operation, so that
503
+ * nothing about people outlives a wipe there.
504
+ *
505
+ * It always renames every space too, since a name can name a person ("Ilse's room"): each gets a
506
+ * generic name, its type and its number among the spaces of that type under the same parent,
507
+ * counted from 1 in the order the gateway lists them — "Apartment 1", "Floor 2", "Room 3". In
508
+ * English, as here, since nothing on the gateway knows the building's language. The renaming is
509
+ * part of the wipe: done in the same step, all of it or none, and keyed by the same epoch, so it
510
+ * is done once per epoch as the rest is.
511
+ * No space is removed or moved by it; each keeps its type, its place in the structure, its
512
+ * devices, its filing and its links.
513
+ *
514
+ * The gateway then reports as a gateway starting afresh does: on new streams, a snapshot with no
515
+ * members (reporting.v1.ReportMembersRequest), no service reach and no invite routes, so the
516
+ * api-server's record of who belongs to the gateway empties too.
517
+ *
518
+ * @generated from message kusinta.iot.signaling.v1.GatewayDeleted
519
+ */
520
+ export declare type GatewayDeleted = Message<"kusinta.iot.signaling.v1.GatewayDeleted"> & {
521
+ /**
522
+ * @generated from field: string ownership_epoch = 1;
523
+ */
524
+ ownershipEpoch: string;
525
+
526
+ /**
527
+ * @generated from field: kusinta.iot.signaling.v1.WipeScope scope = 2;
528
+ */
529
+ scope: WipeScope;
530
+ };
531
+
532
+ /**
533
+ * Describes the message kusinta.iot.signaling.v1.GatewayDeleted.
534
+ * Use `create(GatewayDeletedSchema)` to create a new message.
535
+ */
536
+ export declare const GatewayDeletedSchema: GenMessage<GatewayDeleted>;
537
+
538
+ /**
539
+ * The gateway's acknowledgement of a GatewayDeleted, gateway → api-server: what it wiped.
540
+ *
541
+ * For WIPE_SCOPE_PEOPLE_AND_HISTORY, sent once the wipe is done. For WIPE_SCOPE_FACTORY_RESET,
542
+ * sent once everything but the gateway's credentials is gone and before it erases those, since
543
+ * sending needs them; the credentials go at once after. The api-server then revokes the gateway's
544
+ * certificate.
545
+ *
546
+ * @generated from message kusinta.iot.signaling.v1.GatewayWiped
547
+ */
548
+ export declare type GatewayWiped = Message<"kusinta.iot.signaling.v1.GatewayWiped"> & {
549
+ /**
550
+ * As GatewayDeleted.ownership_epoch.
551
+ *
552
+ * @generated from field: string ownership_epoch = 1;
553
+ */
554
+ ownershipEpoch: string;
555
+
556
+ /**
557
+ * The scope the gateway applied: WIPE_SCOPE_PEOPLE_AND_HISTORY when it was asked for that, and
558
+ * when it was asked for a factory reset it does not perform.
559
+ *
560
+ * @generated from field: kusinta.iot.signaling.v1.WipeScope scope = 2;
561
+ */
562
+ scope: WipeScope;
563
+
564
+ /**
565
+ * With WIPE_SCOPE_FACTORY_RESET: each piece of other hardware that still holds pairings the
566
+ * reset could not reach, for the person who asked to reset it by hand. Empty otherwise.
567
+ *
568
+ * @generated from field: repeated kusinta.iot.signaling.v1.PairingsLeftBehind left_behind = 3;
569
+ */
570
+ leftBehind: PairingsLeftBehind[];
571
+ };
572
+
573
+ /**
574
+ * Describes the message kusinta.iot.signaling.v1.GatewayWiped.
575
+ * Use `create(GatewayWipedSchema)` to create a new message.
576
+ */
577
+ export declare const GatewayWipedSchema: GenMessage<GatewayWiped>;
578
+
579
+ /**
580
+ * Hardware a connector drives that keeps its own pairings through a factory reset.
581
+ *
582
+ * @generated from message kusinta.iot.signaling.v1.PairingsLeftBehind
583
+ */
584
+ export declare type PairingsLeftBehind = Message<"kusinta.iot.signaling.v1.PairingsLeftBehind"> & {
585
+ /**
586
+ * As the connector described itself (webrtc.v1.ConnectorDescriptor): what kind of hardware,
587
+ * and its name, for a person.
588
+ *
589
+ * @generated from field: kusinta.iot.common.v1.ConnectorKind kind = 1;
590
+ */
591
+ kind: ConnectorKind;
592
+
593
+ /**
594
+ * @generated from field: string display_name = 2;
595
+ */
596
+ displayName: string;
597
+ };
598
+
599
+ /**
600
+ * Describes the message kusinta.iot.signaling.v1.PairingsLeftBehind.
601
+ * Use `create(PairingsLeftBehindSchema)` to create a new message.
602
+ */
603
+ export declare const PairingsLeftBehindSchema: GenMessage<PairingsLeftBehind>;
604
+
605
+ /**
606
+ * The administrators of the organisation that owns the gateway, api-server → gateway: the whole
607
+ * set each time, never a change to it.
608
+ *
609
+ * The api-server sends it on every stream, after GatewayStreamOpened and any unacknowledged
610
+ * TransferOutcome, and again whenever the set or the organisation's name changes. It sends the
611
+ * newest set again on every stream until the gateway acknowledges its version
612
+ * (VouchedAdministratorsApplied).
613
+ *
614
+ * It grants nothing on its own. A session holds ROLE_GATEWAY_ADMIN as a vouched administrator
615
+ * only when the token it opened with carries it (webrtc.v1.AppTokenClaims.roles); a user named
616
+ * here who connects with a token that does not is no administrator in that session. What the set
617
+ * says is who the administrators are between their tokens:
618
+ * * every user it names is a member of the gateway, listed as a vouched administrator
619
+ * (webrtc.v1.MemberDetail.vouched_admin) and counted under ROLE_GATEWAY_ADMIN, whether or not
620
+ * the gateway has seen them connect. Their name and email address are learnt from their own
621
+ * tokens, and are unknown until then;
622
+ * * their administration cannot be changed on the gateway (webrtc.v1 members.proto,
623
+ * "vouched_admin");
624
+ * * when a set the gateway applies drops a user, the gateway ends the administration of every
625
+ * open session of theirs at once, without waiting for them to reconnect: the session loses
626
+ * ROLE_GATEWAY_ADMIN as any change of role reaches it (webrtc.v1.LivePermissionUpdate,
627
+ * session_roles), unless the gateway holds that role for them itself;
628
+ * * a token issued (AppTokenClaims.iat, in whole seconds) no later than the second in which
629
+ * the set the gateway holds was issued, for a user that set does not name, vouches for no
630
+ * administration, so a token minted before a user was dropped cannot bring it back. A token
631
+ * issued later is honoured whether or not the set names its user, since the set may lag
632
+ * behind it.
633
+ *
634
+ * Safe to lose, repeat and reorder: the gateway applies a set only when its version is above the
635
+ * one it holds, ignores any other, and acknowledges each with the version it then holds. It keeps
636
+ * the set it holds, with its version and issued_at, across restarts, so a restart forgets nothing
637
+ * before the stream opens again. A wipe drops it, version included (GatewayDeleted, WIPE), so the
638
+ * versions of a new owner record start afresh.
639
+ *
640
+ * @generated from message kusinta.iot.signaling.v1.VouchedAdministrators
641
+ */
642
+ export declare type VouchedAdministrators = Message<"kusinta.iot.signaling.v1.VouchedAdministrators"> & {
643
+ /**
644
+ * Above that of every set the api-server sent before under the same ownership epoch. Never zero.
645
+ *
646
+ * @generated from field: uint64 version = 1;
647
+ */
648
+ version: bigint;
649
+
650
+ /**
651
+ * Each administrator of the owning organisation, once. Never empty, since an organisation
652
+ * always has one. The set carries no one's name or email address.
653
+ *
654
+ * @generated from field: repeated kusinta.iot.identity.v1.UserId administrators = 2;
655
+ */
656
+ administrators: UserId[];
657
+
658
+ /**
659
+ * The owning organisation's name, as its administrators set it: what
660
+ * webrtc.v1.PrivacyDisclosure.owner_organisation_name tells. Never its organisation number.
661
+ *
662
+ * @generated from field: string organisation_name = 3;
663
+ */
664
+ organisationName: string;
665
+
666
+ /**
667
+ * When the api-server made this set, on the clock that sets AppTokenClaims.iat, so the two
668
+ * compare. Never earlier than an earlier version's.
669
+ *
670
+ * @generated from field: google.protobuf.Timestamp issued_at = 4;
671
+ */
672
+ issuedAt?: Timestamp | undefined;
673
+ };
674
+
675
+ /**
676
+ * Describes the message kusinta.iot.signaling.v1.VouchedAdministrators.
677
+ * Use `create(VouchedAdministratorsSchema)` to create a new message.
678
+ */
679
+ export declare const VouchedAdministratorsSchema: GenMessage<VouchedAdministrators>;
680
+
681
+ /**
682
+ * The gateway's acknowledgement of a VouchedAdministrators, gateway → api-server.
683
+ *
684
+ * @generated from message kusinta.iot.signaling.v1.VouchedAdministratorsApplied
685
+ */
686
+ export declare type VouchedAdministratorsApplied = Message<"kusinta.iot.signaling.v1.VouchedAdministratorsApplied"> & {
687
+ /**
688
+ * The version the gateway holds once it has applied or ignored the set, which may be above
689
+ * the one acknowledged. The api-server sends no set at or below it again.
690
+ *
691
+ * @generated from field: uint64 version = 1;
692
+ */
693
+ version: bigint;
694
+ };
695
+
696
+ /**
697
+ * Describes the message kusinta.iot.signaling.v1.VouchedAdministratorsApplied.
698
+ * Use `create(VouchedAdministratorsAppliedSchema)` to create a new message.
699
+ */
700
+ export declare const VouchedAdministratorsAppliedSchema: GenMessage<VouchedAdministratorsApplied>;
701
+
702
+ /**
703
+ * A transfer of the gateway to another organisation, accepted by an administrator of the
704
+ * receiving one, api-server → gateway. It carries the receiving organisation's vouched set and
705
+ * what becomes of each outgoing staff member, and the gateway applies the two in one step — all
706
+ * of it or none — before anything after it on the stream. The ownership epoch is kept: residents,
707
+ * technicians, spaces and devices stay as they are.
708
+ *
709
+ * The api-server keeps an outcome until the gateway acknowledges it (TransferOutcomeApplied),
710
+ * through the gateway's offline spells, and sends it on every stream right after
711
+ * GatewayStreamOpened. While one is unacknowledged it sends the vouched set only inside it, as
712
+ * administrators, the newest set. Applying is idempotent by transfer_id: an outcome already
713
+ * applied is acknowledged again, its outgoing choices are not applied again, and its set is
714
+ * applied as any VouchedAdministrators is, by version.
715
+ *
716
+ * The outgoing staff are everyone named in outgoing and everyone holding ROLE_GATEWAY_ADMIN or
717
+ * ROLE_PROPERTY_OWNER on the gateway as the outcome is applied — save anyone the new set names,
718
+ * who is of the receiving organisation and is left as they are. The api-server names in outgoing
719
+ * every administrator of the sending organisation, and everyone it holds as reported with
720
+ * ROLE_GATEWAY_ADMIN or ROLE_PROPERTY_OWNER (reporting.v1.GatewayMember). Each outgoing staff
721
+ * member either:
722
+ * * leaves: their choice is LEAVE, UNSPECIFIED or a value the gateway does not know, or they
723
+ * are not named in outgoing at all, so a transfer keeps no one by omission. The gateway takes
724
+ * every role it holds for them and every SERVICE membership, with the pending invites they
725
+ * made as staff, as RemoveFromGateway by user id does from a caller who lives in none of
726
+ * their homes. It never ends a residency, nor the invites they made as its resident;
727
+ * * or stays as a technician: STAY_AS_TECHNICIAN. The gateway takes ROLE_GATEWAY_ADMIN and
728
+ * ROLE_PROPERTY_OWNER as webrtc.v1.SetMemberRole taking them away does, gives
729
+ * ROLE_TECHNICIAN, keeps their SERVICE memberships, files them SERVICE on every top-level
730
+ * space they are not filed on, and sets access_until as webrtc.v1.SetAccessUntil does. One
731
+ * whose access_until is not after the moment the outcome is applied leaves instead.
732
+ * Every change reaches the outgoing staff's open sessions at once, as a change of role does.
733
+ *
734
+ * @generated from message kusinta.iot.signaling.v1.TransferOutcome
735
+ */
736
+ export declare type TransferOutcome = Message<"kusinta.iot.signaling.v1.TransferOutcome"> & {
737
+ /**
738
+ * Minted by the api-server, opaque, unique among the gateway's transfers.
739
+ *
740
+ * @generated from field: string transfer_id = 1;
741
+ */
742
+ transferId: string;
743
+
744
+ /**
745
+ * The receiving organisation's vouched set, as it stands.
746
+ *
747
+ * @generated from field: kusinta.iot.signaling.v1.VouchedAdministrators administrators = 2;
748
+ */
749
+ administrators?: VouchedAdministrators | undefined;
750
+
751
+ /**
752
+ * What becomes of each outgoing staff member, once each.
753
+ *
754
+ * @generated from field: repeated kusinta.iot.signaling.v1.OutgoingChoice outgoing = 3;
755
+ */
756
+ outgoing: OutgoingChoice[];
757
+ };
758
+
759
+ /**
760
+ * Describes the message kusinta.iot.signaling.v1.TransferOutcome.
761
+ * Use `create(TransferOutcomeSchema)` to create a new message.
762
+ */
763
+ export declare const TransferOutcomeSchema: GenMessage<TransferOutcome>;
764
+
765
+ /**
766
+ * What a transfer does with one outgoing staff member (TransferOutcome).
767
+ *
768
+ * @generated from message kusinta.iot.signaling.v1.OutgoingChoice
769
+ */
770
+ export declare type OutgoingChoice = Message<"kusinta.iot.signaling.v1.OutgoingChoice"> & {
771
+ /**
772
+ * @generated from field: kusinta.iot.identity.v1.UserId user_id = 1;
773
+ */
774
+ userId?: UserId | undefined;
775
+
776
+ /**
777
+ * @generated from field: kusinta.iot.signaling.v1.OutgoingStaffChoice choice = 2;
778
+ */
779
+ choice: OutgoingStaffChoice;
780
+
781
+ /**
782
+ * When their access as a technician ends; unset for no end. Only with STAY_AS_TECHNICIAN, and
783
+ * ignored with any other choice.
784
+ *
785
+ * @generated from field: google.protobuf.Timestamp access_until = 3;
786
+ */
787
+ accessUntil?: Timestamp | undefined;
788
+ };
789
+
790
+ /**
791
+ * Describes the message kusinta.iot.signaling.v1.OutgoingChoice.
792
+ * Use `create(OutgoingChoiceSchema)` to create a new message.
793
+ */
794
+ export declare const OutgoingChoiceSchema: GenMessage<OutgoingChoice>;
795
+
796
+ /**
797
+ * The gateway's acknowledgement of a TransferOutcome, gateway → api-server: applied now or
798
+ * before. It acknowledges the outcome's vouched set too. The api-server sends the outcome no
799
+ * more.
800
+ *
801
+ * @generated from message kusinta.iot.signaling.v1.TransferOutcomeApplied
802
+ */
803
+ export declare type TransferOutcomeApplied = Message<"kusinta.iot.signaling.v1.TransferOutcomeApplied"> & {
804
+ /**
805
+ * As TransferOutcome.transfer_id.
806
+ *
807
+ * @generated from field: string transfer_id = 1;
808
+ */
809
+ transferId: string;
810
+ };
811
+
812
+ /**
813
+ * Describes the message kusinta.iot.signaling.v1.TransferOutcomeApplied.
814
+ * Use `create(TransferOutcomeAppliedSchema)` to create a new message.
815
+ */
816
+ export declare const TransferOutcomeAppliedSchema: GenMessage<TransferOutcomeApplied>;
817
+
379
818
  /**
380
819
  * Messages sent by the app (GatewaySignalingService.UserConnect stream).
381
820
  * Auth: Authorization: Bearer <jwt> in gRPC request metadata (validated by interceptor).
@@ -672,3 +1111,80 @@ export enum RedeemOutcome {
672
1111
  */
673
1112
  export declare const RedeemOutcomeSchema: GenEnum<RedeemOutcome>;
674
1113
 
1114
+ /**
1115
+ * How much a wipe takes (GatewayDeleted).
1116
+ *
1117
+ * @generated from enum kusinta.iot.signaling.v1.WipeScope
1118
+ */
1119
+ export enum WipeScope {
1120
+ /**
1121
+ * Not stated. Read as PEOPLE_AND_HISTORY, as is any value the gateway does not know.
1122
+ *
1123
+ * @generated from enum value: WIPE_SCOPE_UNSPECIFIED = 0;
1124
+ */
1125
+ UNSPECIFIED = 0,
1126
+
1127
+ /**
1128
+ * Decommissioning: people and their history go, every space is given a generic name, and the
1129
+ * rest of the building's setup stays (GatewayDeleted, WIPE).
1130
+ *
1131
+ * @generated from enum value: WIPE_SCOPE_PEOPLE_AND_HISTORY = 1;
1132
+ */
1133
+ PEOPLE_AND_HISTORY = 1,
1134
+
1135
+ /**
1136
+ * Out of the box, for a gateway that is to be used anywhere else: everything the gateway holds
1137
+ * goes — what a wipe of people and history takes and also the building's setup, the gateway's
1138
+ * certificates, keys and registration, connector configuration, the readings connectors store
1139
+ * on the gateway, and the log files it keeps itself (not the host's system log: see WIPE, Logs).
1140
+ * What is held in other hardware is not reached: devices paired
1141
+ * to a radio central the gateway drives stay paired there until that is reset too, and the
1142
+ * gateway says so (GatewayWiped.left_behind).
1143
+ *
1144
+ * A gateway that does not perform a factory reset wipes people and history instead, and says
1145
+ * so in GatewayWiped.scope.
1146
+ *
1147
+ * @generated from enum value: WIPE_SCOPE_FACTORY_RESET = 2;
1148
+ */
1149
+ FACTORY_RESET = 2,
1150
+ }
1151
+
1152
+ /**
1153
+ * Describes the enum kusinta.iot.signaling.v1.WipeScope.
1154
+ */
1155
+ export declare const WipeScopeSchema: GenEnum<WipeScope>;
1156
+
1157
+ /**
1158
+ * Whether an outgoing staff member leaves the gateway or stays on it as a technician. Chosen
1159
+ * per person by the sending organisation's administrator who offered the transfer.
1160
+ *
1161
+ * @generated from enum kusinta.iot.signaling.v1.OutgoingStaffChoice
1162
+ */
1163
+ export enum OutgoingStaffChoice {
1164
+ /**
1165
+ * No choice stated. Read as LEAVE, as is any value the gateway does not know.
1166
+ *
1167
+ * @generated from enum value: OUTGOING_STAFF_CHOICE_UNSPECIFIED = 0;
1168
+ */
1169
+ UNSPECIFIED = 0,
1170
+
1171
+ /**
1172
+ * Leaves: every staff role and SERVICE membership goes, and no residency.
1173
+ *
1174
+ * @generated from enum value: OUTGOING_STAFF_CHOICE_LEAVE = 1;
1175
+ */
1176
+ LEAVE = 1,
1177
+
1178
+ /**
1179
+ * Stays as a technician, with access_until as its end.
1180
+ *
1181
+ * @generated from enum value: OUTGOING_STAFF_CHOICE_STAY_AS_TECHNICIAN = 2;
1182
+ */
1183
+ STAY_AS_TECHNICIAN = 2,
1184
+ }
1185
+
1186
+ /**
1187
+ * Describes the enum kusinta.iot.signaling.v1.OutgoingStaffChoice.
1188
+ */
1189
+ export declare const OutgoingStaffChoiceSchema: GenEnum<OutgoingStaffChoice>;
1190
+