@ceralive/cerastream 2026.6.0-rc.2 → 2026.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.d.ts +3 -1
- package/dist/constants.js +3 -1
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +2 -0
- package/dist/events.d.ts +20 -0
- package/dist/events.js +4 -2
- package/dist/messages.d.ts +85 -0
- package/dist/messages.js +49 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.js +1 -0
- package/package.json +1 -1
package/dist/constants.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export declare const PROTOCOL_VERSION: "cerastream-ipc/1";
|
|
|
8
8
|
* additive-only within protocol major `cerastream-ipc/1` (ADR-0002 §4); this value
|
|
9
9
|
* only moves when the wire schema itself does, in lockstep across both languages.
|
|
10
10
|
*/
|
|
11
|
-
export declare const SCHEMA_VERSION: "0.
|
|
11
|
+
export declare const SCHEMA_VERSION: "0.3.0";
|
|
12
12
|
/** Runtime dir holding both control + preview sockets. systemd `RuntimeDirectory=cerastream`. */
|
|
13
13
|
export declare const DEFAULT_IPC_DIR: "/run/cerastream";
|
|
14
14
|
/** Env override for the IPC dir (tests/dev). Defaults to {@link DEFAULT_IPC_DIR}. */
|
|
@@ -23,6 +23,8 @@ export declare const CONTROL_SOCKET_PATH: "/run/cerastream/control.sock";
|
|
|
23
23
|
export declare const PREVIEW_SOCKET_PATH: "/run/cerastream/preview.sock";
|
|
24
24
|
/** Per-line framing cap (ADR-0002 §1): an oversized line is a fatal protocol error. */
|
|
25
25
|
export declare const MAX_LINE_BYTES: number;
|
|
26
|
+
/** Upper bound (ms) for `reload-config.audio.delay_ms`. Mirrors the Rust `AUDIO_DELAY_MAX_MS` and CeraUI's `AUDIO_DELAY_MAX`. */
|
|
27
|
+
export declare const AUDIO_DELAY_MAX_MS = 2000;
|
|
26
28
|
/** Engine binary name (systemd-owned; CeraUI never spawns it — ADR-0005). */
|
|
27
29
|
export declare const CERASTREAM_BIN: "cerastream";
|
|
28
30
|
export declare const DEFAULT_MIN_BITRATE = 300;
|
package/dist/constants.js
CHANGED
|
@@ -11,7 +11,7 @@ export const PROTOCOL_VERSION = "cerastream-ipc/1";
|
|
|
11
11
|
* additive-only within protocol major `cerastream-ipc/1` (ADR-0002 §4); this value
|
|
12
12
|
* only moves when the wire schema itself does, in lockstep across both languages.
|
|
13
13
|
*/
|
|
14
|
-
export const SCHEMA_VERSION = "0.
|
|
14
|
+
export const SCHEMA_VERSION = "0.3.0";
|
|
15
15
|
/** Runtime dir holding both control + preview sockets. systemd `RuntimeDirectory=cerastream`. */
|
|
16
16
|
export const DEFAULT_IPC_DIR = "/run/cerastream";
|
|
17
17
|
/** Env override for the IPC dir (tests/dev). Defaults to {@link DEFAULT_IPC_DIR}. */
|
|
@@ -26,6 +26,8 @@ export const CONTROL_SOCKET_PATH = "/run/cerastream/control.sock";
|
|
|
26
26
|
export const PREVIEW_SOCKET_PATH = "/run/cerastream/preview.sock";
|
|
27
27
|
/** Per-line framing cap (ADR-0002 §1): an oversized line is a fatal protocol error. */
|
|
28
28
|
export const MAX_LINE_BYTES = 1024 * 1024; // 1 MiB
|
|
29
|
+
/** Upper bound (ms) for `reload-config.audio.delay_ms`. Mirrors the Rust `AUDIO_DELAY_MAX_MS` and CeraUI's `AUDIO_DELAY_MAX`. */
|
|
30
|
+
export const AUDIO_DELAY_MAX_MS = 2000;
|
|
29
31
|
/** Engine binary name (systemd-owned; CeraUI never spawns it — ADR-0005). */
|
|
30
32
|
export const CERASTREAM_BIN = "cerastream";
|
|
31
33
|
// ---- config defaults (mirror ceracoder, the engine being replaced) ----
|
package/dist/errors.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export declare const rpcErrorCodeSchema: z.ZodEnum<{
|
|
|
42
42
|
"cerastream.state.not_streaming": "cerastream.state.not_streaming";
|
|
43
43
|
"cerastream.state.already_streaming": "cerastream.state.already_streaming";
|
|
44
44
|
"cerastream.device.not_found": "cerastream.device.not_found";
|
|
45
|
+
"cerastream.audio.device_not_found": "cerastream.audio.device_not_found";
|
|
45
46
|
"cerastream.bitrate.out_of_range": "cerastream.bitrate.out_of_range";
|
|
46
47
|
"cerastream.preview.unsupported_tier": "cerastream.preview.unsupported_tier";
|
|
47
48
|
"cerastream.internal": "cerastream.internal";
|
package/dist/errors.js
CHANGED
|
@@ -60,6 +60,7 @@ export const rpcErrorCodeSchema = z.enum([
|
|
|
60
60
|
"cerastream.state.not_streaming",
|
|
61
61
|
"cerastream.state.already_streaming",
|
|
62
62
|
"cerastream.device.not_found",
|
|
63
|
+
"cerastream.audio.device_not_found",
|
|
63
64
|
"cerastream.bitrate.out_of_range",
|
|
64
65
|
"cerastream.preview.unsupported_tier",
|
|
65
66
|
"cerastream.internal",
|
|
@@ -75,6 +76,7 @@ export const RPC_ERROR_NUMERIC = {
|
|
|
75
76
|
"cerastream.state.not_streaming": -32001,
|
|
76
77
|
"cerastream.state.already_streaming": -32002,
|
|
77
78
|
"cerastream.device.not_found": -32003,
|
|
79
|
+
"cerastream.audio.device_not_found": -32006,
|
|
78
80
|
"cerastream.bitrate.out_of_range": -32004,
|
|
79
81
|
"cerastream.preview.unsupported_tier": -32005,
|
|
80
82
|
"cerastream.internal": -32603,
|
package/dist/events.d.ts
CHANGED
|
@@ -21,6 +21,10 @@ export declare const switchEventSchema: z.ZodObject<{
|
|
|
21
21
|
auto: "auto";
|
|
22
22
|
}>;
|
|
23
23
|
reason: z.ZodOptional<z.ZodString>;
|
|
24
|
+
media_class: z.ZodOptional<z.ZodEnum<{
|
|
25
|
+
video: "video";
|
|
26
|
+
audio: "audio";
|
|
27
|
+
}>>;
|
|
24
28
|
}, z.core.$strip>;
|
|
25
29
|
export type SwitchEvent = z.infer<typeof switchEventSchema>;
|
|
26
30
|
export declare const deviceEventSchema: z.ZodObject<{
|
|
@@ -42,6 +46,7 @@ export declare const deviceEventSchema: z.ZodObject<{
|
|
|
42
46
|
width: z.ZodOptional<z.ZodNumber>;
|
|
43
47
|
height: z.ZodOptional<z.ZodNumber>;
|
|
44
48
|
framerate: z.ZodOptional<z.ZodString>;
|
|
49
|
+
media_type: z.ZodOptional<z.ZodString>;
|
|
45
50
|
}, z.core.$strip>>>;
|
|
46
51
|
}, z.core.$strip>;
|
|
47
52
|
}, z.core.$strip>;
|
|
@@ -108,6 +113,10 @@ export declare const eventParamsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
108
113
|
auto: "auto";
|
|
109
114
|
}>;
|
|
110
115
|
reason: z.ZodOptional<z.ZodString>;
|
|
116
|
+
media_class: z.ZodOptional<z.ZodEnum<{
|
|
117
|
+
video: "video";
|
|
118
|
+
audio: "audio";
|
|
119
|
+
}>>;
|
|
111
120
|
}, z.core.$strip>, z.ZodObject<{
|
|
112
121
|
type: z.ZodLiteral<"device">;
|
|
113
122
|
seq: z.ZodNumber;
|
|
@@ -127,6 +136,7 @@ export declare const eventParamsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
127
136
|
width: z.ZodOptional<z.ZodNumber>;
|
|
128
137
|
height: z.ZodOptional<z.ZodNumber>;
|
|
129
138
|
framerate: z.ZodOptional<z.ZodString>;
|
|
139
|
+
media_type: z.ZodOptional<z.ZodString>;
|
|
130
140
|
}, z.core.$strip>>>;
|
|
131
141
|
}, z.core.$strip>;
|
|
132
142
|
}, z.core.$strip>, z.ZodObject<{
|
|
@@ -188,6 +198,10 @@ export declare const cerastreamEventSchema: z.ZodObject<{
|
|
|
188
198
|
auto: "auto";
|
|
189
199
|
}>;
|
|
190
200
|
reason: z.ZodOptional<z.ZodString>;
|
|
201
|
+
media_class: z.ZodOptional<z.ZodEnum<{
|
|
202
|
+
video: "video";
|
|
203
|
+
audio: "audio";
|
|
204
|
+
}>>;
|
|
191
205
|
}, z.core.$strip>, z.ZodObject<{
|
|
192
206
|
type: z.ZodLiteral<"device">;
|
|
193
207
|
seq: z.ZodNumber;
|
|
@@ -207,6 +221,7 @@ export declare const cerastreamEventSchema: z.ZodObject<{
|
|
|
207
221
|
width: z.ZodOptional<z.ZodNumber>;
|
|
208
222
|
height: z.ZodOptional<z.ZodNumber>;
|
|
209
223
|
framerate: z.ZodOptional<z.ZodString>;
|
|
224
|
+
media_type: z.ZodOptional<z.ZodString>;
|
|
210
225
|
}, z.core.$strip>>>;
|
|
211
226
|
}, z.core.$strip>;
|
|
212
227
|
}, z.core.$strip>, z.ZodObject<{
|
|
@@ -271,6 +286,10 @@ export declare const eventSchemas: {
|
|
|
271
286
|
auto: "auto";
|
|
272
287
|
}>;
|
|
273
288
|
reason: z.ZodOptional<z.ZodString>;
|
|
289
|
+
media_class: z.ZodOptional<z.ZodEnum<{
|
|
290
|
+
video: "video";
|
|
291
|
+
audio: "audio";
|
|
292
|
+
}>>;
|
|
274
293
|
}, z.core.$strip>;
|
|
275
294
|
readonly device: z.ZodObject<{
|
|
276
295
|
type: z.ZodLiteral<"device">;
|
|
@@ -291,6 +310,7 @@ export declare const eventSchemas: {
|
|
|
291
310
|
width: z.ZodOptional<z.ZodNumber>;
|
|
292
311
|
height: z.ZodOptional<z.ZodNumber>;
|
|
293
312
|
framerate: z.ZodOptional<z.ZodString>;
|
|
313
|
+
media_type: z.ZodOptional<z.ZodString>;
|
|
294
314
|
}, z.core.$strip>>>;
|
|
295
315
|
}, z.core.$strip>;
|
|
296
316
|
}, z.core.$strip>;
|
package/dist/events.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { processErrorCodeSchema, processErrorSourceSchema, } from "./errors.js";
|
|
3
|
-
import { captureDeviceSchema, inputModeSchema, streamStateSchema, } from "./types.js";
|
|
3
|
+
import { captureDeviceSchema, inputModeSchema, mediaClassSchema, streamStateSchema, } from "./types.js";
|
|
4
4
|
// Server → client `event` notifications, delivered after `subscribe-events`
|
|
5
5
|
// (schema.md "Events"). Each event is the inner `params` of an rpcEventSchema:
|
|
6
6
|
// { type, seq, … }. `type` discriminates; `seq` is a per-type monotonic counter.
|
|
@@ -13,13 +13,15 @@ export const statusEventSchema = z.object({
|
|
|
13
13
|
streaming: z.boolean(),
|
|
14
14
|
active_input: z.string().optional(),
|
|
15
15
|
});
|
|
16
|
-
// switch — active input changed (manual or failover)
|
|
16
|
+
// switch — active input changed (manual or failover). media_class is additive
|
|
17
|
+
// (absent on legacy video-only emitters); switch-audio sets it to "audio".
|
|
17
18
|
export const switchEventSchema = z.object({
|
|
18
19
|
type: z.literal("switch"),
|
|
19
20
|
seq,
|
|
20
21
|
active_input: z.string(),
|
|
21
22
|
mode: inputModeSchema,
|
|
22
23
|
reason: z.string().optional(),
|
|
24
|
+
media_class: mediaClassSchema.optional(),
|
|
23
25
|
});
|
|
24
26
|
// device — GstDeviceMonitor hotplug
|
|
25
27
|
export const deviceEventSchema = z.object({
|
package/dist/messages.d.ts
CHANGED
|
@@ -56,6 +56,9 @@ export declare const reloadConfigParamsSchema: z.ZodObject<{
|
|
|
56
56
|
srt: z.ZodOptional<z.ZodObject<{
|
|
57
57
|
latency_ms: z.ZodOptional<z.ZodNumber>;
|
|
58
58
|
}, z.core.$strip>>;
|
|
59
|
+
audio: z.ZodOptional<z.ZodObject<{
|
|
60
|
+
delay_ms: z.ZodOptional<z.ZodNumber>;
|
|
61
|
+
}, z.core.$strip>>;
|
|
59
62
|
}, z.core.$strip>;
|
|
60
63
|
export type ReloadConfigParams = z.infer<typeof reloadConfigParamsSchema>;
|
|
61
64
|
export declare const reloadConfigResultSchema: z.ZodObject<{
|
|
@@ -72,6 +75,9 @@ export declare const reloadConfigResultSchema: z.ZodObject<{
|
|
|
72
75
|
srt: z.ZodOptional<z.ZodObject<{
|
|
73
76
|
latency_ms: z.ZodOptional<z.ZodNumber>;
|
|
74
77
|
}, z.core.$strip>>;
|
|
78
|
+
audio: z.ZodOptional<z.ZodObject<{
|
|
79
|
+
delay_ms: z.ZodOptional<z.ZodNumber>;
|
|
80
|
+
}, z.core.$strip>>;
|
|
75
81
|
}, z.core.$strip>;
|
|
76
82
|
}, z.core.$strip>;
|
|
77
83
|
export type ReloadConfigResult = z.infer<typeof reloadConfigResultSchema>;
|
|
@@ -101,6 +107,22 @@ export declare const switchInputResultSchema: z.ZodObject<{
|
|
|
101
107
|
}>;
|
|
102
108
|
}, z.core.$strip>;
|
|
103
109
|
export type SwitchInputResult = z.infer<typeof switchInputResultSchema>;
|
|
110
|
+
export declare const switchAudioParamsSchema: z.ZodObject<{
|
|
111
|
+
audio_input_id: z.ZodString;
|
|
112
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
113
|
+
manual: "manual";
|
|
114
|
+
auto: "auto";
|
|
115
|
+
}>>;
|
|
116
|
+
}, z.core.$strip>;
|
|
117
|
+
export type SwitchAudioParams = z.infer<typeof switchAudioParamsSchema>;
|
|
118
|
+
export declare const switchAudioResultSchema: z.ZodObject<{
|
|
119
|
+
active_audio_input: z.ZodString;
|
|
120
|
+
mode: z.ZodEnum<{
|
|
121
|
+
manual: "manual";
|
|
122
|
+
auto: "auto";
|
|
123
|
+
}>;
|
|
124
|
+
}, z.core.$strip>;
|
|
125
|
+
export type SwitchAudioResult = z.infer<typeof switchAudioResultSchema>;
|
|
104
126
|
export declare const listDevicesParamsSchema: z.ZodOptional<z.ZodObject<{
|
|
105
127
|
media_class: z.ZodOptional<z.ZodEnum<{
|
|
106
128
|
video: "video";
|
|
@@ -121,6 +143,7 @@ export declare const listDevicesResultSchema: z.ZodObject<{
|
|
|
121
143
|
width: z.ZodOptional<z.ZodNumber>;
|
|
122
144
|
height: z.ZodOptional<z.ZodNumber>;
|
|
123
145
|
framerate: z.ZodOptional<z.ZodString>;
|
|
146
|
+
media_type: z.ZodOptional<z.ZodString>;
|
|
124
147
|
}, z.core.$strip>>>;
|
|
125
148
|
}, z.core.$strip>>;
|
|
126
149
|
}, z.core.$strip>;
|
|
@@ -190,6 +213,61 @@ export declare const previewSessionResultSchema: z.ZodObject<{
|
|
|
190
213
|
}, z.core.$strip>], "kind">;
|
|
191
214
|
}, z.core.$strip>;
|
|
192
215
|
export type PreviewSessionResult = z.infer<typeof previewSessionResultSchema>;
|
|
216
|
+
export declare const videoSourceCapSchema: z.ZodObject<{
|
|
217
|
+
id: z.ZodString;
|
|
218
|
+
supports_audio: z.ZodBoolean;
|
|
219
|
+
supports_resolution_override: z.ZodBoolean;
|
|
220
|
+
supports_framerate_override: z.ZodBoolean;
|
|
221
|
+
default_resolution: z.ZodString;
|
|
222
|
+
default_framerate: z.ZodNumber;
|
|
223
|
+
}, z.core.$strip>;
|
|
224
|
+
export type VideoSourceCap = z.infer<typeof videoSourceCapSchema>;
|
|
225
|
+
export declare const bitrateRangeCapsSchema: z.ZodObject<{
|
|
226
|
+
min: z.ZodNumber;
|
|
227
|
+
max: z.ZodNumber;
|
|
228
|
+
unit: z.ZodString;
|
|
229
|
+
}, z.core.$strip>;
|
|
230
|
+
export type BitrateRangeCaps = z.infer<typeof bitrateRangeCapsSchema>;
|
|
231
|
+
export declare const encoderCapsSchema: z.ZodObject<{
|
|
232
|
+
codecs: z.ZodArray<z.ZodString>;
|
|
233
|
+
bitrate_range: z.ZodObject<{
|
|
234
|
+
min: z.ZodNumber;
|
|
235
|
+
max: z.ZodNumber;
|
|
236
|
+
unit: z.ZodString;
|
|
237
|
+
}, z.core.$strip>;
|
|
238
|
+
}, z.core.$strip>;
|
|
239
|
+
export type EncoderCaps = z.infer<typeof encoderCapsSchema>;
|
|
240
|
+
export declare const platformCapsSchema: z.ZodObject<{
|
|
241
|
+
supports_h265: z.ZodBoolean;
|
|
242
|
+
hardware_accelerated: z.ZodBoolean;
|
|
243
|
+
max_resolution: z.ZodString;
|
|
244
|
+
}, z.core.$strip>;
|
|
245
|
+
export type PlatformCaps = z.infer<typeof platformCapsSchema>;
|
|
246
|
+
export declare const getCapabilitiesResultSchema: z.ZodObject<{
|
|
247
|
+
platform: z.ZodObject<{
|
|
248
|
+
supports_h265: z.ZodBoolean;
|
|
249
|
+
hardware_accelerated: z.ZodBoolean;
|
|
250
|
+
max_resolution: z.ZodString;
|
|
251
|
+
}, z.core.$strip>;
|
|
252
|
+
encoder: z.ZodObject<{
|
|
253
|
+
codecs: z.ZodArray<z.ZodString>;
|
|
254
|
+
bitrate_range: z.ZodObject<{
|
|
255
|
+
min: z.ZodNumber;
|
|
256
|
+
max: z.ZodNumber;
|
|
257
|
+
unit: z.ZodString;
|
|
258
|
+
}, z.core.$strip>;
|
|
259
|
+
}, z.core.$strip>;
|
|
260
|
+
sources: z.ZodArray<z.ZodObject<{
|
|
261
|
+
id: z.ZodString;
|
|
262
|
+
supports_audio: z.ZodBoolean;
|
|
263
|
+
supports_resolution_override: z.ZodBoolean;
|
|
264
|
+
supports_framerate_override: z.ZodBoolean;
|
|
265
|
+
default_resolution: z.ZodString;
|
|
266
|
+
default_framerate: z.ZodNumber;
|
|
267
|
+
}, z.core.$strip>>;
|
|
268
|
+
audio_live_switch: z.ZodOptional<z.ZodBoolean>;
|
|
269
|
+
}, z.core.$strip>;
|
|
270
|
+
export type GetCapabilitiesResult = z.infer<typeof getCapabilitiesResultSchema>;
|
|
193
271
|
/** The eight v1 control methods (the literal JSON-RPC `method` strings). */
|
|
194
272
|
export declare const V1_METHODS: readonly ["start", "stop", "reload-config", "set-bitrate", "switch-input", "list-devices", "subscribe-events", "preview-session"];
|
|
195
273
|
export type V1Method = (typeof V1_METHODS)[number];
|
|
@@ -268,6 +346,9 @@ export declare const requestSchemas: {
|
|
|
268
346
|
srt: z.ZodOptional<z.ZodObject<{
|
|
269
347
|
latency_ms: z.ZodOptional<z.ZodNumber>;
|
|
270
348
|
}, z.core.$strip>>;
|
|
349
|
+
audio: z.ZodOptional<z.ZodObject<{
|
|
350
|
+
delay_ms: z.ZodOptional<z.ZodNumber>;
|
|
351
|
+
}, z.core.$strip>>;
|
|
271
352
|
}, z.core.$strip>;
|
|
272
353
|
readonly result: z.ZodObject<{
|
|
273
354
|
applied: z.ZodObject<{
|
|
@@ -283,6 +364,9 @@ export declare const requestSchemas: {
|
|
|
283
364
|
srt: z.ZodOptional<z.ZodObject<{
|
|
284
365
|
latency_ms: z.ZodOptional<z.ZodNumber>;
|
|
285
366
|
}, z.core.$strip>>;
|
|
367
|
+
audio: z.ZodOptional<z.ZodObject<{
|
|
368
|
+
delay_ms: z.ZodOptional<z.ZodNumber>;
|
|
369
|
+
}, z.core.$strip>>;
|
|
286
370
|
}, z.core.$strip>;
|
|
287
371
|
}, z.core.$strip>;
|
|
288
372
|
};
|
|
@@ -332,6 +416,7 @@ export declare const requestSchemas: {
|
|
|
332
416
|
width: z.ZodOptional<z.ZodNumber>;
|
|
333
417
|
height: z.ZodOptional<z.ZodNumber>;
|
|
334
418
|
framerate: z.ZodOptional<z.ZodString>;
|
|
419
|
+
media_type: z.ZodOptional<z.ZodString>;
|
|
335
420
|
}, z.core.$strip>>>;
|
|
336
421
|
}, z.core.$strip>>;
|
|
337
422
|
}, z.core.$strip>;
|
package/dist/messages.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { AUDIO_DELAY_MAX_MS } from "./constants.js";
|
|
2
3
|
import { helloParamsSchema, helloResultSchema, } from "./envelope.js";
|
|
3
4
|
import { balancerAlgorithmSchema, captureDeviceSchema, cerastreamConfigSchema, inputModeSchema, mediaClassSchema, previewTierSchema, streamStateSchema, } from "./types.js";
|
|
4
5
|
// The eight v1 control methods (schema.md "v1 messages"). Each is matched
|
|
@@ -34,6 +35,11 @@ export const reloadConfigParamsSchema = z.object({
|
|
|
34
35
|
latency_ms: z.number().int().min(100).max(10_000).optional(),
|
|
35
36
|
})
|
|
36
37
|
.optional(),
|
|
38
|
+
audio: z
|
|
39
|
+
.object({
|
|
40
|
+
delay_ms: z.number().int().min(0).max(AUDIO_DELAY_MAX_MS).optional(),
|
|
41
|
+
})
|
|
42
|
+
.optional(),
|
|
37
43
|
});
|
|
38
44
|
export const reloadConfigResultSchema = z.object({
|
|
39
45
|
applied: reloadConfigParamsSchema, // post-clamp values actually applied
|
|
@@ -54,6 +60,18 @@ export const switchInputResultSchema = z.object({
|
|
|
54
60
|
active_input: z.string(),
|
|
55
61
|
mode: inputModeSchema,
|
|
56
62
|
});
|
|
63
|
+
// ---- 5b. switch-audio (additive; the audio mirror of switch-input) ----
|
|
64
|
+
// Drives the live audio fallbackswitch active-pad. Additive standalone schema
|
|
65
|
+
// (like get-capabilities): kept OUT of V1_METHODS / requestSchemas so the frozen
|
|
66
|
+
// eight-method contract count is unchanged. `mode` is optional (absent ⇒ manual).
|
|
67
|
+
export const switchAudioParamsSchema = z.object({
|
|
68
|
+
audio_input_id: z.string(), // audio device/input identifier from list-devices
|
|
69
|
+
mode: inputModeSchema.optional(),
|
|
70
|
+
});
|
|
71
|
+
export const switchAudioResultSchema = z.object({
|
|
72
|
+
active_audio_input: z.string(),
|
|
73
|
+
mode: inputModeSchema,
|
|
74
|
+
});
|
|
57
75
|
// ---- 6. list-devices ----
|
|
58
76
|
export const listDevicesParamsSchema = z
|
|
59
77
|
.object({
|
|
@@ -104,6 +122,37 @@ export const previewSessionResultSchema = z.object({
|
|
|
104
122
|
z.object({ kind: z.literal("webrtc"), sdp: z.string().optional() }),
|
|
105
123
|
]),
|
|
106
124
|
});
|
|
125
|
+
// ---- 9. get-capabilities ----
|
|
126
|
+
// Deliberately absent from V1_METHODS / requestSchemas: it is an additive
|
|
127
|
+
// standalone schema, so the frozen eight-method contract-count stays eight.
|
|
128
|
+
export const videoSourceCapSchema = z.object({
|
|
129
|
+
id: z.string(),
|
|
130
|
+
supports_audio: z.boolean(),
|
|
131
|
+
supports_resolution_override: z.boolean(),
|
|
132
|
+
supports_framerate_override: z.boolean(),
|
|
133
|
+
default_resolution: z.string(),
|
|
134
|
+
default_framerate: z.number().int(),
|
|
135
|
+
});
|
|
136
|
+
export const bitrateRangeCapsSchema = z.object({
|
|
137
|
+
min: z.number().int(),
|
|
138
|
+
max: z.number().int(),
|
|
139
|
+
unit: z.string(), // "bps" or "kbps"
|
|
140
|
+
});
|
|
141
|
+
export const encoderCapsSchema = z.object({
|
|
142
|
+
codecs: z.array(z.string()),
|
|
143
|
+
bitrate_range: bitrateRangeCapsSchema,
|
|
144
|
+
});
|
|
145
|
+
export const platformCapsSchema = z.object({
|
|
146
|
+
supports_h265: z.boolean(),
|
|
147
|
+
hardware_accelerated: z.boolean(),
|
|
148
|
+
max_resolution: z.string(),
|
|
149
|
+
});
|
|
150
|
+
export const getCapabilitiesResultSchema = z.object({
|
|
151
|
+
platform: platformCapsSchema,
|
|
152
|
+
encoder: encoderCapsSchema,
|
|
153
|
+
sources: z.array(videoSourceCapSchema),
|
|
154
|
+
audio_live_switch: z.boolean().optional(),
|
|
155
|
+
});
|
|
107
156
|
// ---- method registry (count-assertion source of truth) ----
|
|
108
157
|
/** The eight v1 control methods (the literal JSON-RPC `method` strings). */
|
|
109
158
|
export const V1_METHODS = [
|
package/dist/types.d.ts
CHANGED
|
@@ -85,6 +85,7 @@ export declare const captureCapSchema: z.ZodObject<{
|
|
|
85
85
|
width: z.ZodOptional<z.ZodNumber>;
|
|
86
86
|
height: z.ZodOptional<z.ZodNumber>;
|
|
87
87
|
framerate: z.ZodOptional<z.ZodString>;
|
|
88
|
+
media_type: z.ZodOptional<z.ZodString>;
|
|
88
89
|
}, z.core.$strip>;
|
|
89
90
|
export type CaptureCap = z.infer<typeof captureCapSchema>;
|
|
90
91
|
export declare const captureDeviceSchema: z.ZodObject<{
|
|
@@ -99,6 +100,7 @@ export declare const captureDeviceSchema: z.ZodObject<{
|
|
|
99
100
|
width: z.ZodOptional<z.ZodNumber>;
|
|
100
101
|
height: z.ZodOptional<z.ZodNumber>;
|
|
101
102
|
framerate: z.ZodOptional<z.ZodString>;
|
|
103
|
+
media_type: z.ZodOptional<z.ZodString>;
|
|
102
104
|
}, z.core.$strip>>>;
|
|
103
105
|
}, z.core.$strip>;
|
|
104
106
|
export type CaptureDevice = z.infer<typeof captureDeviceSchema>;
|
package/dist/types.js
CHANGED
|
@@ -53,6 +53,7 @@ export const captureCapSchema = z.object({
|
|
|
53
53
|
width: z.number().int().optional(),
|
|
54
54
|
height: z.number().int().optional(),
|
|
55
55
|
framerate: z.string().optional(), // e.g. "30/1"
|
|
56
|
+
media_type: z.string().optional(), // e.g. "video/x-h265"; additive, absent on legacy producers
|
|
56
57
|
});
|
|
57
58
|
export const captureDeviceSchema = z.object({
|
|
58
59
|
input_id: z.string(), // stable id used by switch-input
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ceralive/cerastream",
|
|
3
|
-
"version": "2026.6.
|
|
3
|
+
"version": "2026.6.2",
|
|
4
4
|
"description": "Type-safe TypeScript schema + IPC client for the cerastream streaming engine (JSON-RPC 2.0 / NDJSON over a Unix domain socket).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|