diff --git a/openvidu-components-angular/e2e/webcomponent-e2e/chat.test.ts b/openvidu-components-angular/e2e/webcomponent-e2e/chat.test.ts index aa1cff5f3e..4d5ff22055 100644 --- a/openvidu-components-angular/e2e/webcomponent-e2e/chat.test.ts +++ b/openvidu-components-angular/e2e/webcomponent-e2e/chat.test.ts @@ -61,6 +61,7 @@ describe('Testing CHAT features', () => { let pName = `participant${Math.floor(Math.random() * 1000)}`; const fixedUrl = `${url}&prejoin=false&roomName=${roomName}`; await browser.get(fixedUrl); + await browser.sleep(1000); await utils.checkLayoutPresent(); // Starting new browser for adding a new participant diff --git a/openvidu-components-angular/e2e/webcomponent-e2e/stream.test.ts b/openvidu-components-angular/e2e/webcomponent-e2e/stream.test.ts index 61d5fde59b..1956a77a1d 100644 --- a/openvidu-components-angular/e2e/webcomponent-e2e/stream.test.ts +++ b/openvidu-components-angular/e2e/webcomponent-e2e/stream.test.ts @@ -27,19 +27,8 @@ describe('Checking stream elements by disabling/enabling the media', () => { await browser.quit(); }); - it('should show ONE video element when a LOCAL participant joins with VIDEO and AUDIO MUTED', async () => { - await browser.get(`${url}&prejoin=true&videoEnabled=false&audioEnabled=false`); - - await utils.checkPrejoinIsPresent(); - await utils.clickOn('#join-button'); - await utils.checkLayoutPresent(); - await utils.waitForElement('.OV_stream.local'); - - expect(await utils.getNumberOfElements('.OV_stream')).equal(1); - }); - - it('should show ONE video element when a LOCAL participant joins with AUDIO MUTED', async () => { - await browser.get(`${url}&prejoin=true&videoEnabled=true&audioEnabled=false`); + it('should show 0 video element when a participant joins with video disabled', async () => { + await browser.get(`${url}&prejoin=true&videoEnabled=false`); await utils.checkPrejoinIsPresent(); await utils.clickOn('#join-button'); @@ -47,10 +36,12 @@ describe('Checking stream elements by disabling/enabling the media', () => { await utils.waitForElement('.OV_stream.local'); expect(await utils.getNumberOfElements('.OV_stream')).equal(1); + expect(await utils.getNumberOfElements('video')).equal(0); + expect(await utils.getNumberOfElements('audio')).equal(1); }); - it('should show a video element when a LOCAL participant joins with VIDEO MUTED', async () => { - await browser.get(`${url}&prejoin=true&videoEnabled=false&audioEnabled=true`); + it('should show a video element when a participant joins with audio muted', async () => { + await browser.get(`${url}&prejoin=true&audioEnabled=false`); await utils.checkPrejoinIsPresent(); await utils.clickOn('#join-button'); @@ -58,9 +49,11 @@ describe('Checking stream elements by disabling/enabling the media', () => { await utils.waitForElement('.OV_stream.local'); expect(await utils.getNumberOfElements('.OV_stream')).equal(1); + expect(await utils.getNumberOfElements('video')).equal(1); + expect(await utils.getNumberOfElements('audio')).equal(0); }); - it('should show a video element when a LOCAL participant joins', async () => { + it('should show a video element when a participant joins', async () => { await browser.get(`${url}&prejoin=true&videoEnabled=true&audioEnabled=true`); await utils.checkPrejoinIsPresent(); @@ -69,9 +62,11 @@ describe('Checking stream elements by disabling/enabling the media', () => { await utils.waitForElement('.OV_stream.local'); expect(await utils.getNumberOfElements('.OV_stream')).equal(1); + expect(await utils.getNumberOfElements('video')).equal(1); + expect(await utils.getNumberOfElements('audio')).equal(1); }); - it('should show a video element when a LOCAL participant shares its screen with VIDEO and AUDIO MUTED', async () => { + it('should show a video element when a participant shares its screen with VIDEO and AUDIO MUTED', async () => { await browser.get(`${url}&prejoin=true&videoEnabled=false&audioEnabled=false`); await utils.checkPrejoinIsPresent(); @@ -80,64 +75,20 @@ describe('Checking stream elements by disabling/enabling the media', () => { await utils.waitForElement('.OV_stream.local'); expect(await utils.getNumberOfElements('.OV_stream')).equal(1); + expect(await utils.getNumberOfElements('video')).equal(0); + expect(await utils.getNumberOfElements('audio')).equal(0); await utils.clickOn('#screenshare-btn'); await browser.sleep(1000); await utils.waitForElement('#local-element-screen_share'); expect(await utils.getNumberOfElements('.OV_stream')).equal(2); + expect(await utils.getNumberOfElements('video')).equal(1); + expect(await utils.getNumberOfElements('audio')).equal(0); - await utils.clickOn('#screenshare-btn'); - await browser.sleep(500); - await utils.waitForElement('#screenshare-menu'); - await utils.clickOn('#disable-screen-button'); - await browser.sleep(500); - expect(await utils.getNumberOfElements('.OV_stream')).equal(1); - }); - - it('should show a video element when a LOCAL participant shares its screen with VIDEO MUTED', async () => { - await browser.get(`${url}&prejoin=true&videoEnabled=false&audioEnabled=true`); - - await utils.checkPrejoinIsPresent(); - await utils.clickOn('#join-button'); - await utils.checkLayoutPresent(); - await utils.waitForElement('.OV_stream.local'); - - expect(await utils.getNumberOfElements('.OV_stream')).equal(1); - - await utils.clickOn('#screenshare-btn'); - await browser.sleep(1000); - await utils.waitForElement('#local-element-screen_share'); - expect(await utils.getNumberOfElements('.OV_stream')).equal(2); - - await utils.clickOn('#screenshare-btn'); - await browser.sleep(500); - await utils.waitForElement('#screenshare-menu'); - await utils.clickOn('#disable-screen-button'); - await browser.sleep(500); - expect(await utils.getNumberOfElements('.OV_stream')).equal(1); - }); - - it('should show a video element when a LOCAL participant shares its screen with AUDIO MUTED', async () => { - await browser.get(`${url}&prejoin=true&videoEnabled=true&audioEnabled=false`); - - await utils.checkPrejoinIsPresent(); - await utils.clickOn('#join-button'); - await utils.checkLayoutPresent(); - await utils.waitForElement('.OV_stream.local'); - - expect(await utils.getNumberOfElements('.OV_stream')).equal(1); - - await utils.clickOn('#screenshare-btn'); - await browser.sleep(1000); - await utils.waitForElement('#local-element-screen_share'); - expect(await utils.getNumberOfElements('.OV_stream')).equal(2); - - await utils.clickOn('#screenshare-btn'); - await browser.sleep(500); - await utils.waitForElement('#screenshare-menu'); - await utils.clickOn('#disable-screen-button'); - await browser.sleep(500); + await utils.disableScreenShare(); expect(await utils.getNumberOfElements('.OV_stream')).equal(1); + expect(await utils.getNumberOfElements('video')).equal(0); + expect(await utils.getNumberOfElements('audio')).equal(0); }); it('should show a video element when a LOCAL participant shares its screen', async () => { @@ -149,23 +100,25 @@ describe('Checking stream elements by disabling/enabling the media', () => { await utils.waitForElement('.OV_stream.local'); expect(await utils.getNumberOfElements('.OV_stream')).equal(1); + expect(await utils.getNumberOfElements('video')).equal(1); + expect(await utils.getNumberOfElements('audio')).equal(1); await utils.clickOn('#screenshare-btn'); await browser.sleep(1000); await utils.waitForElement('#local-element-screen_share'); expect(await utils.getNumberOfElements('.OV_stream')).equal(2); + expect(await utils.getNumberOfElements('video')).equal(2); + expect(await utils.getNumberOfElements('audio')).equal(1); - await utils.clickOn('#screenshare-btn'); - await browser.sleep(500); - await utils.waitForElement('#screenshare-menu'); - await utils.clickOn('#disable-screen-button'); - await browser.sleep(500); + await utils.disableScreenShare(); expect(await utils.getNumberOfElements('.OV_stream')).equal(1); + expect(await utils.getNumberOfElements('video')).equal(1); + expect(await utils.getNumberOfElements('audio')).equal(1); }); /* ------------ Checking video elements with two participants ------------ */ - it('should show TWO video elements when a REMOTE participant joins with VIDEO and AUDIO MUTED', async () => { + it('should show zero video elements when two participants join with VIDEO and AUDIO MUTED', async () => { const roomName = `streams-${Date.now()}`; const fixedUrl = `${url}&roomName=${roomName}&prejoin=false&videoEnabled=false&audioEnabled=false`; await browser.get(fixedUrl); @@ -174,6 +127,8 @@ describe('Checking stream elements by disabling/enabling the media', () => { await utils.waitForElement('.OV_stream.local'); expect(await utils.getNumberOfElements('.OV_stream')).equal(1); + expect(await utils.getNumberOfElements('video')).equal(0); + expect(await utils.getNumberOfElements('audio')).equal(0); const tabs = await utils.openTab(fixedUrl); await browser.switchTo().window(tabs[0]); @@ -181,13 +136,17 @@ describe('Checking stream elements by disabling/enabling the media', () => { await browser.sleep(1000); await utils.waitForElement('.OV_stream.remote'); expect(await utils.getNumberOfElements('.OV_stream')).equal(2); + expect(await utils.getNumberOfElements('video')).equal(0); + expect(await utils.getNumberOfElements('audio')).equal(0); await browser.switchTo().window(tabs[1]); await browser.sleep(1000); expect(await utils.getNumberOfElements('.OV_stream')).equal(2); + expect(await utils.getNumberOfElements('video')).equal(0); + expect(await utils.getNumberOfElements('audio')).equal(0); }); - it('should show TWO video elements when a REMOTE participant joins with AUDIO MUTED', async () => { + it('should show two video elements when a two participants join with audio muted', async () => { const roomName = `streams-${Date.now()}`; const fixedUrl = `${url}&roomName=${roomName}&prejoin=false&videoEnabled=true&audioEnabled=false`; await browser.get(fixedUrl); @@ -196,20 +155,26 @@ describe('Checking stream elements by disabling/enabling the media', () => { await utils.waitForElement('.OV_stream.local'); expect(await utils.getNumberOfElements('.OV_stream')).equal(1); + expect(await utils.getNumberOfElements('video')).equal(1); + expect(await utils.getNumberOfElements('audio')).equal(0); const tabs = await utils.openTab(fixedUrl); await browser.switchTo().window(tabs[0]); - await browser.sleep(1000); await utils.waitForElement('.OV_stream.remote'); + await browser.sleep(2000); expect(await utils.getNumberOfElements('.OV_stream')).equal(2); + expect(await utils.getNumberOfElements('video')).equal(2); + expect(await utils.getNumberOfElements('audio')).equal(0); await browser.switchTo().window(tabs[1]); await browser.sleep(1000); expect(await utils.getNumberOfElements('.OV_stream')).equal(2); + expect(await utils.getNumberOfElements('video')).equal(2); + expect(await utils.getNumberOfElements('audio')).equal(0); }); - it('should show TWO video elements when a REMOTE participant joins with VIDEO MUTED', async () => { + it('should show zero video elements when two participants join with video disabled', async () => { const roomName = `streams-${Date.now()}`; const fixedUrl = `${url}&roomName=${roomName}&prejoin=false&videoEnabled=false`; await browser.get(fixedUrl); @@ -218,40 +183,26 @@ describe('Checking stream elements by disabling/enabling the media', () => { await utils.waitForElement('.OV_stream.local'); expect(await utils.getNumberOfElements('.OV_stream')).equal(1); + expect(await utils.getNumberOfElements('video')).equal(0); + expect(await utils.getNumberOfElements('audio')).equal(1); const tabs = await utils.openTab(fixedUrl); await browser.switchTo().window(tabs[0]); - await browser.sleep(1000); await utils.waitForElement('.OV_stream.remote'); + await browser.sleep(2000); expect(await utils.getNumberOfElements('.OV_stream')).equal(2); - await browser.switchTo().window(tabs[1]); - await browser.sleep(1000); - expect(await utils.getNumberOfElements('.OV_stream')).equal(2); - }); - - it('should show TWO video elements when a REMOTE participant joins', async () => { - const roomName = `streams-${Date.now()}`; - const fixedUrl = `${url}&roomName=${roomName}&prejoin=false&videoEnabled=true&audioEnabled=true`; - await browser.get(fixedUrl); - - await utils.checkLayoutPresent(); - await utils.waitForElement('.OV_stream.local'); + expect(await utils.getNumberOfElements('video')).equal(0); + expect(await utils.getNumberOfElements('audio')).equal(2); - expect(await utils.getNumberOfElements('.OV_stream')).equal(1); - - const tabs = await utils.openTab(fixedUrl); - await browser.switchTo().window(tabs[0]); - - await browser.sleep(1000); - await utils.waitForElement('.OV_stream.remote'); - expect(await utils.getNumberOfElements('.OV_stream')).equal(2); await browser.switchTo().window(tabs[1]); await browser.sleep(1000); expect(await utils.getNumberOfElements('.OV_stream')).equal(2); + expect(await utils.getNumberOfElements('video')).equal(0); + expect(await utils.getNumberOfElements('audio')).equal(2); }); - it('should show THREE video elements when a REMOTE participant shares its screen with AUDIO and VIDEO MUTED', async () => { + it('should show 3 video elements when a participant shares its screen with AUDIO and VIDEO MUTED', async () => { const roomName = `streams-${Date.now()}`; const fixedUrl = `${url}&roomName=${roomName}&prejoin=false&videoEnabled=false&audioEnabled=false`; await browser.get(fixedUrl); @@ -268,95 +219,29 @@ describe('Checking stream elements by disabling/enabling the media', () => { await browser.sleep(1000); await utils.waitForElement('#local-element-screen_share'); expect(await utils.getNumberOfElements('.OV_stream')).equal(3); + expect(await utils.getNumberOfElements('video')).equal(1); + expect(await utils.getNumberOfElements('audio')).equal(0); await browser.switchTo().window(tabs[0]); await browser.sleep(1000); expect(await utils.getNumberOfElements('.OV_stream')).equal(3); + expect(await utils.getNumberOfElements('video')).equal(1); + expect(await utils.getNumberOfElements('audio')).equal(0); await browser.switchTo().window(tabs[1]); - await utils.clickOn('#screenshare-btn'); - await browser.sleep(500); - await utils.waitForElement('#screenshare-menu'); - await utils.clickOn('#disable-screen-button'); - await browser.sleep(500); - expect(await utils.getNumberOfElements('.OV_stream')).equal(2); - - await browser.switchTo().window(tabs[0]); - await browser.sleep(500); - expect(await utils.getNumberOfElements('.OV_stream')).equal(2); - }); - - it('should show THREE video elements when a REMOTE participant shares its screen with VIDEO MUTED', async () => { - const roomName = `streams-${Date.now()}`; - const fixedUrl = `${url}&roomName=${roomName}&prejoin=false&videoEnabled=false&audioEnabled=true`; - await browser.get(fixedUrl); - - await utils.checkLayoutPresent(); - await utils.waitForElement('.OV_stream.local'); - - const tabs = await utils.openTab(fixedUrl); - await browser.switchTo().window(tabs[1]); - - await utils.waitForElement('.OV_stream.local'); - - await utils.clickOn('#screenshare-btn'); - await browser.sleep(1000); - await utils.waitForElement('#local-element-screen_share'); - expect(await utils.getNumberOfElements('.OV_stream')).equal(3); - - await browser.switchTo().window(tabs[0]); - await browser.sleep(1000); - expect(await utils.getNumberOfElements('.OV_stream')).equal(3); - - await browser.switchTo().window(tabs[1]); - await utils.clickOn('#screenshare-btn'); - await browser.sleep(500); - await utils.waitForElement('#screenshare-menu'); - await utils.clickOn('#disable-screen-button'); - await browser.sleep(500); - expect(await utils.getNumberOfElements('.OV_stream')).equal(2); - - await browser.switchTo().window(tabs[0]); - await browser.sleep(500); - expect(await utils.getNumberOfElements('.OV_stream')).equal(2); - }); - - it('should show THREE video elements when a REMOTE participant shares its screen with AUDIO MUTED', async () => { - const roomName = `streams-${Date.now()}`; - const fixedUrl = `${url}&roomName=${roomName}&prejoin=false&videoEnabled=true&audioEnabled=false`; - await browser.get(fixedUrl); - - await utils.checkLayoutPresent(); - await utils.waitForElement('.OV_stream.local'); - - const tabs = await utils.openTab(fixedUrl); - await browser.switchTo().window(tabs[1]); - - await utils.waitForElement('.OV_stream.local'); - - await utils.clickOn('#screenshare-btn'); - await browser.sleep(1000); - await utils.waitForElement('#local-element-screen_share'); - expect(await utils.getNumberOfElements('.OV_stream')).equal(3); - - await browser.switchTo().window(tabs[0]); - await browser.sleep(1000); - expect(await utils.getNumberOfElements('.OV_stream')).equal(3); - - await browser.switchTo().window(tabs[1]); - await utils.clickOn('#screenshare-btn'); - await browser.sleep(500); - await utils.waitForElement('#screenshare-menu'); - await utils.clickOn('#disable-screen-button'); - await browser.sleep(500); + await utils.disableScreenShare(); expect(await utils.getNumberOfElements('.OV_stream')).equal(2); + expect(await utils.getNumberOfElements('video')).equal(0); + expect(await utils.getNumberOfElements('audio')).equal(0); await browser.switchTo().window(tabs[0]); await browser.sleep(500); expect(await utils.getNumberOfElements('.OV_stream')).equal(2); + expect(await utils.getNumberOfElements('video')).equal(0); + expect(await utils.getNumberOfElements('audio')).equal(0); }); - it('should show THREE video elements when a REMOTE participant shares its screen', async () => { + it('should show 3 video elements when a REMOTE participant shares its screen', async () => { const roomName = `streams-${Date.now()}`; const fixedUrl = `${url}&roomName=${roomName}&prejoin=false&videoEnabled=true&audioEnabled=true`; await browser.get(fixedUrl); @@ -373,25 +258,29 @@ describe('Checking stream elements by disabling/enabling the media', () => { await browser.sleep(1000); await utils.waitForElement('#local-element-screen_share'); expect(await utils.getNumberOfElements('.OV_stream')).equal(3); + expect(await utils.getNumberOfElements('video')).equal(3); + expect(await utils.getNumberOfElements('audio')).equal(2); await browser.switchTo().window(tabs[0]); await browser.sleep(1000); expect(await utils.getNumberOfElements('.OV_stream')).equal(3); + expect(await utils.getNumberOfElements('video')).equal(3); + expect(await utils.getNumberOfElements('audio')).equal(2); await browser.switchTo().window(tabs[1]); - await utils.clickOn('#screenshare-btn'); - await browser.sleep(500); - await utils.waitForElement('#screenshare-menu'); - await utils.clickOn('#disable-screen-button'); - await browser.sleep(500); + await utils.disableScreenShare(); expect(await utils.getNumberOfElements('.OV_stream')).equal(2); + expect(await utils.getNumberOfElements('video')).equal(2); + expect(await utils.getNumberOfElements('audio')).equal(2); await browser.switchTo().window(tabs[0]); await browser.sleep(500); expect(await utils.getNumberOfElements('.OV_stream')).equal(2); + expect(await utils.getNumberOfElements('video')).equal(2); + expect(await utils.getNumberOfElements('audio')).equal(2); }); - it('should show FOUR video elements when a two participant shares theirs screen', async () => { + it('should show 4 video elements when a two participants share theirs screen', async () => { const roomName = `streams-${Date.now()}`; const fixedUrl = `${url}&roomName=${roomName}&prejoin=false&videoEnabled=false&audioEnabled=false`; await browser.get(fixedUrl); @@ -406,26 +295,32 @@ describe('Checking stream elements by disabling/enabling the media', () => { await utils.waitForElement('.OV_stream.local'); expect(await utils.getNumberOfElements('.OV_stream')).equal(3); + expect(await utils.getNumberOfElements('video')).equal(1); + expect(await utils.getNumberOfElements('audio')).equal(0); await utils.clickOn('#screenshare-btn'); await browser.sleep(500); await utils.waitForElement('#local-element-screen_share'); expect(await utils.getNumberOfElements('.OV_stream')).equal(4); + expect(await utils.getNumberOfElements('video')).equal(2); + expect(await utils.getNumberOfElements('audio')).equal(0); await browser.switchTo().window(tabs[0]); await browser.sleep(500); expect(await utils.getNumberOfElements('.OV_stream')).equal(4); - await utils.clickOn('#camera-btn'); - await utils.clickOn('#screenshare-btn'); - await browser.sleep(500); - await utils.waitForElement('#screenshare-menu'); - await utils.clickOn('#disable-screen-button'); - await browser.sleep(500); + expect(await utils.getNumberOfElements('video')).equal(2); + expect(await utils.getNumberOfElements('audio')).equal(0); + + await utils.disableScreenShare(); expect(await utils.getNumberOfElements('.OV_stream')).equal(3); + expect(await utils.getNumberOfElements('video')).equal(1); + expect(await utils.getNumberOfElements('audio')).equal(0); await browser.switchTo().window(tabs[1]); await browser.sleep(500); expect(await utils.getNumberOfElements('.OV_stream')).equal(3); + expect(await utils.getNumberOfElements('video')).equal(1); + expect(await utils.getNumberOfElements('audio')).equal(0); }); }); diff --git a/openvidu-components-angular/package.json b/openvidu-components-angular/package.json index 840be22fa4..1ba221f1ae 100644 --- a/openvidu-components-angular/package.json +++ b/openvidu-components-angular/package.json @@ -74,7 +74,9 @@ } }, "scripts": { - "husky": "cd .. && husky install", + "start": "ng serve --configuration development --open", + "start-prod": "npx http-server ./dist/openvidu-components-testapp/browser --port 4200", + "start:ssl": "ng serve --ssl --configuration development --host 0.0.0.0 --port 5080", "build": "ng build openvidu-components-testapp --configuration production", "bundle-report": "ng build openvidu-webcomponent --stats-json --configuration production && webpack-bundle-analyzer dist/openvidu-webcomponent/stats.json", "doc:build": "npx compodoc -c ./projects/openvidu-components-angular/doc/.compodocrc.json", @@ -84,11 +86,10 @@ "doc:serve": "npx compodoc -c ../openvidu-components-angular/projects/openvidu-components-angular/doc/.compodocrc.json --serve --port 7000", "doc:serve-watch": "npm-watch doc:serve", "lib:serve": "ng build openvidu-components-angular --watch", - "lib:build": "ng build openvidu-components-angular --configuration development && cd ./dist/openvidu-components-angular", + "lib:build": "ng build openvidu-components-angular --configuration production && cd ./dist/openvidu-components-angular", "lib:pack": "cd ./dist/openvidu-components-angular && npm pack", "lib:copy": "cp dist/openvidu-components-angular/openvidu-components-angular-*.tgz ../../openvidu-call/openvidu-call-front", "lib:test": "ng test openvidu-components-angular --no-watch --code-coverage", - "e2e:nested-all": "tsc --project ./e2e && npx mocha --recursive --timeout 30000 ./e2e/dist/nested-components/*.test.js", "e2e:nested-events": "tsc --project ./e2e && npx mocha --recursive --timeout 30000 ./e2e/dist/nested-components/events.test.js", "e2e:nested-directives": "tsc --project ./e2e && npx mocha --recursive --timeout 30000 ./e2e/dist/nested-components/directives.test.js", @@ -102,16 +103,11 @@ "e2e:webcomponent-screensharing": "tsc --project ./e2e && npx mocha --recursive --timeout 30000 ./e2e/dist/webcomponent-e2e/screensharing.test.js", "e2e:webcomponent-stream": "tsc --project ./e2e && npx mocha --recursive --timeout 30000 ./e2e/dist/webcomponent-e2e/stream.test.js", "e2e:webcomponent-toolbar": "tsc --project ./e2e && npx mocha --recursive --timeout 30000 ./e2e/dist/webcomponent-e2e/toolbar.test.js", - - "lint": "ng lint", - "start": "ng serve --configuration development --open", - "start-prod": "npx http-server ./dist/openvidu-components-testapp/browser --port 4200", - "start:ssl": "ng serve --ssl --configuration development --host 0.0.0.0 --port 5080", "webcomponent:testing-build": "./node_modules/@angular/cli/bin/ng.js build openvidu-webcomponent --configuration testing && node ./openvidu-webcomponent-build.js", "webcomponent:build": "./node_modules/@angular/cli/bin/ng.js build openvidu-webcomponent --configuration production && node ./openvidu-webcomponent-build.js", - "webcomponent:e2e-ci": "cross-env LAUNCH_MODE=CI npm run webcomponent:e2e", "webcomponent:serve-testapp": "npx http-server ./e2e/webcomponent-app/", - "simulate:multiparty": "livekit-cli load-test --url ws://localhost:7880 --api-key devkey --api-secret secret --room daily-call --publishers 8 --audio-publishers 8 --identity-prefix Participant --identity publisher" + "simulate:multiparty": "livekit-cli load-test --url ws://localhost:7880 --api-key devkey --api-secret secret --room daily-call --publishers 8 --audio-publishers 8 --identity-prefix Participant --identity publisher", + "husky": "cd .. && husky install" }, "version": "3.0.0-beta3-dev" }