@tx5dr/contracts 1.4.0 → 1.5.0

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 (63) hide show
  1. package/dist/schema/__tests__/radio-power-support.test.d.ts +2 -0
  2. package/dist/schema/__tests__/radio-power-support.test.d.ts.map +1 -0
  3. package/dist/schema/__tests__/radio-power-support.test.js +19 -0
  4. package/dist/schema/__tests__/radio-power-support.test.js.map +1 -0
  5. package/dist/schema/__tests__/realtime-settings.schema.test.d.ts +2 -0
  6. package/dist/schema/__tests__/realtime-settings.schema.test.d.ts.map +1 -0
  7. package/dist/schema/__tests__/realtime-settings.schema.test.js +34 -0
  8. package/dist/schema/__tests__/realtime-settings.schema.test.js.map +1 -0
  9. package/dist/schema/cpu-profile.schema.d.ts +4 -4
  10. package/dist/schema/desktop-https.schema.d.ts +9 -0
  11. package/dist/schema/desktop-https.schema.d.ts.map +1 -1
  12. package/dist/schema/desktop-https.schema.js +3 -0
  13. package/dist/schema/desktop-https.schema.js.map +1 -1
  14. package/dist/schema/openwebrx.schema.d.ts +1 -1
  15. package/dist/schema/openwebrx.schema.d.ts.map +1 -1
  16. package/dist/schema/openwebrx.schema.js +1 -1
  17. package/dist/schema/openwebrx.schema.js.map +1 -1
  18. package/dist/schema/operator.schema.d.ts +32 -32
  19. package/dist/schema/plugin.schema.d.ts +670 -136
  20. package/dist/schema/plugin.schema.d.ts.map +1 -1
  21. package/dist/schema/plugin.schema.js +37 -2
  22. package/dist/schema/plugin.schema.js.map +1 -1
  23. package/dist/schema/radio-capability.schema.d.ts +42 -2
  24. package/dist/schema/radio-capability.schema.d.ts.map +1 -1
  25. package/dist/schema/radio-capability.schema.js +18 -1
  26. package/dist/schema/radio-capability.schema.js.map +1 -1
  27. package/dist/schema/radio-power-support.d.ts +8 -0
  28. package/dist/schema/radio-power-support.d.ts.map +1 -1
  29. package/dist/schema/radio-power-support.js +38 -26
  30. package/dist/schema/radio-power-support.js.map +1 -1
  31. package/dist/schema/radio-power.schema.d.ts +10 -6
  32. package/dist/schema/radio-power.schema.d.ts.map +1 -1
  33. package/dist/schema/radio-power.schema.js +8 -6
  34. package/dist/schema/radio-power.schema.js.map +1 -1
  35. package/dist/schema/realtime.schema.d.ts +507 -417
  36. package/dist/schema/realtime.schema.d.ts.map +1 -1
  37. package/dist/schema/realtime.schema.js +85 -51
  38. package/dist/schema/realtime.schema.js.map +1 -1
  39. package/dist/schema/server-message-keys.d.ts +2 -2
  40. package/dist/schema/server-message-keys.d.ts.map +1 -1
  41. package/dist/schema/server-message-keys.js +2 -2
  42. package/dist/schema/server-message-keys.js.map +1 -1
  43. package/dist/schema/slot-info.schema.d.ts +6 -0
  44. package/dist/schema/slot-info.schema.d.ts.map +1 -1
  45. package/dist/schema/slot-info.schema.js +3 -1
  46. package/dist/schema/slot-info.schema.js.map +1 -1
  47. package/dist/schema/websocket.schema.d.ts +1408 -612
  48. package/dist/schema/websocket.schema.d.ts.map +1 -1
  49. package/dist/schema/websocket.schema.js +2 -1
  50. package/dist/schema/websocket.schema.js.map +1 -1
  51. package/package.json +1 -1
  52. package/src/schema/__tests__/radio-power-support.test.ts +26 -0
  53. package/src/schema/__tests__/realtime-settings.schema.test.ts +40 -0
  54. package/src/schema/desktop-https.schema.ts +3 -1
  55. package/src/schema/openwebrx.schema.ts +1 -1
  56. package/src/schema/plugin.schema.ts +43 -2
  57. package/src/schema/radio-capability.schema.ts +25 -1
  58. package/src/schema/radio-power-support.ts +49 -26
  59. package/src/schema/radio-power.schema.ts +8 -6
  60. package/src/schema/realtime.schema.ts +96 -65
  61. package/src/schema/server-message-keys.ts +2 -2
  62. package/src/schema/slot-info.schema.ts +3 -1
  63. package/src/schema/websocket.schema.ts +3 -1
@@ -1,9 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  export declare const RealtimeScopeSchema: z.ZodEnum<["radio", "openwebrx-preview"]>;
3
3
  export type RealtimeScope = z.infer<typeof RealtimeScopeSchema>;
4
- export declare const RealtimeParticipantKindSchema: z.ZodEnum<["listener", "publisher", "bridge"]>;
5
- export type RealtimeParticipantKind = z.infer<typeof RealtimeParticipantKindSchema>;
6
- export declare const RealtimeTransportKindSchema: z.ZodEnum<["livekit", "ws-compat"]>;
4
+ export declare const RealtimeTransportKindSchema: z.ZodEnum<["rtc-data-audio", "ws-compat"]>;
7
5
  export type RealtimeTransportKind = z.infer<typeof RealtimeTransportKindSchema>;
8
6
  export declare const RealtimeSessionDirectionSchema: z.ZodEnum<["recv", "send"]>;
9
7
  export type RealtimeSessionDirection = z.infer<typeof RealtimeSessionDirectionSchema>;
@@ -11,22 +9,40 @@ export declare const RealtimeConnectivityErrorCodeSchema: z.ZodEnum<["TOKEN_REQU
11
9
  export type RealtimeConnectivityErrorCode = z.infer<typeof RealtimeConnectivityErrorCodeSchema>;
12
10
  export declare const RealtimeConnectivityHintsSchema: z.ZodObject<{
13
11
  signalingUrl: z.ZodString;
14
- signalingPort: z.ZodNumber;
15
- rtcTcpPort: z.ZodNumber;
16
- udpPortRange: z.ZodString;
17
- publicUrlOverrideActive: z.ZodBoolean;
12
+ localUdpPort: z.ZodNumber;
13
+ publicCandidateEnabled: z.ZodBoolean;
14
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
15
+ host: z.ZodString;
16
+ port: z.ZodNumber;
17
+ }, "strip", z.ZodTypeAny, {
18
+ host: string;
19
+ port: number;
20
+ }, {
21
+ host: string;
22
+ port: number;
23
+ }>>;
24
+ iceServers: z.ZodArray<z.ZodString, "many">;
25
+ fallbackTransport: z.ZodLiteral<"ws-compat">;
18
26
  }, "strip", z.ZodTypeAny, {
19
27
  signalingUrl: string;
20
- signalingPort: number;
21
- rtcTcpPort: number;
22
- udpPortRange: string;
23
- publicUrlOverrideActive: boolean;
28
+ localUdpPort: number;
29
+ publicCandidateEnabled: boolean;
30
+ publicEndpoint: {
31
+ host: string;
32
+ port: number;
33
+ } | null;
34
+ iceServers: string[];
35
+ fallbackTransport: "ws-compat";
24
36
  }, {
25
37
  signalingUrl: string;
26
- signalingPort: number;
27
- rtcTcpPort: number;
28
- udpPortRange: string;
29
- publicUrlOverrideActive: boolean;
38
+ localUdpPort: number;
39
+ publicCandidateEnabled: boolean;
40
+ publicEndpoint: {
41
+ host: string;
42
+ port: number;
43
+ } | null;
44
+ iceServers: string[];
45
+ fallbackTransport: "ws-compat";
30
46
  }>;
31
47
  export type RealtimeConnectivityHints = z.infer<typeof RealtimeConnectivityHintsSchema>;
32
48
  export declare const RealtimeConnectivityIssueSchema: z.ZodObject<{
@@ -40,7 +56,7 @@ export declare const RealtimeConnectivityIssueSchema: z.ZodObject<{
40
56
  }, "strip", z.ZodTypeAny, {
41
57
  code: "TOKEN_REQUEST_FAILED" | "SIGNALING_UNREACHABLE" | "PUBLIC_URL_MISCONFIGURED" | "ICE_CONNECTION_FAILED" | "NO_AUDIO_TRACK" | "AUDIO_PLAYBACK_BLOCKED" | "SESSION_EXPIRED_OR_INVALID" | "MEDIA_DEVICE_PERMISSION_DENIED" | "UNKNOWN_REALTIME_ERROR";
42
58
  scope: "radio" | "openwebrx-preview";
43
- stage: "token" | "connect" | "publish" | "subscribe" | "runtime";
59
+ stage: "runtime" | "token" | "connect" | "publish" | "subscribe";
44
60
  userMessage: string;
45
61
  suggestions: string[];
46
62
  technicalDetails?: string | undefined;
@@ -48,570 +64,500 @@ export declare const RealtimeConnectivityIssueSchema: z.ZodObject<{
48
64
  }, {
49
65
  code: "TOKEN_REQUEST_FAILED" | "SIGNALING_UNREACHABLE" | "PUBLIC_URL_MISCONFIGURED" | "ICE_CONNECTION_FAILED" | "NO_AUDIO_TRACK" | "AUDIO_PLAYBACK_BLOCKED" | "SESSION_EXPIRED_OR_INVALID" | "MEDIA_DEVICE_PERMISSION_DENIED" | "UNKNOWN_REALTIME_ERROR";
50
66
  scope: "radio" | "openwebrx-preview";
51
- stage: "token" | "connect" | "publish" | "subscribe" | "runtime";
67
+ stage: "runtime" | "token" | "connect" | "publish" | "subscribe";
52
68
  userMessage: string;
53
69
  suggestions: string[];
54
70
  technicalDetails?: string | undefined;
55
71
  context?: Record<string, string> | undefined;
56
72
  }>;
57
73
  export type RealtimeConnectivityIssue = z.infer<typeof RealtimeConnectivityIssueSchema>;
58
- export declare const RealtimeTokenRequestSchema: z.ZodObject<{
59
- scope: z.ZodEnum<["radio", "openwebrx-preview"]>;
60
- publish: z.ZodOptional<z.ZodBoolean>;
61
- previewSessionId: z.ZodOptional<z.ZodString>;
62
- }, "strip", z.ZodTypeAny, {
63
- scope: "radio" | "openwebrx-preview";
64
- publish?: boolean | undefined;
65
- previewSessionId?: string | undefined;
66
- }, {
67
- scope: "radio" | "openwebrx-preview";
68
- publish?: boolean | undefined;
69
- previewSessionId?: string | undefined;
70
- }>;
71
- export type RealtimeTokenRequest = z.infer<typeof RealtimeTokenRequestSchema>;
72
74
  export declare const RealtimeSessionRequestSchema: z.ZodObject<{
73
75
  scope: z.ZodEnum<["radio", "openwebrx-preview"]>;
74
76
  direction: z.ZodEnum<["recv", "send"]>;
75
77
  previewSessionId: z.ZodOptional<z.ZodString>;
76
- transportOverride: z.ZodOptional<z.ZodEnum<["livekit", "ws-compat"]>>;
78
+ transportOverride: z.ZodOptional<z.ZodEnum<["rtc-data-audio", "ws-compat"]>>;
77
79
  }, "strip", z.ZodTypeAny, {
78
80
  scope: "radio" | "openwebrx-preview";
79
81
  direction: "recv" | "send";
80
82
  previewSessionId?: string | undefined;
81
- transportOverride?: "livekit" | "ws-compat" | undefined;
83
+ transportOverride?: "rtc-data-audio" | "ws-compat" | undefined;
82
84
  }, {
83
85
  scope: "radio" | "openwebrx-preview";
84
86
  direction: "recv" | "send";
85
87
  previewSessionId?: string | undefined;
86
- transportOverride?: "livekit" | "ws-compat" | undefined;
88
+ transportOverride?: "rtc-data-audio" | "ws-compat" | undefined;
87
89
  }>;
88
90
  export type RealtimeSessionRequest = z.infer<typeof RealtimeSessionRequestSchema>;
89
- export declare const RealtimeParticipantMetadataSchema: z.ZodObject<{
90
- role: z.ZodString;
91
- tokenId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
92
- operatorIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
93
- clientKind: z.ZodString;
94
- participantKind: z.ZodEnum<["listener", "publisher", "bridge"]>;
95
- scope: z.ZodEnum<["radio", "openwebrx-preview"]>;
96
- previewSessionId: z.ZodOptional<z.ZodString>;
97
- }, "strip", z.ZodTypeAny, {
98
- scope: "radio" | "openwebrx-preview";
99
- role: string;
100
- clientKind: string;
101
- participantKind: "listener" | "publisher" | "bridge";
102
- operatorIds?: string[] | undefined;
103
- tokenId?: string | null | undefined;
104
- previewSessionId?: string | undefined;
105
- }, {
106
- scope: "radio" | "openwebrx-preview";
107
- role: string;
108
- clientKind: string;
109
- participantKind: "listener" | "publisher" | "bridge";
110
- operatorIds?: string[] | undefined;
111
- tokenId?: string | null | undefined;
112
- previewSessionId?: string | undefined;
113
- }>;
114
- export type RealtimeParticipantMetadata = z.infer<typeof RealtimeParticipantMetadataSchema>;
115
- export declare const RealtimeTokenResponseSchema: z.ZodObject<{
116
- url: z.ZodString;
117
- roomName: z.ZodString;
118
- token: z.ZodString;
119
- participantIdentity: z.ZodString;
120
- participantName: z.ZodString;
121
- participantMetadata: z.ZodObject<{
122
- role: z.ZodString;
123
- tokenId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
124
- operatorIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
125
- clientKind: z.ZodString;
126
- participantKind: z.ZodEnum<["listener", "publisher", "bridge"]>;
127
- scope: z.ZodEnum<["radio", "openwebrx-preview"]>;
128
- previewSessionId: z.ZodOptional<z.ZodString>;
129
- }, "strip", z.ZodTypeAny, {
130
- scope: "radio" | "openwebrx-preview";
131
- role: string;
132
- clientKind: string;
133
- participantKind: "listener" | "publisher" | "bridge";
134
- operatorIds?: string[] | undefined;
135
- tokenId?: string | null | undefined;
136
- previewSessionId?: string | undefined;
137
- }, {
138
- scope: "radio" | "openwebrx-preview";
139
- role: string;
140
- clientKind: string;
141
- participantKind: "listener" | "publisher" | "bridge";
142
- operatorIds?: string[] | undefined;
143
- tokenId?: string | null | undefined;
144
- previewSessionId?: string | undefined;
145
- }>;
146
- connectivityHints: z.ZodObject<{
147
- signalingUrl: z.ZodString;
148
- signalingPort: z.ZodNumber;
149
- rtcTcpPort: z.ZodNumber;
150
- udpPortRange: z.ZodString;
151
- publicUrlOverrideActive: z.ZodBoolean;
152
- }, "strip", z.ZodTypeAny, {
153
- signalingUrl: string;
154
- signalingPort: number;
155
- rtcTcpPort: number;
156
- udpPortRange: string;
157
- publicUrlOverrideActive: boolean;
158
- }, {
159
- signalingUrl: string;
160
- signalingPort: number;
161
- rtcTcpPort: number;
162
- udpPortRange: string;
163
- publicUrlOverrideActive: boolean;
164
- }>;
165
- }, "strip", z.ZodTypeAny, {
166
- url: string;
167
- token: string;
168
- roomName: string;
169
- participantIdentity: string;
170
- participantName: string;
171
- participantMetadata: {
172
- scope: "radio" | "openwebrx-preview";
173
- role: string;
174
- clientKind: string;
175
- participantKind: "listener" | "publisher" | "bridge";
176
- operatorIds?: string[] | undefined;
177
- tokenId?: string | null | undefined;
178
- previewSessionId?: string | undefined;
179
- };
180
- connectivityHints: {
181
- signalingUrl: string;
182
- signalingPort: number;
183
- rtcTcpPort: number;
184
- udpPortRange: string;
185
- publicUrlOverrideActive: boolean;
186
- };
187
- }, {
188
- url: string;
189
- token: string;
190
- roomName: string;
191
- participantIdentity: string;
192
- participantName: string;
193
- participantMetadata: {
194
- scope: "radio" | "openwebrx-preview";
195
- role: string;
196
- clientKind: string;
197
- participantKind: "listener" | "publisher" | "bridge";
198
- operatorIds?: string[] | undefined;
199
- tokenId?: string | null | undefined;
200
- previewSessionId?: string | undefined;
201
- };
202
- connectivityHints: {
203
- signalingUrl: string;
204
- signalingPort: number;
205
- rtcTcpPort: number;
206
- udpPortRange: string;
207
- publicUrlOverrideActive: boolean;
208
- };
209
- }>;
210
- export type RealtimeTokenResponse = z.infer<typeof RealtimeTokenResponseSchema>;
211
91
  export declare const RealtimeTransportOfferSchema: z.ZodObject<{
212
- transport: z.ZodEnum<["livekit", "ws-compat"]>;
92
+ transport: z.ZodEnum<["rtc-data-audio", "ws-compat"]>;
213
93
  direction: z.ZodEnum<["recv", "send"]>;
214
94
  url: z.ZodString;
215
95
  token: z.ZodString;
216
96
  participantIdentity: z.ZodOptional<z.ZodNullable<z.ZodString>>;
217
97
  participantName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
218
- roomName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
219
98
  }, "strip", z.ZodTypeAny, {
220
99
  url: string;
221
100
  token: string;
222
101
  direction: "recv" | "send";
223
- transport: "livekit" | "ws-compat";
224
- roomName?: string | null | undefined;
102
+ transport: "rtc-data-audio" | "ws-compat";
225
103
  participantIdentity?: string | null | undefined;
226
104
  participantName?: string | null | undefined;
227
105
  }, {
228
106
  url: string;
229
107
  token: string;
230
108
  direction: "recv" | "send";
231
- transport: "livekit" | "ws-compat";
232
- roomName?: string | null | undefined;
109
+ transport: "rtc-data-audio" | "ws-compat";
233
110
  participantIdentity?: string | null | undefined;
234
111
  participantName?: string | null | undefined;
235
112
  }>;
236
113
  export type RealtimeTransportOffer = z.infer<typeof RealtimeTransportOfferSchema>;
237
114
  export declare const RealtimeTransportPolicySchema: z.ZodEnum<["auto", "force-compat"]>;
238
115
  export type RealtimeTransportPolicy = z.infer<typeof RealtimeTransportPolicySchema>;
239
- export declare const LiveKitNetworkModeSchema: z.ZodEnum<["lan", "internet-auto", "internet-manual"]>;
240
- export type LiveKitNetworkMode = z.infer<typeof LiveKitNetworkModeSchema>;
116
+ export declare const RtcDataAudioPublicHostSchema: z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodLiteral<"">, null, "">, z.ZodEffects<z.ZodString, string, string>, z.ZodNull]>, string | null, unknown>;
117
+ export type RtcDataAudioPublicHost = z.infer<typeof RtcDataAudioPublicHostSchema>;
118
+ export declare const RtcDataAudioPublicUdpPortSchema: z.ZodEffects<z.ZodNullable<z.ZodNumber>, number | null, unknown>;
119
+ export type RtcDataAudioPublicUdpPort = z.infer<typeof RtcDataAudioPublicUdpPortSchema>;
241
120
  export declare const RealtimeSessionResponseSchema: z.ZodObject<{
242
121
  scope: z.ZodEnum<["radio", "openwebrx-preview"]>;
243
122
  direction: z.ZodEnum<["recv", "send"]>;
244
- preferredTransport: z.ZodEnum<["livekit", "ws-compat"]>;
123
+ preferredTransport: z.ZodEnum<["rtc-data-audio", "ws-compat"]>;
245
124
  effectiveTransportPolicy: z.ZodEnum<["auto", "force-compat"]>;
246
- selectionReason: z.ZodEnum<["client-override", "server-policy", "bridge-unhealthy", "livekit-disabled", "runtime-unavailable", "default-livekit"]>;
125
+ selectionReason: z.ZodEnum<["client-override", "server-policy", "default-rtc-data-audio", "rtc-data-audio-unavailable"]>;
247
126
  forcedCompatibilityMode: z.ZodBoolean;
248
127
  offers: z.ZodArray<z.ZodObject<{
249
- transport: z.ZodEnum<["livekit", "ws-compat"]>;
128
+ transport: z.ZodEnum<["rtc-data-audio", "ws-compat"]>;
250
129
  direction: z.ZodEnum<["recv", "send"]>;
251
130
  url: z.ZodString;
252
131
  token: z.ZodString;
253
132
  participantIdentity: z.ZodOptional<z.ZodNullable<z.ZodString>>;
254
133
  participantName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
255
- roomName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
256
134
  }, "strip", z.ZodTypeAny, {
257
135
  url: string;
258
136
  token: string;
259
137
  direction: "recv" | "send";
260
- transport: "livekit" | "ws-compat";
261
- roomName?: string | null | undefined;
138
+ transport: "rtc-data-audio" | "ws-compat";
262
139
  participantIdentity?: string | null | undefined;
263
140
  participantName?: string | null | undefined;
264
141
  }, {
265
142
  url: string;
266
143
  token: string;
267
144
  direction: "recv" | "send";
268
- transport: "livekit" | "ws-compat";
269
- roomName?: string | null | undefined;
145
+ transport: "rtc-data-audio" | "ws-compat";
270
146
  participantIdentity?: string | null | undefined;
271
147
  participantName?: string | null | undefined;
272
148
  }>, "many">;
273
149
  connectivityHints: z.ZodObject<{
274
150
  signalingUrl: z.ZodString;
275
- signalingPort: z.ZodNumber;
276
- rtcTcpPort: z.ZodNumber;
277
- udpPortRange: z.ZodString;
278
- publicUrlOverrideActive: z.ZodBoolean;
151
+ localUdpPort: z.ZodNumber;
152
+ publicCandidateEnabled: z.ZodBoolean;
153
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
154
+ host: z.ZodString;
155
+ port: z.ZodNumber;
156
+ }, "strip", z.ZodTypeAny, {
157
+ host: string;
158
+ port: number;
159
+ }, {
160
+ host: string;
161
+ port: number;
162
+ }>>;
163
+ iceServers: z.ZodArray<z.ZodString, "many">;
164
+ fallbackTransport: z.ZodLiteral<"ws-compat">;
279
165
  }, "strip", z.ZodTypeAny, {
280
166
  signalingUrl: string;
281
- signalingPort: number;
282
- rtcTcpPort: number;
283
- udpPortRange: string;
284
- publicUrlOverrideActive: boolean;
167
+ localUdpPort: number;
168
+ publicCandidateEnabled: boolean;
169
+ publicEndpoint: {
170
+ host: string;
171
+ port: number;
172
+ } | null;
173
+ iceServers: string[];
174
+ fallbackTransport: "ws-compat";
285
175
  }, {
286
176
  signalingUrl: string;
287
- signalingPort: number;
288
- rtcTcpPort: number;
289
- udpPortRange: string;
290
- publicUrlOverrideActive: boolean;
177
+ localUdpPort: number;
178
+ publicCandidateEnabled: boolean;
179
+ publicEndpoint: {
180
+ host: string;
181
+ port: number;
182
+ } | null;
183
+ iceServers: string[];
184
+ fallbackTransport: "ws-compat";
291
185
  }>;
292
186
  }, "strip", z.ZodTypeAny, {
293
187
  scope: "radio" | "openwebrx-preview";
294
188
  direction: "recv" | "send";
295
- connectivityHints: {
296
- signalingUrl: string;
297
- signalingPort: number;
298
- rtcTcpPort: number;
299
- udpPortRange: string;
300
- publicUrlOverrideActive: boolean;
301
- };
302
- preferredTransport: "livekit" | "ws-compat";
189
+ preferredTransport: "rtc-data-audio" | "ws-compat";
303
190
  effectiveTransportPolicy: "auto" | "force-compat";
304
- selectionReason: "client-override" | "server-policy" | "bridge-unhealthy" | "livekit-disabled" | "runtime-unavailable" | "default-livekit";
191
+ selectionReason: "client-override" | "server-policy" | "default-rtc-data-audio" | "rtc-data-audio-unavailable";
305
192
  forcedCompatibilityMode: boolean;
306
193
  offers: {
307
194
  url: string;
308
195
  token: string;
309
196
  direction: "recv" | "send";
310
- transport: "livekit" | "ws-compat";
311
- roomName?: string | null | undefined;
197
+ transport: "rtc-data-audio" | "ws-compat";
312
198
  participantIdentity?: string | null | undefined;
313
199
  participantName?: string | null | undefined;
314
200
  }[];
315
- }, {
316
- scope: "radio" | "openwebrx-preview";
317
- direction: "recv" | "send";
318
201
  connectivityHints: {
319
202
  signalingUrl: string;
320
- signalingPort: number;
321
- rtcTcpPort: number;
322
- udpPortRange: string;
323
- publicUrlOverrideActive: boolean;
203
+ localUdpPort: number;
204
+ publicCandidateEnabled: boolean;
205
+ publicEndpoint: {
206
+ host: string;
207
+ port: number;
208
+ } | null;
209
+ iceServers: string[];
210
+ fallbackTransport: "ws-compat";
324
211
  };
325
- preferredTransport: "livekit" | "ws-compat";
212
+ }, {
213
+ scope: "radio" | "openwebrx-preview";
214
+ direction: "recv" | "send";
215
+ preferredTransport: "rtc-data-audio" | "ws-compat";
326
216
  effectiveTransportPolicy: "auto" | "force-compat";
327
- selectionReason: "client-override" | "server-policy" | "bridge-unhealthy" | "livekit-disabled" | "runtime-unavailable" | "default-livekit";
217
+ selectionReason: "client-override" | "server-policy" | "default-rtc-data-audio" | "rtc-data-audio-unavailable";
328
218
  forcedCompatibilityMode: boolean;
329
219
  offers: {
330
220
  url: string;
331
221
  token: string;
332
222
  direction: "recv" | "send";
333
- transport: "livekit" | "ws-compat";
334
- roomName?: string | null | undefined;
223
+ transport: "rtc-data-audio" | "ws-compat";
335
224
  participantIdentity?: string | null | undefined;
336
225
  participantName?: string | null | undefined;
337
226
  }[];
227
+ connectivityHints: {
228
+ signalingUrl: string;
229
+ localUdpPort: number;
230
+ publicCandidateEnabled: boolean;
231
+ publicEndpoint: {
232
+ host: string;
233
+ port: number;
234
+ } | null;
235
+ iceServers: string[];
236
+ fallbackTransport: "ws-compat";
237
+ };
338
238
  }>;
339
239
  export type RealtimeSessionResponse = z.infer<typeof RealtimeSessionResponseSchema>;
340
240
  export declare const RealtimeSettingsSchema: z.ZodObject<{
341
- publicWsUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
342
241
  transportPolicy: z.ZodOptional<z.ZodEnum<["auto", "force-compat"]>>;
343
- networkMode: z.ZodOptional<z.ZodEnum<["lan", "internet-auto", "internet-manual"]>>;
344
- nodeIp: z.ZodOptional<z.ZodNullable<z.ZodString>>;
242
+ rtcDataAudioPublicHost: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodLiteral<"">, null, "">, z.ZodEffects<z.ZodString, string, string>, z.ZodNull]>, string | null, unknown>>;
243
+ rtcDataAudioPublicUdpPort: z.ZodOptional<z.ZodEffects<z.ZodNullable<z.ZodNumber>, number | null, unknown>>;
345
244
  }, "strip", z.ZodTypeAny, {
346
- publicWsUrl?: string | null | undefined;
347
245
  transportPolicy?: "auto" | "force-compat" | undefined;
348
- networkMode?: "lan" | "internet-auto" | "internet-manual" | undefined;
349
- nodeIp?: string | null | undefined;
246
+ rtcDataAudioPublicHost?: string | null | undefined;
247
+ rtcDataAudioPublicUdpPort?: number | null | undefined;
350
248
  }, {
351
- publicWsUrl?: string | null | undefined;
352
249
  transportPolicy?: "auto" | "force-compat" | undefined;
353
- networkMode?: "lan" | "internet-auto" | "internet-manual" | undefined;
354
- nodeIp?: string | null | undefined;
250
+ rtcDataAudioPublicHost?: unknown;
251
+ rtcDataAudioPublicUdpPort?: unknown;
355
252
  }>;
356
253
  export type RealtimeSettings = z.infer<typeof RealtimeSettingsSchema>;
357
- export declare const RealtimeCredentialSourceSchema: z.ZodEnum<["managed-file", "environment-override", "missing"]>;
358
- export type RealtimeCredentialSource = z.infer<typeof RealtimeCredentialSourceSchema>;
359
- export declare const RealtimeCredentialStatusSchema: z.ZodObject<{
360
- initialized: z.ZodBoolean;
361
- source: z.ZodEnum<["managed-file", "environment-override", "missing"]>;
362
- filePath: z.ZodNullable<z.ZodString>;
363
- apiKeyPreview: z.ZodNullable<z.ZodString>;
364
- createdAt: z.ZodNullable<z.ZodString>;
365
- rotatedAt: z.ZodNullable<z.ZodString>;
254
+ export declare const RealtimeRtcDataAudioRuntimeSchema: z.ZodObject<{
255
+ localUdpPort: z.ZodNumber;
256
+ publicCandidateEnabled: z.ZodBoolean;
257
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
258
+ host: z.ZodString;
259
+ port: z.ZodNumber;
260
+ }, "strip", z.ZodTypeAny, {
261
+ host: string;
262
+ port: number;
263
+ }, {
264
+ host: string;
265
+ port: number;
266
+ }>>;
366
267
  }, "strip", z.ZodTypeAny, {
367
- source: "managed-file" | "environment-override" | "missing";
368
- filePath: string | null;
369
- createdAt: string | null;
370
- initialized: boolean;
371
- apiKeyPreview: string | null;
372
- rotatedAt: string | null;
268
+ localUdpPort: number;
269
+ publicCandidateEnabled: boolean;
270
+ publicEndpoint: {
271
+ host: string;
272
+ port: number;
273
+ } | null;
373
274
  }, {
374
- source: "managed-file" | "environment-override" | "missing";
375
- filePath: string | null;
376
- createdAt: string | null;
377
- initialized: boolean;
378
- apiKeyPreview: string | null;
379
- rotatedAt: string | null;
275
+ localUdpPort: number;
276
+ publicCandidateEnabled: boolean;
277
+ publicEndpoint: {
278
+ host: string;
279
+ port: number;
280
+ } | null;
380
281
  }>;
381
- export type RealtimeCredentialStatus = z.infer<typeof RealtimeCredentialStatusSchema>;
282
+ export type RealtimeRtcDataAudioRuntime = z.infer<typeof RealtimeRtcDataAudioRuntimeSchema>;
382
283
  export declare const RealtimeSettingsRuntimeSchema: z.ZodObject<{
383
- liveKitEnabled: z.ZodBoolean;
384
284
  connectivityHints: z.ZodObject<{
385
285
  signalingUrl: z.ZodString;
386
- signalingPort: z.ZodNumber;
387
- rtcTcpPort: z.ZodNumber;
388
- udpPortRange: z.ZodString;
389
- publicUrlOverrideActive: z.ZodBoolean;
286
+ localUdpPort: z.ZodNumber;
287
+ publicCandidateEnabled: z.ZodBoolean;
288
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
289
+ host: z.ZodString;
290
+ port: z.ZodNumber;
291
+ }, "strip", z.ZodTypeAny, {
292
+ host: string;
293
+ port: number;
294
+ }, {
295
+ host: string;
296
+ port: number;
297
+ }>>;
298
+ iceServers: z.ZodArray<z.ZodString, "many">;
299
+ fallbackTransport: z.ZodLiteral<"ws-compat">;
390
300
  }, "strip", z.ZodTypeAny, {
391
301
  signalingUrl: string;
392
- signalingPort: number;
393
- rtcTcpPort: number;
394
- udpPortRange: string;
395
- publicUrlOverrideActive: boolean;
302
+ localUdpPort: number;
303
+ publicCandidateEnabled: boolean;
304
+ publicEndpoint: {
305
+ host: string;
306
+ port: number;
307
+ } | null;
308
+ iceServers: string[];
309
+ fallbackTransport: "ws-compat";
396
310
  }, {
397
311
  signalingUrl: string;
398
- signalingPort: number;
399
- rtcTcpPort: number;
400
- udpPortRange: string;
401
- publicUrlOverrideActive: boolean;
312
+ localUdpPort: number;
313
+ publicCandidateEnabled: boolean;
314
+ publicEndpoint: {
315
+ host: string;
316
+ port: number;
317
+ } | null;
318
+ iceServers: string[];
319
+ fallbackTransport: "ws-compat";
402
320
  }>;
403
- radioReceiveTransport: z.ZodEnum<["livekit", "ws-compat"]>;
404
- radioBridgeHealthy: z.ZodBoolean;
405
- radioBridgeIssueCode: z.ZodNullable<z.ZodEnum<["TOKEN_REQUEST_FAILED", "SIGNALING_UNREACHABLE", "PUBLIC_URL_MISCONFIGURED", "ICE_CONNECTION_FAILED", "NO_AUDIO_TRACK", "AUDIO_PLAYBACK_BLOCKED", "SESSION_EXPIRED_OR_INVALID", "MEDIA_DEVICE_PERMISSION_DENIED", "UNKNOWN_REALTIME_ERROR"]>>;
406
- credentialStatus: z.ZodObject<{
407
- initialized: z.ZodBoolean;
408
- source: z.ZodEnum<["managed-file", "environment-override", "missing"]>;
409
- filePath: z.ZodNullable<z.ZodString>;
410
- apiKeyPreview: z.ZodNullable<z.ZodString>;
411
- createdAt: z.ZodNullable<z.ZodString>;
412
- rotatedAt: z.ZodNullable<z.ZodString>;
321
+ radioReceiveTransport: z.ZodEnum<["rtc-data-audio", "ws-compat"]>;
322
+ rtcDataAudio: z.ZodObject<{
323
+ localUdpPort: z.ZodNumber;
324
+ publicCandidateEnabled: z.ZodBoolean;
325
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
326
+ host: z.ZodString;
327
+ port: z.ZodNumber;
328
+ }, "strip", z.ZodTypeAny, {
329
+ host: string;
330
+ port: number;
331
+ }, {
332
+ host: string;
333
+ port: number;
334
+ }>>;
413
335
  }, "strip", z.ZodTypeAny, {
414
- source: "managed-file" | "environment-override" | "missing";
415
- filePath: string | null;
416
- createdAt: string | null;
417
- initialized: boolean;
418
- apiKeyPreview: string | null;
419
- rotatedAt: string | null;
336
+ localUdpPort: number;
337
+ publicCandidateEnabled: boolean;
338
+ publicEndpoint: {
339
+ host: string;
340
+ port: number;
341
+ } | null;
420
342
  }, {
421
- source: "managed-file" | "environment-override" | "missing";
422
- filePath: string | null;
423
- createdAt: string | null;
424
- initialized: boolean;
425
- apiKeyPreview: string | null;
426
- rotatedAt: string | null;
343
+ localUdpPort: number;
344
+ publicCandidateEnabled: boolean;
345
+ publicEndpoint: {
346
+ host: string;
347
+ port: number;
348
+ } | null;
427
349
  }>;
428
350
  }, "strip", z.ZodTypeAny, {
429
351
  connectivityHints: {
430
352
  signalingUrl: string;
431
- signalingPort: number;
432
- rtcTcpPort: number;
433
- udpPortRange: string;
434
- publicUrlOverrideActive: boolean;
353
+ localUdpPort: number;
354
+ publicCandidateEnabled: boolean;
355
+ publicEndpoint: {
356
+ host: string;
357
+ port: number;
358
+ } | null;
359
+ iceServers: string[];
360
+ fallbackTransport: "ws-compat";
435
361
  };
436
- liveKitEnabled: boolean;
437
- radioReceiveTransport: "livekit" | "ws-compat";
438
- radioBridgeHealthy: boolean;
439
- radioBridgeIssueCode: "TOKEN_REQUEST_FAILED" | "SIGNALING_UNREACHABLE" | "PUBLIC_URL_MISCONFIGURED" | "ICE_CONNECTION_FAILED" | "NO_AUDIO_TRACK" | "AUDIO_PLAYBACK_BLOCKED" | "SESSION_EXPIRED_OR_INVALID" | "MEDIA_DEVICE_PERMISSION_DENIED" | "UNKNOWN_REALTIME_ERROR" | null;
440
- credentialStatus: {
441
- source: "managed-file" | "environment-override" | "missing";
442
- filePath: string | null;
443
- createdAt: string | null;
444
- initialized: boolean;
445
- apiKeyPreview: string | null;
446
- rotatedAt: string | null;
362
+ radioReceiveTransport: "rtc-data-audio" | "ws-compat";
363
+ rtcDataAudio: {
364
+ localUdpPort: number;
365
+ publicCandidateEnabled: boolean;
366
+ publicEndpoint: {
367
+ host: string;
368
+ port: number;
369
+ } | null;
447
370
  };
448
371
  }, {
449
372
  connectivityHints: {
450
373
  signalingUrl: string;
451
- signalingPort: number;
452
- rtcTcpPort: number;
453
- udpPortRange: string;
454
- publicUrlOverrideActive: boolean;
374
+ localUdpPort: number;
375
+ publicCandidateEnabled: boolean;
376
+ publicEndpoint: {
377
+ host: string;
378
+ port: number;
379
+ } | null;
380
+ iceServers: string[];
381
+ fallbackTransport: "ws-compat";
455
382
  };
456
- liveKitEnabled: boolean;
457
- radioReceiveTransport: "livekit" | "ws-compat";
458
- radioBridgeHealthy: boolean;
459
- radioBridgeIssueCode: "TOKEN_REQUEST_FAILED" | "SIGNALING_UNREACHABLE" | "PUBLIC_URL_MISCONFIGURED" | "ICE_CONNECTION_FAILED" | "NO_AUDIO_TRACK" | "AUDIO_PLAYBACK_BLOCKED" | "SESSION_EXPIRED_OR_INVALID" | "MEDIA_DEVICE_PERMISSION_DENIED" | "UNKNOWN_REALTIME_ERROR" | null;
460
- credentialStatus: {
461
- source: "managed-file" | "environment-override" | "missing";
462
- filePath: string | null;
463
- createdAt: string | null;
464
- initialized: boolean;
465
- apiKeyPreview: string | null;
466
- rotatedAt: string | null;
383
+ radioReceiveTransport: "rtc-data-audio" | "ws-compat";
384
+ rtcDataAudio: {
385
+ localUdpPort: number;
386
+ publicCandidateEnabled: boolean;
387
+ publicEndpoint: {
388
+ host: string;
389
+ port: number;
390
+ } | null;
467
391
  };
468
392
  }>;
469
393
  export type RealtimeSettingsRuntime = z.infer<typeof RealtimeSettingsRuntimeSchema>;
470
394
  export declare const RealtimeSettingsResponseDataSchema: z.ZodObject<{
471
- publicWsUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
472
395
  transportPolicy: z.ZodOptional<z.ZodEnum<["auto", "force-compat"]>>;
473
- networkMode: z.ZodOptional<z.ZodEnum<["lan", "internet-auto", "internet-manual"]>>;
474
- nodeIp: z.ZodOptional<z.ZodNullable<z.ZodString>>;
396
+ rtcDataAudioPublicHost: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodLiteral<"">, null, "">, z.ZodEffects<z.ZodString, string, string>, z.ZodNull]>, string | null, unknown>>;
397
+ rtcDataAudioPublicUdpPort: z.ZodOptional<z.ZodEffects<z.ZodNullable<z.ZodNumber>, number | null, unknown>>;
475
398
  } & {
476
399
  runtime: z.ZodOptional<z.ZodObject<{
477
- liveKitEnabled: z.ZodBoolean;
478
400
  connectivityHints: z.ZodObject<{
479
401
  signalingUrl: z.ZodString;
480
- signalingPort: z.ZodNumber;
481
- rtcTcpPort: z.ZodNumber;
482
- udpPortRange: z.ZodString;
483
- publicUrlOverrideActive: z.ZodBoolean;
402
+ localUdpPort: z.ZodNumber;
403
+ publicCandidateEnabled: z.ZodBoolean;
404
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
405
+ host: z.ZodString;
406
+ port: z.ZodNumber;
407
+ }, "strip", z.ZodTypeAny, {
408
+ host: string;
409
+ port: number;
410
+ }, {
411
+ host: string;
412
+ port: number;
413
+ }>>;
414
+ iceServers: z.ZodArray<z.ZodString, "many">;
415
+ fallbackTransport: z.ZodLiteral<"ws-compat">;
484
416
  }, "strip", z.ZodTypeAny, {
485
417
  signalingUrl: string;
486
- signalingPort: number;
487
- rtcTcpPort: number;
488
- udpPortRange: string;
489
- publicUrlOverrideActive: boolean;
418
+ localUdpPort: number;
419
+ publicCandidateEnabled: boolean;
420
+ publicEndpoint: {
421
+ host: string;
422
+ port: number;
423
+ } | null;
424
+ iceServers: string[];
425
+ fallbackTransport: "ws-compat";
490
426
  }, {
491
427
  signalingUrl: string;
492
- signalingPort: number;
493
- rtcTcpPort: number;
494
- udpPortRange: string;
495
- publicUrlOverrideActive: boolean;
428
+ localUdpPort: number;
429
+ publicCandidateEnabled: boolean;
430
+ publicEndpoint: {
431
+ host: string;
432
+ port: number;
433
+ } | null;
434
+ iceServers: string[];
435
+ fallbackTransport: "ws-compat";
496
436
  }>;
497
- radioReceiveTransport: z.ZodEnum<["livekit", "ws-compat"]>;
498
- radioBridgeHealthy: z.ZodBoolean;
499
- radioBridgeIssueCode: z.ZodNullable<z.ZodEnum<["TOKEN_REQUEST_FAILED", "SIGNALING_UNREACHABLE", "PUBLIC_URL_MISCONFIGURED", "ICE_CONNECTION_FAILED", "NO_AUDIO_TRACK", "AUDIO_PLAYBACK_BLOCKED", "SESSION_EXPIRED_OR_INVALID", "MEDIA_DEVICE_PERMISSION_DENIED", "UNKNOWN_REALTIME_ERROR"]>>;
500
- credentialStatus: z.ZodObject<{
501
- initialized: z.ZodBoolean;
502
- source: z.ZodEnum<["managed-file", "environment-override", "missing"]>;
503
- filePath: z.ZodNullable<z.ZodString>;
504
- apiKeyPreview: z.ZodNullable<z.ZodString>;
505
- createdAt: z.ZodNullable<z.ZodString>;
506
- rotatedAt: z.ZodNullable<z.ZodString>;
437
+ radioReceiveTransport: z.ZodEnum<["rtc-data-audio", "ws-compat"]>;
438
+ rtcDataAudio: z.ZodObject<{
439
+ localUdpPort: z.ZodNumber;
440
+ publicCandidateEnabled: z.ZodBoolean;
441
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
442
+ host: z.ZodString;
443
+ port: z.ZodNumber;
444
+ }, "strip", z.ZodTypeAny, {
445
+ host: string;
446
+ port: number;
447
+ }, {
448
+ host: string;
449
+ port: number;
450
+ }>>;
507
451
  }, "strip", z.ZodTypeAny, {
508
- source: "managed-file" | "environment-override" | "missing";
509
- filePath: string | null;
510
- createdAt: string | null;
511
- initialized: boolean;
512
- apiKeyPreview: string | null;
513
- rotatedAt: string | null;
452
+ localUdpPort: number;
453
+ publicCandidateEnabled: boolean;
454
+ publicEndpoint: {
455
+ host: string;
456
+ port: number;
457
+ } | null;
514
458
  }, {
515
- source: "managed-file" | "environment-override" | "missing";
516
- filePath: string | null;
517
- createdAt: string | null;
518
- initialized: boolean;
519
- apiKeyPreview: string | null;
520
- rotatedAt: string | null;
459
+ localUdpPort: number;
460
+ publicCandidateEnabled: boolean;
461
+ publicEndpoint: {
462
+ host: string;
463
+ port: number;
464
+ } | null;
521
465
  }>;
522
466
  }, "strip", z.ZodTypeAny, {
523
467
  connectivityHints: {
524
468
  signalingUrl: string;
525
- signalingPort: number;
526
- rtcTcpPort: number;
527
- udpPortRange: string;
528
- publicUrlOverrideActive: boolean;
469
+ localUdpPort: number;
470
+ publicCandidateEnabled: boolean;
471
+ publicEndpoint: {
472
+ host: string;
473
+ port: number;
474
+ } | null;
475
+ iceServers: string[];
476
+ fallbackTransport: "ws-compat";
529
477
  };
530
- liveKitEnabled: boolean;
531
- radioReceiveTransport: "livekit" | "ws-compat";
532
- radioBridgeHealthy: boolean;
533
- radioBridgeIssueCode: "TOKEN_REQUEST_FAILED" | "SIGNALING_UNREACHABLE" | "PUBLIC_URL_MISCONFIGURED" | "ICE_CONNECTION_FAILED" | "NO_AUDIO_TRACK" | "AUDIO_PLAYBACK_BLOCKED" | "SESSION_EXPIRED_OR_INVALID" | "MEDIA_DEVICE_PERMISSION_DENIED" | "UNKNOWN_REALTIME_ERROR" | null;
534
- credentialStatus: {
535
- source: "managed-file" | "environment-override" | "missing";
536
- filePath: string | null;
537
- createdAt: string | null;
538
- initialized: boolean;
539
- apiKeyPreview: string | null;
540
- rotatedAt: string | null;
478
+ radioReceiveTransport: "rtc-data-audio" | "ws-compat";
479
+ rtcDataAudio: {
480
+ localUdpPort: number;
481
+ publicCandidateEnabled: boolean;
482
+ publicEndpoint: {
483
+ host: string;
484
+ port: number;
485
+ } | null;
541
486
  };
542
487
  }, {
543
488
  connectivityHints: {
544
489
  signalingUrl: string;
545
- signalingPort: number;
546
- rtcTcpPort: number;
547
- udpPortRange: string;
548
- publicUrlOverrideActive: boolean;
490
+ localUdpPort: number;
491
+ publicCandidateEnabled: boolean;
492
+ publicEndpoint: {
493
+ host: string;
494
+ port: number;
495
+ } | null;
496
+ iceServers: string[];
497
+ fallbackTransport: "ws-compat";
549
498
  };
550
- liveKitEnabled: boolean;
551
- radioReceiveTransport: "livekit" | "ws-compat";
552
- radioBridgeHealthy: boolean;
553
- radioBridgeIssueCode: "TOKEN_REQUEST_FAILED" | "SIGNALING_UNREACHABLE" | "PUBLIC_URL_MISCONFIGURED" | "ICE_CONNECTION_FAILED" | "NO_AUDIO_TRACK" | "AUDIO_PLAYBACK_BLOCKED" | "SESSION_EXPIRED_OR_INVALID" | "MEDIA_DEVICE_PERMISSION_DENIED" | "UNKNOWN_REALTIME_ERROR" | null;
554
- credentialStatus: {
555
- source: "managed-file" | "environment-override" | "missing";
556
- filePath: string | null;
557
- createdAt: string | null;
558
- initialized: boolean;
559
- apiKeyPreview: string | null;
560
- rotatedAt: string | null;
499
+ radioReceiveTransport: "rtc-data-audio" | "ws-compat";
500
+ rtcDataAudio: {
501
+ localUdpPort: number;
502
+ publicCandidateEnabled: boolean;
503
+ publicEndpoint: {
504
+ host: string;
505
+ port: number;
506
+ } | null;
561
507
  };
562
508
  }>>;
563
509
  }, "strip", z.ZodTypeAny, {
564
510
  runtime?: {
565
511
  connectivityHints: {
566
512
  signalingUrl: string;
567
- signalingPort: number;
568
- rtcTcpPort: number;
569
- udpPortRange: string;
570
- publicUrlOverrideActive: boolean;
513
+ localUdpPort: number;
514
+ publicCandidateEnabled: boolean;
515
+ publicEndpoint: {
516
+ host: string;
517
+ port: number;
518
+ } | null;
519
+ iceServers: string[];
520
+ fallbackTransport: "ws-compat";
571
521
  };
572
- liveKitEnabled: boolean;
573
- radioReceiveTransport: "livekit" | "ws-compat";
574
- radioBridgeHealthy: boolean;
575
- radioBridgeIssueCode: "TOKEN_REQUEST_FAILED" | "SIGNALING_UNREACHABLE" | "PUBLIC_URL_MISCONFIGURED" | "ICE_CONNECTION_FAILED" | "NO_AUDIO_TRACK" | "AUDIO_PLAYBACK_BLOCKED" | "SESSION_EXPIRED_OR_INVALID" | "MEDIA_DEVICE_PERMISSION_DENIED" | "UNKNOWN_REALTIME_ERROR" | null;
576
- credentialStatus: {
577
- source: "managed-file" | "environment-override" | "missing";
578
- filePath: string | null;
579
- createdAt: string | null;
580
- initialized: boolean;
581
- apiKeyPreview: string | null;
582
- rotatedAt: string | null;
522
+ radioReceiveTransport: "rtc-data-audio" | "ws-compat";
523
+ rtcDataAudio: {
524
+ localUdpPort: number;
525
+ publicCandidateEnabled: boolean;
526
+ publicEndpoint: {
527
+ host: string;
528
+ port: number;
529
+ } | null;
583
530
  };
584
531
  } | undefined;
585
- publicWsUrl?: string | null | undefined;
586
532
  transportPolicy?: "auto" | "force-compat" | undefined;
587
- networkMode?: "lan" | "internet-auto" | "internet-manual" | undefined;
588
- nodeIp?: string | null | undefined;
533
+ rtcDataAudioPublicHost?: string | null | undefined;
534
+ rtcDataAudioPublicUdpPort?: number | null | undefined;
589
535
  }, {
590
536
  runtime?: {
591
537
  connectivityHints: {
592
538
  signalingUrl: string;
593
- signalingPort: number;
594
- rtcTcpPort: number;
595
- udpPortRange: string;
596
- publicUrlOverrideActive: boolean;
539
+ localUdpPort: number;
540
+ publicCandidateEnabled: boolean;
541
+ publicEndpoint: {
542
+ host: string;
543
+ port: number;
544
+ } | null;
545
+ iceServers: string[];
546
+ fallbackTransport: "ws-compat";
597
547
  };
598
- liveKitEnabled: boolean;
599
- radioReceiveTransport: "livekit" | "ws-compat";
600
- radioBridgeHealthy: boolean;
601
- radioBridgeIssueCode: "TOKEN_REQUEST_FAILED" | "SIGNALING_UNREACHABLE" | "PUBLIC_URL_MISCONFIGURED" | "ICE_CONNECTION_FAILED" | "NO_AUDIO_TRACK" | "AUDIO_PLAYBACK_BLOCKED" | "SESSION_EXPIRED_OR_INVALID" | "MEDIA_DEVICE_PERMISSION_DENIED" | "UNKNOWN_REALTIME_ERROR" | null;
602
- credentialStatus: {
603
- source: "managed-file" | "environment-override" | "missing";
604
- filePath: string | null;
605
- createdAt: string | null;
606
- initialized: boolean;
607
- apiKeyPreview: string | null;
608
- rotatedAt: string | null;
548
+ radioReceiveTransport: "rtc-data-audio" | "ws-compat";
549
+ rtcDataAudio: {
550
+ localUdpPort: number;
551
+ publicCandidateEnabled: boolean;
552
+ publicEndpoint: {
553
+ host: string;
554
+ port: number;
555
+ } | null;
609
556
  };
610
557
  } | undefined;
611
- publicWsUrl?: string | null | undefined;
612
558
  transportPolicy?: "auto" | "force-compat" | undefined;
613
- networkMode?: "lan" | "internet-auto" | "internet-manual" | undefined;
614
- nodeIp?: string | null | undefined;
559
+ rtcDataAudioPublicHost?: unknown;
560
+ rtcDataAudioPublicUdpPort?: unknown;
615
561
  }>;
616
562
  export type RealtimeSettingsResponseData = z.infer<typeof RealtimeSettingsResponseDataSchema>;
617
563
  export declare const RealtimeSourceStatsSchema: z.ZodObject<{
@@ -673,7 +619,7 @@ export declare const RealtimeStatsResponseSchema: z.ZodObject<{
673
619
  audioLevel?: number | undefined;
674
620
  droppedSamples?: number | undefined;
675
621
  }>>;
676
- transport: z.ZodOptional<z.ZodNullable<z.ZodEnum<["livekit", "ws-compat"]>>>;
622
+ transport: z.ZodOptional<z.ZodNullable<z.ZodEnum<["rtc-data-audio", "ws-compat"]>>>;
677
623
  }, "strip", z.ZodTypeAny, {
678
624
  scope: "radio" | "openwebrx-preview";
679
625
  source: {
@@ -685,7 +631,7 @@ export declare const RealtimeStatsResponseSchema: z.ZodObject<{
685
631
  droppedSamples?: number | undefined;
686
632
  } | null;
687
633
  previewSessionId?: string | null | undefined;
688
- transport?: "livekit" | "ws-compat" | null | undefined;
634
+ transport?: "rtc-data-audio" | "ws-compat" | null | undefined;
689
635
  }, {
690
636
  scope: "radio" | "openwebrx-preview";
691
637
  source: {
@@ -697,7 +643,7 @@ export declare const RealtimeStatsResponseSchema: z.ZodObject<{
697
643
  droppedSamples?: number | undefined;
698
644
  } | null;
699
645
  previewSessionId?: string | null | undefined;
700
- transport?: "livekit" | "ws-compat" | null | undefined;
646
+ transport?: "rtc-data-audio" | "ws-compat" | null | undefined;
701
647
  }>;
702
648
  export type RealtimeStatsResponse = z.infer<typeof RealtimeStatsResponseSchema>;
703
649
  export declare const RealtimeVoiceTxMetricWindowSchema: z.ZodObject<{
@@ -718,7 +664,7 @@ export declare const RealtimeVoiceTxBottleneckStageSchema: z.ZodEnum<["client-ca
718
664
  export type RealtimeVoiceTxBottleneckStage = z.infer<typeof RealtimeVoiceTxBottleneckStageSchema>;
719
665
  export declare const RealtimeVoiceTxSummarySchema: z.ZodObject<{
720
666
  active: z.ZodBoolean;
721
- transport: z.ZodNullable<z.ZodEnum<["livekit", "ws-compat"]>>;
667
+ transport: z.ZodNullable<z.ZodEnum<["rtc-data-audio", "ws-compat"]>>;
722
668
  bottleneckStage: z.ZodNullable<z.ZodEnum<["client-capture", "transport", "server-ingress", "server-queue", "server-output"]>>;
723
669
  startedAt: z.ZodNullable<z.ZodNumber>;
724
670
  updatedAt: z.ZodNullable<z.ZodNumber>;
@@ -728,7 +674,7 @@ export declare const RealtimeVoiceTxSummarySchema: z.ZodObject<{
728
674
  active: boolean;
729
675
  label: string | null;
730
676
  updatedAt: number | null;
731
- transport: "livekit" | "ws-compat" | null;
677
+ transport: "rtc-data-audio" | "ws-compat" | null;
732
678
  bottleneckStage: "transport" | "client-capture" | "server-ingress" | "server-queue" | "server-output" | null;
733
679
  startedAt: number | null;
734
680
  clientId: string | null;
@@ -736,7 +682,7 @@ export declare const RealtimeVoiceTxSummarySchema: z.ZodObject<{
736
682
  active: boolean;
737
683
  label: string | null;
738
684
  updatedAt: number | null;
739
- transport: "livekit" | "ws-compat" | null;
685
+ transport: "rtc-data-audio" | "ws-compat" | null;
740
686
  bottleneckStage: "transport" | "client-capture" | "server-ingress" | "server-queue" | "server-output" | null;
741
687
  startedAt: number | null;
742
688
  clientId: string | null;
@@ -796,6 +742,10 @@ export declare const RealtimeVoiceTxServerIngressStatsSchema: z.ZodObject<{
796
742
  queueDepthFrames: z.ZodNumber;
797
743
  queuedAudioMs: z.ZodNumber;
798
744
  droppedFrames: z.ZodNumber;
745
+ staleDroppedFrames: z.ZodNumber;
746
+ underrunCount: z.ZodNumber;
747
+ plcFrames: z.ZodNumber;
748
+ jitterTargetMs: z.ZodNumber;
799
749
  }, "strip", z.ZodTypeAny, {
800
750
  frameIntervalMs: {
801
751
  current: number | null;
@@ -805,6 +755,10 @@ export declare const RealtimeVoiceTxServerIngressStatsSchema: z.ZodObject<{
805
755
  queueDepthFrames: number;
806
756
  queuedAudioMs: number;
807
757
  droppedFrames: number;
758
+ staleDroppedFrames: number;
759
+ underrunCount: number;
760
+ plcFrames: number;
761
+ jitterTargetMs: number;
808
762
  }, {
809
763
  frameIntervalMs: {
810
764
  current: number | null;
@@ -814,6 +768,10 @@ export declare const RealtimeVoiceTxServerIngressStatsSchema: z.ZodObject<{
814
768
  queueDepthFrames: number;
815
769
  queuedAudioMs: number;
816
770
  droppedFrames: number;
771
+ staleDroppedFrames: number;
772
+ underrunCount: number;
773
+ plcFrames: number;
774
+ jitterTargetMs: number;
817
775
  }>;
818
776
  export type RealtimeVoiceTxServerIngressStats = z.infer<typeof RealtimeVoiceTxServerIngressStatsSchema>;
819
777
  export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
@@ -856,6 +814,19 @@ export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
856
814
  rolling: number | null;
857
815
  peak: number | null;
858
816
  }>;
817
+ serverPipelineMs: z.ZodObject<{
818
+ current: z.ZodNullable<z.ZodNumber>;
819
+ rolling: z.ZodNullable<z.ZodNumber>;
820
+ peak: z.ZodNullable<z.ZodNumber>;
821
+ }, "strip", z.ZodTypeAny, {
822
+ current: number | null;
823
+ rolling: number | null;
824
+ peak: number | null;
825
+ }, {
826
+ current: number | null;
827
+ rolling: number | null;
828
+ peak: number | null;
829
+ }>;
859
830
  endToEndMs: z.ZodObject<{
860
831
  current: z.ZodNullable<z.ZodNumber>;
861
832
  rolling: z.ZodNullable<z.ZodNumber>;
@@ -882,6 +853,19 @@ export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
882
853
  rolling: number | null;
883
854
  peak: number | null;
884
855
  }>;
856
+ outputWriteIntervalMs: z.ZodObject<{
857
+ current: z.ZodNullable<z.ZodNumber>;
858
+ rolling: z.ZodNullable<z.ZodNumber>;
859
+ peak: z.ZodNullable<z.ZodNumber>;
860
+ }, "strip", z.ZodTypeAny, {
861
+ current: number | null;
862
+ rolling: number | null;
863
+ peak: number | null;
864
+ }, {
865
+ current: number | null;
866
+ rolling: number | null;
867
+ peak: number | null;
868
+ }>;
885
869
  outputSampleRate: z.ZodNullable<z.ZodNumber>;
886
870
  outputBufferSize: z.ZodNullable<z.ZodNumber>;
887
871
  writeFailures: z.ZodNumber;
@@ -901,6 +885,11 @@ export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
901
885
  rolling: number | null;
902
886
  peak: number | null;
903
887
  };
888
+ serverPipelineMs: {
889
+ current: number | null;
890
+ rolling: number | null;
891
+ peak: number | null;
892
+ };
904
893
  endToEndMs: {
905
894
  current: number | null;
906
895
  rolling: number | null;
@@ -911,6 +900,11 @@ export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
911
900
  rolling: number | null;
912
901
  peak: number | null;
913
902
  };
903
+ outputWriteIntervalMs: {
904
+ current: number | null;
905
+ rolling: number | null;
906
+ peak: number | null;
907
+ };
914
908
  outputSampleRate: number | null;
915
909
  outputBufferSize: number | null;
916
910
  writeFailures: number;
@@ -930,6 +924,11 @@ export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
930
924
  rolling: number | null;
931
925
  peak: number | null;
932
926
  };
927
+ serverPipelineMs: {
928
+ current: number | null;
929
+ rolling: number | null;
930
+ peak: number | null;
931
+ };
933
932
  endToEndMs: {
934
933
  current: number | null;
935
934
  rolling: number | null;
@@ -940,6 +939,11 @@ export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
940
939
  rolling: number | null;
941
940
  peak: number | null;
942
941
  };
942
+ outputWriteIntervalMs: {
943
+ current: number | null;
944
+ rolling: number | null;
945
+ peak: number | null;
946
+ };
943
947
  outputSampleRate: number | null;
944
948
  outputBufferSize: number | null;
945
949
  writeFailures: number;
@@ -949,7 +953,7 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
949
953
  scope: z.ZodEnum<["radio", "openwebrx-preview"]>;
950
954
  summary: z.ZodObject<{
951
955
  active: z.ZodBoolean;
952
- transport: z.ZodNullable<z.ZodEnum<["livekit", "ws-compat"]>>;
956
+ transport: z.ZodNullable<z.ZodEnum<["rtc-data-audio", "ws-compat"]>>;
953
957
  bottleneckStage: z.ZodNullable<z.ZodEnum<["client-capture", "transport", "server-ingress", "server-queue", "server-output"]>>;
954
958
  startedAt: z.ZodNullable<z.ZodNumber>;
955
959
  updatedAt: z.ZodNullable<z.ZodNumber>;
@@ -959,7 +963,7 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
959
963
  active: boolean;
960
964
  label: string | null;
961
965
  updatedAt: number | null;
962
- transport: "livekit" | "ws-compat" | null;
966
+ transport: "rtc-data-audio" | "ws-compat" | null;
963
967
  bottleneckStage: "transport" | "client-capture" | "server-ingress" | "server-queue" | "server-output" | null;
964
968
  startedAt: number | null;
965
969
  clientId: string | null;
@@ -967,7 +971,7 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
967
971
  active: boolean;
968
972
  label: string | null;
969
973
  updatedAt: number | null;
970
- transport: "livekit" | "ws-compat" | null;
974
+ transport: "rtc-data-audio" | "ws-compat" | null;
971
975
  bottleneckStage: "transport" | "client-capture" | "server-ingress" | "server-queue" | "server-output" | null;
972
976
  startedAt: number | null;
973
977
  clientId: string | null;
@@ -1025,6 +1029,10 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1025
1029
  queueDepthFrames: z.ZodNumber;
1026
1030
  queuedAudioMs: z.ZodNumber;
1027
1031
  droppedFrames: z.ZodNumber;
1032
+ staleDroppedFrames: z.ZodNumber;
1033
+ underrunCount: z.ZodNumber;
1034
+ plcFrames: z.ZodNumber;
1035
+ jitterTargetMs: z.ZodNumber;
1028
1036
  }, "strip", z.ZodTypeAny, {
1029
1037
  frameIntervalMs: {
1030
1038
  current: number | null;
@@ -1034,6 +1042,10 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1034
1042
  queueDepthFrames: number;
1035
1043
  queuedAudioMs: number;
1036
1044
  droppedFrames: number;
1045
+ staleDroppedFrames: number;
1046
+ underrunCount: number;
1047
+ plcFrames: number;
1048
+ jitterTargetMs: number;
1037
1049
  }, {
1038
1050
  frameIntervalMs: {
1039
1051
  current: number | null;
@@ -1043,6 +1055,10 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1043
1055
  queueDepthFrames: number;
1044
1056
  queuedAudioMs: number;
1045
1057
  droppedFrames: number;
1058
+ staleDroppedFrames: number;
1059
+ underrunCount: number;
1060
+ plcFrames: number;
1061
+ jitterTargetMs: number;
1046
1062
  }>;
1047
1063
  serverOutput: z.ZodObject<{
1048
1064
  resampleMs: z.ZodObject<{
@@ -1084,6 +1100,19 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1084
1100
  rolling: number | null;
1085
1101
  peak: number | null;
1086
1102
  }>;
1103
+ serverPipelineMs: z.ZodObject<{
1104
+ current: z.ZodNullable<z.ZodNumber>;
1105
+ rolling: z.ZodNullable<z.ZodNumber>;
1106
+ peak: z.ZodNullable<z.ZodNumber>;
1107
+ }, "strip", z.ZodTypeAny, {
1108
+ current: number | null;
1109
+ rolling: number | null;
1110
+ peak: number | null;
1111
+ }, {
1112
+ current: number | null;
1113
+ rolling: number | null;
1114
+ peak: number | null;
1115
+ }>;
1087
1116
  endToEndMs: z.ZodObject<{
1088
1117
  current: z.ZodNullable<z.ZodNumber>;
1089
1118
  rolling: z.ZodNullable<z.ZodNumber>;
@@ -1110,6 +1139,19 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1110
1139
  rolling: number | null;
1111
1140
  peak: number | null;
1112
1141
  }>;
1142
+ outputWriteIntervalMs: z.ZodObject<{
1143
+ current: z.ZodNullable<z.ZodNumber>;
1144
+ rolling: z.ZodNullable<z.ZodNumber>;
1145
+ peak: z.ZodNullable<z.ZodNumber>;
1146
+ }, "strip", z.ZodTypeAny, {
1147
+ current: number | null;
1148
+ rolling: number | null;
1149
+ peak: number | null;
1150
+ }, {
1151
+ current: number | null;
1152
+ rolling: number | null;
1153
+ peak: number | null;
1154
+ }>;
1113
1155
  outputSampleRate: z.ZodNullable<z.ZodNumber>;
1114
1156
  outputBufferSize: z.ZodNullable<z.ZodNumber>;
1115
1157
  writeFailures: z.ZodNumber;
@@ -1129,6 +1171,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1129
1171
  rolling: number | null;
1130
1172
  peak: number | null;
1131
1173
  };
1174
+ serverPipelineMs: {
1175
+ current: number | null;
1176
+ rolling: number | null;
1177
+ peak: number | null;
1178
+ };
1132
1179
  endToEndMs: {
1133
1180
  current: number | null;
1134
1181
  rolling: number | null;
@@ -1139,6 +1186,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1139
1186
  rolling: number | null;
1140
1187
  peak: number | null;
1141
1188
  };
1189
+ outputWriteIntervalMs: {
1190
+ current: number | null;
1191
+ rolling: number | null;
1192
+ peak: number | null;
1193
+ };
1142
1194
  outputSampleRate: number | null;
1143
1195
  outputBufferSize: number | null;
1144
1196
  writeFailures: number;
@@ -1158,6 +1210,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1158
1210
  rolling: number | null;
1159
1211
  peak: number | null;
1160
1212
  };
1213
+ serverPipelineMs: {
1214
+ current: number | null;
1215
+ rolling: number | null;
1216
+ peak: number | null;
1217
+ };
1161
1218
  endToEndMs: {
1162
1219
  current: number | null;
1163
1220
  rolling: number | null;
@@ -1168,6 +1225,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1168
1225
  rolling: number | null;
1169
1226
  peak: number | null;
1170
1227
  };
1228
+ outputWriteIntervalMs: {
1229
+ current: number | null;
1230
+ rolling: number | null;
1231
+ peak: number | null;
1232
+ };
1171
1233
  outputSampleRate: number | null;
1172
1234
  outputBufferSize: number | null;
1173
1235
  writeFailures: number;
@@ -1177,7 +1239,7 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1177
1239
  active: boolean;
1178
1240
  label: string | null;
1179
1241
  updatedAt: number | null;
1180
- transport: "livekit" | "ws-compat" | null;
1242
+ transport: "rtc-data-audio" | "ws-compat" | null;
1181
1243
  bottleneckStage: "transport" | "client-capture" | "server-ingress" | "server-queue" | "server-output" | null;
1182
1244
  startedAt: number | null;
1183
1245
  clientId: string | null;
@@ -1202,6 +1264,10 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1202
1264
  queueDepthFrames: number;
1203
1265
  queuedAudioMs: number;
1204
1266
  droppedFrames: number;
1267
+ staleDroppedFrames: number;
1268
+ underrunCount: number;
1269
+ plcFrames: number;
1270
+ jitterTargetMs: number;
1205
1271
  };
1206
1272
  serverOutput: {
1207
1273
  resampleMs: {
@@ -1219,6 +1285,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1219
1285
  rolling: number | null;
1220
1286
  peak: number | null;
1221
1287
  };
1288
+ serverPipelineMs: {
1289
+ current: number | null;
1290
+ rolling: number | null;
1291
+ peak: number | null;
1292
+ };
1222
1293
  endToEndMs: {
1223
1294
  current: number | null;
1224
1295
  rolling: number | null;
@@ -1229,6 +1300,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1229
1300
  rolling: number | null;
1230
1301
  peak: number | null;
1231
1302
  };
1303
+ outputWriteIntervalMs: {
1304
+ current: number | null;
1305
+ rolling: number | null;
1306
+ peak: number | null;
1307
+ };
1232
1308
  outputSampleRate: number | null;
1233
1309
  outputBufferSize: number | null;
1234
1310
  writeFailures: number;
@@ -1238,7 +1314,7 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1238
1314
  active: boolean;
1239
1315
  label: string | null;
1240
1316
  updatedAt: number | null;
1241
- transport: "livekit" | "ws-compat" | null;
1317
+ transport: "rtc-data-audio" | "ws-compat" | null;
1242
1318
  bottleneckStage: "transport" | "client-capture" | "server-ingress" | "server-queue" | "server-output" | null;
1243
1319
  startedAt: number | null;
1244
1320
  clientId: string | null;
@@ -1263,6 +1339,10 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1263
1339
  queueDepthFrames: number;
1264
1340
  queuedAudioMs: number;
1265
1341
  droppedFrames: number;
1342
+ staleDroppedFrames: number;
1343
+ underrunCount: number;
1344
+ plcFrames: number;
1345
+ jitterTargetMs: number;
1266
1346
  };
1267
1347
  serverOutput: {
1268
1348
  resampleMs: {
@@ -1280,6 +1360,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1280
1360
  rolling: number | null;
1281
1361
  peak: number | null;
1282
1362
  };
1363
+ serverPipelineMs: {
1364
+ current: number | null;
1365
+ rolling: number | null;
1366
+ peak: number | null;
1367
+ };
1283
1368
  endToEndMs: {
1284
1369
  current: number | null;
1285
1370
  rolling: number | null;
@@ -1290,6 +1375,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1290
1375
  rolling: number | null;
1291
1376
  peak: number | null;
1292
1377
  };
1378
+ outputWriteIntervalMs: {
1379
+ current: number | null;
1380
+ rolling: number | null;
1381
+ peak: number | null;
1382
+ };
1293
1383
  outputSampleRate: number | null;
1294
1384
  outputBufferSize: number | null;
1295
1385
  writeFailures: number;