@norskvideo/norsk-studio-alpha 1.27.0-2026-01-10-23683704 → 1.27.0-2026-01-14-d7f304fc

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.
@@ -0,0 +1,504 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const norsk_sdk_1 = require("@norskvideo/norsk-sdk");
40
+ const builder_1 = require("@norskvideo/norsk-studio/lib/test/_util/builder");
41
+ const document = __importStar(require("@norskvideo/norsk-studio/lib/runtime/document"));
42
+ const yaml_1 = __importDefault(require("yaml"));
43
+ const execution_1 = __importDefault(require("@norskvideo/norsk-studio/lib/runtime/execution"));
44
+ const sinks_1 = require("@norskvideo/norsk-studio/lib/test/_util/sinks");
45
+ const info_1 = __importDefault(require("../processor.hardSourceSwitch/info"));
46
+ const chai_1 = require("chai");
47
+ const runtime_1 = require("@norskvideo/norsk-studio/lib/test/_util/runtime");
48
+ const session_1 = __importDefault(require("@norskvideo/norsk-studio/lib/client/session"));
49
+ const client_types_1 = require("@norskvideo/norsk-studio/lib/extension/client-types");
50
+ const document_1 = require("@norskvideo/norsk-studio/lib/shared/document");
51
+ const __1 = __importDefault(require(".."));
52
+ const path_1 = __importDefault(require("path"));
53
+ const promises_1 = __importDefault(require("fs/promises"));
54
+ const config_1 = __importDefault(require("@norskvideo/norsk-studio/lib/server/config"));
55
+ const HardSourceInfo = (0, info_1.default)(client_types_1.RegistrationConsts);
56
+ async function setupTestMp4() {
57
+ const sourceMp4 = path_1.default.resolve(__dirname, '../../../built-ins/data/TraditionalMusic.mp4');
58
+ const dataDir = config_1.default.server.dataDirectory();
59
+ const testMp4Name = 'hard-switch-test.mp4';
60
+ const destMp4 = path_1.default.join(dataDir, testMp4Name);
61
+ try {
62
+ await promises_1.default.access(destMp4);
63
+ }
64
+ catch {
65
+ await promises_1.default.copyFile(sourceMp4, destMp4);
66
+ }
67
+ return testMp4Name;
68
+ }
69
+ async function cleanupTestMp4() {
70
+ const dataDir = config_1.default.server.dataDirectory();
71
+ const testMp4 = path_1.default.join(dataDir, 'hard-switch-test.mp4');
72
+ try {
73
+ await promises_1.default.unlink(testMp4);
74
+ }
75
+ catch {
76
+ }
77
+ }
78
+ async function createRuntime() {
79
+ const runtime = await (0, runtime_1.testRuntime)();
80
+ await (0, __1.default)(runtime);
81
+ return runtime;
82
+ }
83
+ async function createLibrary() {
84
+ const runtime = await createRuntime();
85
+ return (0, runtime_1.extractLibraryFromRuntime)(runtime);
86
+ }
87
+ describe("Hard Source Switch", () => {
88
+ describe("Design time", () => {
89
+ const yaml = new builder_1.YamlBuilder().reify();
90
+ let session = undefined;
91
+ const initialConfig = {
92
+ id: "switch",
93
+ displayName: "Switch",
94
+ outputSource: "output",
95
+ maxQueueMs: 1000,
96
+ failoverTimeoutMs: 2000,
97
+ sourcePriority: []
98
+ };
99
+ function getSwitch() {
100
+ return session?.description.findNode(initialConfig.id);
101
+ }
102
+ beforeEach(async () => {
103
+ const library = await createLibrary();
104
+ session = new session_1.default(library, new document_1.DocumentDescription(library, yaml), {});
105
+ session.addNode(HardSourceInfo.identifier);
106
+ session.finishEditingNode("", { config: initialConfig });
107
+ });
108
+ describe("Adding the first source", () => {
109
+ beforeEach(async () => {
110
+ const source = session.addNode(runtime_1.AvInput.info.identifier);
111
+ session?.finishEditingNode("", { config: { id: 'source1', sourceName: true } });
112
+ session?.addSubscription(source, getSwitch());
113
+ });
114
+ it("Accepts the source subscription", () => {
115
+ const switchNode = getSwitch();
116
+ void (0, chai_1.expect)(switchNode).to.not.be.undefined;
117
+ });
118
+ });
119
+ describe("Adding two sources", () => {
120
+ beforeEach(async () => {
121
+ const source1 = session.addNode(runtime_1.AvInput.info.identifier);
122
+ session.finishEditingNode("", { config: { id: 'source1', sourceName: true } });
123
+ const source2 = session.addNode(runtime_1.AvInput.info.identifier);
124
+ session.finishEditingNode("", { config: { id: 'source2', sourceName: true } });
125
+ session.addSubscription(source1, getSwitch());
126
+ session.addSubscription(source2, getSwitch());
127
+ });
128
+ it("Accepts both sources", () => {
129
+ const switchNode = getSwitch();
130
+ void (0, chai_1.expect)(switchNode).to.not.be.undefined;
131
+ });
132
+ });
133
+ describe("Removing a source", () => {
134
+ beforeEach(async () => {
135
+ const source1 = session.addNode(runtime_1.AvInput.info.identifier);
136
+ session.finishEditingNode("", { config: { id: 'source1', sourceName: true } });
137
+ const source2 = session.addNode(runtime_1.AvInput.info.identifier);
138
+ session.finishEditingNode("", { config: { id: 'source2', sourceName: true } });
139
+ session.addSubscription(source1, getSwitch());
140
+ session.addSubscription(source2, getSwitch());
141
+ session.removeSubscription(source1.id, getSwitch().id);
142
+ });
143
+ it("Removes the source from subscriptions", () => {
144
+ const switchNode = getSwitch();
145
+ void (0, chai_1.expect)(switchNode).to.not.be.undefined;
146
+ });
147
+ });
148
+ describe("Source is renamed", () => {
149
+ beforeEach(async () => {
150
+ const source1 = session.addNode(runtime_1.AvInput.info.identifier);
151
+ session.finishEditingNode("", { config: { id: 'source1', sourceName: true } });
152
+ const source2 = session.addNode(runtime_1.AvInput.info.identifier);
153
+ session.finishEditingNode("", { config: { id: 'source2', sourceName: true } });
154
+ session.addSubscription(source1, getSwitch());
155
+ session.addSubscription(source2, getSwitch());
156
+ const testConfig = { ...source1.config };
157
+ testConfig.id = 'renamed';
158
+ session.finishEditingNode("source1", { config: testConfig });
159
+ });
160
+ it("Re-adds the source with new name", () => {
161
+ const switchNode = getSwitch();
162
+ void (0, chai_1.expect)(switchNode).to.not.be.undefined;
163
+ });
164
+ });
165
+ describe("Source is deleted", () => {
166
+ beforeEach(async () => {
167
+ const source1 = session.addNode(runtime_1.AvInput.info.identifier);
168
+ session.finishEditingNode("", { config: { id: 'source1', sourceName: true } });
169
+ const source2 = session.addNode(runtime_1.AvInput.info.identifier);
170
+ session.finishEditingNode("", { config: { id: 'source2', sourceName: true } });
171
+ const source3 = session.addNode(runtime_1.AvInput.info.identifier);
172
+ session.finishEditingNode("", { config: { id: 'source3', sourceName: true } });
173
+ session.addSubscription(source1, getSwitch());
174
+ session.addSubscription(source2, getSwitch());
175
+ session.addSubscription(source3, getSwitch());
176
+ session.removeNode("source2");
177
+ });
178
+ it("Removes the source", () => {
179
+ const switchNode = getSwitch();
180
+ void (0, chai_1.expect)(switchNode).to.not.be.undefined;
181
+ });
182
+ });
183
+ });
184
+ const config = {
185
+ id: 'switch',
186
+ displayName: 'Hard Switch',
187
+ outputSource: 'output',
188
+ maxQueueMs: 1000,
189
+ failoverTimeoutMs: 2000,
190
+ sourcePriority: []
191
+ };
192
+ describe("Runtime", () => {
193
+ async function testDocument(cb) {
194
+ const runtime = await createRuntime();
195
+ const yaml = new builder_1.YamlBuilder();
196
+ const hs = new builder_1.YamlNodeBuilder('switch', HardSourceInfo, config);
197
+ yaml.addNode((new builder_1.YamlNodeBuilder('primary', runtime_1.AvInput.info, { sourceName: true })).reify());
198
+ yaml.addNode((new builder_1.YamlNodeBuilder('backup', runtime_1.AvInput.info, { sourceName: true })).reify());
199
+ hs.subscribe("primary", ["video", "audio"]);
200
+ hs.subscribe("backup", ["video", "audio"]);
201
+ cb?.(yaml, hs);
202
+ yaml.addNode(hs.reify());
203
+ const compiled = document.load(__filename, runtime, yaml_1.default.stringify(yaml.reify()));
204
+ return compiled;
205
+ }
206
+ let norsk = undefined;
207
+ let result = undefined;
208
+ afterEach(async () => {
209
+ const switcher = result?.components['switch'];
210
+ await switcher?.close();
211
+ await norsk?.close();
212
+ await new Promise((r) => {
213
+ setTimeout(() => {
214
+ r();
215
+ }, 100.0);
216
+ });
217
+ norsk = undefined;
218
+ result = undefined;
219
+ });
220
+ const latestState = () => {
221
+ return result?.runtimeState.getNodeState('switch');
222
+ };
223
+ describe("No active inputs", () => {
224
+ it("Should wait for sources to become available", async () => {
225
+ const compiled = await testDocument();
226
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
227
+ result = await (0, execution_1.default)(norsk, compiled);
228
+ const switcher = result.components['switch'];
229
+ const primary = result.components['primary'];
230
+ const backup = result.components['backup'];
231
+ await primary.close();
232
+ await backup.close();
233
+ await new Promise(resolve => setTimeout(resolve, 500));
234
+ void (0, chai_1.expect)(switcher.activeSource).to.be.oneOf(['', 'primary', 'backup']);
235
+ });
236
+ });
237
+ describe("Primary source is active only", () => {
238
+ it("Should output A/V from the primary source", async () => {
239
+ const compiled = await testDocument();
240
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
241
+ result = await (0, execution_1.default)(norsk, compiled);
242
+ const switcher = result.components['switch'];
243
+ const backup = result.components['backup'];
244
+ await backup.close();
245
+ await Promise.all([
246
+ (0, sinks_1.assertNodeOutputsAudioFrames)(norsk, result, 'switch'),
247
+ (0, sinks_1.assertNodeOutputsVideoFrames)(norsk, result, 'switch'),
248
+ (0, sinks_1.waitForAssert)(() => switcher.activeSource == 'primary', () => { (0, chai_1.expect)(switcher.activeSource).equals('primary'); }, 10000.0, 10.0),
249
+ (0, sinks_1.waitForAssert)(() => (latestState())?.activeSource == 'primary', () => { (0, chai_1.expect)(latestState()?.activeSource).equals('primary'); }, 10000.0, 10.0)
250
+ ]);
251
+ });
252
+ });
253
+ describe("Backup source is active only", () => {
254
+ it("Should output A/V from the backup source", async () => {
255
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
256
+ const compiled = await testDocument();
257
+ result = await (0, execution_1.default)(norsk, compiled);
258
+ const switcher = result.components['switch'];
259
+ const primary = result.components['primary'];
260
+ await primary.close();
261
+ await Promise.all([
262
+ (0, sinks_1.assertNodeOutputsAudioFrames)(norsk, result, 'switch'),
263
+ (0, sinks_1.assertNodeOutputsVideoFrames)(norsk, result, 'switch'),
264
+ (0, sinks_1.waitForAssert)(() => switcher.activeSource == 'backup', () => { (0, chai_1.expect)(switcher.activeSource).equals('backup'); }, 10000.0, 10.0),
265
+ (0, sinks_1.waitForAssert)(() => (latestState())?.activeSource == 'backup', () => { (0, chai_1.expect)(latestState()?.activeSource).equals('backup'); }, 10000.0, 10.0)
266
+ ]);
267
+ });
268
+ });
269
+ describe("Primary and backup sources are active", () => {
270
+ it("Should output A/V from the first available source (primary)", async () => {
271
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
272
+ const compiled = await testDocument();
273
+ result = await (0, execution_1.default)(norsk, compiled);
274
+ const switcher = result.components['switch'];
275
+ await Promise.all([
276
+ (0, sinks_1.assertNodeOutputsAudioFrames)(norsk, result, 'switch'),
277
+ (0, sinks_1.assertNodeOutputsVideoFrames)(norsk, result, 'switch'),
278
+ (0, sinks_1.waitForAssert)(() => switcher.activeSource == 'primary', () => { (0, chai_1.expect)(switcher.activeSource).equals('primary'); }, 10000.0, 10.0)
279
+ ]);
280
+ });
281
+ });
282
+ });
283
+ describe("MP4 Fallback Runtime", () => {
284
+ let norsk;
285
+ let result;
286
+ after(async () => {
287
+ await cleanupTestMp4();
288
+ });
289
+ afterEach(async () => {
290
+ const switcher = result?.components['switch'];
291
+ await switcher?.close();
292
+ await norsk?.close();
293
+ await new Promise((r) => {
294
+ setTimeout(() => {
295
+ r();
296
+ }, 100.0);
297
+ });
298
+ norsk = undefined;
299
+ result = undefined;
300
+ });
301
+ async function testDocumentWithMp4(mp4FilePath, cb) {
302
+ const runtime = await createRuntime();
303
+ const configWithMp4 = {
304
+ ...config,
305
+ fallbackFilePath: mp4FilePath
306
+ };
307
+ const yaml = new builder_1.YamlBuilder();
308
+ const hs = new builder_1.YamlNodeBuilder('switch', HardSourceInfo, configWithMp4);
309
+ yaml.addNode((new builder_1.YamlNodeBuilder('primary', runtime_1.AvInput.info, { sourceName: true })).reify());
310
+ yaml.addNode((new builder_1.YamlNodeBuilder('backup', runtime_1.AvInput.info, { sourceName: true })).reify());
311
+ hs.subscribe("primary", ["video", "audio"]);
312
+ hs.subscribe("backup", ["video", "audio"]);
313
+ cb?.(yaml, hs);
314
+ yaml.addNode(hs.reify());
315
+ const compiled = document.load(__filename, runtime, yaml_1.default.stringify(yaml.reify()));
316
+ return compiled;
317
+ }
318
+ describe("No active inputs with MP4 fallback", () => {
319
+ it("Should output A/V from the MP4 fallback source", async () => {
320
+ const testMp4Path = await setupTestMp4();
321
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
322
+ const compiled = await testDocumentWithMp4(testMp4Path);
323
+ result = await (0, execution_1.default)(norsk, compiled);
324
+ const switcher = result.components['switch'];
325
+ const primary = result.components['primary'];
326
+ const backup = result.components['backup'];
327
+ await new Promise(resolve => setTimeout(resolve, 500));
328
+ await primary.close();
329
+ await backup.close();
330
+ await new Promise(resolve => setTimeout(resolve, 4000));
331
+ await Promise.all([
332
+ (0, sinks_1.assertNodeOutputsAudioFrames)(norsk, result, 'switch'),
333
+ (0, sinks_1.assertNodeOutputsVideoFrames)(norsk, result, 'switch'),
334
+ (0, sinks_1.waitForAssert)(() => switcher.activeSource == 'fallback', () => { (0, chai_1.expect)(switcher.activeSource).equals('fallback'); }, 5000.0, 100.0)
335
+ ]);
336
+ });
337
+ });
338
+ describe("Switch from MP4 fallback to primary source", () => {
339
+ it("Should switch to primary when source becomes available", async () => {
340
+ const testMp4Path = await setupTestMp4();
341
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
342
+ const compiled = await testDocumentWithMp4(testMp4Path);
343
+ result = await (0, execution_1.default)(norsk, compiled);
344
+ const switcher = result.components['switch'];
345
+ const primary = result.components['primary'];
346
+ const backup = result.components['backup'];
347
+ await new Promise(resolve => setTimeout(resolve, 500));
348
+ await primary.close();
349
+ await backup.close();
350
+ await new Promise(resolve => setTimeout(resolve, 4000));
351
+ await (0, sinks_1.waitForAssert)(() => switcher.activeSource == 'fallback', () => { (0, chai_1.expect)(switcher.activeSource).equals('fallback'); }, 5000.0, 100.0);
352
+ await Promise.all([
353
+ (0, sinks_1.assertNodeOutputsAudioFrames)(norsk, result, 'switch'),
354
+ (0, sinks_1.assertNodeOutputsVideoFrames)(norsk, result, 'switch')
355
+ ]);
356
+ void (0, chai_1.expect)(switcher.mp4).to.not.be.undefined;
357
+ });
358
+ });
359
+ describe("MP4 fallback configuration", () => {
360
+ it("Should create MP4 input node when fallbackFilePath is configured", async () => {
361
+ const testMp4Path = await setupTestMp4();
362
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
363
+ const compiled = await testDocumentWithMp4(testMp4Path);
364
+ result = await (0, execution_1.default)(norsk, compiled);
365
+ const switcher = result.components['switch'];
366
+ void (0, chai_1.expect)(switcher.mp4).to.not.be.undefined;
367
+ });
368
+ });
369
+ });
370
+ describe("Commands", () => {
371
+ async function testDocument() {
372
+ const runtime = await createRuntime();
373
+ const yaml = new builder_1.YamlBuilder();
374
+ const hs = new builder_1.YamlNodeBuilder('switch', HardSourceInfo, config);
375
+ yaml.addNode((new builder_1.YamlNodeBuilder('primary', runtime_1.AvInput.info, { sourceName: true })).reify());
376
+ yaml.addNode((new builder_1.YamlNodeBuilder('backup', runtime_1.AvInput.info, { sourceName: true })).reify());
377
+ hs.subscribe("primary", ["video", "audio"]);
378
+ hs.subscribe("backup", ["video", "audio"]);
379
+ yaml.addNode(hs.reify());
380
+ const compiled = document.load(__filename, runtime, yaml_1.default.stringify(yaml.reify()));
381
+ return compiled;
382
+ }
383
+ let norsk = undefined;
384
+ let result = undefined;
385
+ afterEach(async () => {
386
+ await norsk?.close();
387
+ norsk = undefined;
388
+ result = undefined;
389
+ });
390
+ const latestState = () => {
391
+ return result?.runtimeState.getNodeState('switch');
392
+ };
393
+ const sendCommand = async (cmd) => {
394
+ const switcher = result?.components['switch'];
395
+ if (switcher) {
396
+ if (cmd.type === 'set-priority-order') {
397
+ switcher.setPriorityOrder(cmd.sources);
398
+ }
399
+ else if (cmd.type === 'switch-to-source') {
400
+ await switcher.switchToSource(cmd.source);
401
+ }
402
+ }
403
+ };
404
+ describe("set-priority-order command", () => {
405
+ it("Should update the priority order", async () => {
406
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
407
+ const compiled = await testDocument();
408
+ result = await (0, execution_1.default)(norsk, compiled);
409
+ const switcher = result.components['switch'];
410
+ await (0, sinks_1.waitForAssert)(() => switcher.activeSource == 'primary', () => { (0, chai_1.expect)(switcher.activeSource).equals('primary'); }, 10000.0, 10.0);
411
+ await sendCommand({
412
+ type: 'set-priority-order',
413
+ sources: ['backup', 'primary']
414
+ });
415
+ await (0, sinks_1.waitForAssert)(() => latestState()?.sourcePriority?.length === 2, () => {
416
+ const state = latestState();
417
+ void (0, chai_1.expect)(state?.sourcePriority).deep.equals(['backup', 'primary']);
418
+ }, 5000.0, 10.0);
419
+ });
420
+ });
421
+ describe("switch-to-source command", () => {
422
+ it("Should switch to specified source when available", async () => {
423
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
424
+ const compiled = await testDocument();
425
+ result = await (0, execution_1.default)(norsk, compiled);
426
+ const switcher = result.components['switch'];
427
+ await (0, sinks_1.waitForAssert)(() => switcher.availableSourceNames.length == 2 && switcher.activeSource === 'primary', () => {
428
+ void (0, chai_1.expect)(switcher.availableSourceNames).to.have.members(['primary', 'backup']);
429
+ void (0, chai_1.expect)(switcher.activeSource).equals('primary');
430
+ }, 10000.0, 10.0);
431
+ await sendCommand({
432
+ type: 'switch-to-source',
433
+ source: 'backup'
434
+ });
435
+ await (0, sinks_1.waitForAssert)(() => latestState()?.activeSource === 'backup', () => {
436
+ void (0, chai_1.expect)(latestState()?.activeSource).equals('backup');
437
+ void (0, chai_1.expect)(switcher.activeSource).equals('backup');
438
+ }, 5000.0, 10.0);
439
+ await sendCommand({
440
+ type: 'switch-to-source',
441
+ source: 'primary'
442
+ });
443
+ await (0, sinks_1.waitForAssert)(() => latestState()?.activeSource === 'primary', () => {
444
+ void (0, chai_1.expect)(latestState()?.activeSource).equals('primary');
445
+ void (0, chai_1.expect)(switcher.activeSource).equals('primary');
446
+ }, 5000.0, 10.0);
447
+ });
448
+ it("Should return error result when switching to already active source", async () => {
449
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
450
+ const compiled = await testDocument();
451
+ result = await (0, execution_1.default)(norsk, compiled);
452
+ const switcher = result.components['switch'];
453
+ await (0, sinks_1.waitForAssert)(() => switcher.activeSource === 'primary', () => { (0, chai_1.expect)(switcher.activeSource).equals('primary'); }, 10000.0, 10.0);
454
+ const commandResult = await switcher.switchToSource('primary');
455
+ void (0, chai_1.expect)(commandResult.status).to.equal('error');
456
+ if (commandResult.status === 'error') {
457
+ void (0, chai_1.expect)(commandResult.error).to.contain('already active');
458
+ }
459
+ });
460
+ });
461
+ });
462
+ describe("Manual switch priority promotion", () => {
463
+ async function testDocument() {
464
+ const runtime = await createRuntime();
465
+ const yaml = new builder_1.YamlBuilder();
466
+ const hs = new builder_1.YamlNodeBuilder('switch', HardSourceInfo, config);
467
+ yaml.addNode((new builder_1.YamlNodeBuilder('primary', runtime_1.AvInput.info, { sourceName: true })).reify());
468
+ yaml.addNode((new builder_1.YamlNodeBuilder('backup', runtime_1.AvInput.info, { sourceName: true })).reify());
469
+ hs.subscribe("primary", ["video", "audio"]);
470
+ hs.subscribe("backup", ["video", "audio"]);
471
+ yaml.addNode(hs.reify());
472
+ const compiled = document.load(__filename, runtime, yaml_1.default.stringify(yaml.reify()));
473
+ return compiled;
474
+ }
475
+ let norsk = undefined;
476
+ let result = undefined;
477
+ afterEach(async () => {
478
+ await norsk?.close();
479
+ norsk = undefined;
480
+ result = undefined;
481
+ });
482
+ const latestState = () => {
483
+ return result?.runtimeState.getNodeState('switch');
484
+ };
485
+ it("Should promote manually selected source to top priority", async () => {
486
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
487
+ const compiled = await testDocument();
488
+ result = await (0, execution_1.default)(norsk, compiled);
489
+ const switcher = result.components['switch'];
490
+ await (0, sinks_1.waitForAssert)(() => switcher.availableSourceNames.length == 2, () => {
491
+ void (0, chai_1.expect)(switcher.availableSourceNames).to.have.members(['primary', 'backup']);
492
+ }, 10000.0, 10.0);
493
+ void (0, chai_1.expect)(switcher.sourcePriority[0]).equals('primary');
494
+ await switcher.switchToSource('backup');
495
+ await (0, sinks_1.waitForAssert)(() => switcher.activeSource === 'backup', () => { (0, chai_1.expect)(switcher.activeSource).equals('backup'); }, 5000.0, 10.0);
496
+ await (0, sinks_1.waitForAssert)(() => latestState()?.sourcePriority?.[0] === 'backup', () => {
497
+ const state = latestState();
498
+ void (0, chai_1.expect)(state?.sourcePriority?.[0]).equals('backup');
499
+ void (0, chai_1.expect)(state?.sourcePriority?.[1]).equals('primary');
500
+ }, 5000.0, 10.0);
501
+ });
502
+ });
503
+ });
504
+ //# sourceMappingURL=hard-source-switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hard-source-switch.js","sourceRoot":"","sources":["../../../src/test/hard-source-switch.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norskvideo/norsk-studio-alpha",
3
- "version": "1.27.0-2026-01-10-23683704",
3
+ "version": "1.27.0-2026-01-14-d7f304fc",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "clean": "rm -rf lib client build .wireit && make clean",
@@ -13,7 +13,7 @@
13
13
  "build:types": "wireit",
14
14
  "build:tailwind": "wireit",
15
15
  "lint": "wireit",
16
- "test": "LOG_LEVEL=error mocha --no-parallel --jobs=0 --timeout 120000 --recursive lib/test",
16
+ "test": "LOG_LEVEL=error mocha --no-parallel --jobs=0 --timeout 120000 --exit --recursive lib/test",
17
17
  "build:no-lint": "wireit"
18
18
  },
19
19
  "wireit": {
@@ -164,9 +164,9 @@
164
164
  "@apidevtools/json-schema-ref-parser": "^12.0.1",
165
165
  "@norskvideo/norsk-player": "^1.0.4",
166
166
  "@norskvideo/norsk-player-react": "*",
167
- "@norskvideo/norsk-sdk": "^1.0.402-2026-01-10-a65137ac",
168
- "@norskvideo/norsk-studio": "1.27.0-2026-01-10-23683704",
169
- "@norskvideo/norsk-studio-built-ins": "1.27.0-2026-01-10-23683704",
167
+ "@norskvideo/norsk-sdk": "^1.0.402-2026-01-14-bf6be668",
168
+ "@norskvideo/norsk-studio": "1.27.0-2026-01-14-d7f304fc",
169
+ "@norskvideo/norsk-studio-built-ins": "1.27.0-2026-01-14-d7f304fc",
170
170
  "@norskvideo/webrtc-client": "^0.1.2",
171
171
  "@react-icons/all-files": "^4.1.0",
172
172
  "chart.js": "^4.4.2",