@norskvideo/norsk-studio 1.27.0-2025-04-09-a7944f8c → 1.27.0-2025-04-10-614c23ec

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,380 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const chai_1 = require("chai");
7
+ const puppeteer_1 = __importDefault(require("puppeteer"));
8
+ const manual_driver_1 = require("./_util/manual-driver");
9
+ const server_1 = require("./_util/server");
10
+ const runtime_1 = require("./_util/runtime");
11
+ describe("Connection Editor Tests", () => {
12
+ let browser = undefined;
13
+ let server = undefined;
14
+ let driver = undefined;
15
+ beforeEach(async () => {
16
+ server = await (0, server_1.spinTestServer)();
17
+ browser = await puppeteer_1.default.launch({
18
+ headless: 'new',
19
+ executablePath: process.env.BROWSER_FOR_TESTING ? process.env.BROWSER_FOR_TESTING : undefined,
20
+ args: ['--no-sandbox', '--disable-setuid-sandbox']
21
+ });
22
+ if (browser) {
23
+ driver = new manual_driver_1.ManualDriver(browser);
24
+ await driver.reset();
25
+ }
26
+ });
27
+ afterEach(async () => {
28
+ if (server)
29
+ await (0, server_1.killTestServer)(server);
30
+ await browser?.close();
31
+ browser = undefined;
32
+ });
33
+ describe("Basic Media Selection", () => {
34
+ describe("Audio+Video source to Audio+Video destination", () => {
35
+ beforeEach(async () => {
36
+ await driver?.addNode(runtime_1.AvInput.info, "source", {});
37
+ await driver?.addNode(runtime_1.AvOutput.info, "dest", {});
38
+ });
39
+ it("shows both audio and video options enabled in the editor", async () => {
40
+ await driver?.openSubscriptionEditor("source", "dest");
41
+ const mediaStatus = await driver?.getMediaSelectionStatus();
42
+ (0, chai_1.expect)(mediaStatus?.audio.enabled).to.be.true;
43
+ (0, chai_1.expect)(mediaStatus?.video.enabled).to.be.true;
44
+ (0, chai_1.expect)(mediaStatus?.audio.checked).to.be.true;
45
+ (0, chai_1.expect)(mediaStatus?.video.checked).to.be.true;
46
+ });
47
+ it("can toggle media types", async () => {
48
+ await driver?.openSubscriptionEditor("source", "dest");
49
+ await driver?.toggleMediaType("video", false);
50
+ const mediaStatus = await driver?.getMediaSelectionStatus();
51
+ (0, chai_1.expect)(mediaStatus?.audio.checked).to.be.true;
52
+ (0, chai_1.expect)(mediaStatus?.video.checked).to.be.false;
53
+ });
54
+ it("saves changes when clicking save button", async () => {
55
+ await driver?.openSubscriptionEditor("source", "dest");
56
+ await driver?.toggleMediaType("video", false);
57
+ await driver?.saveConnectionEditor();
58
+ await driver?.openSubscriptionEditor("source", "dest");
59
+ const mediaStatus = await driver?.getMediaSelectionStatus();
60
+ (0, chai_1.expect)(mediaStatus?.audio.checked).to.be.true;
61
+ (0, chai_1.expect)(mediaStatus?.video.checked).to.be.false;
62
+ });
63
+ it("discards changes when clicking cancel button", async () => {
64
+ await driver?.openSubscriptionEditor("source", "dest");
65
+ await driver?.toggleMediaType("video", false);
66
+ await driver?.cancelConnectionEditor();
67
+ await driver?.openSubscriptionEditor("source", "dest");
68
+ const mediaStatus = await driver?.getMediaSelectionStatus();
69
+ (0, chai_1.expect)(mediaStatus?.audio.checked).to.be.true;
70
+ (0, chai_1.expect)(mediaStatus?.video.checked).to.be.true;
71
+ });
72
+ it("handles multi-select operations", async () => {
73
+ await driver?.openSubscriptionEditor("source", "dest");
74
+ await driver?.toggleMediaType("video", false);
75
+ await driver?.toggleMediaType("audio", false);
76
+ let mediaStatus = await driver?.getMediaSelectionStatus();
77
+ (0, chai_1.expect)(mediaStatus?.audio.checked).to.be.false;
78
+ (0, chai_1.expect)(mediaStatus?.video.checked).to.be.false;
79
+ await driver?.toggleMediaType("video", true);
80
+ await driver?.toggleMediaType("audio", true);
81
+ mediaStatus = await driver?.getMediaSelectionStatus();
82
+ (0, chai_1.expect)(mediaStatus?.audio.checked).to.be.true;
83
+ (0, chai_1.expect)(mediaStatus?.video.checked).to.be.true;
84
+ await driver?.saveConnectionEditor();
85
+ await driver?.openSubscriptionEditor("source", "dest");
86
+ mediaStatus = await driver?.getMediaSelectionStatus();
87
+ (0, chai_1.expect)(mediaStatus?.audio.checked).to.be.true;
88
+ (0, chai_1.expect)(mediaStatus?.video.checked).to.be.true;
89
+ });
90
+ });
91
+ describe("Audio+Video source to Audio-only destination", () => {
92
+ beforeEach(async () => {
93
+ await driver?.addNode(runtime_1.AvInput.info, "source", {});
94
+ await driver?.addNode(runtime_1.AudioOutput.info, "dest", {});
95
+ });
96
+ it("shows only audio enabled in the editor", async () => {
97
+ await driver?.openSubscriptionEditor("source", "dest");
98
+ const mediaStatus = await driver?.getMediaSelectionStatus();
99
+ (0, chai_1.expect)(mediaStatus?.audio.enabled).to.be.true;
100
+ if (mediaStatus?.video) {
101
+ (0, chai_1.expect)(mediaStatus.video.enabled).to.be.false;
102
+ }
103
+ (0, chai_1.expect)(mediaStatus?.audio.checked).to.be.true;
104
+ });
105
+ });
106
+ describe("Audio-only source to Audio+Video destination", () => {
107
+ beforeEach(async () => {
108
+ await driver?.addNode(runtime_1.AudioInput.info, "source", {});
109
+ await driver?.addNode(runtime_1.AvOutput.info, "dest", {});
110
+ });
111
+ it("shows only audio in the editor", async () => {
112
+ await driver?.openSubscriptionEditor("source", "dest");
113
+ const mediaStatus = await driver?.getMediaSelectionStatus();
114
+ (0, chai_1.expect)(mediaStatus?.audio.enabled).to.be.true;
115
+ (0, chai_1.expect)(mediaStatus?.audio.checked).to.be.true;
116
+ (0, chai_1.expect)(Object.keys(mediaStatus || {}).includes('video')).to.be.false;
117
+ });
118
+ });
119
+ });
120
+ describe("Multiple Streams Selection", () => {
121
+ beforeEach(async () => {
122
+ await driver?.addNode(runtime_1.AvMultiInput.info, "source", {
123
+ streamDefinitions: [
124
+ { media: "video", sourceName: "Camera1" },
125
+ { media: "audio", sourceName: "Camera1" },
126
+ { media: "video", sourceName: "Camera2" },
127
+ { media: "audio", sourceName: "Camera2" },
128
+ { media: "video", sourceName: "Camera3" },
129
+ { media: "audio", sourceName: "Camera3" }
130
+ ]
131
+ });
132
+ await driver?.addNode(runtime_1.AvProcessor.info, "dest", {});
133
+ });
134
+ it("allows selecting specific streams when in take-specific-streams mode", async () => {
135
+ await driver?.openSubscriptionEditor("source", "dest");
136
+ await driver?.selectStrategy('Specified Streams Only');
137
+ await new Promise((r) => {
138
+ setTimeout(() => {
139
+ r();
140
+ }, 1000.0);
141
+ });
142
+ await driver?.page?.waitForSelector('[data-testid="stream-selection-fieldset"]', { timeout: 1000 }).catch(() => { });
143
+ await new Promise((r) => {
144
+ setTimeout(() => {
145
+ r();
146
+ }, 1000.0);
147
+ });
148
+ const streamSelection = await driver?.getStreamSelectionStatus();
149
+ const streamKeys = Object.keys(streamSelection || {});
150
+ (0, chai_1.expect)(streamKeys.length).to.be.greaterThan(0);
151
+ const videoStreams = streamKeys.filter(key => key.includes('video'));
152
+ (0, chai_1.expect)(videoStreams.length).to.be.greaterThan(0);
153
+ if (videoStreams.length > 0) {
154
+ const firstVideoStreamKey = videoStreams[0];
155
+ await driver?.click(`[data-testid^="stream-switch-${firstVideoStreamKey}"]`);
156
+ const updatedStreamSelection = await driver?.getStreamSelectionStatus();
157
+ (0, chai_1.expect)(updatedStreamSelection?.[firstVideoStreamKey].checked).to.be.false;
158
+ await driver?.saveConnectionEditor();
159
+ await driver?.openSubscriptionEditor("source", "dest");
160
+ await driver?.selectStrategy('Specified Streams Only');
161
+ await driver?.page?.waitForSelector('[data-testid="stream-selection-fieldset"]', { timeout: 1000 }).catch(() => { });
162
+ const finalStreamSelection = await driver?.getStreamSelectionStatus();
163
+ (0, chai_1.expect)(finalStreamSelection?.[firstVideoStreamKey].checked).to.be.false;
164
+ }
165
+ });
166
+ it("maintains appropriate settings when switching between strategies", async () => {
167
+ await driver?.openSubscriptionEditor("source", "dest");
168
+ const hasMultipleStrategies = await driver?.page?.evaluate(() => {
169
+ return document.querySelectorAll('[data-testid^="strategy-option-"]').length > 1;
170
+ });
171
+ if (!hasMultipleStrategies) {
172
+ return;
173
+ }
174
+ await driver?.selectStrategy('First Found');
175
+ await driver?.toggleMediaType("audio", false);
176
+ await driver?.selectStrategy('Specified Streams Only');
177
+ await driver?.page?.waitForSelector('[data-testid="stream-selection-fieldset"]', { timeout: 1000 }).catch(() => { });
178
+ let streamSelection = await driver?.getStreamSelectionStatus();
179
+ let selectedStreams = Object.entries(streamSelection || {})
180
+ .filter(([_, status]) => status.checked)
181
+ .map(([key, _]) => key);
182
+ (0, chai_1.expect)(selectedStreams.length).to.equal(0);
183
+ const streamKeys = Object.keys(streamSelection || {});
184
+ const videoStreams = streamKeys.filter(key => key.includes('video'));
185
+ if (videoStreams.length > 0) {
186
+ const firstVideoStreamKey = videoStreams[0];
187
+ await driver?.click(`[data-testid^="stream-switch-${firstVideoStreamKey}"]`);
188
+ }
189
+ await driver?.selectStrategy('First Found');
190
+ const mediaStatus = await driver?.getMediaSelectionStatus();
191
+ (0, chai_1.expect)(mediaStatus?.video.checked).to.be.true;
192
+ (0, chai_1.expect)(mediaStatus?.audio.checked).to.be.false;
193
+ await driver?.selectStrategy('Specified Streams Only');
194
+ await driver?.page?.waitForSelector('[data-testid="stream-selection-fieldset"]', { timeout: 1000 }).catch(() => { });
195
+ streamSelection = await driver?.getStreamSelectionStatus();
196
+ if (videoStreams.length > 0) {
197
+ const firstVideoStreamKey = videoStreams[0];
198
+ (0, chai_1.expect)(streamSelection?.[firstVideoStreamKey].checked).to.be.true;
199
+ }
200
+ await driver?.saveConnectionEditor();
201
+ await driver?.openSubscriptionEditor("source", "dest");
202
+ const currentStrategy = await driver?.getCurrentStrategy();
203
+ (0, chai_1.expect)(currentStrategy).to.include('Specific');
204
+ await driver?.page?.waitForSelector('[data-testid="stream-selection-fieldset"]', { timeout: 1000 }).catch(() => { });
205
+ streamSelection = await driver?.getStreamSelectionStatus();
206
+ selectedStreams = Object.entries(streamSelection || {})
207
+ .filter(([_, status]) => status.checked)
208
+ .map(([key, _]) => key);
209
+ (0, chai_1.expect)(selectedStreams.length).to.equal(1);
210
+ });
211
+ });
212
+ describe("Grouped Streams Selection by Source Name", () => {
213
+ beforeEach(async () => {
214
+ await driver?.addNode(runtime_1.AvMultiInput.info, "source", {
215
+ streamDefinitions: [
216
+ { media: "video", sourceName: "Camera1" },
217
+ { media: "audio", sourceName: "Camera1" },
218
+ { media: "video", sourceName: "Camera2" },
219
+ { media: "audio", sourceName: "Camera2" },
220
+ { media: "video", sourceName: "Camera3" },
221
+ { media: "audio", sourceName: "Camera3" }
222
+ ],
223
+ groupByKey: "sourceName"
224
+ });
225
+ await driver?.addNode(runtime_1.AvProcessor.info, "dest", {});
226
+ });
227
+ it("groups streams by sourceName when selecting specific streams", async () => {
228
+ await driver?.openSubscriptionEditor("source", "dest");
229
+ await driver?.selectStrategy('Specified Streams Only');
230
+ await driver?.page?.waitForSelector('[data-testid="stream-selection-fieldset"]', { timeout: 1000 }).catch(() => { });
231
+ const streamGroups = await driver?.page?.evaluate(() => {
232
+ return Array.from(document.querySelectorAll('[data-testid^="stream-group-"]')).length;
233
+ });
234
+ (0, chai_1.expect)(streamGroups).to.be.at.least(3);
235
+ await driver?.click('[data-testid^="stream-group-switch-0"]');
236
+ const streamSelection = await driver?.getStreamSelectionStatus();
237
+ const streamKeys = Object.keys(streamSelection || {});
238
+ const groupName = await driver?.page?.evaluate(() => {
239
+ return document.querySelector('[data-testid="stream-group-name-0"]')?.textContent;
240
+ });
241
+ if (groupName) {
242
+ const groupStreams = streamKeys.filter(key => key.includes(groupName.toLowerCase()));
243
+ groupStreams.forEach(streamKey => {
244
+ (0, chai_1.expect)(streamSelection?.[streamKey].checked).to.be.true;
245
+ });
246
+ }
247
+ });
248
+ it("supports partial stream selection within a group", async () => {
249
+ await driver?.openSubscriptionEditor("source", "dest");
250
+ await driver?.selectStrategy('Specified Streams Only');
251
+ await driver?.page?.waitForSelector('[data-testid="stream-selection-fieldset"]', { timeout: 1000 }).catch(() => { });
252
+ const groupStreams = await driver?.page?.evaluate(() => {
253
+ const group = document.querySelector('[data-testid="stream-group-items-0"]');
254
+ if (!group)
255
+ return [];
256
+ return Array.from(group.querySelectorAll('[data-testid^="stream-switch-"]'))
257
+ .map(el => el.getAttribute('data-testid'));
258
+ });
259
+ if (groupStreams && groupStreams.length >= 2) {
260
+ await driver?.click(`[data-testid="${groupStreams[0]}"]`);
261
+ const streamSelection = await driver?.getStreamSelectionStatus();
262
+ const selectedStreamId = groupStreams[0]?.split('stream-switch-')[1];
263
+ (0, chai_1.expect)(selectedStreamId).to.not.be.undefined;
264
+ (0, chai_1.expect)(streamSelection?.[selectedStreamId]).to.not.be.undefined;
265
+ (0, chai_1.expect)(streamSelection[selectedStreamId].checked).to.be.false;
266
+ const streamKeys = Object.keys(streamSelection || {});
267
+ const otherGroupStreams = streamKeys.filter(key => {
268
+ if (!selectedStreamId)
269
+ return false;
270
+ const prefix = selectedStreamId.includes('video') ?
271
+ selectedStreamId.split('video')[0] :
272
+ (selectedStreamId.includes('audio') ? selectedStreamId.split('audio')[0] : '');
273
+ return key !== selectedStreamId && key.includes(prefix);
274
+ });
275
+ otherGroupStreams.forEach(streamKey => {
276
+ (0, chai_1.expect)(streamSelection?.[streamKey].checked).to.be.true;
277
+ });
278
+ await driver?.saveConnectionEditor();
279
+ await driver?.openSubscriptionEditor("source", "dest");
280
+ await driver?.selectStrategy('Specified Streams Only');
281
+ const updatedSelection = await driver?.getStreamSelectionStatus();
282
+ (0, chai_1.expect)(selectedStreamId).to.not.be.undefined;
283
+ (0, chai_1.expect)(updatedSelection?.[selectedStreamId]).to.not.be.undefined;
284
+ (0, chai_1.expect)(updatedSelection[selectedStreamId].checked).to.be.false;
285
+ }
286
+ });
287
+ });
288
+ describe("Grouped Streams Selection by Program Number", () => {
289
+ beforeEach(async () => {
290
+ await driver?.addNode(runtime_1.AvMultiInput.info, "source", {
291
+ streamDefinitions: [
292
+ { media: "video", programNumber: 1, sourceName: "Program1-Cam1" },
293
+ { media: "audio", programNumber: 1, sourceName: "Program1-Cam1" },
294
+ { media: "video", programNumber: 1, sourceName: "Program1-Cam2" },
295
+ { media: "audio", programNumber: 1, sourceName: "Program1-Cam2" },
296
+ { media: "video", programNumber: 2, sourceName: "Program2-Cam1" },
297
+ { media: "audio", programNumber: 2, sourceName: "Program2-Cam1" },
298
+ { media: "video", programNumber: 3, sourceName: "Program3-Cam1" },
299
+ { media: "audio", programNumber: 3, sourceName: "Program3-Cam1" }
300
+ ],
301
+ groupByKey: "programNumber"
302
+ });
303
+ await driver?.addNode(runtime_1.AvProcessor.info, "dest", {});
304
+ });
305
+ it("groups streams by programNumber when selecting specific streams", async () => {
306
+ await driver?.openSubscriptionEditor("source", "dest");
307
+ await driver?.selectStrategy('Specified Streams Only');
308
+ await driver?.page?.waitForSelector('[data-testid="stream-selection-fieldset"]', { timeout: 1000 }).catch(() => { });
309
+ const streamGroups = await driver?.page?.evaluate(() => {
310
+ return Array.from(document.querySelectorAll('[data-testid^="stream-group-"]')).length;
311
+ });
312
+ (0, chai_1.expect)(streamGroups).to.be.at.least(3);
313
+ await driver?.click('[data-testid^="stream-group-switch-0"]');
314
+ const streamSelection = await driver?.getStreamSelectionStatus();
315
+ const selectedStreams = Object.entries(streamSelection || {})
316
+ .filter(([_, status]) => status.checked)
317
+ .map(([key, _]) => key);
318
+ (0, chai_1.expect)(selectedStreams.length).to.be.at.least(2);
319
+ await driver?.saveConnectionEditor();
320
+ await driver?.openSubscriptionEditor("source", "dest");
321
+ await driver?.selectStrategy('Specified Streams Only');
322
+ await driver?.page?.waitForSelector('[data-testid="stream-selection-fieldset"]', { timeout: 1000 }).catch(() => { });
323
+ const updatedStreamSelection = await driver?.getStreamSelectionStatus();
324
+ selectedStreams.forEach(streamKey => {
325
+ (0, chai_1.expect)(updatedStreamSelection?.[streamKey]?.checked).to.be.true;
326
+ });
327
+ });
328
+ });
329
+ describe("Multiple streams source to media-restricted destination", () => {
330
+ beforeEach(async () => {
331
+ await driver?.addNode(runtime_1.AvMultiInput.info, "source", {
332
+ streamDefinitions: [
333
+ { media: "video", sourceName: "Camera1" },
334
+ { media: "audio", sourceName: "Camera1" },
335
+ { media: "video", sourceName: "Camera2" },
336
+ { media: "audio", sourceName: "Camera2" },
337
+ { media: "video", sourceName: "Camera3" },
338
+ { media: "audio", sourceName: "Camera3" }
339
+ ],
340
+ groupByKey: "sourceName"
341
+ });
342
+ await driver?.addNode(runtime_1.AudioOutput.info, "dest", {});
343
+ });
344
+ it("restricts selection to only the media types accepted by destination", async () => {
345
+ await driver?.openSubscriptionEditor("source", "dest");
346
+ const mediaStatus = await driver?.getMediaSelectionStatus();
347
+ (0, chai_1.expect)(mediaStatus?.audio.enabled).to.be.true;
348
+ (0, chai_1.expect)(mediaStatus?.audio.checked).to.be.true;
349
+ if (mediaStatus?.video) {
350
+ (0, chai_1.expect)(mediaStatus.video.enabled).to.be.false;
351
+ }
352
+ await driver?.selectStrategy('Specified Streams Only');
353
+ await driver?.page?.waitForSelector('[data-testid="stream-selection-fieldset"]', { timeout: 1000 }).catch(() => { });
354
+ const streamSelection = await driver?.getStreamSelectionStatus();
355
+ const streamKeys = Object.keys(streamSelection || {});
356
+ streamKeys.forEach(key => {
357
+ if (key.includes('video')) {
358
+ (0, chai_1.expect)(streamSelection?.[key].enabled).to.be.false;
359
+ }
360
+ else if (key.includes('audio')) {
361
+ (0, chai_1.expect)(streamSelection?.[key].enabled).to.be.true;
362
+ }
363
+ });
364
+ const audioStreams = streamKeys.filter(key => key.includes('audio'));
365
+ if (audioStreams.length > 0) {
366
+ const audioStreamSelector = await driver?.page?.evaluate((audioKey) => {
367
+ const switches = document.querySelectorAll(`[data-testid^="stream-switch-${audioKey}"]`);
368
+ return switches.length > 0 ? switches[0].getAttribute('data-testid') : null;
369
+ }, audioStreams[0]);
370
+ if (audioStreamSelector) {
371
+ await driver?.click(`[data-testid="${audioStreamSelector}"]`);
372
+ const updatedSelection = await driver?.getStreamSelectionStatus();
373
+ (0, chai_1.expect)(updatedSelection?.[audioStreams[0]].checked).to.be.false;
374
+ await driver?.saveConnectionEditor();
375
+ }
376
+ }
377
+ });
378
+ });
379
+ });
380
+ //# sourceMappingURL=connection-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-editor.js","sourceRoot":"","sources":["../../src/test/connection-editor.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norskvideo/norsk-studio",
3
- "version": "1.27.0-2025-04-09-a7944f8c",
3
+ "version": "1.27.0-2025-04-10-614c23ec",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "postinstall": "rm -f node_modules/hls-parser/*.ts",
@@ -40,7 +40,7 @@
40
40
  ],
41
41
  "license": "See EULA at https://norsk.video/eula",
42
42
  "dependencies": {
43
- "@norskvideo/norsk-sdk": "^1.0.401-2025-04-09-b3850791",
43
+ "@norskvideo/norsk-sdk": "^1.0.401-2025-04-10-b3850791",
44
44
  "@norskvideo/webrtc-client": "^0.1.2",
45
45
  "@radix-ui/react-dropdown-menu": "^2.1.6",
46
46
  "@radix-ui/react-popover": "^1.1.6",
@@ -74,6 +74,7 @@
74
74
  "react-chartjs-2": "^5.2.0",
75
75
  "react-hook-form": "^7.47.0",
76
76
  "swagger-ui-express": "^5.0.1",
77
+ "tailwind-scrollbar": "^3.0.0",
77
78
  "tailwindcss-animate": "^1.0.7",
78
79
  "tmp": "^0.2.1",
79
80
  "winston": "^3.11.0",