@kusinta/iot-schema 0.1.0-beta.2 → 0.1.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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +49 -0
  3. package/package.json +9 -2
  4. package/src/kusinta/iot/access/v1/acl_pb.d.ts +3 -3
  5. package/src/kusinta/iot/access/v1/acl_pb.js +3 -3
  6. package/src/kusinta/iot/access/v1/roles_pb.d.ts +1 -1
  7. package/src/kusinta/iot/access/v1/roles_pb.js +1 -1
  8. package/src/kusinta/iot/common/v1/types_pb.d.ts +1 -1
  9. package/src/kusinta/iot/common/v1/types_pb.js +1 -1
  10. package/src/kusinta/iot/connector/v1/connector_pb.d.ts +31 -24
  11. package/src/kusinta/iot/connector/v1/connector_pb.js +16 -15
  12. package/src/kusinta/iot/connector/v1/connector_service_pb.d.ts +6 -6
  13. package/src/kusinta/iot/connector/v1/connector_service_pb.js +3 -3
  14. package/src/kusinta/iot/device/v1/descriptor_pb.d.ts +3 -3
  15. package/src/kusinta/iot/device/v1/descriptor_pb.js +3 -3
  16. package/src/kusinta/iot/device/v1/device_pb.d.ts +36 -4
  17. package/src/kusinta/iot/device/v1/device_pb.js +4 -4
  18. package/src/kusinta/iot/device/v1/matter_options_pb.d.ts +46 -0
  19. package/src/kusinta/iot/device/v1/matter_options_pb.js +50 -0
  20. package/src/kusinta/iot/device/v1/properties_pb.d.ts +175 -208
  21. package/src/kusinta/iot/device/v1/properties_pb.js +3 -2
  22. package/src/kusinta/iot/device/v1/property_update_pb.d.ts +37 -4
  23. package/src/kusinta/iot/device/v1/property_update_pb.js +2 -2
  24. package/src/kusinta/iot/identity/v1/identity_pb.d.ts +1 -1
  25. package/src/kusinta/iot/identity/v1/identity_pb.js +1 -1
  26. package/src/kusinta/iot/registration/v1/registration_pb.d.ts +170 -0
  27. package/src/kusinta/iot/registration/v1/registration_pb.js +61 -0
  28. package/src/kusinta/iot/registration/v1/registration_service_pb.d.ts +34 -0
  29. package/src/kusinta/iot/registration/v1/registration_service_pb.js +19 -0
  30. package/src/kusinta/iot/signaling/v1/signaling_pb.d.ts +319 -0
  31. package/src/kusinta/iot/signaling/v1/signaling_pb.js +83 -0
  32. package/src/kusinta/iot/signaling/v1/signaling_service_pb.d.ts +34 -0
  33. package/src/kusinta/iot/signaling/v1/signaling_service_pb.js +19 -0
  34. package/src/kusinta/iot/space/v1/space_pb.d.ts +3 -3
  35. package/src/kusinta/iot/space/v1/space_pb.js +3 -3
  36. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.d.ts +16 -11
  37. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.js +2 -2
  38. package/src/kusinta/iot/webrtc/v1/app_token_pb.d.ts +153 -0
  39. package/src/kusinta/iot/webrtc/v1/app_token_pb.js +28 -0
  40. package/src/kusinta/iot/webrtc/v1/command_pb.d.ts +3 -3
  41. package/src/kusinta/iot/webrtc/v1/command_pb.js +2 -2
  42. package/src/kusinta/iot/webrtc/v1/device_state_pb.d.ts +67 -4
  43. package/src/kusinta/iot/webrtc/v1/device_state_pb.js +20 -5
  44. package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +282 -13
  45. package/src/kusinta/iot/webrtc/v1/envelope_pb.js +70 -11
  46. package/src/kusinta/iot/webrtc/v1/permission_push_pb.d.ts +9 -3
  47. package/src/kusinta/iot/webrtc/v1/permission_push_pb.js +3 -3
  48. package/src/__tests__/access.test.js +0 -134
  49. package/src/__tests__/common.test.js +0 -29
  50. package/src/__tests__/connector.test.js +0 -144
  51. package/src/__tests__/device.test.js +0 -194
  52. package/src/__tests__/identity.test.js +0 -43
  53. package/src/__tests__/space.test.js +0 -54
  54. package/src/__tests__/vendor.test.js +0 -60
  55. package/src/__tests__/webrtc.test.js +0 -268
@@ -0,0 +1,153 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/webrtc/v1/app_token.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
+ import type { Message } from "@bufbuild/protobuf";
7
+ import type { Timestamp } from "@bufbuild/protobuf/wkt";
8
+ import type { Role } from "../../access/v1/roles_pb.js";
9
+
10
+ /**
11
+ * Describes the file kusinta/iot/webrtc/v1/app_token.proto.
12
+ */
13
+ export declare const file_kusinta_iot_webrtc_v1_app_token: GenFile;
14
+
15
+ /**
16
+ * AppTokenClaims is the contract for the payload of the JWT carried in
17
+ * AppHandshake.jwt. It is the single source of truth shared between
18
+ * mykusinta-api-server (which mints the token) and the gateway (which validates
19
+ * it locally against the mykusinta-api-server public key).
20
+ *
21
+ * This message is NOT sent on the wire — the wire value stays the signed,
22
+ * compact JWS string in AppHandshake.jwt. The fields here document the claim
23
+ * names and types each side must agree on. JWT libraries emit registered
24
+ * claims (iss/aud/sub) as flat strings and timestamps as NumericDate
25
+ * (seconds since the Unix epoch), so map to/from your native JWT library
26
+ * rather than serializing this message directly into the token.
27
+ *
28
+ * @generated from message kusinta.iot.webrtc.v1.AppTokenClaims
29
+ */
30
+ export declare type AppTokenClaims = Message<"kusinta.iot.webrtc.v1.AppTokenClaims"> & {
31
+ /**
32
+ * Registered claims (RFC 7519).
33
+ *
34
+ * issuer: "mykusinta-api-server"
35
+ *
36
+ * @generated from field: string iss = 1;
37
+ */
38
+ iss: string;
39
+
40
+ /**
41
+ * audience: the target GatewayId value
42
+ *
43
+ * @generated from field: string aud = 2;
44
+ */
45
+ aud: string;
46
+
47
+ /**
48
+ * subject: the UserId value
49
+ *
50
+ * @generated from field: string sub = 3;
51
+ */
52
+ sub: string;
53
+
54
+ /**
55
+ * issued-at (JWT NumericDate on the wire)
56
+ *
57
+ * @generated from field: google.protobuf.Timestamp iat = 4;
58
+ */
59
+ iat?: Timestamp | undefined;
60
+
61
+ /**
62
+ * expiry (JWT NumericDate on the wire)
63
+ *
64
+ * @generated from field: google.protobuf.Timestamp exp = 5;
65
+ */
66
+ exp?: Timestamp | undefined;
67
+
68
+ /**
69
+ * Custom claims.
70
+ * A user may hold several roles at once (e.g. resident + gateway admin), so
71
+ * this is a list. Carried in the JWT as an array of enum NAME strings
72
+ * (e.g. ["ROLE_RESIDENT", "ROLE_GATEWAY_ADMIN"]), matching proto3 canonical
73
+ * JSON enum encoding — not integer values. This keeps the claim
74
+ * self-describing and aligns with text-typed role storage in
75
+ * mykusinta-api-server.
76
+ *
77
+ * @generated from field: repeated kusinta.iot.access.v1.Role roles = 6;
78
+ */
79
+ roles: Role[];
80
+
81
+ /**
82
+ * RFC 7800 confirmation claim. Binds the token to the DTLS certificate of the
83
+ * connection it may be presented on: the validator compares this against the
84
+ * fingerprint of the live peer and rejects on mismatch, so a token replayed on
85
+ * a different connection is not usable. Without it the token is a pure bearer
86
+ * credential — possession alone is the whole proof.
87
+ *
88
+ * Carried in the JWT as the nested object RFC 7800 specifies:
89
+ * "cnf": { "x5t#S256": "<base64url SHA-256 thumbprint of the peer's DER certificate>" }
90
+ *
91
+ * MANDATORY. The issuer MUST set it on every token, and the validator MUST
92
+ * reject a token that arrives without one. proto3 cannot express that, and
93
+ * the claim is a JSON object in a JWT rather than a field on this message on
94
+ * the wire, so nothing mechanical enforces it — it is a contract both sides
95
+ * implement or the binding is worthless. A validator that treats an absent
96
+ * cnf as "fall back to bearer" reopens the exact replay this claim closes,
97
+ * and gives any holder of a stolen token a way to opt out of the check by
98
+ * stripping it.
99
+ *
100
+ * Rollout order, since a mandatory claim cannot appear on both sides at once:
101
+ * mykusinta-api-server must be issuing cnf on every token BEFORE the gateway
102
+ * begins rejecting tokens that lack it. Reverse that order and every live
103
+ * session is refused. Tokens are short-TTL, so the gap between the two
104
+ * deployments need only exceed one token lifetime.
105
+ *
106
+ * @generated from field: kusinta.iot.webrtc.v1.Confirmation cnf = 7;
107
+ */
108
+ cnf?: Confirmation | undefined;
109
+ };
110
+
111
+ /**
112
+ * Describes the message kusinta.iot.webrtc.v1.AppTokenClaims.
113
+ * Use `create(AppTokenClaimsSchema)` to create a new message.
114
+ */
115
+ export declare const AppTokenClaimsSchema: GenMessage<AppTokenClaims>;
116
+
117
+ /**
118
+ * RFC 7800 confirmation, the value of the "cnf" claim. A separate message
119
+ * because the claim is a nested JSON object in the token, not a flat string.
120
+ *
121
+ * @generated from message kusinta.iot.webrtc.v1.Confirmation
122
+ */
123
+ export declare type Confirmation = Message<"kusinta.iot.webrtc.v1.Confirmation"> & {
124
+ /**
125
+ * JWT claim name "x5t#S256" — the proto field cannot carry the "#", so the
126
+ * mapping to and from the JWT is by hand on both sides.
127
+ *
128
+ * ENCODING, pinned deliberately: base64url (unpadded) of the SHA-256 digest
129
+ * over the peer's DER-encoded certificate. WebRTC stacks hand you the same
130
+ * digest in the SDP `a=fingerprint:sha-256` attribute in a DIFFERENT form —
131
+ * uppercase, colon-separated hex — and the two will never compare equal.
132
+ * Issuer and validator must both normalise to the base64url form here; left
133
+ * unstated, each side can derive a correct value and never match.
134
+ *
135
+ * A DTLS fingerprint names a CERTIFICATE, not a connection: WebRTC permits
136
+ * reusing one certificate across several peer connections, and a new
137
+ * connection normally brings a new certificate. It is therefore neither
138
+ * unique per connection nor stable across reconnects, and must not be used as
139
+ * a session or connection key. It is a credential — it proves the peer holds
140
+ * the private key for the certificate the token was issued against, which is
141
+ * exactly and only what a confirmation claim needs.
142
+ *
143
+ * @generated from field: string x5t_s256 = 1;
144
+ */
145
+ x5tS256: string;
146
+ };
147
+
148
+ /**
149
+ * Describes the message kusinta.iot.webrtc.v1.Confirmation.
150
+ * Use `create(ConfirmationSchema)` to create a new message.
151
+ */
152
+ export declare const ConfirmationSchema: GenMessage<Confirmation>;
153
+
@@ -0,0 +1,28 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/webrtc/v1/app_token.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
+ import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
+ import { file_kusinta_iot_access_v1_roles } from "../../access/v1/roles_pb.js";
8
+
9
+ /**
10
+ * Describes the file kusinta/iot/webrtc/v1/app_token.proto.
11
+ */
12
+ export const file_kusinta_iot_webrtc_v1_app_token = /*@__PURE__*/
13
+ fileDesc("CiVrdXNpbnRhL2lvdC93ZWJydGMvdjEvYXBwX3Rva2VuLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEi5wEKDkFwcFRva2VuQ2xhaW1zEgsKA2lzcxgBIAEoCRILCgNhdWQYAiABKAkSCwoDc3ViGAMgASgJEicKA2lhdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJwoDZXhwGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIqCgVyb2xlcxgGIAMoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjAKA2NuZhgHIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25maXJtYXRpb24iIAoMQ29uZmlybWF0aW9uEhAKCHg1dF9zMjU2GAEgASgJQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_roles]);
14
+
15
+ /**
16
+ * Describes the message kusinta.iot.webrtc.v1.AppTokenClaims.
17
+ * Use `create(AppTokenClaimsSchema)` to create a new message.
18
+ */
19
+ export const AppTokenClaimsSchema = /*@__PURE__*/
20
+ messageDesc(file_kusinta_iot_webrtc_v1_app_token, 0);
21
+
22
+ /**
23
+ * Describes the message kusinta.iot.webrtc.v1.Confirmation.
24
+ * Use `create(ConfirmationSchema)` to create a new message.
25
+ */
26
+ export const ConfirmationSchema = /*@__PURE__*/
27
+ messageDesc(file_kusinta_iot_webrtc_v1_app_token, 1);
28
+
@@ -1,10 +1,10 @@
1
- // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts"
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
2
  // @generated from file kusinta/iot/webrtc/v1/command.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
3
  /* eslint-disable */
4
4
 
5
5
  import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
- import type { DeviceId } from "../../identity/v1/identity_pb";
7
+ import type { DeviceId } from "../../identity/v1/identity_pb.js";
8
8
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
9
9
 
10
10
  /**
@@ -237,7 +237,7 @@ export declare const CommandErrorSchema: GenMessage<CommandError>;
237
237
 
238
238
  /**
239
239
  * CommandResult travels gateway → Flutter app (GatewayMessage) and
240
- * connector → gateway (ConnectRequest via connector.proto import).
240
+ * connector → gateway (SessionRequest via connector.proto import).
241
241
  *
242
242
  * @generated from message kusinta.iot.webrtc.v1.CommandResult
243
243
  */
@@ -1,10 +1,10 @@
1
- // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts"
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
2
  // @generated from file kusinta/iot/webrtc/v1/command.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
3
  /* eslint-disable */
4
4
 
5
5
  import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
6
  import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
- import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb";
7
+ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
8
8
 
9
9
  /**
10
10
  * Describes the file kusinta/iot/webrtc/v1/command.proto.
@@ -1,13 +1,14 @@
1
- // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts"
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
2
  // @generated from file kusinta/iot/webrtc/v1/device_state.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
3
  /* eslint-disable */
4
4
 
5
5
  import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
- import type { Device } from "../../device/v1/device_pb";
8
- import type { EffectivePermissions } from "../../access/v1/acl_pb";
7
+ import type { Device } from "../../device/v1/device_pb.js";
8
+ import type { EffectivePermissions } from "../../access/v1/acl_pb.js";
9
9
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
10
- import type { PropertyUpdate } from "../../device/v1/property_update_pb";
10
+ import type { PropertyUpdate } from "../../device/v1/property_update_pb.js";
11
+ import type { DeviceId } from "../../identity/v1/identity_pb.js";
11
12
 
12
13
  /**
13
14
  * Describes the file kusinta/iot/webrtc/v1/device_state.proto.
@@ -65,3 +66,65 @@ export declare type DevicePropertyEvent = Message<"kusinta.iot.webrtc.v1.DeviceP
65
66
  */
66
67
  export declare const DevicePropertyEventSchema: GenMessage<DevicePropertyEvent>;
67
68
 
69
+ /**
70
+ * A device appeared while the app was connected — the app leg's counterpart to
71
+ * connector.v1.DeviceAnnouncement, which the gateway can currently only drop.
72
+ *
73
+ * Carries the full Device, descriptor plus current typed properties, so the app can
74
+ * render it without a follow-up read — the same payload DeviceStateSnapshot gives
75
+ * per device.
76
+ *
77
+ * Apply as an upsert keyed on descriptor.device_id, never as an insert: a device can
78
+ * be in the snapshot and then announced, or announced twice across a connector
79
+ * reconnect.
80
+ *
81
+ * Discovery, not interest. Being told a device exists does not subscribe the app to
82
+ * it — that still takes AppMessage.subscribe. The gateway sends this only for devices
83
+ * the user is entitled to see; an unfiltered announcement would be a device
84
+ * enumeration channel.
85
+ *
86
+ * @generated from message kusinta.iot.webrtc.v1.DeviceAdded
87
+ */
88
+ export declare type DeviceAdded = Message<"kusinta.iot.webrtc.v1.DeviceAdded"> & {
89
+ /**
90
+ * @generated from field: kusinta.iot.device.v1.Device device = 1;
91
+ */
92
+ device?: Device | undefined;
93
+ };
94
+
95
+ /**
96
+ * Describes the message kusinta.iot.webrtc.v1.DeviceAdded.
97
+ * Use `create(DeviceAddedSchema)` to create a new message.
98
+ */
99
+ export declare const DeviceAddedSchema: GenMessage<DeviceAdded>;
100
+
101
+ /**
102
+ * A device is gone, because its connector said so via connector.v1.DeviceRemoval.
103
+ *
104
+ * A connector disconnecting is NOT a removal: an ordinary reconnect wipes the
105
+ * device→connector route while every device still exists, and treating that as a
106
+ * removal makes the whole UI flap. Unreachability is a separate signal — read
107
+ * device.v1.Device.last_seen for that.
108
+ *
109
+ * @generated from message kusinta.iot.webrtc.v1.DeviceRemoved
110
+ */
111
+ export declare type DeviceRemoved = Message<"kusinta.iot.webrtc.v1.DeviceRemoved"> & {
112
+ /**
113
+ * @generated from field: kusinta.iot.identity.v1.DeviceId device_id = 1;
114
+ */
115
+ deviceId?: DeviceId | undefined;
116
+
117
+ /**
118
+ * passed through from the connector, for logs
119
+ *
120
+ * @generated from field: string reason = 2;
121
+ */
122
+ reason: string;
123
+ };
124
+
125
+ /**
126
+ * Describes the message kusinta.iot.webrtc.v1.DeviceRemoved.
127
+ * Use `create(DeviceRemovedSchema)` to create a new message.
128
+ */
129
+ export declare const DeviceRemovedSchema: GenMessage<DeviceRemoved>;
130
+
@@ -1,18 +1,19 @@
1
- // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts"
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
2
  // @generated from file kusinta/iot/webrtc/v1/device_state.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
3
  /* eslint-disable */
4
4
 
5
5
  import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
6
  import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
- import { file_kusinta_iot_device_v1_device } from "../../device/v1/device_pb";
8
- import { file_kusinta_iot_device_v1_property_update } from "../../device/v1/property_update_pb";
9
- import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb";
7
+ import { file_kusinta_iot_device_v1_device } from "../../device/v1/device_pb.js";
8
+ import { file_kusinta_iot_device_v1_property_update } from "../../device/v1/property_update_pb.js";
9
+ import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
10
+ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
10
11
 
11
12
  /**
12
13
  * Describes the file kusinta/iot/webrtc/v1/device_state.proto.
13
14
  */
14
15
  export const file_kusinta_iot_webrtc_v1_device_state = /*@__PURE__*/
15
- fileDesc("CihrdXNpbnRhL2lvdC93ZWJydGMvdjEvZGV2aWNlX3N0YXRlLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEiuwEKE0RldmljZVN0YXRlU25hcHNob3QSLgoHZGV2aWNlcxgBIAMoCzIdLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2USQAoLcGVybWlzc2lvbnMYAiABKAsyKy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuRWZmZWN0aXZlUGVybWlzc2lvbnMSMgoOc25hcHNob3R0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIoYBChNEZXZpY2VQcm9wZXJ0eUV2ZW50EjUKBnVwZGF0ZRgBIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5Qcm9wZXJ0eVVwZGF0ZRI4ChRnYXRld2F5X3Byb2Nlc3NlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_device, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_access_v1_acl]);
16
+ fileDesc("CihrdXNpbnRhL2lvdC93ZWJydGMvdjEvZGV2aWNlX3N0YXRlLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEiuwEKE0RldmljZVN0YXRlU25hcHNob3QSLgoHZGV2aWNlcxgBIAMoCzIdLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2USQAoLcGVybWlzc2lvbnMYAiABKAsyKy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuRWZmZWN0aXZlUGVybWlzc2lvbnMSMgoOc25hcHNob3R0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIoYBChNEZXZpY2VQcm9wZXJ0eUV2ZW50EjUKBnVwZGF0ZRgBIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5Qcm9wZXJ0eVVwZGF0ZRI4ChRnYXRld2F5X3Byb2Nlc3NlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiPAoLRGV2aWNlQWRkZWQSLQoGZGV2aWNlGAEgASgLMh0ua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZSJVCg1EZXZpY2VSZW1vdmVkEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEg4KBnJlYXNvbhgCIAEoCUICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_device, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_access_v1_acl, file_kusinta_iot_identity_v1_identity]);
16
17
 
17
18
  /**
18
19
  * Describes the message kusinta.iot.webrtc.v1.DeviceStateSnapshot.
@@ -28,3 +29,17 @@ export const DeviceStateSnapshotSchema = /*@__PURE__*/
28
29
  export const DevicePropertyEventSchema = /*@__PURE__*/
29
30
  messageDesc(file_kusinta_iot_webrtc_v1_device_state, 1);
30
31
 
32
+ /**
33
+ * Describes the message kusinta.iot.webrtc.v1.DeviceAdded.
34
+ * Use `create(DeviceAddedSchema)` to create a new message.
35
+ */
36
+ export const DeviceAddedSchema = /*@__PURE__*/
37
+ messageDesc(file_kusinta_iot_webrtc_v1_device_state, 2);
38
+
39
+ /**
40
+ * Describes the message kusinta.iot.webrtc.v1.DeviceRemoved.
41
+ * Use `create(DeviceRemovedSchema)` to create a new message.
42
+ */
43
+ export const DeviceRemovedSchema = /*@__PURE__*/
44
+ messageDesc(file_kusinta_iot_webrtc_v1_device_state, 3);
45
+