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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/package.json +9 -1
  2. package/src/kusinta/iot/access/v1/acl_pb.d.ts +121 -3
  3. package/src/kusinta/iot/access/v1/acl_pb.js +20 -3
  4. package/src/kusinta/iot/access/v1/roles_pb.d.ts +102 -0
  5. package/src/kusinta/iot/access/v1/roles_pb.js +81 -1
  6. package/src/kusinta/iot/climate/v1/climate_pb.d.ts +726 -0
  7. package/src/kusinta/iot/climate/v1/climate_pb.js +142 -0
  8. package/src/kusinta/iot/common/v1/pairing_pb.d.ts +217 -0
  9. package/src/kusinta/iot/common/v1/pairing_pb.js +50 -0
  10. package/src/kusinta/iot/common/v1/types_pb.d.ts +34 -0
  11. package/src/kusinta/iot/common/v1/types_pb.js +22 -1
  12. package/src/kusinta/iot/connector/v1/connector_pb.d.ts +476 -7
  13. package/src/kusinta/iot/connector/v1/connector_pb.js +70 -12
  14. package/src/kusinta/iot/device/v1/cluster_state_pb.d.ts +44 -0
  15. package/src/kusinta/iot/device/v1/cluster_state_pb.js +1 -1
  16. package/src/kusinta/iot/device/v1/descriptor_pb.d.ts +22 -2
  17. package/src/kusinta/iot/device/v1/descriptor_pb.js +2 -1
  18. package/src/kusinta/iot/device/v1/device_event_pb.d.ts +87 -5
  19. package/src/kusinta/iot/device/v1/device_event_pb.js +1 -1
  20. package/src/kusinta/iot/device/v1/device_pb.d.ts +150 -6
  21. package/src/kusinta/iot/device/v1/device_pb.js +33 -2
  22. package/src/kusinta/iot/device/v1/matter_options_pb.d.ts +26 -0
  23. package/src/kusinta/iot/device/v1/matter_options_pb.js +31 -4
  24. package/src/kusinta/iot/device/v1/properties_pb.d.ts +14 -0
  25. package/src/kusinta/iot/device/v1/properties_pb.js +1 -1
  26. package/src/kusinta/iot/device/v1/property_update_pb.d.ts +3 -2
  27. package/src/kusinta/iot/link/v1/link_pb.d.ts +438 -0
  28. package/src/kusinta/iot/link/v1/link_pb.js +121 -0
  29. package/src/kusinta/iot/signaling/v1/signaling_pb.d.ts +177 -4
  30. package/src/kusinta/iot/signaling/v1/signaling_pb.js +29 -1
  31. package/src/kusinta/iot/signaling/v1/signaling_service_pb.d.ts +24 -1
  32. package/src/kusinta/iot/signaling/v1/signaling_service_pb.js +1 -1
  33. package/src/kusinta/iot/space/v1/space_pb.d.ts +72 -2
  34. package/src/kusinta/iot/space/v1/space_pb.js +9 -1
  35. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.d.ts +162 -13
  36. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.js +8 -1
  37. package/src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.d.ts +69 -0
  38. package/src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.js +19 -0
  39. package/src/kusinta/iot/vendor/v1/vendor_options_pb.d.ts +25 -4
  40. package/src/kusinta/iot/vendor/v1/vendor_options_pb.js +28 -6
  41. package/src/kusinta/iot/webrtc/v1/command_pb.d.ts +18 -3
  42. package/src/kusinta/iot/webrtc/v1/command_pb.js +2 -1
  43. package/src/kusinta/iot/webrtc/v1/device_state_pb.d.ts +170 -5
  44. package/src/kusinta/iot/webrtc/v1/device_state_pb.js +34 -6
  45. package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +448 -3
  46. package/src/kusinta/iot/webrtc/v1/envelope_pb.js +63 -3
  47. package/src/kusinta/iot/webrtc/v1/management_pb.d.ts +775 -12
  48. package/src/kusinta/iot/webrtc/v1/management_pb.js +123 -5
  49. package/src/kusinta/iot/webrtc/v1/permission_push_pb.d.ts +34 -4
  50. package/src/kusinta/iot/webrtc/v1/permission_push_pb.js +2 -2
  51. package/src/kusinta/iot/webrtc/v1/setpoint_mode_pb.d.ts +63 -0
  52. package/src/kusinta/iot/webrtc/v1/setpoint_mode_pb.js +45 -0
@@ -76,10 +76,26 @@ export declare type IceCandidate = Message<"kusinta.iot.signaling.v1.IceCandidat
76
76
  export declare const IceCandidateSchema: GenMessage<IceCandidate>;
77
77
 
78
78
  /**
79
- * Empty keepalive. The gateway sends this periodically on the GatewayConnect
80
- * stream so the otherwise-idle bidi request keeps producing DATA frames, which
81
- * resets the inactivity timers on any proxy between the two ends and stops it
82
- * from tearing the stream down. Carries no routing target and is dropped on receipt.
79
+ * Empty keepalive, sent periodically on a stream that would otherwise fall
80
+ * silent. The DATA frames it produces reset the inactivity timers on any proxy
81
+ * between the two ends and stop it tearing the stream down. Carries no routing
82
+ * target and is dropped on receipt.
83
+ *
84
+ * Carried on two arms, each covering a half that falls silent while neither end
85
+ * has anything to say: the building-server gateway sends it upstream on
86
+ * GatewayConnect, and the api-server sends it downstream to the app on
87
+ * UserConnectResponse. The remaining halves have no arm — an app leg's upstream
88
+ * that goes idle is one the client can write on whenever it needs to.
89
+ *
90
+ * Never an acknowledgement. A heartbeat answers no message and must not be
91
+ * treated as confirming one.
92
+ *
93
+ * On GatewayConnect it also lets the api-server judge whether the gateway is
94
+ * present. A gateway is present while its stream is open, and never lets it
95
+ * carry nothing for more than 30 seconds: a heartbeat fills any longer silence.
96
+ * A stream that has carried nothing for 90 seconds may be taken as gone, even
97
+ * when the transport has not yet said so. That is the gateway's presence and
98
+ * nothing more: a present gateway may still have lost its devices.
83
99
  *
84
100
  * @generated from message kusinta.iot.signaling.v1.HeartBeat
85
101
  */
@@ -124,6 +140,23 @@ export declare type UserHandshakeAck = Message<"kusinta.iot.signaling.v1.UserHan
124
140
  * @generated from field: string reason = 2;
125
141
  */
126
142
  reason: string;
143
+
144
+ /**
145
+ * How often the api-server will send a HeartBeat on this stream, in
146
+ * milliseconds.
147
+ *
148
+ * Advisory, and a client must not refuse a stream over it: a client that has
149
+ * seen no traffic at all for a small multiple of this may take the stream for
150
+ * gone and reattach with the same session_id, which is the difference between
151
+ * a renegotiation that stalls and one that reconnects. The server is free to
152
+ * answer with a different value on the next session.
153
+ *
154
+ * Zero means the server is not heartbeating this stream, and a client must
155
+ * then not infer anything from silence.
156
+ *
157
+ * @generated from field: uint32 heartbeat_interval_ms = 3;
158
+ */
159
+ heartbeatIntervalMs: number;
127
160
  };
128
161
 
129
162
  /**
@@ -244,6 +277,10 @@ export declare type UserConnectRequest = Message<"kusinta.iot.signaling.v1.UserC
244
277
  sessionId: string;
245
278
 
246
279
  /**
280
+ * A payload added here, the handshake aside, belongs in UserSendRequest too:
281
+ * the half-duplex form of this leg carries the same upstream messages, and
282
+ * nothing fails if one of them is only added to one of the two.
283
+ *
247
284
  * @generated from oneof kusinta.iot.signaling.v1.UserConnectRequest.payload
248
285
  */
249
286
  payload: {
@@ -276,6 +313,10 @@ export declare const UserConnectRequestSchema: GenMessage<UserConnectRequest>;
276
313
  /**
277
314
  * Messages sent by the api-server to the app.
278
315
  *
316
+ * One oneof serves both forms of the leg: UserListenResponse wraps this message
317
+ * rather than restating its payloads, so an arm added here reaches the bidi and
318
+ * half-duplex forms alike.
319
+ *
279
320
  * @generated from message kusinta.iot.signaling.v1.UserConnectResponse
280
321
  */
281
322
  export declare type UserConnectResponse = Message<"kusinta.iot.signaling.v1.UserConnectResponse"> & {
@@ -283,6 +324,7 @@ export declare type UserConnectResponse = Message<"kusinta.iot.signaling.v1.User
283
324
  * Echoes the session_id of the stream this message is delivered on, so a
284
325
  * client can assert the relay routed to the session it thinks it is. See the
285
326
  * contract above.
327
+ * Ignored on a heartbeat, which carries no routing target at all.
286
328
  *
287
329
  * @generated from field: string session_id = 4;
288
330
  */
@@ -309,6 +351,22 @@ export declare type UserConnectResponse = Message<"kusinta.iot.signaling.v1.User
309
351
  */
310
352
  value: IceCandidate;
311
353
  case: "iceCandidate";
354
+ } | {
355
+ /**
356
+ * Keeps a silent stream alive. UserListen is downstream-only — the client
357
+ * opens it with a handshake and then writes nothing — so between the
358
+ * acknowledgement and an answer there is no traffic in either direction, and
359
+ * an idle negotiation can outlast a proxy's patience. Upstream cannot help:
360
+ * the client has nothing to send, and it is traffic *to* the client that
361
+ * resets a client-side idle timer.
362
+ *
363
+ * A client that does not know this arm sees an unset payload rather than an
364
+ * error, which is what the oneof buys.
365
+ *
366
+ * @generated from field: kusinta.iot.signaling.v1.HeartBeat heartbeat = 5;
367
+ */
368
+ value: HeartBeat;
369
+ case: "heartbeat";
312
370
  } | { case: undefined; value?: undefined };
313
371
  };
314
372
 
@@ -318,3 +376,118 @@ export declare type UserConnectResponse = Message<"kusinta.iot.signaling.v1.User
318
376
  */
319
377
  export declare const UserConnectResponseSchema: GenMessage<UserConnectResponse>;
320
378
 
379
+ /**
380
+ * The app leg of the protocol exists twice. UserConnect is one bidi stream, and
381
+ * is what a client uses when its transport can stream a request body. A client
382
+ * whose transport cannot — a browser, whose fetch API has no full-duplex request
383
+ * stream — uses UserListen and UserSend instead. Both forms carry the same
384
+ * messages and are served by the same relay: once a session is live, how it was
385
+ * opened is not observable.
386
+ *
387
+ * Opens the downstream half of a half-duplex app session, and carries the
388
+ * handshake that is the first frame of the bidi form. Field numbers are those of
389
+ * the equivalent UserConnectRequest, so the two cannot be confused on the wire.
390
+ *
391
+ * @generated from message kusinta.iot.signaling.v1.UserListenRequest
392
+ */
393
+ export declare type UserListenRequest = Message<"kusinta.iot.signaling.v1.UserListenRequest"> & {
394
+ /**
395
+ * @generated from field: kusinta.iot.signaling.v1.UserHandshake handshake = 1;
396
+ */
397
+ handshake?: UserHandshake | undefined;
398
+
399
+ /**
400
+ * This client's session: opaque, minted by the client, stable across
401
+ * reconnects, never a credential, and required. See the contract above.
402
+ *
403
+ * @generated from field: string session_id = 4;
404
+ */
405
+ sessionId: string;
406
+ };
407
+
408
+ /**
409
+ * Describes the message kusinta.iot.signaling.v1.UserListenRequest.
410
+ * Use `create(UserListenRequestSchema)` to create a new message.
411
+ */
412
+ export declare const UserListenRequestSchema: GenMessage<UserListenRequest>;
413
+
414
+ /**
415
+ * One message of the downstream half. Wraps the response the bidi form delivers
416
+ * directly, rather than restating its payloads: a response message is not shared
417
+ * between two rpcs, and a second copy of the oneof would be free to drift from
418
+ * the first.
419
+ *
420
+ * @generated from message kusinta.iot.signaling.v1.UserListenResponse
421
+ */
422
+ export declare type UserListenResponse = Message<"kusinta.iot.signaling.v1.UserListenResponse"> & {
423
+ /**
424
+ * @generated from field: kusinta.iot.signaling.v1.UserConnectResponse response = 1;
425
+ */
426
+ response?: UserConnectResponse | undefined;
427
+ };
428
+
429
+ /**
430
+ * Describes the message kusinta.iot.signaling.v1.UserListenResponse.
431
+ * Use `create(UserListenResponseSchema)` to create a new message.
432
+ */
433
+ export declare const UserListenResponseSchema: GenMessage<UserListenResponse>;
434
+
435
+ /**
436
+ * One upstream message of a half-duplex app session, delivered by its own call.
437
+ *
438
+ * The session must already be open, which is what makes ordering the caller's
439
+ * job: the handshake is acknowledged on the UserListen stream, and a UserSend
440
+ * issued before that acknowledgement names a session the relay does not hold
441
+ * yet. It is refused, not queued. Two sends racing each other can also arrive
442
+ * out of order, so a caller that must preserve order — an offer before the
443
+ * candidates that belong to it — issues them one at a time.
444
+ *
445
+ * @generated from message kusinta.iot.signaling.v1.UserSendRequest
446
+ */
447
+ export declare type UserSendRequest = Message<"kusinta.iot.signaling.v1.UserSendRequest"> & {
448
+ /**
449
+ * The session to deliver into. See the contract above.
450
+ *
451
+ * @generated from field: string session_id = 4;
452
+ */
453
+ sessionId: string;
454
+
455
+ /**
456
+ * @generated from oneof kusinta.iot.signaling.v1.UserSendRequest.payload
457
+ */
458
+ payload: {
459
+ /**
460
+ * @generated from field: kusinta.iot.signaling.v1.SdpOffer offer = 2;
461
+ */
462
+ value: SdpOffer;
463
+ case: "offer";
464
+ } | {
465
+ /**
466
+ * @generated from field: kusinta.iot.signaling.v1.IceCandidate ice_candidate = 3;
467
+ */
468
+ value: IceCandidate;
469
+ case: "iceCandidate";
470
+ } | { case: undefined; value?: undefined };
471
+ };
472
+
473
+ /**
474
+ * Describes the message kusinta.iot.signaling.v1.UserSendRequest.
475
+ * Use `create(UserSendRequestSchema)` to create a new message.
476
+ */
477
+ export declare const UserSendRequestSchema: GenMessage<UserSendRequest>;
478
+
479
+ /**
480
+ * Empty. Delivery is acknowledged by the call succeeding; a message that could
481
+ * not be routed fails the call instead.
482
+ *
483
+ * @generated from message kusinta.iot.signaling.v1.UserSendResponse
484
+ */
485
+ export declare type UserSendResponse = Message<"kusinta.iot.signaling.v1.UserSendResponse"> & {
486
+ };
487
+
488
+ /**
489
+ * Describes the message kusinta.iot.signaling.v1.UserSendResponse.
490
+ * Use `create(UserSendResponseSchema)` to create a new message.
491
+ */
492
+ export declare const UserSendResponseSchema: GenMessage<UserSendResponse>;
493
+
@@ -9,7 +9,7 @@ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identit
9
9
  * Describes the file kusinta/iot/signaling/v1/signaling.proto.
10
10
  */
11
11
  export const file_kusinta_iot_signaling_v1_signaling = /*@__PURE__*/
12
- fileDesc("CihrdXNpbnRhL2lvdC9zaWduYWxpbmcvdjEvc2lnbmFsaW5nLnByb3RvEhhrdXNpbnRhLmlvdC5zaWduYWxpbmcudjEiFwoIU2RwT2ZmZXISCwoDc2RwGAEgASgJIhgKCVNkcEFuc3dlchILCgNzZHAYASABKAkiSwoMSWNlQ2FuZGlkYXRlEhEKCWNhbmRpZGF0ZRgBIAEoCRIPCgdzZHBfbWlkGAIgASgJEhcKD3NkcF9tbGluZV9pbmRleBgDIAEoBSILCglIZWFydEJlYXQiTgoNVXNlckhhbmRzaGFrZRI9ChF0YXJnZXRfZ2F0ZXdheV9pZBgBIAEoCzIiLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkdhdGV3YXlJZCI0ChBVc2VySGFuZHNoYWtlQWNrEhAKCGFjY2VwdGVkGAEgASgIEg4KBnJlYXNvbhgCIAEoCSKhAgoVR2F0ZXdheUNvbm5lY3RSZXF1ZXN0EjcKDnRhcmdldF91c2VyX2lkGAEgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEhIKCnNlc3Npb25faWQYBSABKAkSNQoGYW5zd2VyGAIgASgLMiMua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlNkcEFuc3dlckgAEj8KDWljZV9jYW5kaWRhdGUYAyABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuSWNlQ2FuZGlkYXRlSAASOAoJaGVhcnRiZWF0GAQgASgLMiMua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkhlYXJ0QmVhdEgAQgkKB3BheWxvYWQi5AEKFkdhdGV3YXlDb25uZWN0UmVzcG9uc2USNQoMZnJvbV91c2VyX2lkGAEgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEhIKCnNlc3Npb25faWQYBCABKAkSMwoFb2ZmZXIYAiABKAsyIi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuU2RwT2ZmZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAQgkKB3BheWxvYWQi5wEKElVzZXJDb25uZWN0UmVxdWVzdBISCgpzZXNzaW9uX2lkGAQgASgJEjwKCWhhbmRzaGFrZRgBIAEoCzInLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5Vc2VySGFuZHNoYWtlSAASMwoFb2ZmZXIYAiABKAsyIi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuU2RwT2ZmZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAQgkKB3BheWxvYWQi8QEKE1VzZXJDb25uZWN0UmVzcG9uc2USEgoKc2Vzc2lvbl9pZBgEIAEoCRJDCg1oYW5kc2hha2VfYWNrGAEgASgLMioua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJIYW5kc2hha2VBY2tIABI1CgZhbnN3ZXIYAiABKAsyIy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuU2RwQW5zd2VySAASPwoNaWNlX2NhbmRpZGF0ZRgDIAEoCzImLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5JY2VDYW5kaWRhdGVIAEIJCgdwYXlsb2FkQgJIAWIGcHJvdG8z", [file_kusinta_iot_identity_v1_identity]);
12
+ fileDesc("CihrdXNpbnRhL2lvdC9zaWduYWxpbmcvdjEvc2lnbmFsaW5nLnByb3RvEhhrdXNpbnRhLmlvdC5zaWduYWxpbmcudjEiFwoIU2RwT2ZmZXISCwoDc2RwGAEgASgJIhgKCVNkcEFuc3dlchILCgNzZHAYASABKAkiSwoMSWNlQ2FuZGlkYXRlEhEKCWNhbmRpZGF0ZRgBIAEoCRIPCgdzZHBfbWlkGAIgASgJEhcKD3NkcF9tbGluZV9pbmRleBgDIAEoBSILCglIZWFydEJlYXQiTgoNVXNlckhhbmRzaGFrZRI9ChF0YXJnZXRfZ2F0ZXdheV9pZBgBIAEoCzIiLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkdhdGV3YXlJZCJTChBVc2VySGFuZHNoYWtlQWNrEhAKCGFjY2VwdGVkGAEgASgIEg4KBnJlYXNvbhgCIAEoCRIdChVoZWFydGJlYXRfaW50ZXJ2YWxfbXMYAyABKA0ioQIKFUdhdGV3YXlDb25uZWN0UmVxdWVzdBI3Cg50YXJnZXRfdXNlcl9pZBgBIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBISCgpzZXNzaW9uX2lkGAUgASgJEjUKBmFuc3dlchgCIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5TZHBBbnN3ZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAEjgKCWhlYXJ0YmVhdBgEIAEoCzIjLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5IZWFydEJlYXRIAEIJCgdwYXlsb2FkIuQBChZHYXRld2F5Q29ubmVjdFJlc3BvbnNlEjUKDGZyb21fdXNlcl9pZBgBIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBISCgpzZXNzaW9uX2lkGAQgASgJEjMKBW9mZmVyGAIgASgLMiIua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlNkcE9mZmVySAASPwoNaWNlX2NhbmRpZGF0ZRgDIAEoCzImLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5JY2VDYW5kaWRhdGVIAEIJCgdwYXlsb2FkIucBChJVc2VyQ29ubmVjdFJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgEIAEoCRI8CgloYW5kc2hha2UYASABKAsyJy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVXNlckhhbmRzaGFrZUgAEjMKBW9mZmVyGAIgASgLMiIua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlNkcE9mZmVySAASPwoNaWNlX2NhbmRpZGF0ZRgDIAEoCzImLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5JY2VDYW5kaWRhdGVIAEIJCgdwYXlsb2FkIqsCChNVc2VyQ29ubmVjdFJlc3BvbnNlEhIKCnNlc3Npb25faWQYBCABKAkSQwoNaGFuZHNoYWtlX2FjaxgBIAEoCzIqLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5Vc2VySGFuZHNoYWtlQWNrSAASNQoGYW5zd2VyGAIgASgLMiMua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlNkcEFuc3dlckgAEj8KDWljZV9jYW5kaWRhdGUYAyABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuSWNlQ2FuZGlkYXRlSAASOAoJaGVhcnRiZWF0GAUgASgLMiMua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkhlYXJ0QmVhdEgAQgkKB3BheWxvYWQibwoRVXNlckxpc3RlblJlcXVlc3QSOgoJaGFuZHNoYWtlGAEgASgLMicua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJIYW5kc2hha2USEgoKc2Vzc2lvbl9pZBgEIAEoCUoECAIQA0oECAMQBCJVChJVc2VyTGlzdGVuUmVzcG9uc2USPwoIcmVzcG9uc2UYASABKAsyLS5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuVXNlckNvbm5lY3RSZXNwb25zZSK3AQoPVXNlclNlbmRSZXF1ZXN0EhIKCnNlc3Npb25faWQYBCABKAkSMwoFb2ZmZXIYAiABKAsyIi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuU2RwT2ZmZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAQgkKB3BheWxvYWRKBAgBEAJSCWhhbmRzaGFrZSISChBVc2VyU2VuZFJlc3BvbnNlQgJIAWIGcHJvdG8z", [file_kusinta_iot_identity_v1_identity]);
13
13
 
14
14
  /**
15
15
  * Describes the message kusinta.iot.signaling.v1.SdpOffer.
@@ -81,3 +81,31 @@ export const UserConnectRequestSchema = /*@__PURE__*/
81
81
  export const UserConnectResponseSchema = /*@__PURE__*/
82
82
  messageDesc(file_kusinta_iot_signaling_v1_signaling, 9);
83
83
 
84
+ /**
85
+ * Describes the message kusinta.iot.signaling.v1.UserListenRequest.
86
+ * Use `create(UserListenRequestSchema)` to create a new message.
87
+ */
88
+ export const UserListenRequestSchema = /*@__PURE__*/
89
+ messageDesc(file_kusinta_iot_signaling_v1_signaling, 10);
90
+
91
+ /**
92
+ * Describes the message kusinta.iot.signaling.v1.UserListenResponse.
93
+ * Use `create(UserListenResponseSchema)` to create a new message.
94
+ */
95
+ export const UserListenResponseSchema = /*@__PURE__*/
96
+ messageDesc(file_kusinta_iot_signaling_v1_signaling, 11);
97
+
98
+ /**
99
+ * Describes the message kusinta.iot.signaling.v1.UserSendRequest.
100
+ * Use `create(UserSendRequestSchema)` to create a new message.
101
+ */
102
+ export const UserSendRequestSchema = /*@__PURE__*/
103
+ messageDesc(file_kusinta_iot_signaling_v1_signaling, 12);
104
+
105
+ /**
106
+ * Describes the message kusinta.iot.signaling.v1.UserSendResponse.
107
+ * Use `create(UserSendResponseSchema)` to create a new message.
108
+ */
109
+ export const UserSendResponseSchema = /*@__PURE__*/
110
+ messageDesc(file_kusinta_iot_signaling_v1_signaling, 13);
111
+
@@ -3,7 +3,7 @@
3
3
  /* eslint-disable */
4
4
 
5
5
  import type { GenFile, GenService } from "@bufbuild/protobuf/codegenv2";
6
- import type { GatewayConnectRequestSchema, GatewayConnectResponseSchema, UserConnectRequestSchema, UserConnectResponseSchema } from "./signaling_pb.js";
6
+ import type { GatewayConnectRequestSchema, GatewayConnectResponseSchema, UserConnectRequestSchema, UserConnectResponseSchema, UserListenRequestSchema, UserListenResponseSchema, UserSendRequestSchema, UserSendResponseSchema } from "./signaling_pb.js";
7
7
 
8
8
  /**
9
9
  * Describes the file kusinta/iot/signaling/v1/signaling_service.proto.
@@ -30,5 +30,28 @@ export declare const GatewaySignalingService: GenService<{
30
30
  input: typeof UserConnectRequestSchema;
31
31
  output: typeof UserConnectResponseSchema;
32
32
  },
33
+ /**
34
+ * Opens the session and its downstream half, for a client whose transport
35
+ * cannot stream a request body and so cannot call UserConnect. The handshake
36
+ * travels in the request; the acknowledgement is the stream's first message.
37
+ *
38
+ * @generated from rpc kusinta.iot.signaling.v1.GatewaySignalingService.UserListen
39
+ */
40
+ userListen: {
41
+ methodKind: "server_streaming";
42
+ input: typeof UserListenRequestSchema;
43
+ output: typeof UserListenResponseSchema;
44
+ },
45
+ /**
46
+ * Delivers one upstream message into a session UserListen has already opened.
47
+ * A call naming a session the relay does not hold is refused, not queued.
48
+ *
49
+ * @generated from rpc kusinta.iot.signaling.v1.GatewaySignalingService.UserSend
50
+ */
51
+ userSend: {
52
+ methodKind: "unary";
53
+ input: typeof UserSendRequestSchema;
54
+ output: typeof UserSendResponseSchema;
55
+ },
33
56
  }>;
34
57
 
@@ -9,7 +9,7 @@ import { file_kusinta_iot_signaling_v1_signaling } from "./signaling_pb.js";
9
9
  * Describes the file kusinta/iot/signaling/v1/signaling_service.proto.
10
10
  */
11
11
  export const file_kusinta_iot_signaling_v1_signaling_service = /*@__PURE__*/
12
- fileDesc("CjBrdXNpbnRhL2lvdC9zaWduYWxpbmcvdjEvc2lnbmFsaW5nX3NlcnZpY2UucHJvdG8SGGt1c2ludGEuaW90LnNpZ25hbGluZy52MTKCAgoXR2F0ZXdheVNpZ25hbGluZ1NlcnZpY2USdwoOR2F0ZXdheUNvbm5lY3QSLy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuR2F0ZXdheUNvbm5lY3RSZXF1ZXN0GjAua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkdhdGV3YXlDb25uZWN0UmVzcG9uc2UoATABEm4KC1VzZXJDb25uZWN0Eiwua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJDb25uZWN0UmVxdWVzdBotLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5Vc2VyQ29ubmVjdFJlc3BvbnNlKAEwAUICSAFiBnByb3RvMw", [file_kusinta_iot_signaling_v1_signaling]);
12
+ fileDesc("CjBrdXNpbnRhL2lvdC9zaWduYWxpbmcvdjEvc2lnbmFsaW5nX3NlcnZpY2UucHJvdG8SGGt1c2ludGEuaW90LnNpZ25hbGluZy52MTLQAwoXR2F0ZXdheVNpZ25hbGluZ1NlcnZpY2USdwoOR2F0ZXdheUNvbm5lY3QSLy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuR2F0ZXdheUNvbm5lY3RSZXF1ZXN0GjAua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkdhdGV3YXlDb25uZWN0UmVzcG9uc2UoATABEm4KC1VzZXJDb25uZWN0Eiwua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJDb25uZWN0UmVxdWVzdBotLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5Vc2VyQ29ubmVjdFJlc3BvbnNlKAEwARJpCgpVc2VyTGlzdGVuEisua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJMaXN0ZW5SZXF1ZXN0Giwua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJMaXN0ZW5SZXNwb25zZTABEmEKCFVzZXJTZW5kEikua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJTZW5kUmVxdWVzdBoqLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5Vc2VyU2VuZFJlc3BvbnNlQgJIAWIGcHJvdG8z", [file_kusinta_iot_signaling_v1_signaling]);
13
13
 
14
14
  /**
15
15
  * @generated from service kusinta.iot.signaling.v1.GatewaySignalingService
@@ -6,6 +6,7 @@ import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
7
  import type { DeviceId, GatewayId, SpaceId, TenantId, UserId } from "../../identity/v1/identity_pb.js";
8
8
  import type { SpaceType } from "../../common/v1/types_pb.js";
9
+ import type { MembershipRelation } from "../../access/v1/roles_pb.js";
9
10
 
10
11
  /**
11
12
  * Describes the file kusinta/iot/space/v1/space.proto.
@@ -51,19 +52,27 @@ export declare type Space = Message<"kusinta.iot.space.v1.Space"> & {
51
52
  parentSpaceId?: SpaceId | undefined;
52
53
 
53
54
  /**
55
+ * Filtered to the spaces the caller reaches, as device_ids is.
56
+ *
54
57
  * @generated from field: repeated kusinta.iot.identity.v1.SpaceId sub_space_ids = 7;
55
58
  */
56
59
  subSpaceIds: SpaceId[];
57
60
 
58
61
  /**
62
+ * Filtered to the devices the caller may see (see webrtc.v1.SpaceTree): for service, no
63
+ * device a resident owns.
64
+ *
59
65
  * @generated from field: repeated kusinta.iot.identity.v1.DeviceId device_ids = 8;
60
66
  */
61
67
  deviceIds: DeviceId[];
62
68
 
63
69
  /**
64
- * only for APARTMENT
70
+ * Superseded by members, which can say that more than one person lives in an apartment,
71
+ * and how each member stands to the space. A gateway leaves it unset, so a client that
72
+ * still reads it sees no resident anywhere; read members instead.
65
73
  *
66
- * @generated from field: kusinta.iot.identity.v1.UserId resident_user_id = 9;
74
+ * @generated from field: kusinta.iot.identity.v1.UserId resident_user_id = 9 [deprecated = true];
75
+ * @deprecated
67
76
  */
68
77
  residentUserId?: UserId | undefined;
69
78
 
@@ -76,6 +85,44 @@ export declare type Space = Message<"kusinta.iot.space.v1.Space"> & {
76
85
  * @generated from field: kusinta.iot.identity.v1.GatewayId gateway_id = 11;
77
86
  */
78
87
  gatewayId?: GatewayId | undefined;
88
+
89
+ /**
90
+ * An IANA time zone name, e.g. "Europe/Stockholm". Written on the building — the
91
+ * top-level space. When listing, a gateway fills it on every space with the effective
92
+ * value, inherited from the nearest ancestor that has one, so every listed space
93
+ * carries it. Empty means unknown, not UTC.
94
+ *
95
+ * @generated from field: string time_zone = 12;
96
+ */
97
+ timeZone: string;
98
+
99
+ /**
100
+ * Who is filed directly on this space, and how each stands to it. Members of a space
101
+ * above it are listed there, not here.
102
+ *
103
+ * Filled according to who asks, since a membership list says who lives where:
104
+ *
105
+ * * a caller holding ROLE_PROPERTY_OWNER or ROLE_GATEWAY_ADMIN who reaches the space
106
+ * sees every member — for a home they see as service, as it stood at the last
107
+ * quarter hour, so that a move in or out is not timed by polling;
108
+ * * a resident of an apartment sees every member filed on it or on its rooms — who they
109
+ * live with, and anyone filed on their home as service, since being filed on a home
110
+ * is an act on it its residents should see. Service reach from a building or floor
111
+ * above is not listed; webrtc.v1.PrivacyDisclosure tells them what kinds of party
112
+ * hold it, without naming anyone;
113
+ * * anyone else sees none, residents of a building or floor included.
114
+ *
115
+ * @generated from field: repeated kusinta.iot.space.v1.SpaceMember members = 13;
116
+ */
117
+ members: SpaceMember[];
118
+
119
+ /**
120
+ * Set when members are not listed to this caller, so that an empty list is not read as
121
+ * nobody being filed here.
122
+ *
123
+ * @generated from field: bool members_withheld = 14;
124
+ */
125
+ membersWithheld: boolean;
79
126
  };
80
127
 
81
128
  /**
@@ -84,3 +131,26 @@ export declare type Space = Message<"kusinta.iot.space.v1.Space"> & {
84
131
  */
85
132
  export declare const SpaceSchema: GenMessage<Space>;
86
133
 
134
+ /**
135
+ * One membership of a space.
136
+ *
137
+ * @generated from message kusinta.iot.space.v1.SpaceMember
138
+ */
139
+ export declare type SpaceMember = Message<"kusinta.iot.space.v1.SpaceMember"> & {
140
+ /**
141
+ * @generated from field: kusinta.iot.identity.v1.UserId user_id = 1;
142
+ */
143
+ userId?: UserId | undefined;
144
+
145
+ /**
146
+ * @generated from field: kusinta.iot.access.v1.MembershipRelation relation = 2;
147
+ */
148
+ relation: MembershipRelation;
149
+ };
150
+
151
+ /**
152
+ * Describes the message kusinta.iot.space.v1.SpaceMember.
153
+ * Use `create(SpaceMemberSchema)` to create a new message.
154
+ */
155
+ export declare const SpaceMemberSchema: GenMessage<SpaceMember>;
156
+
@@ -3,6 +3,7 @@
3
3
  /* eslint-disable */
4
4
 
5
5
  import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
+ import { file_kusinta_iot_access_v1_roles } from "../../access/v1/roles_pb.js";
6
7
  import { file_kusinta_iot_common_v1_types } from "../../common/v1/types_pb.js";
7
8
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
8
9
 
@@ -10,7 +11,7 @@ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identit
10
11
  * Describes the file kusinta/iot/space/v1/space.proto.
11
12
  */
12
13
  export const file_kusinta_iot_space_v1_space = /*@__PURE__*/
13
- fileDesc("CiBrdXNpbnRhL2lvdC9zcGFjZS92MS9zcGFjZS5wcm90bxIUa3VzaW50YS5pb3Quc3BhY2UudjEi9wMKBVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI0CgpzcGFjZV90eXBlGAIgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEg0KBWZsb29yGAUgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgGIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSNwoNc3ViX3NwYWNlX2lkcxgHIAMoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSNQoKZGV2aWNlX2lkcxgIIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjkKEHJlc2lkZW50X3VzZXJfaWQYCSABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSNAoJdGVuYW50X2lkGAogASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVGVuYW50SWQSNgoKZ2F0ZXdheV9pZBgLIAEoCzIiLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkdhdGV3YXlJZEICSAFiBnByb3RvMw", [file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity]);
14
+ fileDesc("CiBrdXNpbnRhL2lvdC9zcGFjZS92MS9zcGFjZS5wcm90bxIUa3VzaW50YS5pb3Quc3BhY2UudjEi3AQKBVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI0CgpzcGFjZV90eXBlGAIgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEg0KBWZsb29yGAUgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgGIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSNwoNc3ViX3NwYWNlX2lkcxgHIAMoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSNQoKZGV2aWNlX2lkcxgIIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEj0KEHJlc2lkZW50X3VzZXJfaWQYCSABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWRCAhgBEjQKCXRlbmFudF9pZBgKIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlRlbmFudElkEjYKCmdhdGV3YXlfaWQYCyABKAsyIi5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5HYXRld2F5SWQSEQoJdGltZV96b25lGAwgASgJEjIKB21lbWJlcnMYDSADKAsyIS5rdXNpbnRhLmlvdC5zcGFjZS52MS5TcGFjZU1lbWJlchIYChBtZW1iZXJzX3dpdGhoZWxkGA4gASgIInwKC1NwYWNlTWVtYmVyEjAKB3VzZXJfaWQYASABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSOwoIcmVsYXRpb24YAiABKA4yKS5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuTWVtYmVyc2hpcFJlbGF0aW9uQgJIAWIGcHJvdG8z", [file_kusinta_iot_access_v1_roles, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity]);
14
15
 
15
16
  /**
16
17
  * Describes the message kusinta.iot.space.v1.Space.
@@ -19,3 +20,10 @@ export const file_kusinta_iot_space_v1_space = /*@__PURE__*/
19
20
  export const SpaceSchema = /*@__PURE__*/
20
21
  messageDesc(file_kusinta_iot_space_v1_space, 0);
21
22
 
23
+ /**
24
+ * Describes the message kusinta.iot.space.v1.SpaceMember.
25
+ * Use `create(SpaceMemberSchema)` to create a new message.
26
+ */
27
+ export const SpaceMemberSchema = /*@__PURE__*/
28
+ messageDesc(file_kusinta_iot_space_v1_space, 1);
29
+