@tx5dr/contracts 1.4.0 → 1.6.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 +122 -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 +702 -168
  20. package/dist/schema/plugin.schema.d.ts.map +1 -1
  21. package/dist/schema/plugin.schema.js +38 -3
  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 +797 -417
  36. package/dist/schema/realtime.schema.d.ts.map +1 -1
  37. package/dist/schema/realtime.schema.js +205 -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 +1436 -640
  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 +142 -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 +44 -3
  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 +247 -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,32 +1,168 @@
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>;
8
+ export declare const RealtimeAudioCodecSchema: z.ZodEnum<["opus", "pcm-s16le"]>;
9
+ export type RealtimeAudioCodec = z.infer<typeof RealtimeAudioCodecSchema>;
10
+ export declare const RealtimeAudioCodecPreferenceSchema: z.ZodEnum<["auto", "opus", "pcm"]>;
11
+ export type RealtimeAudioCodecPreference = z.infer<typeof RealtimeAudioCodecPreferenceSchema>;
12
+ export declare const DEFAULT_REALTIME_AUDIO_CODEC_PREFERENCE: RealtimeAudioCodecPreference;
13
+ export declare const RealtimeAudioCodecCapabilitiesSchema: z.ZodOptional<z.ZodObject<{
14
+ opus: z.ZodOptional<z.ZodObject<{
15
+ encode: z.ZodOptional<z.ZodBoolean>;
16
+ decode: z.ZodOptional<z.ZodBoolean>;
17
+ sampleRates: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
18
+ encodeSampleRates: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
19
+ decodeSampleRates: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ encode?: boolean | undefined;
22
+ decode?: boolean | undefined;
23
+ sampleRates?: number[] | undefined;
24
+ encodeSampleRates?: number[] | undefined;
25
+ decodeSampleRates?: number[] | undefined;
26
+ }, {
27
+ encode?: boolean | undefined;
28
+ decode?: boolean | undefined;
29
+ sampleRates?: number[] | undefined;
30
+ encodeSampleRates?: number[] | undefined;
31
+ decodeSampleRates?: number[] | undefined;
32
+ }>>;
33
+ pcmS16le: z.ZodOptional<z.ZodBoolean>;
34
+ }, "strip", z.ZodTypeAny, {
35
+ opus?: {
36
+ encode?: boolean | undefined;
37
+ decode?: boolean | undefined;
38
+ sampleRates?: number[] | undefined;
39
+ encodeSampleRates?: number[] | undefined;
40
+ decodeSampleRates?: number[] | undefined;
41
+ } | undefined;
42
+ pcmS16le?: boolean | undefined;
43
+ }, {
44
+ opus?: {
45
+ encode?: boolean | undefined;
46
+ decode?: boolean | undefined;
47
+ sampleRates?: number[] | undefined;
48
+ encodeSampleRates?: number[] | undefined;
49
+ decodeSampleRates?: number[] | undefined;
50
+ } | undefined;
51
+ pcmS16le?: boolean | undefined;
52
+ }>>;
53
+ export type RealtimeAudioCodecCapabilities = z.infer<typeof RealtimeAudioCodecCapabilitiesSchema>;
54
+ export declare const ResolvedRealtimeAudioCodecPolicySchema: z.ZodObject<{
55
+ preference: z.ZodEnum<["auto", "opus", "pcm"]>;
56
+ resolvedCodec: z.ZodEnum<["opus", "pcm-s16le"]>;
57
+ fallbackReason: z.ZodNullable<z.ZodEnum<["not-needed", "client-forced-pcm", "client-opus-unavailable", "server-opus-unavailable", "scope-not-supported"]>>;
58
+ codecSampleRate: z.ZodNullable<z.ZodNumber>;
59
+ bitrateBps: z.ZodNullable<z.ZodNumber>;
60
+ frameDurationMs: z.ZodNullable<z.ZodNumber>;
61
+ }, "strip", z.ZodTypeAny, {
62
+ preference: "pcm" | "auto" | "opus";
63
+ resolvedCodec: "opus" | "pcm-s16le";
64
+ fallbackReason: "not-needed" | "client-forced-pcm" | "client-opus-unavailable" | "server-opus-unavailable" | "scope-not-supported" | null;
65
+ codecSampleRate: number | null;
66
+ bitrateBps: number | null;
67
+ frameDurationMs: number | null;
68
+ }, {
69
+ preference: "pcm" | "auto" | "opus";
70
+ resolvedCodec: "opus" | "pcm-s16le";
71
+ fallbackReason: "not-needed" | "client-forced-pcm" | "client-opus-unavailable" | "server-opus-unavailable" | "scope-not-supported" | null;
72
+ codecSampleRate: number | null;
73
+ bitrateBps: number | null;
74
+ frameDurationMs: number | null;
75
+ }>;
76
+ export type ResolvedRealtimeAudioCodecPolicy = z.infer<typeof ResolvedRealtimeAudioCodecPolicySchema>;
77
+ export declare const VoiceTxBufferProfileSchema: z.ZodEnum<["auto", "custom"]>;
78
+ export type VoiceTxBufferProfile = z.infer<typeof VoiceTxBufferProfileSchema>;
79
+ export declare const VoiceTxCustomTargetBufferMsSchema: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
80
+ export declare const VoiceTxBufferPreferenceSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
81
+ profile: z.ZodDefault<z.ZodEnum<["auto", "custom"]>>;
82
+ customTargetBufferMs: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
83
+ }, "strip", z.ZodTypeAny, {
84
+ profile: "custom" | "auto";
85
+ customTargetBufferMs?: number | undefined;
86
+ }, {
87
+ profile?: "custom" | "auto" | undefined;
88
+ customTargetBufferMs?: unknown;
89
+ }>, {
90
+ profile: "custom" | "auto";
91
+ customTargetBufferMs?: number | undefined;
92
+ }, unknown>, {
93
+ profile: "custom" | "auto";
94
+ customTargetBufferMs?: number | undefined;
95
+ }, unknown>;
96
+ export type VoiceTxBufferPreference = z.infer<typeof VoiceTxBufferPreferenceSchema>;
97
+ export declare const ResolvedVoiceTxBufferPolicySchema: z.ZodObject<{
98
+ profile: z.ZodEnum<["auto", "custom"]>;
99
+ targetMs: z.ZodNumber;
100
+ minMs: z.ZodNumber;
101
+ maxMs: z.ZodNumber;
102
+ headroomMs: z.ZodNumber;
103
+ staleFrameMs: z.ZodNumber;
104
+ uplinkMaxBufferedAudioMs: z.ZodNumber;
105
+ uplinkDegradedBufferedAudioMs: z.ZodNumber;
106
+ }, "strip", z.ZodTypeAny, {
107
+ profile: "custom" | "auto";
108
+ targetMs: number;
109
+ minMs: number;
110
+ maxMs: number;
111
+ headroomMs: number;
112
+ staleFrameMs: number;
113
+ uplinkMaxBufferedAudioMs: number;
114
+ uplinkDegradedBufferedAudioMs: number;
115
+ }, {
116
+ profile: "custom" | "auto";
117
+ targetMs: number;
118
+ minMs: number;
119
+ maxMs: number;
120
+ headroomMs: number;
121
+ staleFrameMs: number;
122
+ uplinkMaxBufferedAudioMs: number;
123
+ uplinkDegradedBufferedAudioMs: number;
124
+ }>;
125
+ export type ResolvedVoiceTxBufferPolicy = z.infer<typeof ResolvedVoiceTxBufferPolicySchema>;
126
+ export declare const DEFAULT_VOICE_TX_BUFFER_PROFILE: VoiceTxBufferProfile;
127
+ export declare function resolveVoiceTxBufferPolicy(preference?: VoiceTxBufferPreference | null): ResolvedVoiceTxBufferPolicy;
10
128
  export declare const RealtimeConnectivityErrorCodeSchema: 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"]>;
11
129
  export type RealtimeConnectivityErrorCode = z.infer<typeof RealtimeConnectivityErrorCodeSchema>;
12
130
  export declare const RealtimeConnectivityHintsSchema: z.ZodObject<{
13
131
  signalingUrl: z.ZodString;
14
- signalingPort: z.ZodNumber;
15
- rtcTcpPort: z.ZodNumber;
16
- udpPortRange: z.ZodString;
17
- publicUrlOverrideActive: z.ZodBoolean;
132
+ localUdpPort: z.ZodNumber;
133
+ publicCandidateEnabled: z.ZodBoolean;
134
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
135
+ host: z.ZodString;
136
+ port: z.ZodNumber;
137
+ }, "strip", z.ZodTypeAny, {
138
+ host: string;
139
+ port: number;
140
+ }, {
141
+ host: string;
142
+ port: number;
143
+ }>>;
144
+ iceServers: z.ZodArray<z.ZodString, "many">;
145
+ fallbackTransport: z.ZodLiteral<"ws-compat">;
18
146
  }, "strip", z.ZodTypeAny, {
19
147
  signalingUrl: string;
20
- signalingPort: number;
21
- rtcTcpPort: number;
22
- udpPortRange: string;
23
- publicUrlOverrideActive: boolean;
148
+ localUdpPort: number;
149
+ publicCandidateEnabled: boolean;
150
+ publicEndpoint: {
151
+ host: string;
152
+ port: number;
153
+ } | null;
154
+ iceServers: string[];
155
+ fallbackTransport: "ws-compat";
24
156
  }, {
25
157
  signalingUrl: string;
26
- signalingPort: number;
27
- rtcTcpPort: number;
28
- udpPortRange: string;
29
- publicUrlOverrideActive: boolean;
158
+ localUdpPort: number;
159
+ publicCandidateEnabled: boolean;
160
+ publicEndpoint: {
161
+ host: string;
162
+ port: number;
163
+ } | null;
164
+ iceServers: string[];
165
+ fallbackTransport: "ws-compat";
30
166
  }>;
31
167
  export type RealtimeConnectivityHints = z.infer<typeof RealtimeConnectivityHintsSchema>;
32
168
  export declare const RealtimeConnectivityIssueSchema: z.ZodObject<{
@@ -40,7 +176,7 @@ export declare const RealtimeConnectivityIssueSchema: z.ZodObject<{
40
176
  }, "strip", z.ZodTypeAny, {
41
177
  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
178
  scope: "radio" | "openwebrx-preview";
43
- stage: "token" | "connect" | "publish" | "subscribe" | "runtime";
179
+ stage: "runtime" | "token" | "connect" | "publish" | "subscribe";
44
180
  userMessage: string;
45
181
  suggestions: string[];
46
182
  technicalDetails?: string | undefined;
@@ -48,570 +184,670 @@ export declare const RealtimeConnectivityIssueSchema: z.ZodObject<{
48
184
  }, {
49
185
  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
186
  scope: "radio" | "openwebrx-preview";
51
- stage: "token" | "connect" | "publish" | "subscribe" | "runtime";
187
+ stage: "runtime" | "token" | "connect" | "publish" | "subscribe";
52
188
  userMessage: string;
53
189
  suggestions: string[];
54
190
  technicalDetails?: string | undefined;
55
191
  context?: Record<string, string> | undefined;
56
192
  }>;
57
193
  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
194
  export declare const RealtimeSessionRequestSchema: z.ZodObject<{
73
195
  scope: z.ZodEnum<["radio", "openwebrx-preview"]>;
74
196
  direction: z.ZodEnum<["recv", "send"]>;
75
197
  previewSessionId: z.ZodOptional<z.ZodString>;
76
- transportOverride: z.ZodOptional<z.ZodEnum<["livekit", "ws-compat"]>>;
198
+ transportOverride: z.ZodOptional<z.ZodEnum<["rtc-data-audio", "ws-compat"]>>;
199
+ voiceTxBufferPreference: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodObject<{
200
+ profile: z.ZodDefault<z.ZodEnum<["auto", "custom"]>>;
201
+ customTargetBufferMs: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
202
+ }, "strip", z.ZodTypeAny, {
203
+ profile: "custom" | "auto";
204
+ customTargetBufferMs?: number | undefined;
205
+ }, {
206
+ profile?: "custom" | "auto" | undefined;
207
+ customTargetBufferMs?: unknown;
208
+ }>, {
209
+ profile: "custom" | "auto";
210
+ customTargetBufferMs?: number | undefined;
211
+ }, unknown>, {
212
+ profile: "custom" | "auto";
213
+ customTargetBufferMs?: number | undefined;
214
+ }, unknown>>;
215
+ audioCodecPreference: z.ZodDefault<z.ZodEnum<["auto", "opus", "pcm"]>>;
216
+ audioCodecCapabilities: z.ZodOptional<z.ZodObject<{
217
+ opus: z.ZodOptional<z.ZodObject<{
218
+ encode: z.ZodOptional<z.ZodBoolean>;
219
+ decode: z.ZodOptional<z.ZodBoolean>;
220
+ sampleRates: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
221
+ encodeSampleRates: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
222
+ decodeSampleRates: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
223
+ }, "strip", z.ZodTypeAny, {
224
+ encode?: boolean | undefined;
225
+ decode?: boolean | undefined;
226
+ sampleRates?: number[] | undefined;
227
+ encodeSampleRates?: number[] | undefined;
228
+ decodeSampleRates?: number[] | undefined;
229
+ }, {
230
+ encode?: boolean | undefined;
231
+ decode?: boolean | undefined;
232
+ sampleRates?: number[] | undefined;
233
+ encodeSampleRates?: number[] | undefined;
234
+ decodeSampleRates?: number[] | undefined;
235
+ }>>;
236
+ pcmS16le: z.ZodOptional<z.ZodBoolean>;
237
+ }, "strip", z.ZodTypeAny, {
238
+ opus?: {
239
+ encode?: boolean | undefined;
240
+ decode?: boolean | undefined;
241
+ sampleRates?: number[] | undefined;
242
+ encodeSampleRates?: number[] | undefined;
243
+ decodeSampleRates?: number[] | undefined;
244
+ } | undefined;
245
+ pcmS16le?: boolean | undefined;
246
+ }, {
247
+ opus?: {
248
+ encode?: boolean | undefined;
249
+ decode?: boolean | undefined;
250
+ sampleRates?: number[] | undefined;
251
+ encodeSampleRates?: number[] | undefined;
252
+ decodeSampleRates?: number[] | undefined;
253
+ } | undefined;
254
+ pcmS16le?: boolean | undefined;
255
+ }>>;
77
256
  }, "strip", z.ZodTypeAny, {
78
257
  scope: "radio" | "openwebrx-preview";
79
258
  direction: "recv" | "send";
259
+ audioCodecPreference: "pcm" | "auto" | "opus";
80
260
  previewSessionId?: string | undefined;
81
- transportOverride?: "livekit" | "ws-compat" | undefined;
261
+ transportOverride?: "rtc-data-audio" | "ws-compat" | undefined;
262
+ voiceTxBufferPreference?: {
263
+ profile: "custom" | "auto";
264
+ customTargetBufferMs?: number | undefined;
265
+ } | undefined;
266
+ audioCodecCapabilities?: {
267
+ opus?: {
268
+ encode?: boolean | undefined;
269
+ decode?: boolean | undefined;
270
+ sampleRates?: number[] | undefined;
271
+ encodeSampleRates?: number[] | undefined;
272
+ decodeSampleRates?: number[] | undefined;
273
+ } | undefined;
274
+ pcmS16le?: boolean | undefined;
275
+ } | undefined;
82
276
  }, {
83
277
  scope: "radio" | "openwebrx-preview";
84
278
  direction: "recv" | "send";
85
279
  previewSessionId?: string | undefined;
86
- transportOverride?: "livekit" | "ws-compat" | undefined;
280
+ transportOverride?: "rtc-data-audio" | "ws-compat" | undefined;
281
+ voiceTxBufferPreference?: unknown;
282
+ audioCodecPreference?: "pcm" | "auto" | "opus" | undefined;
283
+ audioCodecCapabilities?: {
284
+ opus?: {
285
+ encode?: boolean | undefined;
286
+ decode?: boolean | undefined;
287
+ sampleRates?: number[] | undefined;
288
+ encodeSampleRates?: number[] | undefined;
289
+ decodeSampleRates?: number[] | undefined;
290
+ } | undefined;
291
+ pcmS16le?: boolean | undefined;
292
+ } | undefined;
87
293
  }>;
88
294
  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
295
  export declare const RealtimeTransportOfferSchema: z.ZodObject<{
212
- transport: z.ZodEnum<["livekit", "ws-compat"]>;
296
+ transport: z.ZodEnum<["rtc-data-audio", "ws-compat"]>;
213
297
  direction: z.ZodEnum<["recv", "send"]>;
214
298
  url: z.ZodString;
215
299
  token: z.ZodString;
216
300
  participantIdentity: z.ZodOptional<z.ZodNullable<z.ZodString>>;
217
301
  participantName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
218
- roomName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
219
302
  }, "strip", z.ZodTypeAny, {
220
303
  url: string;
221
304
  token: string;
222
305
  direction: "recv" | "send";
223
- transport: "livekit" | "ws-compat";
224
- roomName?: string | null | undefined;
306
+ transport: "rtc-data-audio" | "ws-compat";
225
307
  participantIdentity?: string | null | undefined;
226
308
  participantName?: string | null | undefined;
227
309
  }, {
228
310
  url: string;
229
311
  token: string;
230
312
  direction: "recv" | "send";
231
- transport: "livekit" | "ws-compat";
232
- roomName?: string | null | undefined;
313
+ transport: "rtc-data-audio" | "ws-compat";
233
314
  participantIdentity?: string | null | undefined;
234
315
  participantName?: string | null | undefined;
235
316
  }>;
236
317
  export type RealtimeTransportOffer = z.infer<typeof RealtimeTransportOfferSchema>;
237
318
  export declare const RealtimeTransportPolicySchema: z.ZodEnum<["auto", "force-compat"]>;
238
319
  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>;
320
+ export declare const RtcDataAudioPublicHostSchema: z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodLiteral<"">, null, "">, z.ZodEffects<z.ZodString, string, string>, z.ZodNull]>, string | null, unknown>;
321
+ export type RtcDataAudioPublicHost = z.infer<typeof RtcDataAudioPublicHostSchema>;
322
+ export declare const RtcDataAudioPublicUdpPortSchema: z.ZodEffects<z.ZodNullable<z.ZodNumber>, number | null, unknown>;
323
+ export type RtcDataAudioPublicUdpPort = z.infer<typeof RtcDataAudioPublicUdpPortSchema>;
241
324
  export declare const RealtimeSessionResponseSchema: z.ZodObject<{
242
325
  scope: z.ZodEnum<["radio", "openwebrx-preview"]>;
243
326
  direction: z.ZodEnum<["recv", "send"]>;
244
- preferredTransport: z.ZodEnum<["livekit", "ws-compat"]>;
327
+ preferredTransport: z.ZodEnum<["rtc-data-audio", "ws-compat"]>;
245
328
  effectiveTransportPolicy: z.ZodEnum<["auto", "force-compat"]>;
246
- selectionReason: z.ZodEnum<["client-override", "server-policy", "bridge-unhealthy", "livekit-disabled", "runtime-unavailable", "default-livekit"]>;
329
+ selectionReason: z.ZodEnum<["client-override", "server-policy", "default-rtc-data-audio", "rtc-data-audio-unavailable"]>;
247
330
  forcedCompatibilityMode: z.ZodBoolean;
248
331
  offers: z.ZodArray<z.ZodObject<{
249
- transport: z.ZodEnum<["livekit", "ws-compat"]>;
332
+ transport: z.ZodEnum<["rtc-data-audio", "ws-compat"]>;
250
333
  direction: z.ZodEnum<["recv", "send"]>;
251
334
  url: z.ZodString;
252
335
  token: z.ZodString;
253
336
  participantIdentity: z.ZodOptional<z.ZodNullable<z.ZodString>>;
254
337
  participantName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
255
- roomName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
256
338
  }, "strip", z.ZodTypeAny, {
257
339
  url: string;
258
340
  token: string;
259
341
  direction: "recv" | "send";
260
- transport: "livekit" | "ws-compat";
261
- roomName?: string | null | undefined;
342
+ transport: "rtc-data-audio" | "ws-compat";
262
343
  participantIdentity?: string | null | undefined;
263
344
  participantName?: string | null | undefined;
264
345
  }, {
265
346
  url: string;
266
347
  token: string;
267
348
  direction: "recv" | "send";
268
- transport: "livekit" | "ws-compat";
269
- roomName?: string | null | undefined;
349
+ transport: "rtc-data-audio" | "ws-compat";
270
350
  participantIdentity?: string | null | undefined;
271
351
  participantName?: string | null | undefined;
272
352
  }>, "many">;
273
353
  connectivityHints: z.ZodObject<{
274
354
  signalingUrl: z.ZodString;
275
- signalingPort: z.ZodNumber;
276
- rtcTcpPort: z.ZodNumber;
277
- udpPortRange: z.ZodString;
278
- publicUrlOverrideActive: z.ZodBoolean;
355
+ localUdpPort: z.ZodNumber;
356
+ publicCandidateEnabled: z.ZodBoolean;
357
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
358
+ host: z.ZodString;
359
+ port: z.ZodNumber;
360
+ }, "strip", z.ZodTypeAny, {
361
+ host: string;
362
+ port: number;
363
+ }, {
364
+ host: string;
365
+ port: number;
366
+ }>>;
367
+ iceServers: z.ZodArray<z.ZodString, "many">;
368
+ fallbackTransport: z.ZodLiteral<"ws-compat">;
279
369
  }, "strip", z.ZodTypeAny, {
280
370
  signalingUrl: string;
281
- signalingPort: number;
282
- rtcTcpPort: number;
283
- udpPortRange: string;
284
- publicUrlOverrideActive: boolean;
371
+ localUdpPort: number;
372
+ publicCandidateEnabled: boolean;
373
+ publicEndpoint: {
374
+ host: string;
375
+ port: number;
376
+ } | null;
377
+ iceServers: string[];
378
+ fallbackTransport: "ws-compat";
285
379
  }, {
286
380
  signalingUrl: string;
287
- signalingPort: number;
288
- rtcTcpPort: number;
289
- udpPortRange: string;
290
- publicUrlOverrideActive: boolean;
381
+ localUdpPort: number;
382
+ publicCandidateEnabled: boolean;
383
+ publicEndpoint: {
384
+ host: string;
385
+ port: number;
386
+ } | null;
387
+ iceServers: string[];
388
+ fallbackTransport: "ws-compat";
389
+ }>;
390
+ voiceTxBufferPolicy: z.ZodOptional<z.ZodObject<{
391
+ profile: z.ZodEnum<["auto", "custom"]>;
392
+ targetMs: z.ZodNumber;
393
+ minMs: z.ZodNumber;
394
+ maxMs: z.ZodNumber;
395
+ headroomMs: z.ZodNumber;
396
+ staleFrameMs: z.ZodNumber;
397
+ uplinkMaxBufferedAudioMs: z.ZodNumber;
398
+ uplinkDegradedBufferedAudioMs: z.ZodNumber;
399
+ }, "strip", z.ZodTypeAny, {
400
+ profile: "custom" | "auto";
401
+ targetMs: number;
402
+ minMs: number;
403
+ maxMs: number;
404
+ headroomMs: number;
405
+ staleFrameMs: number;
406
+ uplinkMaxBufferedAudioMs: number;
407
+ uplinkDegradedBufferedAudioMs: number;
408
+ }, {
409
+ profile: "custom" | "auto";
410
+ targetMs: number;
411
+ minMs: number;
412
+ maxMs: number;
413
+ headroomMs: number;
414
+ staleFrameMs: number;
415
+ uplinkMaxBufferedAudioMs: number;
416
+ uplinkDegradedBufferedAudioMs: number;
417
+ }>>;
418
+ audioCodecPolicy: z.ZodObject<{
419
+ preference: z.ZodEnum<["auto", "opus", "pcm"]>;
420
+ resolvedCodec: z.ZodEnum<["opus", "pcm-s16le"]>;
421
+ fallbackReason: z.ZodNullable<z.ZodEnum<["not-needed", "client-forced-pcm", "client-opus-unavailable", "server-opus-unavailable", "scope-not-supported"]>>;
422
+ codecSampleRate: z.ZodNullable<z.ZodNumber>;
423
+ bitrateBps: z.ZodNullable<z.ZodNumber>;
424
+ frameDurationMs: z.ZodNullable<z.ZodNumber>;
425
+ }, "strip", z.ZodTypeAny, {
426
+ preference: "pcm" | "auto" | "opus";
427
+ resolvedCodec: "opus" | "pcm-s16le";
428
+ fallbackReason: "not-needed" | "client-forced-pcm" | "client-opus-unavailable" | "server-opus-unavailable" | "scope-not-supported" | null;
429
+ codecSampleRate: number | null;
430
+ bitrateBps: number | null;
431
+ frameDurationMs: number | null;
432
+ }, {
433
+ preference: "pcm" | "auto" | "opus";
434
+ resolvedCodec: "opus" | "pcm-s16le";
435
+ fallbackReason: "not-needed" | "client-forced-pcm" | "client-opus-unavailable" | "server-opus-unavailable" | "scope-not-supported" | null;
436
+ codecSampleRate: number | null;
437
+ bitrateBps: number | null;
438
+ frameDurationMs: number | null;
291
439
  }>;
292
440
  }, "strip", z.ZodTypeAny, {
293
441
  scope: "radio" | "openwebrx-preview";
294
442
  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";
443
+ preferredTransport: "rtc-data-audio" | "ws-compat";
303
444
  effectiveTransportPolicy: "auto" | "force-compat";
304
- selectionReason: "client-override" | "server-policy" | "bridge-unhealthy" | "livekit-disabled" | "runtime-unavailable" | "default-livekit";
445
+ selectionReason: "client-override" | "server-policy" | "default-rtc-data-audio" | "rtc-data-audio-unavailable";
305
446
  forcedCompatibilityMode: boolean;
306
447
  offers: {
307
448
  url: string;
308
449
  token: string;
309
450
  direction: "recv" | "send";
310
- transport: "livekit" | "ws-compat";
311
- roomName?: string | null | undefined;
451
+ transport: "rtc-data-audio" | "ws-compat";
312
452
  participantIdentity?: string | null | undefined;
313
453
  participantName?: string | null | undefined;
314
454
  }[];
315
- }, {
316
- scope: "radio" | "openwebrx-preview";
317
- direction: "recv" | "send";
318
455
  connectivityHints: {
319
456
  signalingUrl: string;
320
- signalingPort: number;
321
- rtcTcpPort: number;
322
- udpPortRange: string;
323
- publicUrlOverrideActive: boolean;
457
+ localUdpPort: number;
458
+ publicCandidateEnabled: boolean;
459
+ publicEndpoint: {
460
+ host: string;
461
+ port: number;
462
+ } | null;
463
+ iceServers: string[];
464
+ fallbackTransport: "ws-compat";
465
+ };
466
+ audioCodecPolicy: {
467
+ preference: "pcm" | "auto" | "opus";
468
+ resolvedCodec: "opus" | "pcm-s16le";
469
+ fallbackReason: "not-needed" | "client-forced-pcm" | "client-opus-unavailable" | "server-opus-unavailable" | "scope-not-supported" | null;
470
+ codecSampleRate: number | null;
471
+ bitrateBps: number | null;
472
+ frameDurationMs: number | null;
324
473
  };
325
- preferredTransport: "livekit" | "ws-compat";
474
+ voiceTxBufferPolicy?: {
475
+ profile: "custom" | "auto";
476
+ targetMs: number;
477
+ minMs: number;
478
+ maxMs: number;
479
+ headroomMs: number;
480
+ staleFrameMs: number;
481
+ uplinkMaxBufferedAudioMs: number;
482
+ uplinkDegradedBufferedAudioMs: number;
483
+ } | undefined;
484
+ }, {
485
+ scope: "radio" | "openwebrx-preview";
486
+ direction: "recv" | "send";
487
+ preferredTransport: "rtc-data-audio" | "ws-compat";
326
488
  effectiveTransportPolicy: "auto" | "force-compat";
327
- selectionReason: "client-override" | "server-policy" | "bridge-unhealthy" | "livekit-disabled" | "runtime-unavailable" | "default-livekit";
489
+ selectionReason: "client-override" | "server-policy" | "default-rtc-data-audio" | "rtc-data-audio-unavailable";
328
490
  forcedCompatibilityMode: boolean;
329
491
  offers: {
330
492
  url: string;
331
493
  token: string;
332
494
  direction: "recv" | "send";
333
- transport: "livekit" | "ws-compat";
334
- roomName?: string | null | undefined;
495
+ transport: "rtc-data-audio" | "ws-compat";
335
496
  participantIdentity?: string | null | undefined;
336
497
  participantName?: string | null | undefined;
337
498
  }[];
499
+ connectivityHints: {
500
+ signalingUrl: string;
501
+ localUdpPort: number;
502
+ publicCandidateEnabled: boolean;
503
+ publicEndpoint: {
504
+ host: string;
505
+ port: number;
506
+ } | null;
507
+ iceServers: string[];
508
+ fallbackTransport: "ws-compat";
509
+ };
510
+ audioCodecPolicy: {
511
+ preference: "pcm" | "auto" | "opus";
512
+ resolvedCodec: "opus" | "pcm-s16le";
513
+ fallbackReason: "not-needed" | "client-forced-pcm" | "client-opus-unavailable" | "server-opus-unavailable" | "scope-not-supported" | null;
514
+ codecSampleRate: number | null;
515
+ bitrateBps: number | null;
516
+ frameDurationMs: number | null;
517
+ };
518
+ voiceTxBufferPolicy?: {
519
+ profile: "custom" | "auto";
520
+ targetMs: number;
521
+ minMs: number;
522
+ maxMs: number;
523
+ headroomMs: number;
524
+ staleFrameMs: number;
525
+ uplinkMaxBufferedAudioMs: number;
526
+ uplinkDegradedBufferedAudioMs: number;
527
+ } | undefined;
338
528
  }>;
339
529
  export type RealtimeSessionResponse = z.infer<typeof RealtimeSessionResponseSchema>;
340
530
  export declare const RealtimeSettingsSchema: z.ZodObject<{
341
- publicWsUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
342
531
  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>>;
532
+ rtcDataAudioPublicHost: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodLiteral<"">, null, "">, z.ZodEffects<z.ZodString, string, string>, z.ZodNull]>, string | null, unknown>>;
533
+ rtcDataAudioPublicUdpPort: z.ZodOptional<z.ZodEffects<z.ZodNullable<z.ZodNumber>, number | null, unknown>>;
345
534
  }, "strip", z.ZodTypeAny, {
346
- publicWsUrl?: string | null | undefined;
347
535
  transportPolicy?: "auto" | "force-compat" | undefined;
348
- networkMode?: "lan" | "internet-auto" | "internet-manual" | undefined;
349
- nodeIp?: string | null | undefined;
536
+ rtcDataAudioPublicHost?: string | null | undefined;
537
+ rtcDataAudioPublicUdpPort?: number | null | undefined;
350
538
  }, {
351
- publicWsUrl?: string | null | undefined;
352
539
  transportPolicy?: "auto" | "force-compat" | undefined;
353
- networkMode?: "lan" | "internet-auto" | "internet-manual" | undefined;
354
- nodeIp?: string | null | undefined;
540
+ rtcDataAudioPublicHost?: unknown;
541
+ rtcDataAudioPublicUdpPort?: unknown;
355
542
  }>;
356
543
  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>;
544
+ export declare const RealtimeRtcDataAudioRuntimeSchema: z.ZodObject<{
545
+ localUdpPort: z.ZodNumber;
546
+ publicCandidateEnabled: z.ZodBoolean;
547
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
548
+ host: z.ZodString;
549
+ port: z.ZodNumber;
550
+ }, "strip", z.ZodTypeAny, {
551
+ host: string;
552
+ port: number;
553
+ }, {
554
+ host: string;
555
+ port: number;
556
+ }>>;
366
557
  }, "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;
558
+ localUdpPort: number;
559
+ publicCandidateEnabled: boolean;
560
+ publicEndpoint: {
561
+ host: string;
562
+ port: number;
563
+ } | null;
373
564
  }, {
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;
565
+ localUdpPort: number;
566
+ publicCandidateEnabled: boolean;
567
+ publicEndpoint: {
568
+ host: string;
569
+ port: number;
570
+ } | null;
380
571
  }>;
381
- export type RealtimeCredentialStatus = z.infer<typeof RealtimeCredentialStatusSchema>;
572
+ export type RealtimeRtcDataAudioRuntime = z.infer<typeof RealtimeRtcDataAudioRuntimeSchema>;
382
573
  export declare const RealtimeSettingsRuntimeSchema: z.ZodObject<{
383
- liveKitEnabled: z.ZodBoolean;
384
574
  connectivityHints: z.ZodObject<{
385
575
  signalingUrl: z.ZodString;
386
- signalingPort: z.ZodNumber;
387
- rtcTcpPort: z.ZodNumber;
388
- udpPortRange: z.ZodString;
389
- publicUrlOverrideActive: z.ZodBoolean;
576
+ localUdpPort: z.ZodNumber;
577
+ publicCandidateEnabled: z.ZodBoolean;
578
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
579
+ host: z.ZodString;
580
+ port: z.ZodNumber;
581
+ }, "strip", z.ZodTypeAny, {
582
+ host: string;
583
+ port: number;
584
+ }, {
585
+ host: string;
586
+ port: number;
587
+ }>>;
588
+ iceServers: z.ZodArray<z.ZodString, "many">;
589
+ fallbackTransport: z.ZodLiteral<"ws-compat">;
390
590
  }, "strip", z.ZodTypeAny, {
391
591
  signalingUrl: string;
392
- signalingPort: number;
393
- rtcTcpPort: number;
394
- udpPortRange: string;
395
- publicUrlOverrideActive: boolean;
592
+ localUdpPort: number;
593
+ publicCandidateEnabled: boolean;
594
+ publicEndpoint: {
595
+ host: string;
596
+ port: number;
597
+ } | null;
598
+ iceServers: string[];
599
+ fallbackTransport: "ws-compat";
396
600
  }, {
397
601
  signalingUrl: string;
398
- signalingPort: number;
399
- rtcTcpPort: number;
400
- udpPortRange: string;
401
- publicUrlOverrideActive: boolean;
602
+ localUdpPort: number;
603
+ publicCandidateEnabled: boolean;
604
+ publicEndpoint: {
605
+ host: string;
606
+ port: number;
607
+ } | null;
608
+ iceServers: string[];
609
+ fallbackTransport: "ws-compat";
402
610
  }>;
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>;
611
+ radioReceiveTransport: z.ZodEnum<["rtc-data-audio", "ws-compat"]>;
612
+ rtcDataAudio: z.ZodObject<{
613
+ localUdpPort: z.ZodNumber;
614
+ publicCandidateEnabled: z.ZodBoolean;
615
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
616
+ host: z.ZodString;
617
+ port: z.ZodNumber;
618
+ }, "strip", z.ZodTypeAny, {
619
+ host: string;
620
+ port: number;
621
+ }, {
622
+ host: string;
623
+ port: number;
624
+ }>>;
413
625
  }, "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;
626
+ localUdpPort: number;
627
+ publicCandidateEnabled: boolean;
628
+ publicEndpoint: {
629
+ host: string;
630
+ port: number;
631
+ } | null;
420
632
  }, {
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;
633
+ localUdpPort: number;
634
+ publicCandidateEnabled: boolean;
635
+ publicEndpoint: {
636
+ host: string;
637
+ port: number;
638
+ } | null;
427
639
  }>;
428
640
  }, "strip", z.ZodTypeAny, {
429
641
  connectivityHints: {
430
642
  signalingUrl: string;
431
- signalingPort: number;
432
- rtcTcpPort: number;
433
- udpPortRange: string;
434
- publicUrlOverrideActive: boolean;
643
+ localUdpPort: number;
644
+ publicCandidateEnabled: boolean;
645
+ publicEndpoint: {
646
+ host: string;
647
+ port: number;
648
+ } | null;
649
+ iceServers: string[];
650
+ fallbackTransport: "ws-compat";
435
651
  };
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;
652
+ radioReceiveTransport: "rtc-data-audio" | "ws-compat";
653
+ rtcDataAudio: {
654
+ localUdpPort: number;
655
+ publicCandidateEnabled: boolean;
656
+ publicEndpoint: {
657
+ host: string;
658
+ port: number;
659
+ } | null;
447
660
  };
448
661
  }, {
449
662
  connectivityHints: {
450
663
  signalingUrl: string;
451
- signalingPort: number;
452
- rtcTcpPort: number;
453
- udpPortRange: string;
454
- publicUrlOverrideActive: boolean;
664
+ localUdpPort: number;
665
+ publicCandidateEnabled: boolean;
666
+ publicEndpoint: {
667
+ host: string;
668
+ port: number;
669
+ } | null;
670
+ iceServers: string[];
671
+ fallbackTransport: "ws-compat";
455
672
  };
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;
673
+ radioReceiveTransport: "rtc-data-audio" | "ws-compat";
674
+ rtcDataAudio: {
675
+ localUdpPort: number;
676
+ publicCandidateEnabled: boolean;
677
+ publicEndpoint: {
678
+ host: string;
679
+ port: number;
680
+ } | null;
467
681
  };
468
682
  }>;
469
683
  export type RealtimeSettingsRuntime = z.infer<typeof RealtimeSettingsRuntimeSchema>;
470
684
  export declare const RealtimeSettingsResponseDataSchema: z.ZodObject<{
471
- publicWsUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
472
685
  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>>;
686
+ rtcDataAudioPublicHost: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodLiteral<"">, null, "">, z.ZodEffects<z.ZodString, string, string>, z.ZodNull]>, string | null, unknown>>;
687
+ rtcDataAudioPublicUdpPort: z.ZodOptional<z.ZodEffects<z.ZodNullable<z.ZodNumber>, number | null, unknown>>;
475
688
  } & {
476
689
  runtime: z.ZodOptional<z.ZodObject<{
477
- liveKitEnabled: z.ZodBoolean;
478
690
  connectivityHints: z.ZodObject<{
479
691
  signalingUrl: z.ZodString;
480
- signalingPort: z.ZodNumber;
481
- rtcTcpPort: z.ZodNumber;
482
- udpPortRange: z.ZodString;
483
- publicUrlOverrideActive: z.ZodBoolean;
692
+ localUdpPort: z.ZodNumber;
693
+ publicCandidateEnabled: z.ZodBoolean;
694
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
695
+ host: z.ZodString;
696
+ port: z.ZodNumber;
697
+ }, "strip", z.ZodTypeAny, {
698
+ host: string;
699
+ port: number;
700
+ }, {
701
+ host: string;
702
+ port: number;
703
+ }>>;
704
+ iceServers: z.ZodArray<z.ZodString, "many">;
705
+ fallbackTransport: z.ZodLiteral<"ws-compat">;
484
706
  }, "strip", z.ZodTypeAny, {
485
707
  signalingUrl: string;
486
- signalingPort: number;
487
- rtcTcpPort: number;
488
- udpPortRange: string;
489
- publicUrlOverrideActive: boolean;
708
+ localUdpPort: number;
709
+ publicCandidateEnabled: boolean;
710
+ publicEndpoint: {
711
+ host: string;
712
+ port: number;
713
+ } | null;
714
+ iceServers: string[];
715
+ fallbackTransport: "ws-compat";
490
716
  }, {
491
717
  signalingUrl: string;
492
- signalingPort: number;
493
- rtcTcpPort: number;
494
- udpPortRange: string;
495
- publicUrlOverrideActive: boolean;
718
+ localUdpPort: number;
719
+ publicCandidateEnabled: boolean;
720
+ publicEndpoint: {
721
+ host: string;
722
+ port: number;
723
+ } | null;
724
+ iceServers: string[];
725
+ fallbackTransport: "ws-compat";
496
726
  }>;
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>;
727
+ radioReceiveTransport: z.ZodEnum<["rtc-data-audio", "ws-compat"]>;
728
+ rtcDataAudio: z.ZodObject<{
729
+ localUdpPort: z.ZodNumber;
730
+ publicCandidateEnabled: z.ZodBoolean;
731
+ publicEndpoint: z.ZodNullable<z.ZodObject<{
732
+ host: z.ZodString;
733
+ port: z.ZodNumber;
734
+ }, "strip", z.ZodTypeAny, {
735
+ host: string;
736
+ port: number;
737
+ }, {
738
+ host: string;
739
+ port: number;
740
+ }>>;
507
741
  }, "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;
742
+ localUdpPort: number;
743
+ publicCandidateEnabled: boolean;
744
+ publicEndpoint: {
745
+ host: string;
746
+ port: number;
747
+ } | null;
514
748
  }, {
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;
749
+ localUdpPort: number;
750
+ publicCandidateEnabled: boolean;
751
+ publicEndpoint: {
752
+ host: string;
753
+ port: number;
754
+ } | null;
521
755
  }>;
522
756
  }, "strip", z.ZodTypeAny, {
523
757
  connectivityHints: {
524
758
  signalingUrl: string;
525
- signalingPort: number;
526
- rtcTcpPort: number;
527
- udpPortRange: string;
528
- publicUrlOverrideActive: boolean;
759
+ localUdpPort: number;
760
+ publicCandidateEnabled: boolean;
761
+ publicEndpoint: {
762
+ host: string;
763
+ port: number;
764
+ } | null;
765
+ iceServers: string[];
766
+ fallbackTransport: "ws-compat";
529
767
  };
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;
768
+ radioReceiveTransport: "rtc-data-audio" | "ws-compat";
769
+ rtcDataAudio: {
770
+ localUdpPort: number;
771
+ publicCandidateEnabled: boolean;
772
+ publicEndpoint: {
773
+ host: string;
774
+ port: number;
775
+ } | null;
541
776
  };
542
777
  }, {
543
778
  connectivityHints: {
544
779
  signalingUrl: string;
545
- signalingPort: number;
546
- rtcTcpPort: number;
547
- udpPortRange: string;
548
- publicUrlOverrideActive: boolean;
780
+ localUdpPort: number;
781
+ publicCandidateEnabled: boolean;
782
+ publicEndpoint: {
783
+ host: string;
784
+ port: number;
785
+ } | null;
786
+ iceServers: string[];
787
+ fallbackTransport: "ws-compat";
549
788
  };
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;
789
+ radioReceiveTransport: "rtc-data-audio" | "ws-compat";
790
+ rtcDataAudio: {
791
+ localUdpPort: number;
792
+ publicCandidateEnabled: boolean;
793
+ publicEndpoint: {
794
+ host: string;
795
+ port: number;
796
+ } | null;
561
797
  };
562
798
  }>>;
563
799
  }, "strip", z.ZodTypeAny, {
564
800
  runtime?: {
565
801
  connectivityHints: {
566
802
  signalingUrl: string;
567
- signalingPort: number;
568
- rtcTcpPort: number;
569
- udpPortRange: string;
570
- publicUrlOverrideActive: boolean;
803
+ localUdpPort: number;
804
+ publicCandidateEnabled: boolean;
805
+ publicEndpoint: {
806
+ host: string;
807
+ port: number;
808
+ } | null;
809
+ iceServers: string[];
810
+ fallbackTransport: "ws-compat";
571
811
  };
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;
812
+ radioReceiveTransport: "rtc-data-audio" | "ws-compat";
813
+ rtcDataAudio: {
814
+ localUdpPort: number;
815
+ publicCandidateEnabled: boolean;
816
+ publicEndpoint: {
817
+ host: string;
818
+ port: number;
819
+ } | null;
583
820
  };
584
821
  } | undefined;
585
- publicWsUrl?: string | null | undefined;
586
822
  transportPolicy?: "auto" | "force-compat" | undefined;
587
- networkMode?: "lan" | "internet-auto" | "internet-manual" | undefined;
588
- nodeIp?: string | null | undefined;
823
+ rtcDataAudioPublicHost?: string | null | undefined;
824
+ rtcDataAudioPublicUdpPort?: number | null | undefined;
589
825
  }, {
590
826
  runtime?: {
591
827
  connectivityHints: {
592
828
  signalingUrl: string;
593
- signalingPort: number;
594
- rtcTcpPort: number;
595
- udpPortRange: string;
596
- publicUrlOverrideActive: boolean;
829
+ localUdpPort: number;
830
+ publicCandidateEnabled: boolean;
831
+ publicEndpoint: {
832
+ host: string;
833
+ port: number;
834
+ } | null;
835
+ iceServers: string[];
836
+ fallbackTransport: "ws-compat";
597
837
  };
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;
838
+ radioReceiveTransport: "rtc-data-audio" | "ws-compat";
839
+ rtcDataAudio: {
840
+ localUdpPort: number;
841
+ publicCandidateEnabled: boolean;
842
+ publicEndpoint: {
843
+ host: string;
844
+ port: number;
845
+ } | null;
609
846
  };
610
847
  } | undefined;
611
- publicWsUrl?: string | null | undefined;
612
848
  transportPolicy?: "auto" | "force-compat" | undefined;
613
- networkMode?: "lan" | "internet-auto" | "internet-manual" | undefined;
614
- nodeIp?: string | null | undefined;
849
+ rtcDataAudioPublicHost?: unknown;
850
+ rtcDataAudioPublicUdpPort?: unknown;
615
851
  }>;
616
852
  export type RealtimeSettingsResponseData = z.infer<typeof RealtimeSettingsResponseDataSchema>;
617
853
  export declare const RealtimeSourceStatsSchema: z.ZodObject<{
@@ -673,7 +909,7 @@ export declare const RealtimeStatsResponseSchema: z.ZodObject<{
673
909
  audioLevel?: number | undefined;
674
910
  droppedSamples?: number | undefined;
675
911
  }>>;
676
- transport: z.ZodOptional<z.ZodNullable<z.ZodEnum<["livekit", "ws-compat"]>>>;
912
+ transport: z.ZodOptional<z.ZodNullable<z.ZodEnum<["rtc-data-audio", "ws-compat"]>>>;
677
913
  }, "strip", z.ZodTypeAny, {
678
914
  scope: "radio" | "openwebrx-preview";
679
915
  source: {
@@ -685,7 +921,7 @@ export declare const RealtimeStatsResponseSchema: z.ZodObject<{
685
921
  droppedSamples?: number | undefined;
686
922
  } | null;
687
923
  previewSessionId?: string | null | undefined;
688
- transport?: "livekit" | "ws-compat" | null | undefined;
924
+ transport?: "rtc-data-audio" | "ws-compat" | null | undefined;
689
925
  }, {
690
926
  scope: "radio" | "openwebrx-preview";
691
927
  source: {
@@ -697,7 +933,7 @@ export declare const RealtimeStatsResponseSchema: z.ZodObject<{
697
933
  droppedSamples?: number | undefined;
698
934
  } | null;
699
935
  previewSessionId?: string | null | undefined;
700
- transport?: "livekit" | "ws-compat" | null | undefined;
936
+ transport?: "rtc-data-audio" | "ws-compat" | null | undefined;
701
937
  }>;
702
938
  export type RealtimeStatsResponse = z.infer<typeof RealtimeStatsResponseSchema>;
703
939
  export declare const RealtimeVoiceTxMetricWindowSchema: z.ZodObject<{
@@ -718,7 +954,7 @@ export declare const RealtimeVoiceTxBottleneckStageSchema: z.ZodEnum<["client-ca
718
954
  export type RealtimeVoiceTxBottleneckStage = z.infer<typeof RealtimeVoiceTxBottleneckStageSchema>;
719
955
  export declare const RealtimeVoiceTxSummarySchema: z.ZodObject<{
720
956
  active: z.ZodBoolean;
721
- transport: z.ZodNullable<z.ZodEnum<["livekit", "ws-compat"]>>;
957
+ transport: z.ZodNullable<z.ZodEnum<["rtc-data-audio", "ws-compat"]>>;
722
958
  bottleneckStage: z.ZodNullable<z.ZodEnum<["client-capture", "transport", "server-ingress", "server-queue", "server-output"]>>;
723
959
  startedAt: z.ZodNullable<z.ZodNumber>;
724
960
  updatedAt: z.ZodNullable<z.ZodNumber>;
@@ -728,7 +964,7 @@ export declare const RealtimeVoiceTxSummarySchema: z.ZodObject<{
728
964
  active: boolean;
729
965
  label: string | null;
730
966
  updatedAt: number | null;
731
- transport: "livekit" | "ws-compat" | null;
967
+ transport: "rtc-data-audio" | "ws-compat" | null;
732
968
  bottleneckStage: "transport" | "client-capture" | "server-ingress" | "server-queue" | "server-output" | null;
733
969
  startedAt: number | null;
734
970
  clientId: string | null;
@@ -736,7 +972,7 @@ export declare const RealtimeVoiceTxSummarySchema: z.ZodObject<{
736
972
  active: boolean;
737
973
  label: string | null;
738
974
  updatedAt: number | null;
739
- transport: "livekit" | "ws-compat" | null;
975
+ transport: "rtc-data-audio" | "ws-compat" | null;
740
976
  bottleneckStage: "transport" | "client-capture" | "server-ingress" | "server-queue" | "server-output" | null;
741
977
  startedAt: number | null;
742
978
  clientId: string | null;
@@ -796,6 +1032,10 @@ export declare const RealtimeVoiceTxServerIngressStatsSchema: z.ZodObject<{
796
1032
  queueDepthFrames: z.ZodNumber;
797
1033
  queuedAudioMs: z.ZodNumber;
798
1034
  droppedFrames: z.ZodNumber;
1035
+ staleDroppedFrames: z.ZodNumber;
1036
+ underrunCount: z.ZodNumber;
1037
+ plcFrames: z.ZodNumber;
1038
+ jitterTargetMs: z.ZodNumber;
799
1039
  }, "strip", z.ZodTypeAny, {
800
1040
  frameIntervalMs: {
801
1041
  current: number | null;
@@ -805,6 +1045,10 @@ export declare const RealtimeVoiceTxServerIngressStatsSchema: z.ZodObject<{
805
1045
  queueDepthFrames: number;
806
1046
  queuedAudioMs: number;
807
1047
  droppedFrames: number;
1048
+ staleDroppedFrames: number;
1049
+ underrunCount: number;
1050
+ plcFrames: number;
1051
+ jitterTargetMs: number;
808
1052
  }, {
809
1053
  frameIntervalMs: {
810
1054
  current: number | null;
@@ -814,6 +1058,10 @@ export declare const RealtimeVoiceTxServerIngressStatsSchema: z.ZodObject<{
814
1058
  queueDepthFrames: number;
815
1059
  queuedAudioMs: number;
816
1060
  droppedFrames: number;
1061
+ staleDroppedFrames: number;
1062
+ underrunCount: number;
1063
+ plcFrames: number;
1064
+ jitterTargetMs: number;
817
1065
  }>;
818
1066
  export type RealtimeVoiceTxServerIngressStats = z.infer<typeof RealtimeVoiceTxServerIngressStatsSchema>;
819
1067
  export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
@@ -856,6 +1104,19 @@ export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
856
1104
  rolling: number | null;
857
1105
  peak: number | null;
858
1106
  }>;
1107
+ serverPipelineMs: z.ZodObject<{
1108
+ current: z.ZodNullable<z.ZodNumber>;
1109
+ rolling: z.ZodNullable<z.ZodNumber>;
1110
+ peak: z.ZodNullable<z.ZodNumber>;
1111
+ }, "strip", z.ZodTypeAny, {
1112
+ current: number | null;
1113
+ rolling: number | null;
1114
+ peak: number | null;
1115
+ }, {
1116
+ current: number | null;
1117
+ rolling: number | null;
1118
+ peak: number | null;
1119
+ }>;
859
1120
  endToEndMs: z.ZodObject<{
860
1121
  current: z.ZodNullable<z.ZodNumber>;
861
1122
  rolling: z.ZodNullable<z.ZodNumber>;
@@ -882,6 +1143,19 @@ export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
882
1143
  rolling: number | null;
883
1144
  peak: number | null;
884
1145
  }>;
1146
+ outputWriteIntervalMs: z.ZodObject<{
1147
+ current: z.ZodNullable<z.ZodNumber>;
1148
+ rolling: z.ZodNullable<z.ZodNumber>;
1149
+ peak: z.ZodNullable<z.ZodNumber>;
1150
+ }, "strip", z.ZodTypeAny, {
1151
+ current: number | null;
1152
+ rolling: number | null;
1153
+ peak: number | null;
1154
+ }, {
1155
+ current: number | null;
1156
+ rolling: number | null;
1157
+ peak: number | null;
1158
+ }>;
885
1159
  outputSampleRate: z.ZodNullable<z.ZodNumber>;
886
1160
  outputBufferSize: z.ZodNullable<z.ZodNumber>;
887
1161
  writeFailures: z.ZodNumber;
@@ -901,6 +1175,11 @@ export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
901
1175
  rolling: number | null;
902
1176
  peak: number | null;
903
1177
  };
1178
+ serverPipelineMs: {
1179
+ current: number | null;
1180
+ rolling: number | null;
1181
+ peak: number | null;
1182
+ };
904
1183
  endToEndMs: {
905
1184
  current: number | null;
906
1185
  rolling: number | null;
@@ -911,6 +1190,11 @@ export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
911
1190
  rolling: number | null;
912
1191
  peak: number | null;
913
1192
  };
1193
+ outputWriteIntervalMs: {
1194
+ current: number | null;
1195
+ rolling: number | null;
1196
+ peak: number | null;
1197
+ };
914
1198
  outputSampleRate: number | null;
915
1199
  outputBufferSize: number | null;
916
1200
  writeFailures: number;
@@ -930,6 +1214,11 @@ export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
930
1214
  rolling: number | null;
931
1215
  peak: number | null;
932
1216
  };
1217
+ serverPipelineMs: {
1218
+ current: number | null;
1219
+ rolling: number | null;
1220
+ peak: number | null;
1221
+ };
933
1222
  endToEndMs: {
934
1223
  current: number | null;
935
1224
  rolling: number | null;
@@ -940,6 +1229,11 @@ export declare const RealtimeVoiceTxServerOutputStatsSchema: z.ZodObject<{
940
1229
  rolling: number | null;
941
1230
  peak: number | null;
942
1231
  };
1232
+ outputWriteIntervalMs: {
1233
+ current: number | null;
1234
+ rolling: number | null;
1235
+ peak: number | null;
1236
+ };
943
1237
  outputSampleRate: number | null;
944
1238
  outputBufferSize: number | null;
945
1239
  writeFailures: number;
@@ -949,7 +1243,7 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
949
1243
  scope: z.ZodEnum<["radio", "openwebrx-preview"]>;
950
1244
  summary: z.ZodObject<{
951
1245
  active: z.ZodBoolean;
952
- transport: z.ZodNullable<z.ZodEnum<["livekit", "ws-compat"]>>;
1246
+ transport: z.ZodNullable<z.ZodEnum<["rtc-data-audio", "ws-compat"]>>;
953
1247
  bottleneckStage: z.ZodNullable<z.ZodEnum<["client-capture", "transport", "server-ingress", "server-queue", "server-output"]>>;
954
1248
  startedAt: z.ZodNullable<z.ZodNumber>;
955
1249
  updatedAt: z.ZodNullable<z.ZodNumber>;
@@ -959,7 +1253,7 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
959
1253
  active: boolean;
960
1254
  label: string | null;
961
1255
  updatedAt: number | null;
962
- transport: "livekit" | "ws-compat" | null;
1256
+ transport: "rtc-data-audio" | "ws-compat" | null;
963
1257
  bottleneckStage: "transport" | "client-capture" | "server-ingress" | "server-queue" | "server-output" | null;
964
1258
  startedAt: number | null;
965
1259
  clientId: string | null;
@@ -967,7 +1261,7 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
967
1261
  active: boolean;
968
1262
  label: string | null;
969
1263
  updatedAt: number | null;
970
- transport: "livekit" | "ws-compat" | null;
1264
+ transport: "rtc-data-audio" | "ws-compat" | null;
971
1265
  bottleneckStage: "transport" | "client-capture" | "server-ingress" | "server-queue" | "server-output" | null;
972
1266
  startedAt: number | null;
973
1267
  clientId: string | null;
@@ -1025,6 +1319,10 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1025
1319
  queueDepthFrames: z.ZodNumber;
1026
1320
  queuedAudioMs: z.ZodNumber;
1027
1321
  droppedFrames: z.ZodNumber;
1322
+ staleDroppedFrames: z.ZodNumber;
1323
+ underrunCount: z.ZodNumber;
1324
+ plcFrames: z.ZodNumber;
1325
+ jitterTargetMs: z.ZodNumber;
1028
1326
  }, "strip", z.ZodTypeAny, {
1029
1327
  frameIntervalMs: {
1030
1328
  current: number | null;
@@ -1034,6 +1332,10 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1034
1332
  queueDepthFrames: number;
1035
1333
  queuedAudioMs: number;
1036
1334
  droppedFrames: number;
1335
+ staleDroppedFrames: number;
1336
+ underrunCount: number;
1337
+ plcFrames: number;
1338
+ jitterTargetMs: number;
1037
1339
  }, {
1038
1340
  frameIntervalMs: {
1039
1341
  current: number | null;
@@ -1043,6 +1345,10 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1043
1345
  queueDepthFrames: number;
1044
1346
  queuedAudioMs: number;
1045
1347
  droppedFrames: number;
1348
+ staleDroppedFrames: number;
1349
+ underrunCount: number;
1350
+ plcFrames: number;
1351
+ jitterTargetMs: number;
1046
1352
  }>;
1047
1353
  serverOutput: z.ZodObject<{
1048
1354
  resampleMs: z.ZodObject<{
@@ -1084,6 +1390,19 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1084
1390
  rolling: number | null;
1085
1391
  peak: number | null;
1086
1392
  }>;
1393
+ serverPipelineMs: z.ZodObject<{
1394
+ current: z.ZodNullable<z.ZodNumber>;
1395
+ rolling: z.ZodNullable<z.ZodNumber>;
1396
+ peak: z.ZodNullable<z.ZodNumber>;
1397
+ }, "strip", z.ZodTypeAny, {
1398
+ current: number | null;
1399
+ rolling: number | null;
1400
+ peak: number | null;
1401
+ }, {
1402
+ current: number | null;
1403
+ rolling: number | null;
1404
+ peak: number | null;
1405
+ }>;
1087
1406
  endToEndMs: z.ZodObject<{
1088
1407
  current: z.ZodNullable<z.ZodNumber>;
1089
1408
  rolling: z.ZodNullable<z.ZodNumber>;
@@ -1110,6 +1429,19 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1110
1429
  rolling: number | null;
1111
1430
  peak: number | null;
1112
1431
  }>;
1432
+ outputWriteIntervalMs: z.ZodObject<{
1433
+ current: z.ZodNullable<z.ZodNumber>;
1434
+ rolling: z.ZodNullable<z.ZodNumber>;
1435
+ peak: z.ZodNullable<z.ZodNumber>;
1436
+ }, "strip", z.ZodTypeAny, {
1437
+ current: number | null;
1438
+ rolling: number | null;
1439
+ peak: number | null;
1440
+ }, {
1441
+ current: number | null;
1442
+ rolling: number | null;
1443
+ peak: number | null;
1444
+ }>;
1113
1445
  outputSampleRate: z.ZodNullable<z.ZodNumber>;
1114
1446
  outputBufferSize: z.ZodNullable<z.ZodNumber>;
1115
1447
  writeFailures: z.ZodNumber;
@@ -1129,6 +1461,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1129
1461
  rolling: number | null;
1130
1462
  peak: number | null;
1131
1463
  };
1464
+ serverPipelineMs: {
1465
+ current: number | null;
1466
+ rolling: number | null;
1467
+ peak: number | null;
1468
+ };
1132
1469
  endToEndMs: {
1133
1470
  current: number | null;
1134
1471
  rolling: number | null;
@@ -1139,6 +1476,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1139
1476
  rolling: number | null;
1140
1477
  peak: number | null;
1141
1478
  };
1479
+ outputWriteIntervalMs: {
1480
+ current: number | null;
1481
+ rolling: number | null;
1482
+ peak: number | null;
1483
+ };
1142
1484
  outputSampleRate: number | null;
1143
1485
  outputBufferSize: number | null;
1144
1486
  writeFailures: number;
@@ -1158,6 +1500,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1158
1500
  rolling: number | null;
1159
1501
  peak: number | null;
1160
1502
  };
1503
+ serverPipelineMs: {
1504
+ current: number | null;
1505
+ rolling: number | null;
1506
+ peak: number | null;
1507
+ };
1161
1508
  endToEndMs: {
1162
1509
  current: number | null;
1163
1510
  rolling: number | null;
@@ -1168,6 +1515,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1168
1515
  rolling: number | null;
1169
1516
  peak: number | null;
1170
1517
  };
1518
+ outputWriteIntervalMs: {
1519
+ current: number | null;
1520
+ rolling: number | null;
1521
+ peak: number | null;
1522
+ };
1171
1523
  outputSampleRate: number | null;
1172
1524
  outputBufferSize: number | null;
1173
1525
  writeFailures: number;
@@ -1177,7 +1529,7 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1177
1529
  active: boolean;
1178
1530
  label: string | null;
1179
1531
  updatedAt: number | null;
1180
- transport: "livekit" | "ws-compat" | null;
1532
+ transport: "rtc-data-audio" | "ws-compat" | null;
1181
1533
  bottleneckStage: "transport" | "client-capture" | "server-ingress" | "server-queue" | "server-output" | null;
1182
1534
  startedAt: number | null;
1183
1535
  clientId: string | null;
@@ -1202,6 +1554,10 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1202
1554
  queueDepthFrames: number;
1203
1555
  queuedAudioMs: number;
1204
1556
  droppedFrames: number;
1557
+ staleDroppedFrames: number;
1558
+ underrunCount: number;
1559
+ plcFrames: number;
1560
+ jitterTargetMs: number;
1205
1561
  };
1206
1562
  serverOutput: {
1207
1563
  resampleMs: {
@@ -1219,6 +1575,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1219
1575
  rolling: number | null;
1220
1576
  peak: number | null;
1221
1577
  };
1578
+ serverPipelineMs: {
1579
+ current: number | null;
1580
+ rolling: number | null;
1581
+ peak: number | null;
1582
+ };
1222
1583
  endToEndMs: {
1223
1584
  current: number | null;
1224
1585
  rolling: number | null;
@@ -1229,6 +1590,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1229
1590
  rolling: number | null;
1230
1591
  peak: number | null;
1231
1592
  };
1593
+ outputWriteIntervalMs: {
1594
+ current: number | null;
1595
+ rolling: number | null;
1596
+ peak: number | null;
1597
+ };
1232
1598
  outputSampleRate: number | null;
1233
1599
  outputBufferSize: number | null;
1234
1600
  writeFailures: number;
@@ -1238,7 +1604,7 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1238
1604
  active: boolean;
1239
1605
  label: string | null;
1240
1606
  updatedAt: number | null;
1241
- transport: "livekit" | "ws-compat" | null;
1607
+ transport: "rtc-data-audio" | "ws-compat" | null;
1242
1608
  bottleneckStage: "transport" | "client-capture" | "server-ingress" | "server-queue" | "server-output" | null;
1243
1609
  startedAt: number | null;
1244
1610
  clientId: string | null;
@@ -1263,6 +1629,10 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1263
1629
  queueDepthFrames: number;
1264
1630
  queuedAudioMs: number;
1265
1631
  droppedFrames: number;
1632
+ staleDroppedFrames: number;
1633
+ underrunCount: number;
1634
+ plcFrames: number;
1635
+ jitterTargetMs: number;
1266
1636
  };
1267
1637
  serverOutput: {
1268
1638
  resampleMs: {
@@ -1280,6 +1650,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1280
1650
  rolling: number | null;
1281
1651
  peak: number | null;
1282
1652
  };
1653
+ serverPipelineMs: {
1654
+ current: number | null;
1655
+ rolling: number | null;
1656
+ peak: number | null;
1657
+ };
1283
1658
  endToEndMs: {
1284
1659
  current: number | null;
1285
1660
  rolling: number | null;
@@ -1290,6 +1665,11 @@ export declare const RealtimeVoiceTxStatsResponseSchema: z.ZodObject<{
1290
1665
  rolling: number | null;
1291
1666
  peak: number | null;
1292
1667
  };
1668
+ outputWriteIntervalMs: {
1669
+ current: number | null;
1670
+ rolling: number | null;
1671
+ peak: number | null;
1672
+ };
1293
1673
  outputSampleRate: number | null;
1294
1674
  outputBufferSize: number | null;
1295
1675
  writeFailures: number;