@kusinta/iot-schema 0.1.0-beta.19 → 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.
- package/package.json +1 -1
- package/src/kusinta/iot/signaling/v1/signaling_pb.d.ts +35 -0
- package/src/kusinta/iot/signaling/v1/signaling_pb.js +1 -1
- package/src/kusinta/iot/webrtc/v1/app_token_pb.d.ts +66 -0
- package/src/kusinta/iot/webrtc/v1/app_token_pb.js +8 -1
- package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +21 -0
- package/src/kusinta/iot/webrtc/v1/envelope_pb.js +1 -1
package/package.json
CHANGED
|
@@ -144,6 +144,14 @@ export declare type GatewayConnectRequest = Message<"kusinta.iot.signaling.v1.Ga
|
|
|
144
144
|
*/
|
|
145
145
|
targetUserId?: UserId | undefined;
|
|
146
146
|
|
|
147
|
+
/**
|
|
148
|
+
* The session of target_user_id this message answers. See the contract above.
|
|
149
|
+
* Ignored on a heartbeat, which carries no routing target at all.
|
|
150
|
+
*
|
|
151
|
+
* @generated from field: string session_id = 5;
|
|
152
|
+
*/
|
|
153
|
+
sessionId: string;
|
|
154
|
+
|
|
147
155
|
/**
|
|
148
156
|
* @generated from oneof kusinta.iot.signaling.v1.GatewayConnectRequest.payload
|
|
149
157
|
*/
|
|
@@ -185,6 +193,15 @@ export declare type GatewayConnectResponse = Message<"kusinta.iot.signaling.v1.G
|
|
|
185
193
|
*/
|
|
186
194
|
fromUserId?: UserId | undefined;
|
|
187
195
|
|
|
196
|
+
/**
|
|
197
|
+
* The session of from_user_id this message originates from — the value the
|
|
198
|
+
* gateway must echo on the GatewayConnectRequest that answers it. See the
|
|
199
|
+
* contract above.
|
|
200
|
+
*
|
|
201
|
+
* @generated from field: string session_id = 4;
|
|
202
|
+
*/
|
|
203
|
+
sessionId: string;
|
|
204
|
+
|
|
188
205
|
/**
|
|
189
206
|
* @generated from oneof kusinta.iot.signaling.v1.GatewayConnectResponse.payload
|
|
190
207
|
*/
|
|
@@ -216,6 +233,15 @@ export declare const GatewayConnectResponseSchema: GenMessage<GatewayConnectResp
|
|
|
216
233
|
* @generated from message kusinta.iot.signaling.v1.UserConnectRequest
|
|
217
234
|
*/
|
|
218
235
|
export declare type UserConnectRequest = Message<"kusinta.iot.signaling.v1.UserConnectRequest"> & {
|
|
236
|
+
/**
|
|
237
|
+
* This client's session, minted by the client. See the contract above. Sent on
|
|
238
|
+
* every message including the handshake, so the relay can key the stream on it
|
|
239
|
+
* from the first frame.
|
|
240
|
+
*
|
|
241
|
+
* @generated from field: string session_id = 4;
|
|
242
|
+
*/
|
|
243
|
+
sessionId: string;
|
|
244
|
+
|
|
219
245
|
/**
|
|
220
246
|
* @generated from oneof kusinta.iot.signaling.v1.UserConnectRequest.payload
|
|
221
247
|
*/
|
|
@@ -252,6 +278,15 @@ export declare const UserConnectRequestSchema: GenMessage<UserConnectRequest>;
|
|
|
252
278
|
* @generated from message kusinta.iot.signaling.v1.UserConnectResponse
|
|
253
279
|
*/
|
|
254
280
|
export declare type UserConnectResponse = Message<"kusinta.iot.signaling.v1.UserConnectResponse"> & {
|
|
281
|
+
/**
|
|
282
|
+
* Echoes the session_id of the stream this message is delivered on, so a
|
|
283
|
+
* client can assert the relay routed to the session it thinks it is. See the
|
|
284
|
+
* contract above.
|
|
285
|
+
*
|
|
286
|
+
* @generated from field: string session_id = 4;
|
|
287
|
+
*/
|
|
288
|
+
sessionId: string;
|
|
289
|
+
|
|
255
290
|
/**
|
|
256
291
|
* @generated from oneof kusinta.iot.signaling.v1.UserConnectResponse.payload
|
|
257
292
|
*/
|
|
@@ -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("
|
|
12
|
+
fileDesc("CihrdXNpbnRhL2lvdC9zaWduYWxpbmcvdjEvc2lnbmFsaW5nLnByb3RvEhhrdXNpbnRhLmlvdC5zaWduYWxpbmcudjEiFwoIU2RwT2ZmZXISCwoDc2RwGAEgASgJIhgKCVNkcEFuc3dlchILCgNzZHAYASABKAkiSwoMSWNlQ2FuZGlkYXRlEhEKCWNhbmRpZGF0ZRgBIAEoCRIPCgdzZHBfbWlkGAIgASgJEhcKD3NkcF9tbGluZV9pbmRleBgDIAEoBSILCglIZWFydEJlYXQiTgoNVXNlckhhbmRzaGFrZRI9ChF0YXJnZXRfZ2F0ZXdheV9pZBgBIAEoCzIiLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkdhdGV3YXlJZCI0ChBVc2VySGFuZHNoYWtlQWNrEhAKCGFjY2VwdGVkGAEgASgIEg4KBnJlYXNvbhgCIAEoCSKhAgoVR2F0ZXdheUNvbm5lY3RSZXF1ZXN0EjcKDnRhcmdldF91c2VyX2lkGAEgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEhIKCnNlc3Npb25faWQYBSABKAkSNQoGYW5zd2VyGAIgASgLMiMua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlNkcEFuc3dlckgAEj8KDWljZV9jYW5kaWRhdGUYAyABKAsyJi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuSWNlQ2FuZGlkYXRlSAASOAoJaGVhcnRiZWF0GAQgASgLMiMua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkhlYXJ0QmVhdEgAQgkKB3BheWxvYWQi5AEKFkdhdGV3YXlDb25uZWN0UmVzcG9uc2USNQoMZnJvbV91c2VyX2lkGAEgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEhIKCnNlc3Npb25faWQYBCABKAkSMwoFb2ZmZXIYAiABKAsyIi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuU2RwT2ZmZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAQgkKB3BheWxvYWQi5wEKElVzZXJDb25uZWN0UmVxdWVzdBISCgpzZXNzaW9uX2lkGAQgASgJEjwKCWhhbmRzaGFrZRgBIAEoCzInLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5Vc2VySGFuZHNoYWtlSAASMwoFb2ZmZXIYAiABKAsyIi5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuU2RwT2ZmZXJIABI/Cg1pY2VfY2FuZGlkYXRlGAMgASgLMiYua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLkljZUNhbmRpZGF0ZUgAQgkKB3BheWxvYWQi8QEKE1VzZXJDb25uZWN0UmVzcG9uc2USEgoKc2Vzc2lvbl9pZBgEIAEoCRJDCg1oYW5kc2hha2VfYWNrGAEgASgLMioua3VzaW50YS5pb3Quc2lnbmFsaW5nLnYxLlVzZXJIYW5kc2hha2VBY2tIABI1CgZhbnN3ZXIYAiABKAsyIy5rdXNpbnRhLmlvdC5zaWduYWxpbmcudjEuU2RwQW5zd2VySAASPwoNaWNlX2NhbmRpZGF0ZRgDIAEoCzImLmt1c2ludGEuaW90LnNpZ25hbGluZy52MS5JY2VDYW5kaWRhdGVIAEIJCgdwYXlsb2FkQgJIAWIGcHJvdG8z", [file_kusinta_iot_identity_v1_identity]);
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Describes the message kusinta.iot.signaling.v1.SdpOffer.
|
|
@@ -77,6 +77,35 @@ export declare type AppTokenClaims = Message<"kusinta.iot.webrtc.v1.AppTokenClai
|
|
|
77
77
|
* @generated from field: repeated kusinta.iot.access.v1.Role roles = 6;
|
|
78
78
|
*/
|
|
79
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;
|
|
80
109
|
};
|
|
81
110
|
|
|
82
111
|
/**
|
|
@@ -85,3 +114,40 @@ export declare type AppTokenClaims = Message<"kusinta.iot.webrtc.v1.AppTokenClai
|
|
|
85
114
|
*/
|
|
86
115
|
export declare const AppTokenClaimsSchema: GenMessage<AppTokenClaims>;
|
|
87
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
|
+
|
|
@@ -10,7 +10,7 @@ import { file_kusinta_iot_access_v1_roles } from "../../access/v1/roles_pb.js";
|
|
|
10
10
|
* Describes the file kusinta/iot/webrtc/v1/app_token.proto.
|
|
11
11
|
*/
|
|
12
12
|
export const file_kusinta_iot_webrtc_v1_app_token = /*@__PURE__*/
|
|
13
|
-
fileDesc("
|
|
13
|
+
fileDesc("CiVrdXNpbnRhL2lvdC93ZWJydGMvdjEvYXBwX3Rva2VuLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEi5wEKDkFwcFRva2VuQ2xhaW1zEgsKA2lzcxgBIAEoCRILCgNhdWQYAiABKAkSCwoDc3ViGAMgASgJEicKA2lhdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJwoDZXhwGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIqCgVyb2xlcxgGIAMoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjAKA2NuZhgHIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25maXJtYXRpb24iIAoMQ29uZmlybWF0aW9uEhAKCHg1dF9zMjU2GAEgASgJQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_roles]);
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Describes the message kusinta.iot.webrtc.v1.AppTokenClaims.
|
|
@@ -19,3 +19,10 @@ export const file_kusinta_iot_webrtc_v1_app_token = /*@__PURE__*/
|
|
|
19
19
|
export const AppTokenClaimsSchema = /*@__PURE__*/
|
|
20
20
|
messageDesc(file_kusinta_iot_webrtc_v1_app_token, 0);
|
|
21
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
|
+
|
|
@@ -449,6 +449,27 @@ export enum GatewayErrorCode {
|
|
|
449
449
|
* @generated from enum value: GATEWAY_ERROR_CODE_INTERNAL = 4;
|
|
450
450
|
*/
|
|
451
451
|
INTERNAL = 4,
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* The user already holds the maximum number of concurrent sessions this
|
|
455
|
+
* gateway will keep, and this attempt is refused. Permanent for this attempt:
|
|
456
|
+
* the limit does not clear on its own, so retrying is exactly the wrong
|
|
457
|
+
* response — the user must end another session first. Distinct from
|
|
458
|
+
* NOT_ENTITLED, which is a statement about what the user may see; this user
|
|
459
|
+
* may, they are simply already connected enough times.
|
|
460
|
+
*
|
|
461
|
+
* The limit itself is gateway configuration and deliberately not modelled
|
|
462
|
+
* here. GatewayError.message carries the specifics so a client can render
|
|
463
|
+
* something actionable.
|
|
464
|
+
*
|
|
465
|
+
* Rollout note: a client whose schema predates this value decodes it as
|
|
466
|
+
* UNSPECIFIED, which is retryable by design. Client handling must therefore
|
|
467
|
+
* ship before or with the gateway that emits it, and the gateway must close
|
|
468
|
+
* the session itself rather than rely on the client standing down.
|
|
469
|
+
*
|
|
470
|
+
* @generated from enum value: GATEWAY_ERROR_CODE_SESSION_LIMIT_REACHED = 5;
|
|
471
|
+
*/
|
|
472
|
+
SESSION_LIMIT_REACHED = 5,
|
|
452
473
|
}
|
|
453
474
|
|
|
454
475
|
/**
|
|
@@ -13,7 +13,7 @@ import { file_kusinta_iot_webrtc_v1_permission_push } from "./permission_push_pb
|
|
|
13
13
|
* Describes the file kusinta/iot/webrtc/v1/envelope.proto.
|
|
14
14
|
*/
|
|
15
15
|
export const file_kusinta_iot_webrtc_v1_envelope = /*@__PURE__*/
|
|
16
|
-
fileDesc("CiRrdXNpbnRhL2lvdC93ZWJydGMvdjEvZW52ZWxvcGUucHJvdG8SFWt1c2ludGEuaW90LndlYnJ0Yy52MSIGCgRQaW5nIgYKBFBvbmciIwoRSGFuZHNoYWtlUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlwKDEFwcEhhbmRzaGFrZRILCgNqd3QYASABKAkSPwoUc3Vic2NyaWJlX2RldmljZV9pZHMYAiADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJJChBTdWJzY3JpYmVEZXZpY2VzEjUKCmRldmljZV9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJLChJVbnN1YnNjcmliZURldmljZXMSNQoKZGV2aWNlX2lkcxgBIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIpMBChNSZWZ1c2VkU3Vic2NyaXB0aW9uEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjUKBGNvZGUYAiABKA4yJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yQ29kZRIPCgdtZXNzYWdlGAMgASgJIpoBCg9TdWJzY3JpcHRpb25BY2sSEwoLaW5fcmVwbHlfdG8YASABKAkSNQoKc3Vic2NyaWJlZBgCIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjsKB3JlZnVzZWQYAyADKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVmdXNlZFN1YnNjcmlwdGlvbiJ7ChNQcm9wZXJ0eVJlYWRSZXF1ZXN0EjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEhYKDmF0dHJpYnV0ZV9uYW1lGAIgASgJEhYKDmNsdXN0ZXJfaWRfaGV4GAMgASgJIswBCgxHYXRld2F5RXJyb3ISNQoEY29kZRgBIAEoDjInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5RXJyb3JDb2RlEg8KB21lc3NhZ2UYAiABKAkSQwoIbWV0YWRhdGEYAyADKAsyMS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIuMFCg5HYXRld2F5TWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkQKDnN0YXRlX3NuYXBzaG90GAMgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZVN0YXRlU25hcHNob3RIABJECg5wcm9wZXJ0eV9ldmVudBgEIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VQcm9wZXJ0eUV2ZW50SAASSAoRcGVybWlzc2lvbl91cGRhdGUYBSABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGl2ZVBlcm1pc3Npb25VcGRhdGVIABI+Cg5jb21tYW5kX3Jlc3VsdBgGIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db21tYW5kUmVzdWx0SAASKwoEcG9uZxgIIAEoCzIbLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qb25nSAASRgoSaGFuZHNoYWtlX3JlamVjdGVkGAkgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLkhhbmRzaGFrZVJlamVjdGVkSAASNAoFZXJyb3IYCiABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9ySAASQgoQc3Vic2NyaXB0aW9uX2FjaxgLIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TdWJzY3JpcHRpb25BY2tIABI6CgxkZXZpY2VfYWRkZWQYDCABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlQWRkZWRIABI+
|
|
16
|
+
fileDesc("CiRrdXNpbnRhL2lvdC93ZWJydGMvdjEvZW52ZWxvcGUucHJvdG8SFWt1c2ludGEuaW90LndlYnJ0Yy52MSIGCgRQaW5nIgYKBFBvbmciIwoRSGFuZHNoYWtlUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlwKDEFwcEhhbmRzaGFrZRILCgNqd3QYASABKAkSPwoUc3Vic2NyaWJlX2RldmljZV9pZHMYAiADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJJChBTdWJzY3JpYmVEZXZpY2VzEjUKCmRldmljZV9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJLChJVbnN1YnNjcmliZURldmljZXMSNQoKZGV2aWNlX2lkcxgBIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIpMBChNSZWZ1c2VkU3Vic2NyaXB0aW9uEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjUKBGNvZGUYAiABKA4yJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yQ29kZRIPCgdtZXNzYWdlGAMgASgJIpoBCg9TdWJzY3JpcHRpb25BY2sSEwoLaW5fcmVwbHlfdG8YASABKAkSNQoKc3Vic2NyaWJlZBgCIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjsKB3JlZnVzZWQYAyADKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVmdXNlZFN1YnNjcmlwdGlvbiJ7ChNQcm9wZXJ0eVJlYWRSZXF1ZXN0EjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEhYKDmF0dHJpYnV0ZV9uYW1lGAIgASgJEhYKDmNsdXN0ZXJfaWRfaGV4GAMgASgJIswBCgxHYXRld2F5RXJyb3ISNQoEY29kZRgBIAEoDjInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5RXJyb3JDb2RlEg8KB21lc3NhZ2UYAiABKAkSQwoIbWV0YWRhdGEYAyADKAsyMS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIuMFCg5HYXRld2F5TWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkQKDnN0YXRlX3NuYXBzaG90GAMgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZVN0YXRlU25hcHNob3RIABJECg5wcm9wZXJ0eV9ldmVudBgEIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VQcm9wZXJ0eUV2ZW50SAASSAoRcGVybWlzc2lvbl91cGRhdGUYBSABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGl2ZVBlcm1pc3Npb25VcGRhdGVIABI+Cg5jb21tYW5kX3Jlc3VsdBgGIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db21tYW5kUmVzdWx0SAASKwoEcG9uZxgIIAEoCzIbLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qb25nSAASRgoSaGFuZHNoYWtlX3JlamVjdGVkGAkgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLkhhbmRzaGFrZVJlamVjdGVkSAASNAoFZXJyb3IYCiABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9ySAASQgoQc3Vic2NyaXB0aW9uX2FjaxgLIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TdWJzY3JpcHRpb25BY2tIABI6CgxkZXZpY2VfYWRkZWQYDCABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlQWRkZWRIABI+Cg5kZXZpY2VfcmVtb3ZlZBgNIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VSZW1vdmVkSABCCQoHcGF5bG9hZEoECAcQCCK8AwoKQXBwTWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjgKCWhhbmRzaGFrZRgDIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BcHBIYW5kc2hha2VIABI3Cgdjb21tYW5kGAQgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZUNvbW1hbmRIABJCCgxyZWFkX3JlcXVlc3QYBSABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvcGVydHlSZWFkUmVxdWVzdEgAEisKBHBpbmcYBiABKAsyGy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGluZ0gAEjwKCXN1YnNjcmliZRgHIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TdWJzY3JpYmVEZXZpY2VzSAASQAoLdW5zdWJzY3JpYmUYCCABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuVW5zdWJzY3JpYmVEZXZpY2VzSABCCQoHcGF5bG9hZCr2AQoQR2F0ZXdheUVycm9yQ29kZRIiCh5HQVRFV0FZX0VSUk9SX0NPREVfVU5TUEVDSUZJRUQQABIjCh9HQVRFV0FZX0VSUk9SX0NPREVfTk9UX0VOVElUTEVEEAESJgoiR0FURVdBWV9FUlJPUl9DT0RFX0lOVkFMSURfUkVRVUVTVBACEiIKHkdBVEVXQVlfRVJST1JfQ09ERV9VTkFWQUlMQUJMRRADEh8KG0dBVEVXQVlfRVJST1JfQ09ERV9JTlRFUk5BTBAEEiwKKEdBVEVXQVlfRVJST1JfQ09ERV9TRVNTSU9OX0xJTUlUX1JFQUNIRUQQBUICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_webrtc_v1_command, file_kusinta_iot_webrtc_v1_device_state, file_kusinta_iot_webrtc_v1_permission_push]);
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Describes the message kusinta.iot.webrtc.v1.Ping.
|