@kusinta/iot-schema 0.2.0-beta.5 → 0.2.0-beta.51
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.
- package/package.json +42 -28
- package/src/kusinta/iot/access/v1/acl_pb.d.ts +138 -2
- package/src/kusinta/iot/access/v1/acl_pb.js +19 -2
- package/src/kusinta/iot/access/v1/roles_pb.d.ts +160 -4
- package/src/kusinta/iot/access/v1/roles_pb.js +128 -5
- package/src/kusinta/iot/accountlink/v1/account_link_pb.d.ts +591 -0
- package/src/kusinta/iot/accountlink/v1/account_link_pb.js +160 -0
- package/src/kusinta/iot/climate/v1/climate_pb.d.ts +1495 -0
- package/src/kusinta/iot/climate/v1/climate_pb.js +278 -0
- package/src/kusinta/iot/commissioning/v1/commissioning_pb.d.ts +1359 -0
- package/src/kusinta/iot/commissioning/v1/commissioning_pb.js +282 -0
- package/src/kusinta/iot/common/v1/pairing_pb.d.ts +219 -0
- package/src/kusinta/iot/common/v1/pairing_pb.js +50 -0
- package/src/kusinta/iot/common/v1/types_pb.d.ts +235 -0
- package/src/kusinta/iot/common/v1/types_pb.js +84 -2
- package/src/kusinta/iot/connector/v1/connector_pb.d.ts +874 -3
- package/src/kusinta/iot/connector/v1/connector_pb.js +126 -13
- package/src/kusinta/iot/device/v1/cluster_state_pb.d.ts +213 -1
- package/src/kusinta/iot/device/v1/cluster_state_pb.js +37 -2
- package/src/kusinta/iot/device/v1/descriptor_pb.d.ts +32 -4
- package/src/kusinta/iot/device/v1/descriptor_pb.js +2 -1
- package/src/kusinta/iot/device/v1/device_event_pb.d.ts +89 -5
- package/src/kusinta/iot/device/v1/device_event_pb.js +1 -1
- package/src/kusinta/iot/device/v1/device_pb.d.ts +426 -11
- package/src/kusinta/iot/device/v1/device_pb.js +74 -2
- package/src/kusinta/iot/device/v1/properties_pb.d.ts +26 -5
- package/src/kusinta/iot/device/v1/properties_pb.js +1 -1
- package/src/kusinta/iot/device/v1/property_update_pb.d.ts +42 -2
- package/src/kusinta/iot/device/v1/property_update_pb.js +2 -1
- package/src/kusinta/iot/heating/v1/heating_pb.d.ts +656 -0
- package/src/kusinta/iot/heating/v1/heating_pb.js +119 -0
- package/src/kusinta/iot/link/v1/link_pb.d.ts +438 -0
- package/src/kusinta/iot/link/v1/link_pb.js +121 -0
- package/src/kusinta/iot/registration/v1/registration_pb.d.ts +18 -0
- package/src/kusinta/iot/registration/v1/registration_pb.js +1 -1
- package/src/kusinta/iot/reporting/v1/reporting_pb.d.ts +1251 -0
- package/src/kusinta/iot/reporting/v1/reporting_pb.js +238 -0
- package/src/kusinta/iot/reporting/v1/reporting_service_pb.d.ts +63 -0
- package/src/kusinta/iot/reporting/v1/reporting_service_pb.js +24 -0
- package/src/kusinta/iot/signaling/v1/signaling_pb.d.ts +939 -7
- package/src/kusinta/iot/signaling/v1/signaling_pb.js +163 -4
- package/src/kusinta/iot/signaling/v1/signaling_service_pb.d.ts +24 -1
- package/src/kusinta/iot/signaling/v1/signaling_service_pb.js +1 -1
- package/src/kusinta/iot/space/v1/space_pb.d.ts +146 -2
- package/src/kusinta/iot/space/v1/space_pb.js +10 -1
- package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.d.ts +15 -0
- package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.js +1 -1
- package/src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.d.ts +69 -0
- package/src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.js +19 -0
- package/src/kusinta/iot/vendor/v1/vendor_options_pb.d.ts +5 -4
- package/src/kusinta/iot/vendor/v1/vendor_options_pb.js +5 -4
- package/src/kusinta/iot/webrtc/v1/app_token_pb.d.ts +48 -5
- package/src/kusinta/iot/webrtc/v1/app_token_pb.js +1 -1
- package/src/kusinta/iot/webrtc/v1/command_pb.d.ts +56 -0
- package/src/kusinta/iot/webrtc/v1/command_pb.js +1 -1
- package/src/kusinta/iot/webrtc/v1/device_state_pb.d.ts +179 -5
- package/src/kusinta/iot/webrtc/v1/device_state_pb.js +34 -5
- package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +732 -3
- package/src/kusinta/iot/webrtc/v1/envelope_pb.js +84 -4
- package/src/kusinta/iot/webrtc/v1/household_pb.d.ts +612 -0
- package/src/kusinta/iot/webrtc/v1/household_pb.js +134 -0
- package/src/kusinta/iot/webrtc/v1/invite_pb.d.ts +502 -0
- package/src/kusinta/iot/webrtc/v1/invite_pb.js +108 -0
- package/src/kusinta/iot/webrtc/v1/management_pb.d.ts +2183 -76
- package/src/kusinta/iot/webrtc/v1/management_pb.js +311 -5
- package/src/kusinta/iot/webrtc/v1/members_pb.d.ts +582 -0
- package/src/kusinta/iot/webrtc/v1/members_pb.js +113 -0
- package/src/kusinta/iot/webrtc/v1/permission_push_pb.d.ts +66 -4
- package/src/kusinta/iot/webrtc/v1/permission_push_pb.js +9 -1
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
// @generated from file kusinta/iot/signaling/v1/signaling.proto (package kusinta.iot.signaling.v1, syntax proto3)
|
|
3
3
|
/* eslint-disable */
|
|
4
4
|
|
|
5
|
-
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
|
|
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 { AccountLinkCancelled, AccountLinked, AccountLinkResult, RefreshToken, RevokeToken, TokenRefreshed, TokenRevoked } from "../../accountlink/v1/account_link_pb.js";
|
|
9
|
+
import type { ConnectorKind } from "../../common/v1/types_pb.js";
|
|
10
|
+
import type { Timestamp } from "@bufbuild/protobuf/wkt";
|
|
8
11
|
|
|
9
12
|
/**
|
|
10
13
|
* Describes the file kusinta/iot/signaling/v1/signaling.proto.
|
|
@@ -76,10 +79,26 @@ export declare type IceCandidate = Message<"kusinta.iot.signaling.v1.IceCandidat
|
|
|
76
79
|
export declare const IceCandidateSchema: GenMessage<IceCandidate>;
|
|
77
80
|
|
|
78
81
|
/**
|
|
79
|
-
* Empty keepalive
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
82
|
+
* Empty keepalive, sent periodically on a stream that would otherwise fall
|
|
83
|
+
* silent. The DATA frames it produces reset the inactivity timers on any proxy
|
|
84
|
+
* between the two ends and stop it tearing the stream down. Carries no routing
|
|
85
|
+
* target and is dropped on receipt.
|
|
86
|
+
*
|
|
87
|
+
* Carried on two arms, each covering a half that falls silent while neither end
|
|
88
|
+
* has anything to say: the building-server gateway sends it upstream on
|
|
89
|
+
* GatewayConnect, and the api-server sends it downstream to the app on
|
|
90
|
+
* UserConnectResponse. The remaining halves have no arm — an app leg's upstream
|
|
91
|
+
* that goes idle is one the client can write on whenever it needs to.
|
|
92
|
+
*
|
|
93
|
+
* Never an acknowledgement. A heartbeat answers no message and must not be
|
|
94
|
+
* treated as confirming one.
|
|
95
|
+
*
|
|
96
|
+
* On GatewayConnect it also lets the api-server judge whether the gateway is
|
|
97
|
+
* present. A gateway is present while its stream is open, and never lets it
|
|
98
|
+
* carry nothing for more than 30 seconds: a heartbeat fills any longer silence.
|
|
99
|
+
* A stream that has carried nothing for 90 seconds may be taken as gone, even
|
|
100
|
+
* when the transport has not yet said so. That is the gateway's presence and
|
|
101
|
+
* nothing more: a present gateway may still have lost its devices.
|
|
83
102
|
*
|
|
84
103
|
* @generated from message kusinta.iot.signaling.v1.HeartBeat
|
|
85
104
|
*/
|
|
@@ -124,6 +143,23 @@ export declare type UserHandshakeAck = Message<"kusinta.iot.signaling.v1.UserHan
|
|
|
124
143
|
* @generated from field: string reason = 2;
|
|
125
144
|
*/
|
|
126
145
|
reason: string;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* How often the api-server will send a HeartBeat on this stream, in
|
|
149
|
+
* milliseconds.
|
|
150
|
+
*
|
|
151
|
+
* Advisory, and a client must not refuse a stream over it: a client that has
|
|
152
|
+
* seen no traffic at all for a small multiple of this may take the stream for
|
|
153
|
+
* gone and reattach with the same session_id, which is the difference between
|
|
154
|
+
* a renegotiation that stalls and one that reconnects. The server is free to
|
|
155
|
+
* answer with a different value on the next session.
|
|
156
|
+
*
|
|
157
|
+
* Zero means the server is not heartbeating this stream, and a client must
|
|
158
|
+
* then not infer anything from silence.
|
|
159
|
+
*
|
|
160
|
+
* @generated from field: uint32 heartbeat_interval_ms = 3;
|
|
161
|
+
*/
|
|
162
|
+
heartbeatIntervalMs: number;
|
|
127
163
|
};
|
|
128
164
|
|
|
129
165
|
/**
|
|
@@ -141,13 +177,18 @@ export declare const UserHandshakeAckSchema: GenMessage<UserHandshakeAck>;
|
|
|
141
177
|
*/
|
|
142
178
|
export declare type GatewayConnectRequest = Message<"kusinta.iot.signaling.v1.GatewayConnectRequest"> & {
|
|
143
179
|
/**
|
|
180
|
+
* On redeem_invite_result, the user who redeemed (RedeemInvite). Unset on an
|
|
181
|
+
* acknowledgement and on the accountlink.v1 arms, which are to no user.
|
|
182
|
+
*
|
|
144
183
|
* @generated from field: kusinta.iot.identity.v1.UserId target_user_id = 1;
|
|
145
184
|
*/
|
|
146
185
|
targetUserId?: UserId | undefined;
|
|
147
186
|
|
|
148
187
|
/**
|
|
149
188
|
* The session of target_user_id this message answers. See the contract above.
|
|
150
|
-
* Ignored on a heartbeat, which carries no routing target at all
|
|
189
|
+
* Ignored on a heartbeat, which carries no routing target at all, and on
|
|
190
|
+
* redeem_invite_result, the acknowledgements and the accountlink.v1 arms, which
|
|
191
|
+
* belong to no session.
|
|
151
192
|
*
|
|
152
193
|
* @generated from field: string session_id = 5;
|
|
153
194
|
*/
|
|
@@ -174,6 +215,48 @@ export declare type GatewayConnectRequest = Message<"kusinta.iot.signaling.v1.Ga
|
|
|
174
215
|
*/
|
|
175
216
|
value: HeartBeat;
|
|
176
217
|
case: "heartbeat";
|
|
218
|
+
} | {
|
|
219
|
+
/**
|
|
220
|
+
* @generated from field: kusinta.iot.signaling.v1.RedeemInviteResult redeem_invite_result = 6;
|
|
221
|
+
*/
|
|
222
|
+
value: RedeemInviteResult;
|
|
223
|
+
case: "redeemInviteResult";
|
|
224
|
+
} | {
|
|
225
|
+
/**
|
|
226
|
+
* @generated from field: kusinta.iot.signaling.v1.VouchedAdministratorsApplied vouched_administrators_applied = 7;
|
|
227
|
+
*/
|
|
228
|
+
value: VouchedAdministratorsApplied;
|
|
229
|
+
case: "vouchedAdministratorsApplied";
|
|
230
|
+
} | {
|
|
231
|
+
/**
|
|
232
|
+
* @generated from field: kusinta.iot.signaling.v1.TransferOutcomeApplied transfer_outcome_applied = 8;
|
|
233
|
+
*/
|
|
234
|
+
value: TransferOutcomeApplied;
|
|
235
|
+
case: "transferOutcomeApplied";
|
|
236
|
+
} | {
|
|
237
|
+
/**
|
|
238
|
+
* @generated from field: kusinta.iot.signaling.v1.GatewayWiped wiped = 9;
|
|
239
|
+
*/
|
|
240
|
+
value: GatewayWiped;
|
|
241
|
+
case: "wiped";
|
|
242
|
+
} | {
|
|
243
|
+
/**
|
|
244
|
+
* @generated from field: kusinta.iot.accountlink.v1.AccountLinkResult account_link_result = 10;
|
|
245
|
+
*/
|
|
246
|
+
value: AccountLinkResult;
|
|
247
|
+
case: "accountLinkResult";
|
|
248
|
+
} | {
|
|
249
|
+
/**
|
|
250
|
+
* @generated from field: kusinta.iot.accountlink.v1.RefreshToken refresh_token = 11;
|
|
251
|
+
*/
|
|
252
|
+
value: RefreshToken;
|
|
253
|
+
case: "refreshToken";
|
|
254
|
+
} | {
|
|
255
|
+
/**
|
|
256
|
+
* @generated from field: kusinta.iot.accountlink.v1.RevokeToken revoke_token = 12;
|
|
257
|
+
*/
|
|
258
|
+
value: RevokeToken;
|
|
259
|
+
case: "revokeToken";
|
|
177
260
|
} | { case: undefined; value?: undefined };
|
|
178
261
|
};
|
|
179
262
|
|
|
@@ -190,6 +273,11 @@ export declare const GatewayConnectRequestSchema: GenMessage<GatewayConnectReque
|
|
|
190
273
|
*/
|
|
191
274
|
export declare type GatewayConnectResponse = Message<"kusinta.iot.signaling.v1.GatewayConnectResponse"> & {
|
|
192
275
|
/**
|
|
276
|
+
* On redeem_invite, the user redeeming: the sub of the token the api-server
|
|
277
|
+
* verified, and never a value the user supplied. Unset on what concerns the
|
|
278
|
+
* gateway itself (stream_opened, vouched_administrators, transfer_outcome,
|
|
279
|
+
* gateway_deleted) and on the accountlink.v1 arms, which are from no user.
|
|
280
|
+
*
|
|
193
281
|
* @generated from field: kusinta.iot.identity.v1.UserId from_user_id = 1;
|
|
194
282
|
*/
|
|
195
283
|
fromUserId?: UserId | undefined;
|
|
@@ -197,7 +285,8 @@ export declare type GatewayConnectResponse = Message<"kusinta.iot.signaling.v1.G
|
|
|
197
285
|
/**
|
|
198
286
|
* The session of from_user_id this message originates from — the value the
|
|
199
287
|
* gateway must echo on the GatewayConnectRequest that answers it. See the
|
|
200
|
-
* contract above.
|
|
288
|
+
* contract above. Unset on redeem_invite, on what concerns the gateway itself
|
|
289
|
+
* and on the accountlink.v1 arms, which belong to no session.
|
|
201
290
|
*
|
|
202
291
|
* @generated from field: string session_id = 4;
|
|
203
292
|
*/
|
|
@@ -218,6 +307,60 @@ export declare type GatewayConnectResponse = Message<"kusinta.iot.signaling.v1.G
|
|
|
218
307
|
*/
|
|
219
308
|
value: IceCandidate;
|
|
220
309
|
case: "iceCandidate";
|
|
310
|
+
} | {
|
|
311
|
+
/**
|
|
312
|
+
* @generated from field: kusinta.iot.signaling.v1.RedeemInvite redeem_invite = 5;
|
|
313
|
+
*/
|
|
314
|
+
value: RedeemInvite;
|
|
315
|
+
case: "redeemInvite";
|
|
316
|
+
} | {
|
|
317
|
+
/**
|
|
318
|
+
* @generated from field: kusinta.iot.signaling.v1.VouchedAdministrators vouched_administrators = 6;
|
|
319
|
+
*/
|
|
320
|
+
value: VouchedAdministrators;
|
|
321
|
+
case: "vouchedAdministrators";
|
|
322
|
+
} | {
|
|
323
|
+
/**
|
|
324
|
+
* @generated from field: kusinta.iot.signaling.v1.TransferOutcome transfer_outcome = 7;
|
|
325
|
+
*/
|
|
326
|
+
value: TransferOutcome;
|
|
327
|
+
case: "transferOutcome";
|
|
328
|
+
} | {
|
|
329
|
+
/**
|
|
330
|
+
* @generated from field: kusinta.iot.signaling.v1.GatewayStreamOpened stream_opened = 8;
|
|
331
|
+
*/
|
|
332
|
+
value: GatewayStreamOpened;
|
|
333
|
+
case: "streamOpened";
|
|
334
|
+
} | {
|
|
335
|
+
/**
|
|
336
|
+
* @generated from field: kusinta.iot.signaling.v1.GatewayDeleted gateway_deleted = 9;
|
|
337
|
+
*/
|
|
338
|
+
value: GatewayDeleted;
|
|
339
|
+
case: "gatewayDeleted";
|
|
340
|
+
} | {
|
|
341
|
+
/**
|
|
342
|
+
* @generated from field: kusinta.iot.accountlink.v1.AccountLinked account_linked = 10;
|
|
343
|
+
*/
|
|
344
|
+
value: AccountLinked;
|
|
345
|
+
case: "accountLinked";
|
|
346
|
+
} | {
|
|
347
|
+
/**
|
|
348
|
+
* @generated from field: kusinta.iot.accountlink.v1.TokenRefreshed token_refreshed = 11;
|
|
349
|
+
*/
|
|
350
|
+
value: TokenRefreshed;
|
|
351
|
+
case: "tokenRefreshed";
|
|
352
|
+
} | {
|
|
353
|
+
/**
|
|
354
|
+
* @generated from field: kusinta.iot.accountlink.v1.TokenRevoked token_revoked = 12;
|
|
355
|
+
*/
|
|
356
|
+
value: TokenRevoked;
|
|
357
|
+
case: "tokenRevoked";
|
|
358
|
+
} | {
|
|
359
|
+
/**
|
|
360
|
+
* @generated from field: kusinta.iot.accountlink.v1.AccountLinkCancelled account_link_cancelled = 13;
|
|
361
|
+
*/
|
|
362
|
+
value: AccountLinkCancelled;
|
|
363
|
+
case: "accountLinkCancelled";
|
|
221
364
|
} | { case: undefined; value?: undefined };
|
|
222
365
|
};
|
|
223
366
|
|
|
@@ -227,6 +370,497 @@ export declare type GatewayConnectResponse = Message<"kusinta.iot.signaling.v1.G
|
|
|
227
370
|
*/
|
|
228
371
|
export declare const GatewayConnectResponseSchema: GenMessage<GatewayConnectResponse>;
|
|
229
372
|
|
|
373
|
+
/**
|
|
374
|
+
* A person redeeming an invite (webrtc.v1 CreateInvite), api-server → gateway.
|
|
375
|
+
* Answered with a RedeemInviteResult carrying the same request_id.
|
|
376
|
+
*
|
|
377
|
+
* The api-server sends it only to the gateway whose invite routes hold the
|
|
378
|
+
* secret's hash (reporting.v1.ReportInviteRoutesRequest), and only for a user
|
|
379
|
+
* whose account has a verified email: it answers a user without one itself,
|
|
380
|
+
* before routing. A hash held by more than one gateway routes nowhere and is
|
|
381
|
+
* answered as INVALID.
|
|
382
|
+
*
|
|
383
|
+
* A code is 40 bits, few enough to guess at. The api-server limits how often each
|
|
384
|
+
* user, and each client address, may redeem, and answers past that limit itself.
|
|
385
|
+
*
|
|
386
|
+
* The api-server waits at least 30 seconds for the result. With no result by
|
|
387
|
+
* then, or no stream to send on, it tells the user to try again later; the redeem
|
|
388
|
+
* may or may not have been done. Trying again is safe: a redeem is idempotent for
|
|
389
|
+
* its user (see RedeemOutcome).
|
|
390
|
+
*
|
|
391
|
+
* @generated from message kusinta.iot.signaling.v1.RedeemInvite
|
|
392
|
+
*/
|
|
393
|
+
export declare type RedeemInvite = Message<"kusinta.iot.signaling.v1.RedeemInvite"> & {
|
|
394
|
+
/**
|
|
395
|
+
* Minted by the api-server, opaque, unique among its redeems in flight.
|
|
396
|
+
*
|
|
397
|
+
* @generated from field: string request_id = 1;
|
|
398
|
+
*/
|
|
399
|
+
requestId: string;
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* The secret as the user gave it: the token from a link, or the code as typed.
|
|
403
|
+
* The gateway hashes and normalises as webrtc.v1 invite.proto says.
|
|
404
|
+
*
|
|
405
|
+
* @generated from oneof kusinta.iot.signaling.v1.RedeemInvite.secret
|
|
406
|
+
*/
|
|
407
|
+
secret: {
|
|
408
|
+
/**
|
|
409
|
+
* @generated from field: string token = 2;
|
|
410
|
+
*/
|
|
411
|
+
value: string;
|
|
412
|
+
case: "token";
|
|
413
|
+
} | {
|
|
414
|
+
/**
|
|
415
|
+
* @generated from field: string code = 3;
|
|
416
|
+
*/
|
|
417
|
+
value: string;
|
|
418
|
+
case: "code";
|
|
419
|
+
} | { case: undefined; value?: undefined };
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* The display name the user's token carries, for the join request it may make, by the
|
|
423
|
+
* same rule as webrtc.v1.AppTokenClaims.name: the identity provider's display-name claim
|
|
424
|
+
* alone, never a username or an email address. May be empty.
|
|
425
|
+
*
|
|
426
|
+
* @generated from field: string display_name = 4;
|
|
427
|
+
*/
|
|
428
|
+
displayName: string;
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* The verified email address of the user's account, as their token states it.
|
|
432
|
+
* Never an address the token does not mark verified.
|
|
433
|
+
*
|
|
434
|
+
* @generated from field: string verified_email = 5;
|
|
435
|
+
*/
|
|
436
|
+
verifiedEmail: string;
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Describes the message kusinta.iot.signaling.v1.RedeemInvite.
|
|
441
|
+
* Use `create(RedeemInviteSchema)` to create a new message.
|
|
442
|
+
*/
|
|
443
|
+
export declare const RedeemInviteSchema: GenMessage<RedeemInvite>;
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* The answer to a RedeemInvite, gateway → api-server.
|
|
447
|
+
*
|
|
448
|
+
* @generated from message kusinta.iot.signaling.v1.RedeemInviteResult
|
|
449
|
+
*/
|
|
450
|
+
export declare type RedeemInviteResult = Message<"kusinta.iot.signaling.v1.RedeemInviteResult"> & {
|
|
451
|
+
/**
|
|
452
|
+
* As RedeemInvite.request_id.
|
|
453
|
+
*
|
|
454
|
+
* @generated from field: string request_id = 1;
|
|
455
|
+
*/
|
|
456
|
+
requestId: string;
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* @generated from field: kusinta.iot.signaling.v1.RedeemOutcome outcome = 2;
|
|
460
|
+
*/
|
|
461
|
+
outcome: RedeemOutcome;
|
|
462
|
+
};
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Describes the message kusinta.iot.signaling.v1.RedeemInviteResult.
|
|
466
|
+
* Use `create(RedeemInviteResultSchema)` to create a new message.
|
|
467
|
+
*/
|
|
468
|
+
export declare const RedeemInviteResultSchema: GenMessage<RedeemInviteResult>;
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* The api-server's first message on every GatewayConnect stream, sent before any other. It
|
|
472
|
+
* carries the ownership epoch of the gateway's owner record.
|
|
473
|
+
*
|
|
474
|
+
* OWNER OF RECORD. A gateway is owned by an organisation, which the api-server keeps; the
|
|
475
|
+
* organisation's administrators are the gateway's vouched administrators. The api-server
|
|
476
|
+
* vouches for them twice: in the token of each session one of them opens
|
|
477
|
+
* (webrtc.v1.AppTokenClaims.roles), and to the gateway, as the whole set
|
|
478
|
+
* (VouchedAdministrators). Neither can be changed on the gateway. A gateway moves to another
|
|
479
|
+
* organisation only by a transfer the receiving organisation accepted (TransferOutcome).
|
|
480
|
+
*
|
|
481
|
+
* OWNERSHIP EPOCH. An opaque id the api-server gives each owner record of a gateway. It is new
|
|
482
|
+
* at the first registration after the gateway was deleted, and only then: a revoke, a
|
|
483
|
+
* re-registration by the owning organisation and a transfer all keep it. The gateway takes it
|
|
484
|
+
* from the api-server's answer to its own registration (registration.v1.RegistrationComplete)
|
|
485
|
+
* and from this message, and from nowhere else: never from an app session, nor from anything an
|
|
486
|
+
* app hands over, the registration token included. It keeps the epoch it holds across restarts.
|
|
487
|
+
*
|
|
488
|
+
* Given an epoch other than the one it holds, the gateway wipes people and history (see
|
|
489
|
+
* GatewayDeleted, WIPE), space names included, before it admits any session or applies anything
|
|
490
|
+
* 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
|
|
491
|
+
* epoch it holds, given again, changes nothing, so the same epoch twice wipes once.
|
|
492
|
+
*
|
|
493
|
+
* A gateway that holds an epoch treats a stream on which anything arrives before this message,
|
|
494
|
+
* or this message with an empty epoch, as not open: it applies nothing from it and closes it.
|
|
495
|
+
* So the api-server must send this message first on every stream before a gateway that
|
|
496
|
+
* requires it is deployed.
|
|
497
|
+
*
|
|
498
|
+
* @generated from message kusinta.iot.signaling.v1.GatewayStreamOpened
|
|
499
|
+
*/
|
|
500
|
+
export declare type GatewayStreamOpened = Message<"kusinta.iot.signaling.v1.GatewayStreamOpened"> & {
|
|
501
|
+
/**
|
|
502
|
+
* @generated from field: string ownership_epoch = 1;
|
|
503
|
+
*/
|
|
504
|
+
ownershipEpoch: string;
|
|
505
|
+
};
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
* Describes the message kusinta.iot.signaling.v1.GatewayStreamOpened.
|
|
509
|
+
* Use `create(GatewayStreamOpenedSchema)` to create a new message.
|
|
510
|
+
*/
|
|
511
|
+
export declare const GatewayStreamOpenedSchema: GenMessage<GatewayStreamOpened>;
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
* The gateway was deleted at the api-server, api-server → gateway: the owner record with
|
|
515
|
+
* ownership_epoch has ended, and the gateway decommissions at once. Sent to a connected gateway
|
|
516
|
+
* before the api-server ends its stream, and answered with GatewayWiped. A gateway offline when
|
|
517
|
+
* it is deleted learns it from the new epoch at its next registration instead
|
|
518
|
+
* (GatewayStreamOpened, OWNERSHIP EPOCH), and wipes then just as it would have now.
|
|
519
|
+
*
|
|
520
|
+
* A delete is not a revoke. A revoke ends the gateway's certificate and keeps its owner: it sends
|
|
521
|
+
* no notice and wipes nothing, and a revoked gateway registered again by the owning organisation
|
|
522
|
+
* keeps everything. A delete ends the owner record itself, so the gateway starts empty for
|
|
523
|
+
* whoever registers it next, and nothing about people is carried to an organisation that did not
|
|
524
|
+
* choose it.
|
|
525
|
+
*
|
|
526
|
+
* A notice naming the epoch the gateway holds makes it wipe at once, in the scope asked and
|
|
527
|
+
* before it applies anything else, and then hold no epoch. A repeat of the notice it last applied
|
|
528
|
+
* is acknowledged again as before and changes nothing; a notice naming any other epoch is
|
|
529
|
+
* ignored.
|
|
530
|
+
*
|
|
531
|
+
* WIPE. A wipe of people and history (WIPE_SCOPE_PEOPLE_AND_HISTORY) keeps the building's setup:
|
|
532
|
+
* its spaces, with their structure and types; its devices and how they are filed; device links;
|
|
533
|
+
* connector configuration; the building's time zone; and the gateway's own credentials and the
|
|
534
|
+
* settings that are not about people. Everything about people goes: every user, role,
|
|
535
|
+
* membership and residency, with its residency id; every invite, join request and promotion
|
|
536
|
+
* request; every name and email address; the vouched administrators and their version; every end
|
|
537
|
+
* of access; every device's ownership, an owned device staying filed where it is, released, as
|
|
538
|
+
* one of the building's own; every contact; and everything recorded per home — room history,
|
|
539
|
+
* climate summaries, events, targets, modes and routines — including what is still queued for the
|
|
540
|
+
* api-server about any of them, and the gateway's own records of who did what. No home is held
|
|
541
|
+
* vacant after it (webrtc.v1 household.proto, VACANCY SETBACK): with every residency gone,
|
|
542
|
+
* nothing is left to show that anyone lived in any home, so the setback ends in all of them. A
|
|
543
|
+
* home's own wipe (household.proto, WIPE) keeps it. Every open session ends, and none is
|
|
544
|
+
* admitted until the wipe is done.
|
|
545
|
+
*
|
|
546
|
+
* Logs. A wipe takes what the gateway itself keeps; the operating system's log of the host it
|
|
547
|
+
* runs on is not the gateway's to erase, and what it holds stays until the host's own retention
|
|
548
|
+
* drops it. A gateway SHOULD NOT write user ids or names to that log in normal operation, so that
|
|
549
|
+
* nothing about people outlives a wipe there.
|
|
550
|
+
*
|
|
551
|
+
* It always renames every space too, since a name can name a person ("Ilse's room"): each gets a
|
|
552
|
+
* generic name, its type and its number among the spaces of that type under the same parent,
|
|
553
|
+
* counted from 1 in the order the gateway lists them — "Apartment 1", "Floor 2", "Room 3". In
|
|
554
|
+
* English, as here, since nothing on the gateway knows the building's language. The renaming is
|
|
555
|
+
* part of the wipe: done in the same step, all of it or none, and keyed by the same epoch, so it
|
|
556
|
+
* is done once per epoch as the rest is.
|
|
557
|
+
* No space is removed or moved by it; each keeps its type, its place in the structure, its
|
|
558
|
+
* devices, its filing and its links.
|
|
559
|
+
*
|
|
560
|
+
* The gateway then reports as a gateway starting afresh does: on new streams, a snapshot with no
|
|
561
|
+
* members (reporting.v1.ReportMembersRequest), no service reach and no invite routes, so the
|
|
562
|
+
* api-server's record of who belongs to the gateway empties too.
|
|
563
|
+
*
|
|
564
|
+
* @generated from message kusinta.iot.signaling.v1.GatewayDeleted
|
|
565
|
+
*/
|
|
566
|
+
export declare type GatewayDeleted = Message<"kusinta.iot.signaling.v1.GatewayDeleted"> & {
|
|
567
|
+
/**
|
|
568
|
+
* @generated from field: string ownership_epoch = 1;
|
|
569
|
+
*/
|
|
570
|
+
ownershipEpoch: string;
|
|
571
|
+
|
|
572
|
+
/**
|
|
573
|
+
* @generated from field: kusinta.iot.signaling.v1.WipeScope scope = 2;
|
|
574
|
+
*/
|
|
575
|
+
scope: WipeScope;
|
|
576
|
+
};
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* Describes the message kusinta.iot.signaling.v1.GatewayDeleted.
|
|
580
|
+
* Use `create(GatewayDeletedSchema)` to create a new message.
|
|
581
|
+
*/
|
|
582
|
+
export declare const GatewayDeletedSchema: GenMessage<GatewayDeleted>;
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* The gateway's acknowledgement of a GatewayDeleted, gateway → api-server: what it wiped.
|
|
586
|
+
*
|
|
587
|
+
* For WIPE_SCOPE_PEOPLE_AND_HISTORY, sent once the wipe is done. For WIPE_SCOPE_FACTORY_RESET,
|
|
588
|
+
* sent once everything but the gateway's credentials is gone and before it erases those, since
|
|
589
|
+
* sending needs them; the credentials go at once after. The api-server then revokes the gateway's
|
|
590
|
+
* certificate.
|
|
591
|
+
*
|
|
592
|
+
* @generated from message kusinta.iot.signaling.v1.GatewayWiped
|
|
593
|
+
*/
|
|
594
|
+
export declare type GatewayWiped = Message<"kusinta.iot.signaling.v1.GatewayWiped"> & {
|
|
595
|
+
/**
|
|
596
|
+
* As GatewayDeleted.ownership_epoch.
|
|
597
|
+
*
|
|
598
|
+
* @generated from field: string ownership_epoch = 1;
|
|
599
|
+
*/
|
|
600
|
+
ownershipEpoch: string;
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* The scope the gateway applied: WIPE_SCOPE_PEOPLE_AND_HISTORY when it was asked for that, and
|
|
604
|
+
* when it was asked for a factory reset it does not perform.
|
|
605
|
+
*
|
|
606
|
+
* @generated from field: kusinta.iot.signaling.v1.WipeScope scope = 2;
|
|
607
|
+
*/
|
|
608
|
+
scope: WipeScope;
|
|
609
|
+
|
|
610
|
+
/**
|
|
611
|
+
* With WIPE_SCOPE_FACTORY_RESET: each piece of other hardware that still holds pairings the
|
|
612
|
+
* reset could not reach, for the person who asked to reset it by hand. Empty otherwise.
|
|
613
|
+
*
|
|
614
|
+
* @generated from field: repeated kusinta.iot.signaling.v1.PairingsLeftBehind left_behind = 3;
|
|
615
|
+
*/
|
|
616
|
+
leftBehind: PairingsLeftBehind[];
|
|
617
|
+
};
|
|
618
|
+
|
|
619
|
+
/**
|
|
620
|
+
* Describes the message kusinta.iot.signaling.v1.GatewayWiped.
|
|
621
|
+
* Use `create(GatewayWipedSchema)` to create a new message.
|
|
622
|
+
*/
|
|
623
|
+
export declare const GatewayWipedSchema: GenMessage<GatewayWiped>;
|
|
624
|
+
|
|
625
|
+
/**
|
|
626
|
+
* Hardware a connector drives that keeps its own pairings through a factory reset.
|
|
627
|
+
*
|
|
628
|
+
* @generated from message kusinta.iot.signaling.v1.PairingsLeftBehind
|
|
629
|
+
*/
|
|
630
|
+
export declare type PairingsLeftBehind = Message<"kusinta.iot.signaling.v1.PairingsLeftBehind"> & {
|
|
631
|
+
/**
|
|
632
|
+
* As the connector described itself (webrtc.v1.ConnectorDescriptor): what kind of hardware,
|
|
633
|
+
* and its name, for a person.
|
|
634
|
+
*
|
|
635
|
+
* @generated from field: kusinta.iot.common.v1.ConnectorKind kind = 1;
|
|
636
|
+
*/
|
|
637
|
+
kind: ConnectorKind;
|
|
638
|
+
|
|
639
|
+
/**
|
|
640
|
+
* @generated from field: string display_name = 2;
|
|
641
|
+
*/
|
|
642
|
+
displayName: string;
|
|
643
|
+
};
|
|
644
|
+
|
|
645
|
+
/**
|
|
646
|
+
* Describes the message kusinta.iot.signaling.v1.PairingsLeftBehind.
|
|
647
|
+
* Use `create(PairingsLeftBehindSchema)` to create a new message.
|
|
648
|
+
*/
|
|
649
|
+
export declare const PairingsLeftBehindSchema: GenMessage<PairingsLeftBehind>;
|
|
650
|
+
|
|
651
|
+
/**
|
|
652
|
+
* The administrators of the organisation that owns the gateway, api-server → gateway: the whole
|
|
653
|
+
* set each time, never a change to it.
|
|
654
|
+
*
|
|
655
|
+
* The api-server sends it on every stream, after GatewayStreamOpened and any unacknowledged
|
|
656
|
+
* TransferOutcome, and again whenever the set or the organisation's name changes. It sends the
|
|
657
|
+
* newest set again on every stream until the gateway acknowledges its version
|
|
658
|
+
* (VouchedAdministratorsApplied).
|
|
659
|
+
*
|
|
660
|
+
* It grants nothing on its own. A session holds ROLE_GATEWAY_ADMIN as a vouched administrator
|
|
661
|
+
* only when the token it opened with carries it (webrtc.v1.AppTokenClaims.roles); a user named
|
|
662
|
+
* here who connects with a token that does not is no administrator in that session. What the set
|
|
663
|
+
* says is who the administrators are between their tokens:
|
|
664
|
+
* * every user it names is a member of the gateway, listed as a vouched administrator
|
|
665
|
+
* (webrtc.v1.MemberDetail.vouched_admin) and counted under ROLE_GATEWAY_ADMIN, whether or not
|
|
666
|
+
* the gateway has seen them connect. Their name and email address are learnt from their own
|
|
667
|
+
* tokens, and are unknown until then;
|
|
668
|
+
* * their administration cannot be changed on the gateway (webrtc.v1 members.proto,
|
|
669
|
+
* "vouched_admin");
|
|
670
|
+
* * when a set the gateway applies drops a user, the gateway ends the administration of every
|
|
671
|
+
* open session of theirs at once, without waiting for them to reconnect: the session loses
|
|
672
|
+
* ROLE_GATEWAY_ADMIN as any change of role reaches it (webrtc.v1.LivePermissionUpdate,
|
|
673
|
+
* session_roles), unless the gateway holds that role for them itself;
|
|
674
|
+
* * a token issued (AppTokenClaims.iat, in whole seconds) no later than the second in which
|
|
675
|
+
* the set the gateway holds was issued, for a user that set does not name, vouches for no
|
|
676
|
+
* administration, so a token minted before a user was dropped cannot bring it back. A token
|
|
677
|
+
* issued later is honoured whether or not the set names its user, since the set may lag
|
|
678
|
+
* behind it.
|
|
679
|
+
*
|
|
680
|
+
* Safe to lose, repeat and reorder: the gateway applies a set only when its version is above the
|
|
681
|
+
* one it holds, ignores any other, and acknowledges each with the version it then holds. It keeps
|
|
682
|
+
* the set it holds, with its version and issued_at, across restarts, so a restart forgets nothing
|
|
683
|
+
* before the stream opens again. A wipe drops it, version included (GatewayDeleted, WIPE), so the
|
|
684
|
+
* versions of a new owner record start afresh.
|
|
685
|
+
*
|
|
686
|
+
* @generated from message kusinta.iot.signaling.v1.VouchedAdministrators
|
|
687
|
+
*/
|
|
688
|
+
export declare type VouchedAdministrators = Message<"kusinta.iot.signaling.v1.VouchedAdministrators"> & {
|
|
689
|
+
/**
|
|
690
|
+
* Above that of every set the api-server sent before under the same ownership epoch. Never zero.
|
|
691
|
+
*
|
|
692
|
+
* @generated from field: uint64 version = 1;
|
|
693
|
+
*/
|
|
694
|
+
version: bigint;
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* Each administrator of the owning organisation, once. Never empty, since an organisation
|
|
698
|
+
* always has one. The set carries no one's name or email address.
|
|
699
|
+
*
|
|
700
|
+
* @generated from field: repeated kusinta.iot.identity.v1.UserId administrators = 2;
|
|
701
|
+
*/
|
|
702
|
+
administrators: UserId[];
|
|
703
|
+
|
|
704
|
+
/**
|
|
705
|
+
* The owning organisation's name, as its administrators set it: what
|
|
706
|
+
* webrtc.v1.PrivacyDisclosure.owner_organisation_name tells. Never its organisation number.
|
|
707
|
+
*
|
|
708
|
+
* @generated from field: string organisation_name = 3;
|
|
709
|
+
*/
|
|
710
|
+
organisationName: string;
|
|
711
|
+
|
|
712
|
+
/**
|
|
713
|
+
* When the api-server made this set, on the clock that sets AppTokenClaims.iat, so the two
|
|
714
|
+
* compare. Never earlier than an earlier version's.
|
|
715
|
+
*
|
|
716
|
+
* @generated from field: google.protobuf.Timestamp issued_at = 4;
|
|
717
|
+
*/
|
|
718
|
+
issuedAt?: Timestamp | undefined;
|
|
719
|
+
};
|
|
720
|
+
|
|
721
|
+
/**
|
|
722
|
+
* Describes the message kusinta.iot.signaling.v1.VouchedAdministrators.
|
|
723
|
+
* Use `create(VouchedAdministratorsSchema)` to create a new message.
|
|
724
|
+
*/
|
|
725
|
+
export declare const VouchedAdministratorsSchema: GenMessage<VouchedAdministrators>;
|
|
726
|
+
|
|
727
|
+
/**
|
|
728
|
+
* The gateway's acknowledgement of a VouchedAdministrators, gateway → api-server.
|
|
729
|
+
*
|
|
730
|
+
* @generated from message kusinta.iot.signaling.v1.VouchedAdministratorsApplied
|
|
731
|
+
*/
|
|
732
|
+
export declare type VouchedAdministratorsApplied = Message<"kusinta.iot.signaling.v1.VouchedAdministratorsApplied"> & {
|
|
733
|
+
/**
|
|
734
|
+
* The version the gateway holds once it has applied or ignored the set, which may be above
|
|
735
|
+
* the one acknowledged. The api-server sends no set at or below it again.
|
|
736
|
+
*
|
|
737
|
+
* @generated from field: uint64 version = 1;
|
|
738
|
+
*/
|
|
739
|
+
version: bigint;
|
|
740
|
+
};
|
|
741
|
+
|
|
742
|
+
/**
|
|
743
|
+
* Describes the message kusinta.iot.signaling.v1.VouchedAdministratorsApplied.
|
|
744
|
+
* Use `create(VouchedAdministratorsAppliedSchema)` to create a new message.
|
|
745
|
+
*/
|
|
746
|
+
export declare const VouchedAdministratorsAppliedSchema: GenMessage<VouchedAdministratorsApplied>;
|
|
747
|
+
|
|
748
|
+
/**
|
|
749
|
+
* A transfer of the gateway to another organisation, accepted by an administrator of the
|
|
750
|
+
* receiving one, api-server → gateway. It carries the receiving organisation's vouched set and
|
|
751
|
+
* what becomes of each outgoing staff member, and the gateway applies the two in one step — all
|
|
752
|
+
* of it or none — before anything after it on the stream. The ownership epoch is kept: residents,
|
|
753
|
+
* technicians, spaces and devices stay as they are.
|
|
754
|
+
*
|
|
755
|
+
* The api-server keeps an outcome until the gateway acknowledges it (TransferOutcomeApplied),
|
|
756
|
+
* through the gateway's offline spells, and sends it on every stream right after
|
|
757
|
+
* GatewayStreamOpened. While one is unacknowledged it sends the vouched set only inside it, as
|
|
758
|
+
* administrators, the newest set. Applying is idempotent by transfer_id: an outcome already
|
|
759
|
+
* applied is acknowledged again, its outgoing choices are not applied again, and its set is
|
|
760
|
+
* applied as any VouchedAdministrators is, by version.
|
|
761
|
+
*
|
|
762
|
+
* The outgoing staff are everyone named in outgoing and everyone holding ROLE_GATEWAY_ADMIN or
|
|
763
|
+
* ROLE_PROPERTY_OWNER on the gateway as the outcome is applied — save anyone the new set names,
|
|
764
|
+
* who is of the receiving organisation and is left as they are. The api-server names in outgoing
|
|
765
|
+
* every administrator of the sending organisation, and everyone it holds as reported with
|
|
766
|
+
* ROLE_GATEWAY_ADMIN or ROLE_PROPERTY_OWNER (reporting.v1.GatewayMember). Each outgoing staff
|
|
767
|
+
* member either:
|
|
768
|
+
* * leaves: their choice is LEAVE, UNSPECIFIED or a value the gateway does not know, or they
|
|
769
|
+
* are not named in outgoing at all, so a transfer keeps no one by omission. The gateway takes
|
|
770
|
+
* every role it holds for them and every SERVICE membership, with the pending invites they
|
|
771
|
+
* made as staff, as RemoveFromGateway by user id does from a caller who lives in none of
|
|
772
|
+
* their homes. It never ends a residency, nor the invites they made as its resident;
|
|
773
|
+
* * or stays as a technician: STAY_AS_TECHNICIAN. The gateway takes ROLE_GATEWAY_ADMIN and
|
|
774
|
+
* ROLE_PROPERTY_OWNER as webrtc.v1.SetMemberRole taking them away does, gives
|
|
775
|
+
* ROLE_TECHNICIAN, keeps their SERVICE memberships, files them SERVICE on every top-level
|
|
776
|
+
* space they are not filed on, and sets access_until as webrtc.v1.SetAccessUntil does. One
|
|
777
|
+
* whose access_until is not after the moment the outcome is applied leaves instead.
|
|
778
|
+
* Every change reaches the outgoing staff's open sessions at once, as a change of role does.
|
|
779
|
+
*
|
|
780
|
+
* @generated from message kusinta.iot.signaling.v1.TransferOutcome
|
|
781
|
+
*/
|
|
782
|
+
export declare type TransferOutcome = Message<"kusinta.iot.signaling.v1.TransferOutcome"> & {
|
|
783
|
+
/**
|
|
784
|
+
* Minted by the api-server, opaque, unique among the gateway's transfers.
|
|
785
|
+
*
|
|
786
|
+
* @generated from field: string transfer_id = 1;
|
|
787
|
+
*/
|
|
788
|
+
transferId: string;
|
|
789
|
+
|
|
790
|
+
/**
|
|
791
|
+
* The receiving organisation's vouched set, as it stands.
|
|
792
|
+
*
|
|
793
|
+
* @generated from field: kusinta.iot.signaling.v1.VouchedAdministrators administrators = 2;
|
|
794
|
+
*/
|
|
795
|
+
administrators?: VouchedAdministrators | undefined;
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* What becomes of each outgoing staff member, once each.
|
|
799
|
+
*
|
|
800
|
+
* @generated from field: repeated kusinta.iot.signaling.v1.OutgoingChoice outgoing = 3;
|
|
801
|
+
*/
|
|
802
|
+
outgoing: OutgoingChoice[];
|
|
803
|
+
};
|
|
804
|
+
|
|
805
|
+
/**
|
|
806
|
+
* Describes the message kusinta.iot.signaling.v1.TransferOutcome.
|
|
807
|
+
* Use `create(TransferOutcomeSchema)` to create a new message.
|
|
808
|
+
*/
|
|
809
|
+
export declare const TransferOutcomeSchema: GenMessage<TransferOutcome>;
|
|
810
|
+
|
|
811
|
+
/**
|
|
812
|
+
* What a transfer does with one outgoing staff member (TransferOutcome).
|
|
813
|
+
*
|
|
814
|
+
* @generated from message kusinta.iot.signaling.v1.OutgoingChoice
|
|
815
|
+
*/
|
|
816
|
+
export declare type OutgoingChoice = Message<"kusinta.iot.signaling.v1.OutgoingChoice"> & {
|
|
817
|
+
/**
|
|
818
|
+
* @generated from field: kusinta.iot.identity.v1.UserId user_id = 1;
|
|
819
|
+
*/
|
|
820
|
+
userId?: UserId | undefined;
|
|
821
|
+
|
|
822
|
+
/**
|
|
823
|
+
* @generated from field: kusinta.iot.signaling.v1.OutgoingStaffChoice choice = 2;
|
|
824
|
+
*/
|
|
825
|
+
choice: OutgoingStaffChoice;
|
|
826
|
+
|
|
827
|
+
/**
|
|
828
|
+
* When their access as a technician ends; unset for no end. Only with STAY_AS_TECHNICIAN, and
|
|
829
|
+
* ignored with any other choice.
|
|
830
|
+
*
|
|
831
|
+
* @generated from field: google.protobuf.Timestamp access_until = 3;
|
|
832
|
+
*/
|
|
833
|
+
accessUntil?: Timestamp | undefined;
|
|
834
|
+
};
|
|
835
|
+
|
|
836
|
+
/**
|
|
837
|
+
* Describes the message kusinta.iot.signaling.v1.OutgoingChoice.
|
|
838
|
+
* Use `create(OutgoingChoiceSchema)` to create a new message.
|
|
839
|
+
*/
|
|
840
|
+
export declare const OutgoingChoiceSchema: GenMessage<OutgoingChoice>;
|
|
841
|
+
|
|
842
|
+
/**
|
|
843
|
+
* The gateway's acknowledgement of a TransferOutcome, gateway → api-server: applied now or
|
|
844
|
+
* before. It acknowledges the outcome's vouched set too. The api-server sends the outcome no
|
|
845
|
+
* more.
|
|
846
|
+
*
|
|
847
|
+
* @generated from message kusinta.iot.signaling.v1.TransferOutcomeApplied
|
|
848
|
+
*/
|
|
849
|
+
export declare type TransferOutcomeApplied = Message<"kusinta.iot.signaling.v1.TransferOutcomeApplied"> & {
|
|
850
|
+
/**
|
|
851
|
+
* As TransferOutcome.transfer_id.
|
|
852
|
+
*
|
|
853
|
+
* @generated from field: string transfer_id = 1;
|
|
854
|
+
*/
|
|
855
|
+
transferId: string;
|
|
856
|
+
};
|
|
857
|
+
|
|
858
|
+
/**
|
|
859
|
+
* Describes the message kusinta.iot.signaling.v1.TransferOutcomeApplied.
|
|
860
|
+
* Use `create(TransferOutcomeAppliedSchema)` to create a new message.
|
|
861
|
+
*/
|
|
862
|
+
export declare const TransferOutcomeAppliedSchema: GenMessage<TransferOutcomeApplied>;
|
|
863
|
+
|
|
230
864
|
/**
|
|
231
865
|
* Messages sent by the app (GatewaySignalingService.UserConnect stream).
|
|
232
866
|
* Auth: Authorization: Bearer <jwt> in gRPC request metadata (validated by interceptor).
|
|
@@ -244,6 +878,10 @@ export declare type UserConnectRequest = Message<"kusinta.iot.signaling.v1.UserC
|
|
|
244
878
|
sessionId: string;
|
|
245
879
|
|
|
246
880
|
/**
|
|
881
|
+
* A payload added here, the handshake aside, belongs in UserSendRequest too:
|
|
882
|
+
* the half-duplex form of this leg carries the same upstream messages, and
|
|
883
|
+
* nothing fails if one of them is only added to one of the two.
|
|
884
|
+
*
|
|
247
885
|
* @generated from oneof kusinta.iot.signaling.v1.UserConnectRequest.payload
|
|
248
886
|
*/
|
|
249
887
|
payload: {
|
|
@@ -276,6 +914,10 @@ export declare const UserConnectRequestSchema: GenMessage<UserConnectRequest>;
|
|
|
276
914
|
/**
|
|
277
915
|
* Messages sent by the api-server to the app.
|
|
278
916
|
*
|
|
917
|
+
* One oneof serves both forms of the leg: UserListenResponse wraps this message
|
|
918
|
+
* rather than restating its payloads, so an arm added here reaches the bidi and
|
|
919
|
+
* half-duplex forms alike.
|
|
920
|
+
*
|
|
279
921
|
* @generated from message kusinta.iot.signaling.v1.UserConnectResponse
|
|
280
922
|
*/
|
|
281
923
|
export declare type UserConnectResponse = Message<"kusinta.iot.signaling.v1.UserConnectResponse"> & {
|
|
@@ -283,6 +925,7 @@ export declare type UserConnectResponse = Message<"kusinta.iot.signaling.v1.User
|
|
|
283
925
|
* Echoes the session_id of the stream this message is delivered on, so a
|
|
284
926
|
* client can assert the relay routed to the session it thinks it is. See the
|
|
285
927
|
* contract above.
|
|
928
|
+
* Ignored on a heartbeat, which carries no routing target at all.
|
|
286
929
|
*
|
|
287
930
|
* @generated from field: string session_id = 4;
|
|
288
931
|
*/
|
|
@@ -309,6 +952,22 @@ export declare type UserConnectResponse = Message<"kusinta.iot.signaling.v1.User
|
|
|
309
952
|
*/
|
|
310
953
|
value: IceCandidate;
|
|
311
954
|
case: "iceCandidate";
|
|
955
|
+
} | {
|
|
956
|
+
/**
|
|
957
|
+
* Keeps a silent stream alive. UserListen is downstream-only — the client
|
|
958
|
+
* opens it with a handshake and then writes nothing — so between the
|
|
959
|
+
* acknowledgement and an answer there is no traffic in either direction, and
|
|
960
|
+
* an idle negotiation can outlast a proxy's patience. Upstream cannot help:
|
|
961
|
+
* the client has nothing to send, and it is traffic *to* the client that
|
|
962
|
+
* resets a client-side idle timer.
|
|
963
|
+
*
|
|
964
|
+
* A client that does not know this arm sees an unset payload rather than an
|
|
965
|
+
* error, which is what the oneof buys.
|
|
966
|
+
*
|
|
967
|
+
* @generated from field: kusinta.iot.signaling.v1.HeartBeat heartbeat = 5;
|
|
968
|
+
*/
|
|
969
|
+
value: HeartBeat;
|
|
970
|
+
case: "heartbeat";
|
|
312
971
|
} | { case: undefined; value?: undefined };
|
|
313
972
|
};
|
|
314
973
|
|
|
@@ -318,3 +977,276 @@ export declare type UserConnectResponse = Message<"kusinta.iot.signaling.v1.User
|
|
|
318
977
|
*/
|
|
319
978
|
export declare const UserConnectResponseSchema: GenMessage<UserConnectResponse>;
|
|
320
979
|
|
|
980
|
+
/**
|
|
981
|
+
* The app leg of the protocol exists twice. UserConnect is one bidi stream, and
|
|
982
|
+
* is what a client uses when its transport can stream a request body. A client
|
|
983
|
+
* whose transport cannot — a browser, whose fetch API has no full-duplex request
|
|
984
|
+
* stream — uses UserListen and UserSend instead. Both forms carry the same
|
|
985
|
+
* messages and are served by the same relay: once a session is live, how it was
|
|
986
|
+
* opened is not observable.
|
|
987
|
+
*
|
|
988
|
+
* Opens the downstream half of a half-duplex app session, and carries the
|
|
989
|
+
* handshake that is the first frame of the bidi form. Field numbers are those of
|
|
990
|
+
* the equivalent UserConnectRequest, so the two cannot be confused on the wire.
|
|
991
|
+
*
|
|
992
|
+
* @generated from message kusinta.iot.signaling.v1.UserListenRequest
|
|
993
|
+
*/
|
|
994
|
+
export declare type UserListenRequest = Message<"kusinta.iot.signaling.v1.UserListenRequest"> & {
|
|
995
|
+
/**
|
|
996
|
+
* @generated from field: kusinta.iot.signaling.v1.UserHandshake handshake = 1;
|
|
997
|
+
*/
|
|
998
|
+
handshake?: UserHandshake | undefined;
|
|
999
|
+
|
|
1000
|
+
/**
|
|
1001
|
+
* This client's session: opaque, minted by the client, stable across
|
|
1002
|
+
* reconnects, never a credential, and required. See the contract above.
|
|
1003
|
+
*
|
|
1004
|
+
* @generated from field: string session_id = 4;
|
|
1005
|
+
*/
|
|
1006
|
+
sessionId: string;
|
|
1007
|
+
};
|
|
1008
|
+
|
|
1009
|
+
/**
|
|
1010
|
+
* Describes the message kusinta.iot.signaling.v1.UserListenRequest.
|
|
1011
|
+
* Use `create(UserListenRequestSchema)` to create a new message.
|
|
1012
|
+
*/
|
|
1013
|
+
export declare const UserListenRequestSchema: GenMessage<UserListenRequest>;
|
|
1014
|
+
|
|
1015
|
+
/**
|
|
1016
|
+
* One message of the downstream half. Wraps the response the bidi form delivers
|
|
1017
|
+
* directly, rather than restating its payloads: a response message is not shared
|
|
1018
|
+
* between two rpcs, and a second copy of the oneof would be free to drift from
|
|
1019
|
+
* the first.
|
|
1020
|
+
*
|
|
1021
|
+
* @generated from message kusinta.iot.signaling.v1.UserListenResponse
|
|
1022
|
+
*/
|
|
1023
|
+
export declare type UserListenResponse = Message<"kusinta.iot.signaling.v1.UserListenResponse"> & {
|
|
1024
|
+
/**
|
|
1025
|
+
* @generated from field: kusinta.iot.signaling.v1.UserConnectResponse response = 1;
|
|
1026
|
+
*/
|
|
1027
|
+
response?: UserConnectResponse | undefined;
|
|
1028
|
+
};
|
|
1029
|
+
|
|
1030
|
+
/**
|
|
1031
|
+
* Describes the message kusinta.iot.signaling.v1.UserListenResponse.
|
|
1032
|
+
* Use `create(UserListenResponseSchema)` to create a new message.
|
|
1033
|
+
*/
|
|
1034
|
+
export declare const UserListenResponseSchema: GenMessage<UserListenResponse>;
|
|
1035
|
+
|
|
1036
|
+
/**
|
|
1037
|
+
* One upstream message of a half-duplex app session, delivered by its own call.
|
|
1038
|
+
*
|
|
1039
|
+
* The session must already be open, which is what makes ordering the caller's
|
|
1040
|
+
* job: the handshake is acknowledged on the UserListen stream, and a UserSend
|
|
1041
|
+
* issued before that acknowledgement names a session the relay does not hold
|
|
1042
|
+
* yet. It is refused, not queued. Two sends racing each other can also arrive
|
|
1043
|
+
* out of order, so a caller that must preserve order — an offer before the
|
|
1044
|
+
* candidates that belong to it — issues them one at a time.
|
|
1045
|
+
*
|
|
1046
|
+
* @generated from message kusinta.iot.signaling.v1.UserSendRequest
|
|
1047
|
+
*/
|
|
1048
|
+
export declare type UserSendRequest = Message<"kusinta.iot.signaling.v1.UserSendRequest"> & {
|
|
1049
|
+
/**
|
|
1050
|
+
* The session to deliver into. See the contract above.
|
|
1051
|
+
*
|
|
1052
|
+
* @generated from field: string session_id = 4;
|
|
1053
|
+
*/
|
|
1054
|
+
sessionId: string;
|
|
1055
|
+
|
|
1056
|
+
/**
|
|
1057
|
+
* @generated from oneof kusinta.iot.signaling.v1.UserSendRequest.payload
|
|
1058
|
+
*/
|
|
1059
|
+
payload: {
|
|
1060
|
+
/**
|
|
1061
|
+
* @generated from field: kusinta.iot.signaling.v1.SdpOffer offer = 2;
|
|
1062
|
+
*/
|
|
1063
|
+
value: SdpOffer;
|
|
1064
|
+
case: "offer";
|
|
1065
|
+
} | {
|
|
1066
|
+
/**
|
|
1067
|
+
* @generated from field: kusinta.iot.signaling.v1.IceCandidate ice_candidate = 3;
|
|
1068
|
+
*/
|
|
1069
|
+
value: IceCandidate;
|
|
1070
|
+
case: "iceCandidate";
|
|
1071
|
+
} | { case: undefined; value?: undefined };
|
|
1072
|
+
};
|
|
1073
|
+
|
|
1074
|
+
/**
|
|
1075
|
+
* Describes the message kusinta.iot.signaling.v1.UserSendRequest.
|
|
1076
|
+
* Use `create(UserSendRequestSchema)` to create a new message.
|
|
1077
|
+
*/
|
|
1078
|
+
export declare const UserSendRequestSchema: GenMessage<UserSendRequest>;
|
|
1079
|
+
|
|
1080
|
+
/**
|
|
1081
|
+
* Empty. Delivery is acknowledged by the call succeeding; a message that could
|
|
1082
|
+
* not be routed fails the call instead.
|
|
1083
|
+
*
|
|
1084
|
+
* @generated from message kusinta.iot.signaling.v1.UserSendResponse
|
|
1085
|
+
*/
|
|
1086
|
+
export declare type UserSendResponse = Message<"kusinta.iot.signaling.v1.UserSendResponse"> & {
|
|
1087
|
+
};
|
|
1088
|
+
|
|
1089
|
+
/**
|
|
1090
|
+
* Describes the message kusinta.iot.signaling.v1.UserSendResponse.
|
|
1091
|
+
* Use `create(UserSendResponseSchema)` to create a new message.
|
|
1092
|
+
*/
|
|
1093
|
+
export declare const UserSendResponseSchema: GenMessage<UserSendResponse>;
|
|
1094
|
+
|
|
1095
|
+
/**
|
|
1096
|
+
* What redeeming an invite did, as the gateway decided it.
|
|
1097
|
+
*
|
|
1098
|
+
* A redeem is idempotent for its user: redeemed again by the same user, for as
|
|
1099
|
+
* long as its secret would have lasted unused, a used invite answers JOINED if
|
|
1100
|
+
* the user is filed on its space by then, and otherwise as it did the first time
|
|
1101
|
+
* — so a denied request still answers PENDING_APPROVAL — except that one which
|
|
1102
|
+
* filed the user, who has left that space since, answers INVALID. To anyone
|
|
1103
|
+
* else it answers INVALID. So a user who never saw the first answer can safely
|
|
1104
|
+
* try again.
|
|
1105
|
+
*
|
|
1106
|
+
* @generated from enum kusinta.iot.signaling.v1.RedeemOutcome
|
|
1107
|
+
*/
|
|
1108
|
+
export enum RedeemOutcome {
|
|
1109
|
+
/**
|
|
1110
|
+
* @generated from enum value: REDEEM_OUTCOME_UNSPECIFIED = 0;
|
|
1111
|
+
*/
|
|
1112
|
+
UNSPECIFIED = 0,
|
|
1113
|
+
|
|
1114
|
+
/**
|
|
1115
|
+
* The user is a member of the invite's space. Answered only once the
|
|
1116
|
+
* api-server has applied the member report that names them
|
|
1117
|
+
* (reporting.v1.GatewayMember), so the user can connect as soon as they are
|
|
1118
|
+
* told. Also the answer for a user already filed on that space: the invite is
|
|
1119
|
+
* used up, and their membership is left exactly as it was.
|
|
1120
|
+
*
|
|
1121
|
+
* @generated from enum value: REDEEM_OUTCOME_JOINED = 1;
|
|
1122
|
+
*/
|
|
1123
|
+
JOINED = 1,
|
|
1124
|
+
|
|
1125
|
+
/**
|
|
1126
|
+
* A join request was made (webrtc.v1.JoinRequest); the user becomes a member
|
|
1127
|
+
* once it is approved. Also the answer for a user who already has one on that
|
|
1128
|
+
* space.
|
|
1129
|
+
*
|
|
1130
|
+
* @generated from enum value: REDEEM_OUTCOME_PENDING_APPROVAL = 2;
|
|
1131
|
+
*/
|
|
1132
|
+
PENDING_APPROVAL = 2,
|
|
1133
|
+
|
|
1134
|
+
/**
|
|
1135
|
+
* No invite: unknown, expired, revoked, already used by someone else, a code
|
|
1136
|
+
* for an invite bound to another address, or anything else that is not a
|
|
1137
|
+
* live invite. One answer for all of them, so a redeem tells nothing about
|
|
1138
|
+
* which secrets exist.
|
|
1139
|
+
*
|
|
1140
|
+
* @generated from enum value: REDEEM_OUTCOME_INVALID = 3;
|
|
1141
|
+
*/
|
|
1142
|
+
INVALID = 3,
|
|
1143
|
+
|
|
1144
|
+
/**
|
|
1145
|
+
* The invite is bound to an address (webrtc.v1.CreateInvite.email) that is not
|
|
1146
|
+
* the user's verified one. Answered only to a token, which cannot be guessed;
|
|
1147
|
+
* a code bound to another address answers INVALID. Never says which address
|
|
1148
|
+
* it is bound to, and leaves the invite pending.
|
|
1149
|
+
*
|
|
1150
|
+
* @generated from enum value: REDEEM_OUTCOME_WRONG_ACCOUNT = 4;
|
|
1151
|
+
*/
|
|
1152
|
+
WRONG_ACCOUNT = 4,
|
|
1153
|
+
|
|
1154
|
+
/**
|
|
1155
|
+
* The invite appoints a household admin (webrtc.v1 household.proto, STAFF APPOINTMENT),
|
|
1156
|
+
* and this user may not be appointed: they created it, or hold a staff role on the gateway.
|
|
1157
|
+
* Also the answer to anyone outside the departing household redeeming a RESIDENT or
|
|
1158
|
+
* HOUSEHOLD_ADMIN invite on a home whose vacated handover is pending (webrtc.v1
|
|
1159
|
+
* household.proto, VACANCY). Leaves the invite pending, for the person it was meant for.
|
|
1160
|
+
* Answered only to a user whose secret matched a live invite, so it tells nothing about
|
|
1161
|
+
* which secrets exist. An
|
|
1162
|
+
* appointment invite on a home that is no longer empty is no invite, and answers INVALID.
|
|
1163
|
+
*
|
|
1164
|
+
* Rollout order: the api-server handles it before a gateway sends it.
|
|
1165
|
+
*
|
|
1166
|
+
* @generated from enum value: REDEEM_OUTCOME_NOT_ELIGIBLE = 5;
|
|
1167
|
+
*/
|
|
1168
|
+
NOT_ELIGIBLE = 5,
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
/**
|
|
1172
|
+
* Describes the enum kusinta.iot.signaling.v1.RedeemOutcome.
|
|
1173
|
+
*/
|
|
1174
|
+
export declare const RedeemOutcomeSchema: GenEnum<RedeemOutcome>;
|
|
1175
|
+
|
|
1176
|
+
/**
|
|
1177
|
+
* How much a wipe takes (GatewayDeleted).
|
|
1178
|
+
*
|
|
1179
|
+
* @generated from enum kusinta.iot.signaling.v1.WipeScope
|
|
1180
|
+
*/
|
|
1181
|
+
export enum WipeScope {
|
|
1182
|
+
/**
|
|
1183
|
+
* Not stated. Read as PEOPLE_AND_HISTORY, as is any value the gateway does not know.
|
|
1184
|
+
*
|
|
1185
|
+
* @generated from enum value: WIPE_SCOPE_UNSPECIFIED = 0;
|
|
1186
|
+
*/
|
|
1187
|
+
UNSPECIFIED = 0,
|
|
1188
|
+
|
|
1189
|
+
/**
|
|
1190
|
+
* Decommissioning: people and their history go, every space is given a generic name, and the
|
|
1191
|
+
* rest of the building's setup stays (GatewayDeleted, WIPE).
|
|
1192
|
+
*
|
|
1193
|
+
* @generated from enum value: WIPE_SCOPE_PEOPLE_AND_HISTORY = 1;
|
|
1194
|
+
*/
|
|
1195
|
+
PEOPLE_AND_HISTORY = 1,
|
|
1196
|
+
|
|
1197
|
+
/**
|
|
1198
|
+
* Out of the box, for a gateway that is to be used anywhere else: everything the gateway holds
|
|
1199
|
+
* goes — what a wipe of people and history takes and also the building's setup, the gateway's
|
|
1200
|
+
* certificates, keys and registration, connector configuration, the readings connectors store
|
|
1201
|
+
* on the gateway, and the log files it keeps itself (not the host's system log: see WIPE, Logs).
|
|
1202
|
+
* What is held in other hardware is not reached: devices paired
|
|
1203
|
+
* to a radio central the gateway drives stay paired there until that is reset too, and the
|
|
1204
|
+
* gateway says so (GatewayWiped.left_behind).
|
|
1205
|
+
*
|
|
1206
|
+
* A gateway that does not perform a factory reset wipes people and history instead, and says
|
|
1207
|
+
* so in GatewayWiped.scope.
|
|
1208
|
+
*
|
|
1209
|
+
* @generated from enum value: WIPE_SCOPE_FACTORY_RESET = 2;
|
|
1210
|
+
*/
|
|
1211
|
+
FACTORY_RESET = 2,
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
/**
|
|
1215
|
+
* Describes the enum kusinta.iot.signaling.v1.WipeScope.
|
|
1216
|
+
*/
|
|
1217
|
+
export declare const WipeScopeSchema: GenEnum<WipeScope>;
|
|
1218
|
+
|
|
1219
|
+
/**
|
|
1220
|
+
* Whether an outgoing staff member leaves the gateway or stays on it as a technician. Chosen
|
|
1221
|
+
* per person by the sending organisation's administrator who offered the transfer.
|
|
1222
|
+
*
|
|
1223
|
+
* @generated from enum kusinta.iot.signaling.v1.OutgoingStaffChoice
|
|
1224
|
+
*/
|
|
1225
|
+
export enum OutgoingStaffChoice {
|
|
1226
|
+
/**
|
|
1227
|
+
* No choice stated. Read as LEAVE, as is any value the gateway does not know.
|
|
1228
|
+
*
|
|
1229
|
+
* @generated from enum value: OUTGOING_STAFF_CHOICE_UNSPECIFIED = 0;
|
|
1230
|
+
*/
|
|
1231
|
+
UNSPECIFIED = 0,
|
|
1232
|
+
|
|
1233
|
+
/**
|
|
1234
|
+
* Leaves: every staff role and SERVICE membership goes, and no residency.
|
|
1235
|
+
*
|
|
1236
|
+
* @generated from enum value: OUTGOING_STAFF_CHOICE_LEAVE = 1;
|
|
1237
|
+
*/
|
|
1238
|
+
LEAVE = 1,
|
|
1239
|
+
|
|
1240
|
+
/**
|
|
1241
|
+
* Stays as a technician, with access_until as its end.
|
|
1242
|
+
*
|
|
1243
|
+
* @generated from enum value: OUTGOING_STAFF_CHOICE_STAY_AS_TECHNICIAN = 2;
|
|
1244
|
+
*/
|
|
1245
|
+
STAY_AS_TECHNICIAN = 2,
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
/**
|
|
1249
|
+
* Describes the enum kusinta.iot.signaling.v1.OutgoingStaffChoice.
|
|
1250
|
+
*/
|
|
1251
|
+
export declare const OutgoingStaffChoiceSchema: GenEnum<OutgoingStaffChoice>;
|
|
1252
|
+
|