mirror of https://github.com/OpenVidu/openvidu.git
Compare commits
136 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
65f6725b6e | |
|
|
88bf128d5f | |
|
|
4efd901c2f | |
|
|
39e8c21b94 | |
|
|
9faad0720f | |
|
|
f123e3cbb2 | |
|
|
5921eef20a | |
|
|
da7f92d707 | |
|
|
4eef1cb18b | |
|
|
490cbc1c16 | |
|
|
d835f86577 | |
|
|
cf5d8a14a0 | |
|
|
f7ba36aebb | |
|
|
82cbd691c1 | |
|
|
360c437de7 | |
|
|
35bad7952d | |
|
|
f5397848c1 | |
|
|
97a3b200d8 | |
|
|
4ab9797c82 | |
|
|
10549ca631 | |
|
|
e22de69094 | |
|
|
79872ca288 | |
|
|
dc8626fbf4 | |
|
|
812677da8e | |
|
|
e3050f35ea | |
|
|
aa54c5e0e4 | |
|
|
b4b61f660a | |
|
|
b7e7a0dda3 | |
|
|
dbb0bf782b | |
|
|
51cf1bcbc6 | |
|
|
76ecaf44ff | |
|
|
316f938e4a | |
|
|
8bff08d39f | |
|
|
8cd7c6f06a | |
|
|
9f13d2b4f2 | |
|
|
f70a7dc48f | |
|
|
ab97b4b4ef | |
|
|
390fdc4870 | |
|
|
5cf0cf0e11 | |
|
|
a14cd70b09 | |
|
|
4a805bd197 | |
|
|
ec41f1748b | |
|
|
e89771cb0d | |
|
|
d55845ab91 | |
|
|
b1207a9f1a | |
|
|
c9703a49b0 | |
|
|
c06097d101 | |
|
|
9b575bf778 | |
|
|
9bbe7787c7 | |
|
|
a80a688f3c | |
|
|
216d0e399f | |
|
|
46050c40b4 | |
|
|
0d728f71d0 | |
|
|
98880f6405 | |
|
|
437c8446f1 | |
|
|
aeac86b3c0 | |
|
|
a8fe54fa6c | |
|
|
bf56fe02a7 | |
|
|
4c4bf277e2 | |
|
|
6d438fb61a | |
|
|
8772efaf46 | |
|
|
3353cd14e5 | |
|
|
3b35a8b264 | |
|
|
1aabf62f34 | |
|
|
03c8b6e57f | |
|
|
d320dd590d | |
|
|
7207a1591c | |
|
|
4776336629 | |
|
|
69b940bf0e | |
|
|
4f074f7633 | |
|
|
605cee8bae | |
|
|
71265ffec9 | |
|
|
36d1f3bd5b | |
|
|
6425eb8244 | |
|
|
94c362f96f | |
|
|
770ffaeed6 | |
|
|
7ad39d423d | |
|
|
c5ba1f770c | |
|
|
79e2385358 | |
|
|
afdbe9e236 | |
|
|
3671904a97 | |
|
|
ddd42414ea | |
|
|
c7892b3d70 | |
|
|
6315acafb3 | |
|
|
a9ad482c0b | |
|
|
f120e6a70c | |
|
|
20630c0553 | |
|
|
a002e766ca | |
|
|
ffd232b428 | |
|
|
a81d3f7c26 | |
|
|
146aa315fc | |
|
|
d330a8ef72 | |
|
|
f8032b7b10 | |
|
|
9a522af1bc | |
|
|
67b6aa7158 | |
|
|
2eda703c3a | |
|
|
564124fd93 | |
|
|
c249a63662 | |
|
|
9de6f3ddeb | |
|
|
a7036993ff | |
|
|
1b4e3f29d8 | |
|
|
0f22d6310d | |
|
|
49f808ee61 | |
|
|
ffe36855bb | |
|
|
e6407b40ec | |
|
|
d10dee49fa | |
|
|
96968ae54e | |
|
|
1411f7d064 | |
|
|
c05c1c599a | |
|
|
b6738f80d6 | |
|
|
0a883577f5 | |
|
|
8dcaedfc28 | |
|
|
a1c3652164 | |
|
|
b177891341 | |
|
|
22505d38c8 | |
|
|
0f6e96380b | |
|
|
7e8e031e8d | |
|
|
c9d9919684 | |
|
|
ace21eb8bb | |
|
|
8037253ee0 | |
|
|
9bafa811e7 | |
|
|
3b60045a17 | |
|
|
582a663ff0 | |
|
|
b6deca81e1 | |
|
|
40ed3b5dbe | |
|
|
a805b3d8b3 | |
|
|
f99cf2f834 | |
|
|
023c1c188f | |
|
|
7e45b027de | |
|
|
33bcd91ef5 | |
|
|
1faf9dbe8b | |
|
|
c1149079c8 | |
|
|
ef45123a74 | |
|
|
1515f60258 | |
|
|
7132277d47 | |
|
|
babe7be554 |
|
|
@ -1,8 +1,8 @@
|
||||||
name: OpenVidu CE Tests
|
name: OpenVidu V2 CE Tests
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- v2
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- ".github/workflows/openvidu-components-angular-E2E.yml"
|
- ".github/workflows/openvidu-components-angular-E2E.yml"
|
||||||
- "openvidu-components-angular/**"
|
- "openvidu-components-angular/**"
|
||||||
|
|
@ -10,13 +10,13 @@ on:
|
||||||
- "openvidu-server/deployments/**"
|
- "openvidu-server/deployments/**"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- v2
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
TEST_IMAGE:
|
TEST_IMAGE:
|
||||||
description: "Docker image where to run the tests"
|
description: "Docker image where to run the tests"
|
||||||
required: true
|
required: true
|
||||||
default: "openvidu/openvidu-test-e2e:22.04"
|
default: "openvidu/openvidu-test-e2e:24.04"
|
||||||
KURENTO_JAVA_COMMIT:
|
KURENTO_JAVA_COMMIT:
|
||||||
description: 'Commit to use in kurento-java dependencies. If "default" the release version declared in property "version.kurento" of openvidu-parent/pom.xml will be used'
|
description: 'Commit to use in kurento-java dependencies. If "default" the release version declared in property "version.kurento" of openvidu-parent/pom.xml will be used'
|
||||||
required: true
|
required: true
|
||||||
|
|
@ -24,7 +24,7 @@ on:
|
||||||
KURENTO_MEDIA_SERVER_IMAGE:
|
KURENTO_MEDIA_SERVER_IMAGE:
|
||||||
description: "Docker image of kurento-media-server"
|
description: "Docker image of kurento-media-server"
|
||||||
required: true
|
required: true
|
||||||
default: "kurento/kurento-media-server:7.0.1"
|
default: "kurento/kurento-media-server:7.3.0"
|
||||||
DOCKER_RECORDING_VERSION:
|
DOCKER_RECORDING_VERSION:
|
||||||
description: "Force version of openvidu/openvidu-recording container"
|
description: "Force version of openvidu/openvidu-recording container"
|
||||||
required: true
|
required: true
|
||||||
|
|
@ -45,14 +45,14 @@ jobs:
|
||||||
main:
|
main:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: ${{ inputs.TEST_IMAGE || 'openvidu/openvidu-test-e2e:22.04' }}
|
image: ${{ inputs.TEST_IMAGE || 'openvidu/openvidu-test-e2e:24.04' }}
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- /opt/openvidu:/opt/openvidu
|
- /opt/openvidu:/opt/openvidu
|
||||||
env:
|
env:
|
||||||
TEST_IMAGE: ${{ inputs.TEST_IMAGE || 'openvidu/openvidu-test-e2e:22.04' }}
|
TEST_IMAGE: ${{ inputs.TEST_IMAGE || 'openvidu/openvidu-test-e2e:24.04' }}
|
||||||
KURENTO_SNAPSHOTS_URL: ${{ secrets.KURENTO_SNAPSHOTS_URL }}
|
KURENTO_SNAPSHOTS_URL: ${{ secrets.KURENTO_SNAPSHOTS_URL }}
|
||||||
KURENTO_MEDIA_SERVER_IMAGE: ${{ inputs.KURENTO_MEDIA_SERVER_IMAGE || 'kurento/kurento-media-server:7.0.1' }}
|
KURENTO_MEDIA_SERVER_IMAGE: ${{ inputs.KURENTO_MEDIA_SERVER_IMAGE || 'kurento/kurento-media-server:7.3.0' }}
|
||||||
KURENTO_JAVA_COMMIT: ${{ inputs.KURENTO_JAVA_COMMIT || 'default' }}
|
KURENTO_JAVA_COMMIT: ${{ inputs.KURENTO_JAVA_COMMIT || 'default' }}
|
||||||
DOCKER_RECORDING_VERSION: ${{ inputs.DOCKER_RECORDING_VERSION || 'default' }}
|
DOCKER_RECORDING_VERSION: ${{ inputs.DOCKER_RECORDING_VERSION || 'default' }}
|
||||||
CHROME_VERSION: ${{ inputs.CHROME_VERSION || 'latest' }}
|
CHROME_VERSION: ${{ inputs.CHROME_VERSION || 'latest' }}
|
||||||
|
|
@ -62,8 +62,8 @@ jobs:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Setup scripts
|
- name: Setup scripts
|
||||||
run: |
|
run: |
|
||||||
curl -sOJ --output-dir /opt https://raw.githubusercontent.com/OpenVidu/openvidu/master/ci-scripts/commons/build.sh
|
curl -sOJ --output-dir /opt https://raw.githubusercontent.com/OpenVidu/openvidu/v2/ci-scripts/commons/build.sh
|
||||||
curl -sOJ --output-dir /opt https://raw.githubusercontent.com/OpenVidu/openvidu/master/ci-scripts/commons/test-utils.sh
|
curl -sOJ --output-dir /opt https://raw.githubusercontent.com/OpenVidu/openvidu/v2/ci-scripts/commons/test-utils.sh
|
||||||
cp ci-scripts/openvidu-e2e-tests.sh /opt/openvidu-e2e-tests.sh
|
cp ci-scripts/openvidu-e2e-tests.sh /opt/openvidu-e2e-tests.sh
|
||||||
find /opt/*.sh -type f -print0 | xargs -0 chmod u+x
|
find /opt/*.sh -type f -print0 | xargs -0 chmod u+x
|
||||||
- name: Clean environment
|
- name: Clean environment
|
||||||
|
|
@ -105,7 +105,7 @@ jobs:
|
||||||
with:
|
with:
|
||||||
report_paths: "**/target/surefire-reports/TEST-*.xml"
|
report_paths: "**/target/surefire-reports/TEST-*.xml"
|
||||||
- name: Upload logs
|
- name: Upload logs
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
if: always() # always run even if the previous step fails
|
if: always() # always run even if the previous step fails
|
||||||
with:
|
with:
|
||||||
name: Logs
|
name: Logs
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
name: openvidu-components-angular E2E
|
name: openvidu-components-angular E2E
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
|
branches:
|
||||||
|
- v2
|
||||||
paths:
|
paths:
|
||||||
- 'openvidu-components-angular/**'
|
- 'openvidu-components-angular/**'
|
||||||
- 'openvidu-browser/**'
|
- 'openvidu-browser/**'
|
||||||
|
|
@ -8,7 +10,7 @@ on:
|
||||||
- '.github/workflows/openvidu-components-angular-E2E.yml'
|
- '.github/workflows/openvidu-components-angular-E2E.yml'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- v2
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
commit_sha:
|
commit_sha:
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ BUILD_OV_SERVER_DEPENDENCY=false
|
||||||
BUILD_OV_SERVER_PRO_INSPECTOR=false
|
BUILD_OV_SERVER_PRO_INSPECTOR=false
|
||||||
BUILD_OV_SERVER_PRO=false
|
BUILD_OV_SERVER_PRO=false
|
||||||
CHECK_AND_PREPARE_KURENTO_SNAPSHOT=false
|
CHECK_AND_PREPARE_KURENTO_SNAPSHOT=false
|
||||||
|
USE_SPECIFIC_KURENTO_JAVA_COMMIT=false
|
||||||
|
|
||||||
if [[ -n ${1:-} ]]; then
|
if [[ -n ${1:-} ]]; then
|
||||||
case "${1:-}" in
|
case "${1:-}" in
|
||||||
|
|
@ -75,10 +76,15 @@ if [[ -n ${1:-} ]]; then
|
||||||
--build-openvidu-server-pro)
|
--build-openvidu-server-pro)
|
||||||
BUILD_OV_SERVER_PRO=true
|
BUILD_OV_SERVER_PRO=true
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--check-and-prepare-kurento-snapshot)
|
--check-and-prepare-kurento-snapshot)
|
||||||
CHECK_AND_PREPARE_KURENTO_SNAPSHOT=true
|
CHECK_AND_PREPARE_KURENTO_SNAPSHOT=true
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
--use-specific-kurento-java-commit)
|
||||||
|
USE_SPECIFIC_KURENTO_JAVA_COMMIT=true
|
||||||
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
echo "Unrecognized method $1"
|
echo "Unrecognized method $1"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -235,14 +241,34 @@ if [[ "${CHECK_AND_PREPARE_KURENTO_SNAPSHOT}" == true ]]; then
|
||||||
KURENTO_VERSION=$(awk -F'[<>]' '/<version.kurento>/ {print $3}' pom.xml)
|
KURENTO_VERSION=$(awk -F'[<>]' '/<version.kurento>/ {print $3}' pom.xml)
|
||||||
if [[ "${KURENTO_VERSION}" == *"-SNAPSHOT" ]] && [[ -n "${KURENTO_SNAPSHOTS_URL:-}" ]]; then
|
if [[ "${KURENTO_VERSION}" == *"-SNAPSHOT" ]] && [[ -n "${KURENTO_SNAPSHOTS_URL:-}" ]]; then
|
||||||
echo "Kurento version is a SNAPSHOT: ${KURENTO_VERSION}"
|
echo "Kurento version is a SNAPSHOT: ${KURENTO_VERSION}"
|
||||||
mkdir -p /etc/maven
|
mkdir -p ~/.m2
|
||||||
chmod -R 777 /etc/maven
|
curl https://raw.githubusercontent.com/OpenVidu/openvidu/v2/ci-scripts/kurento-snapshots.xml -o ~/.m2/settings.xml
|
||||||
pushd /etc/maven
|
sed -i "s|KURENTO_SNAPSHOTS_URL|${KURENTO_SNAPSHOTS_URL}|g" ~/.m2/settings.xml
|
||||||
rm -f settings.xml
|
if [[ -n "${MAVEN_HOME:-}" ]]; then
|
||||||
curl https://raw.githubusercontent.com/OpenVidu/openvidu/master/ci-scripts/kurento-snapshots.xml -o settings.xml
|
cp ~/.m2/settings.xml "${MAVEN_HOME}/conf/settings.xml"
|
||||||
sed -i "s|KURENTO_SNAPSHOTS_URL|${KURENTO_SNAPSHOTS_URL}|g" settings.xml
|
elif [[ -n "${M2_HOME:-}" ]]; then
|
||||||
popd
|
cp ~/.m2/settings.xml "${M2_HOME}/conf/settings.xml"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo "Kurento version is not a SNAPSHOT: ${KURENTO_VERSION}"
|
echo "Kurento version is not a SNAPSHOT: ${KURENTO_VERSION}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# -------------
|
||||||
|
# Use a specific kurento-java commit other than the configured in openvidu-parent pom.xml
|
||||||
|
# -------------
|
||||||
|
if [[ "${USE_SPECIFIC_KURENTO_JAVA_COMMIT}" == true ]]; then
|
||||||
|
|
||||||
|
git clone https://github.com/Kurento/kurento.git
|
||||||
|
pushd kurento/clients/java
|
||||||
|
git checkout -f "${KURENTO_JAVA_COMMIT}"
|
||||||
|
COMMIT_VERSION="kurento-$(git rev-parse --short HEAD)"
|
||||||
|
mvn -f qa-pom/pom.xml versions:set -DnewVersion="${COMMIT_VERSION}" -DgenerateBackupPoms=false && mvn -f parent-pom/pom.xml versions:set -DnewVersion="${COMMIT_VERSION}" -DgenerateBackupPoms=false -DprocessParent=true
|
||||||
|
mvn -B -Dmaven.artifact.threads=1 clean install
|
||||||
|
popd
|
||||||
|
rm -rf kurento
|
||||||
|
mvn -B versions:set-property \
|
||||||
|
-Dproperty=version.kurento \
|
||||||
|
-DnewVersion="${COMMIT_VERSION}"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ set -eu -o pipefail
|
||||||
PREPARE_TEST_ENVIRONMENT=false
|
PREPARE_TEST_ENVIRONMENT=false
|
||||||
USE_SPECIFIC_KURENTO_JAVA_COMMIT=false
|
USE_SPECIFIC_KURENTO_JAVA_COMMIT=false
|
||||||
SERVE_OV_TESTAPP=false
|
SERVE_OV_TESTAPP=false
|
||||||
CHECK_AND_PREPARE_KURENTO_SNAPSHOT=false
|
|
||||||
|
|
||||||
if [[ -n ${1:-} ]]; then
|
if [[ -n ${1:-} ]]; then
|
||||||
case "${1:-}" in
|
case "${1:-}" in
|
||||||
|
|
@ -19,10 +18,6 @@ if [[ -n ${1:-} ]]; then
|
||||||
PREPARE_TEST_ENVIRONMENT=true
|
PREPARE_TEST_ENVIRONMENT=true
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--check-and-prepare-kurento-snapshot)
|
|
||||||
CHECK_AND_PREPARE_KURENTO_SNAPSHOT=true
|
|
||||||
;;
|
|
||||||
|
|
||||||
--use-specific-kurento-java-commit)
|
--use-specific-kurento-java-commit)
|
||||||
USE_SPECIFIC_KURENTO_JAVA_COMMIT=true
|
USE_SPECIFIC_KURENTO_JAVA_COMMIT=true
|
||||||
;;
|
;;
|
||||||
|
|
@ -68,12 +63,12 @@ if [[ "${PREPARE_TEST_ENVIRONMENT}" == true ]]; then
|
||||||
FAKE_VIDEO1=/opt/openvidu/barcode.y4m
|
FAKE_VIDEO1=/opt/openvidu/barcode.y4m
|
||||||
FAKE_VIDEO2=/opt/openvidu/girl.mjpeg
|
FAKE_VIDEO2=/opt/openvidu/girl.mjpeg
|
||||||
if [ ! -f ${FAKE_VIDEO1} ]; then
|
if [ ! -f ${FAKE_VIDEO1} ]; then
|
||||||
sudo curl --location https://github.com/OpenVidu/openvidu/raw/master/openvidu-test-e2e/docker/barcode.y4m --create-dirs --output /opt/openvidu/barcode.y4m
|
sudo curl --location https://github.com/OpenVidu/openvidu/raw/v2/openvidu-test-e2e/docker/barcode.y4m --create-dirs --output /opt/openvidu/barcode.y4m
|
||||||
else
|
else
|
||||||
echo "File ${FAKE_VIDEO1} already exists"
|
echo "File ${FAKE_VIDEO1} already exists"
|
||||||
fi
|
fi
|
||||||
if [ ! -f ${FAKE_VIDEO2} ]; then
|
if [ ! -f ${FAKE_VIDEO2} ]; then
|
||||||
sudo curl --location https://github.com/OpenVidu/openvidu/raw/master/openvidu-test-e2e/docker/girl.mjpeg --create-dirs --output /opt/openvidu/girl.mjpeg
|
sudo curl --location https://github.com/OpenVidu/openvidu/raw/v2/openvidu-test-e2e/docker/girl.mjpeg --create-dirs --output /opt/openvidu/girl.mjpeg
|
||||||
else
|
else
|
||||||
echo "File ${FAKE_VIDEO2} already exists"
|
echo "File ${FAKE_VIDEO2} already exists"
|
||||||
fi
|
fi
|
||||||
|
|
@ -82,18 +77,18 @@ if [[ "${PREPARE_TEST_ENVIRONMENT}" == true ]]; then
|
||||||
FAKE_AUDIO1=/opt/openvidu/fakeaudio.wav
|
FAKE_AUDIO1=/opt/openvidu/fakeaudio.wav
|
||||||
FAKE_AUDIO2=/opt/openvidu/stt-test.wav
|
FAKE_AUDIO2=/opt/openvidu/stt-test.wav
|
||||||
if [ ! -f ${FAKE_AUDIO1} ]; then
|
if [ ! -f ${FAKE_AUDIO1} ]; then
|
||||||
sudo curl --location https://github.com/OpenVidu/openvidu/raw/master/openvidu-test-e2e/docker/fakeaudio.wav --create-dirs --output /opt/openvidu/fakeaudio.wav
|
sudo curl --location https://github.com/OpenVidu/openvidu/raw/v2/openvidu-test-e2e/docker/fakeaudio.wav --create-dirs --output /opt/openvidu/fakeaudio.wav
|
||||||
else
|
else
|
||||||
echo "File ${FAKE_AUDIO1} already exists"
|
echo "File ${FAKE_AUDIO1} already exists"
|
||||||
fi
|
fi
|
||||||
if [ ! -f ${FAKE_AUDIO2} ]; then
|
if [ ! -f ${FAKE_AUDIO2} ]; then
|
||||||
sudo curl --location https://github.com/OpenVidu/openvidu/raw/master/openvidu-test-e2e/docker/stt-test.wav --create-dirs --output /opt/openvidu/stt-test.wav
|
sudo curl --location https://github.com/OpenVidu/openvidu/raw/v2/openvidu-test-e2e/docker/stt-test.wav --create-dirs --output /opt/openvidu/stt-test.wav
|
||||||
else
|
else
|
||||||
echo "File ${FAKE_AUDIO2} already exists"
|
echo "File ${FAKE_AUDIO2} already exists"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Download recording custom layout
|
# Download recording custom layout
|
||||||
sudo curl --location https://raw.githubusercontent.com/OpenVidu/openvidu/master/openvidu-test-e2e/docker/my-custom-layout/index.html --create-dirs --output /opt/openvidu/test-layouts/layout1/index.html
|
sudo curl --location https://raw.githubusercontent.com/OpenVidu/openvidu/v2/openvidu-test-e2e/docker/my-custom-layout/index.html --create-dirs --output /opt/openvidu/test-layouts/layout1/index.html
|
||||||
|
|
||||||
# Open permissions for /opt/openvidu folder
|
# Open permissions for /opt/openvidu folder
|
||||||
sudo chmod -R 777 /opt/openvidu
|
sudo chmod -R 777 /opt/openvidu
|
||||||
|
|
@ -134,13 +129,14 @@ if [[ "${USE_SPECIFIC_KURENTO_JAVA_COMMIT}" == true ]]; then
|
||||||
git clone https://github.com/Kurento/kurento.git
|
git clone https://github.com/Kurento/kurento.git
|
||||||
pushd kurento/clients/java
|
pushd kurento/clients/java
|
||||||
git checkout -f "${KURENTO_JAVA_COMMIT}"
|
git checkout -f "${KURENTO_JAVA_COMMIT}"
|
||||||
MVN_VERSION=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
|
TEST_LOCAL_TMP_VERSION="KURENTO-LOCAL-VERSION-$RANDOM"
|
||||||
|
mvn -f qa-pom/pom.xml versions:set -DnewVersion=${TEST_LOCAL_TMP_VERSION} -DgenerateBackupPoms=false && mvn -f parent-pom/pom.xml versions:set -DnewVersion=${TEST_LOCAL_TMP_VERSION} -DgenerateBackupPoms=false -DprocessParent=true
|
||||||
mvn -B -Dmaven.artifact.threads=1 clean install
|
mvn -B -Dmaven.artifact.threads=1 clean install
|
||||||
popd
|
popd
|
||||||
rm -rf kurento
|
rm -rf kurento
|
||||||
mvn -B versions:set-property \
|
mvn -B versions:set-property \
|
||||||
-Dproperty=version.kurento \
|
-Dproperty=version.kurento \
|
||||||
-DnewVersion="${MVN_VERSION}"
|
-DnewVersion="${TEST_LOCAL_TMP_VERSION}"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ function environmentLaunch {
|
||||||
DOCKER_HOST_IP="$(docker inspect bridge --format '{{with index .IPAM.Config 0}}{{or .Gateway .Subnet}}{{end}}' | sed -r 's|\.0/[[:digit:]]+$|.1|')"
|
DOCKER_HOST_IP="$(docker inspect bridge --format '{{with index .IPAM.Config 0}}{{or .Gateway .Subnet}}{{end}}' | sed -r 's|\.0/[[:digit:]]+$|.1|')"
|
||||||
|
|
||||||
if [[ "${MEDIA_SERVER}" == "kurento" ]]; then
|
if [[ "${MEDIA_SERVER}" == "kurento" ]]; then
|
||||||
docker run -e KMS_UID=$(id -u) --network=host --detach=true --volume=/opt/openvidu/recordings:/opt/openvidu/recordings "${KURENTO_MEDIA_SERVER_IMAGE}"
|
docker run -e KMS_UID=$(id -u) --network=host --detach=true --volume=/opt/openvidu/recordings:/opt/openvidu/recordings --ulimit nofile=65536:65536 "${KURENTO_MEDIA_SERVER_IMAGE}"
|
||||||
while true; do
|
while true; do
|
||||||
RC="$(curl \
|
RC="$(curl \
|
||||||
--silent \
|
--silent \
|
||||||
|
|
@ -86,7 +86,7 @@ function environmentLaunch {
|
||||||
-DOPENVIDU_WEBHOOK_ENDPOINT=http://127.0.0.1:7777/webhook \
|
-DOPENVIDU_WEBHOOK_ENDPOINT=http://127.0.0.1:7777/webhook \
|
||||||
/opt/openvidu/openvidu-server-*.jar &>/opt/openvidu/openvidu-server-"${MEDIA_SERVER}".log &
|
/opt/openvidu/openvidu-server-*.jar &>/opt/openvidu/openvidu-server-"${MEDIA_SERVER}".log &
|
||||||
fi
|
fi
|
||||||
until $(curl --insecure --output /dev/null --silent --head --fail https://OPENVIDUAPP:MY_SECRET@localhost:4443/); do
|
until $(curl --insecure --output /dev/null --silent --head --fail https://localhost:4443/openvidu/api/config/openvidu-publicurl); do
|
||||||
echo "Waiting for openvidu-server..."
|
echo "Waiting for openvidu-server..."
|
||||||
sleep 2
|
sleep 2
|
||||||
done
|
done
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
ignorePatterns: ['lib/**', 'ts4.4/**', 'node_modules/**', 'static/**', 'openvidu-browser-*.tgz'],
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
es2020: true,
|
||||||
|
node: true
|
||||||
|
},
|
||||||
|
parser: '@typescript-eslint/parser',
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 2020,
|
||||||
|
sourceType: 'module'
|
||||||
|
},
|
||||||
|
plugins: ['@typescript-eslint', 'import'],
|
||||||
|
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:import/recommended', 'plugin:import/typescript'],
|
||||||
|
settings: {
|
||||||
|
'import/resolver': {
|
||||||
|
node: {
|
||||||
|
extensions: ['.js', '.ts']
|
||||||
|
},
|
||||||
|
typescript: {
|
||||||
|
project: ['./tsconfig.json', './src/OpenVidu/tsconfig.json']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
'@typescript-eslint/array-type': ['error', { default: 'array' }],
|
||||||
|
'@typescript-eslint/ban-types': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
extendDefaults: true,
|
||||||
|
types: {
|
||||||
|
Object: {
|
||||||
|
message: 'Avoid using the `Object` type. Did you mean `object`?',
|
||||||
|
fixWith: 'object'
|
||||||
|
},
|
||||||
|
Function: {
|
||||||
|
message: 'Avoid using the `Function` type. Prefer a specific function type.'
|
||||||
|
},
|
||||||
|
Boolean: {
|
||||||
|
message: 'Avoid using the `Boolean` type. Did you mean `boolean`?',
|
||||||
|
fixWith: 'boolean'
|
||||||
|
},
|
||||||
|
Number: {
|
||||||
|
message: 'Avoid using the `Number` type. Did you mean `number`?',
|
||||||
|
fixWith: 'number'
|
||||||
|
},
|
||||||
|
String: {
|
||||||
|
message: 'Avoid using the `String` type. Did you mean `string`?',
|
||||||
|
fixWith: 'string'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'@typescript-eslint/no-empty-interface': 'off',
|
||||||
|
'@typescript-eslint/no-inferrable-types': 'error',
|
||||||
|
'@typescript-eslint/no-namespace': 'off',
|
||||||
|
'@typescript-eslint/no-var-requires': 'off',
|
||||||
|
'@typescript-eslint/type-annotation-spacing': 'error',
|
||||||
|
curly: ['error', 'multi-line', 'consistent'],
|
||||||
|
eqeqeq: ['error', 'always'],
|
||||||
|
'import/no-extraneous-dependencies': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
devDependencies: ['config/**', '**/*.spec.ts', '**/*.test.ts']
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'no-trailing-spaces': ['error', { skipBlankLines: false, ignoreComments: false }],
|
||||||
|
'no-var': 'error',
|
||||||
|
'object-shorthand': ['error', 'always'],
|
||||||
|
'prefer-const': 'error',
|
||||||
|
quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: false }],
|
||||||
|
semi: ['error', 'always'],
|
||||||
|
'space-in-parens': 'off'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
lib
|
||||||
|
node_modules
|
||||||
|
static
|
||||||
|
ts4.4
|
||||||
|
openvidu-browser-*.tgz
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
"singleQuote": true,
|
"singleQuote": true,
|
||||||
"printWidth": 140,
|
"printWidth": 140,
|
||||||
"trailingComma": "none",
|
"trailingComma": "none",
|
||||||
"semi": true,
|
"semi": true,
|
||||||
"bracketSpacing": true,
|
"bracketSpacing": true,
|
||||||
"useTabs": false,
|
"useTabs": false,
|
||||||
"jsxSingleQuote": true,
|
"jsxSingleQuote": true,
|
||||||
"tabWidth": 4
|
"tabWidth": 4
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"singleQuote": true,
|
||||||
|
"printWidth": 120,
|
||||||
|
"trailingComma": "es5"
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"include": ["../src"],
|
"include": ["../src"],
|
||||||
"exclude": ["../config", "../docs", "../lib", "../node_modules", "../ts4.4"],
|
"exclude": ["../config", "../docs", "../lib", "../node_modules", "../ts4.4"],
|
||||||
"typedocOptions": {
|
"typedocOptions": {
|
||||||
"name": "OpenVidu Browser",
|
"name": "OpenVidu Browser",
|
||||||
"entryPoints": ["../src/index.ts"],
|
"entryPoints": ["../src/index.ts"],
|
||||||
|
|
@ -17,4 +17,4 @@
|
||||||
"excludeProtected": true,
|
"excludeProtected": true,
|
||||||
"excludeInternal": true
|
"excludeInternal": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,81 +1,37 @@
|
||||||
{
|
{
|
||||||
"extends": "tslint:recommended",
|
"extends": "tslint:recommended",
|
||||||
"rules": {
|
"rules": {
|
||||||
"array-type": [
|
"array-type": [true, "array"],
|
||||||
true,
|
|
||||||
"array"
|
|
||||||
],
|
|
||||||
"ban-types": {
|
"ban-types": {
|
||||||
"options": [
|
"options": [
|
||||||
[
|
["Object", "Avoid using the `Object` type. Did you mean `object`?"],
|
||||||
"Object",
|
|
||||||
"Avoid using the `Object` type. Did you mean `object`?"
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
"Function",
|
"Function",
|
||||||
"Avoid using the `Function` type. Prefer a specific function type, like `() => void`, or use `ts.AnyFunction`."
|
"Avoid using the `Function` type. Prefer a specific function type, like `() => void`, or use `ts.AnyFunction`."
|
||||||
],
|
],
|
||||||
[
|
["Boolean", "Avoid using the `Boolean` type. Did you mean `boolean`?"],
|
||||||
"Boolean",
|
["Number", "Avoid using the `Number` type. Did you mean `number`?"],
|
||||||
"Avoid using the `Boolean` type. Did you mean `boolean`?"
|
["String", "Avoid using the `String` type. Did you mean `string`?"]
|
||||||
],
|
|
||||||
[
|
|
||||||
"Number",
|
|
||||||
"Avoid using the `Number` type. Did you mean `number`?"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"String",
|
|
||||||
"Avoid using the `String` type. Did you mean `string`?"
|
|
||||||
]
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"class-name": true,
|
"class-name": true,
|
||||||
"comment-format": [
|
"comment-format": [true, "check-space"],
|
||||||
true,
|
"curly": [true, "ignore-same-line"],
|
||||||
"check-space"
|
"indent": [true, "spaces", 2],
|
||||||
],
|
"interface-name": [true, "never-prefix"],
|
||||||
"curly": [
|
|
||||||
true,
|
|
||||||
"ignore-same-line"
|
|
||||||
],
|
|
||||||
"indent": [
|
|
||||||
true,
|
|
||||||
"spaces",
|
|
||||||
2
|
|
||||||
],
|
|
||||||
"interface-name": [
|
|
||||||
true,
|
|
||||||
"never-prefix"
|
|
||||||
],
|
|
||||||
"interface-over-type-literal": true,
|
"interface-over-type-literal": true,
|
||||||
"jsdoc-format": true,
|
"jsdoc-format": true,
|
||||||
"no-inferrable-types": true,
|
"no-inferrable-types": true,
|
||||||
"no-internal-module": true,
|
"no-internal-module": true,
|
||||||
"no-null-keyword": false,
|
"no-null-keyword": false,
|
||||||
"no-switch-case-fall-through": true,
|
"no-switch-case-fall-through": true,
|
||||||
"no-trailing-whitespace": [
|
"no-trailing-whitespace": [true, "ignore-template-strings"],
|
||||||
true,
|
|
||||||
"ignore-template-strings"
|
|
||||||
],
|
|
||||||
"no-var-keyword": true,
|
"no-var-keyword": true,
|
||||||
"object-literal-shorthand": true,
|
"object-literal-shorthand": true,
|
||||||
"one-line": [
|
"one-line": [true, "check-open-brace", "check-whitespace"],
|
||||||
true,
|
|
||||||
"check-open-brace",
|
|
||||||
"check-whitespace"
|
|
||||||
],
|
|
||||||
"prefer-const": true,
|
"prefer-const": true,
|
||||||
"quotemark": [
|
"quotemark": [true, "single", "avoid-escape", "avoid-template"],
|
||||||
true,
|
"semicolon": [true, "always", "ignore-bound-class-methods"],
|
||||||
"single",
|
|
||||||
"avoid-escape",
|
|
||||||
"avoid-template"
|
|
||||||
],
|
|
||||||
"semicolon": [
|
|
||||||
true,
|
|
||||||
"always",
|
|
||||||
"ignore-bound-class-methods"
|
|
||||||
],
|
|
||||||
"space-within-parens": true,
|
"space-within-parens": true,
|
||||||
"triple-equals": true,
|
"triple-equals": true,
|
||||||
"typedef-whitespace": [
|
"typedef-whitespace": [
|
||||||
|
|
@ -95,29 +51,10 @@
|
||||||
"variable-declaration": "onespace"
|
"variable-declaration": "onespace"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"whitespace": [
|
"whitespace": [true, "check-branch", "check-decl", "check-operator", "check-module", "check-separator", "check-type"],
|
||||||
true,
|
"no-implicit-dependencies": [true, "dev"],
|
||||||
"check-branch",
|
"object-literal-key-quotes": [true, "consistent-as-needed"],
|
||||||
"check-decl",
|
"variable-name": [true, "ban-keywords", "check-format", "allow-leading-underscore"],
|
||||||
"check-operator",
|
|
||||||
"check-module",
|
|
||||||
"check-separator",
|
|
||||||
"check-type"
|
|
||||||
],
|
|
||||||
"no-implicit-dependencies": [
|
|
||||||
true,
|
|
||||||
"dev"
|
|
||||||
],
|
|
||||||
"object-literal-key-quotes": [
|
|
||||||
true,
|
|
||||||
"consistent-as-needed"
|
|
||||||
],
|
|
||||||
"variable-name": [
|
|
||||||
true,
|
|
||||||
"ban-keywords",
|
|
||||||
"check-format",
|
|
||||||
"allow-leading-underscore"
|
|
||||||
],
|
|
||||||
"arrow-parens": false,
|
"arrow-parens": false,
|
||||||
"arrow-return-shorthand": false,
|
"arrow-return-shorthand": false,
|
||||||
"forin": false,
|
"forin": false,
|
||||||
|
|
@ -151,4 +88,4 @@
|
||||||
"one-variable-per-declaration": false,
|
"one-variable-per-declaration": false,
|
||||||
"unified-signatures": false
|
"unified-signatures": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
const tseslint = require('@typescript-eslint/eslint-plugin');
|
||||||
|
const tsParser = require('@typescript-eslint/parser');
|
||||||
|
const importPlugin = require('eslint-plugin-import');
|
||||||
|
const globals = require('globals');
|
||||||
|
|
||||||
|
module.exports = [
|
||||||
|
{
|
||||||
|
ignores: ['lib/**', 'ts4.4/**', 'node_modules/**', 'static/**', 'openvidu-browser-*.tgz']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
files: ['**/*.ts'],
|
||||||
|
languageOptions: {
|
||||||
|
parser: tsParser,
|
||||||
|
ecmaVersion: 2020,
|
||||||
|
sourceType: 'module',
|
||||||
|
parserOptions: {
|
||||||
|
project: ['./tsconfig.json', './src/OpenVidu/tsconfig.json'],
|
||||||
|
tsconfigRootDir: __dirname,
|
||||||
|
noWarnOnMultipleProjects: true
|
||||||
|
},
|
||||||
|
globals: {
|
||||||
|
...globals.browser,
|
||||||
|
...globals.node
|
||||||
|
}
|
||||||
|
},
|
||||||
|
plugins: {
|
||||||
|
'@typescript-eslint': tseslint,
|
||||||
|
import: importPlugin
|
||||||
|
},
|
||||||
|
settings: {
|
||||||
|
'import/resolver': {
|
||||||
|
node: {
|
||||||
|
extensions: ['.js', '.ts']
|
||||||
|
},
|
||||||
|
typescript: {
|
||||||
|
project: ['./tsconfig.json', './src/OpenVidu/tsconfig.json'],
|
||||||
|
noWarnOnMultipleProjects: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
linterOptions: {
|
||||||
|
reportUnusedDisableDirectives: 'off'
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
'@typescript-eslint/array-type': 'off',
|
||||||
|
'@typescript-eslint/consistent-type-definitions': 'off',
|
||||||
|
'@typescript-eslint/no-empty-function': 'off',
|
||||||
|
'@typescript-eslint/no-empty-interface': 'off',
|
||||||
|
'@typescript-eslint/no-explicit-any': 'off',
|
||||||
|
'@typescript-eslint/no-inferrable-types': 'off',
|
||||||
|
'@typescript-eslint/no-wrapper-object-types': 'off',
|
||||||
|
'@typescript-eslint/no-namespace': 'off',
|
||||||
|
'@typescript-eslint/no-var-requires': 'off',
|
||||||
|
curly: 'off',
|
||||||
|
eqeqeq: 'off',
|
||||||
|
'import/no-extraneous-dependencies': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
devDependencies: ['config/**', '**/*.spec.ts', '**/*.test.ts']
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'import/no-unresolved': 'off',
|
||||||
|
'no-trailing-spaces': ['error', { skipBlankLines: false, ignoreComments: false }],
|
||||||
|
'no-var': 'off',
|
||||||
|
'object-shorthand': 'off',
|
||||||
|
'prefer-const': 'off',
|
||||||
|
quotes: 'off',
|
||||||
|
semi: ['error', 'always'],
|
||||||
|
'no-unused-vars': 'off',
|
||||||
|
'no-extra-boolean-cast': 'off',
|
||||||
|
'no-undef': 'off'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -6,22 +6,29 @@
|
||||||
"hark": "1.2.3",
|
"hark": "1.2.3",
|
||||||
"inherits": "2.0.4",
|
"inherits": "2.0.4",
|
||||||
"jsnlog": "2.30.0",
|
"jsnlog": "2.30.0",
|
||||||
"mime": "3.0.0",
|
"mime": "2.6.0",
|
||||||
"platform": "1.3.6",
|
"platform": "1.3.6",
|
||||||
"semver": "7.6.2",
|
"semver": "7.7.3",
|
||||||
"uuid": "9.0.1",
|
"uuid": "^8.3.2",
|
||||||
"wolfy87-eventemitter": "5.2.9"
|
"wolfy87-eventemitter": "5.2.9"
|
||||||
},
|
},
|
||||||
"description": "OpenVidu Browser",
|
"description": "OpenVidu Browser",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "18.11.9",
|
"@types/node": "24.10.1",
|
||||||
"@types/platform": "1.3.4",
|
"@types/platform": "1.3.6",
|
||||||
"browserify": "17.0.0",
|
"@typescript-eslint/eslint-plugin": "8.47.0",
|
||||||
"terser": "5.15.1",
|
"@typescript-eslint/parser": "8.47.0",
|
||||||
|
"browserify": "17.0.1",
|
||||||
|
"eslint": "9.39.1",
|
||||||
|
"eslint-import-resolver-typescript": "4.4.4",
|
||||||
|
"eslint-plugin-import": "2.32.0",
|
||||||
|
"patch-package": "^8.0.1",
|
||||||
|
"prettier": "3.6.2",
|
||||||
|
"terser": "5.44.1",
|
||||||
"tsify": "5.0.4",
|
"tsify": "5.0.4",
|
||||||
"tslint": "6.1.3",
|
"typedoc": "0.28.14",
|
||||||
"typedoc": "0.23.21",
|
"typescript": "5.9.3",
|
||||||
"typescript": "4.9.3"
|
"undici-types": "7.16.0"
|
||||||
},
|
},
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
|
|
@ -33,8 +40,10 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"browserify": "VERSION=${VERSION:-dev}; mkdir -p static/js/ && cd src && ../node_modules/browserify/bin/cmd.js Main.ts -p [ tsify ] --exclude kurento-browser-extensions --debug -o ../static/js/openvidu-browser-$VERSION.js -v",
|
"browserify": "VERSION=${VERSION:-dev}; mkdir -p static/js/ && cd src && ../node_modules/browserify/bin/cmd.js Main.ts -p [ tsify ] --exclude kurento-browser-extensions --debug -o ../static/js/openvidu-browser-$VERSION.js -v",
|
||||||
"browserify-prod": "VERSION=${VERSION:-dev}; mkdir -p static/js/ && cd src && ../node_modules/browserify/bin/cmd.js --debug Main.ts -p [ tsify ] --exclude kurento-browser-extensions | ../node_modules/terser/bin/terser --source-map content=inline --output ../static/js/openvidu-browser-$VERSION.min.js",
|
"browserify-prod": "VERSION=${VERSION:-dev}; mkdir -p static/js/ && cd src && ../node_modules/browserify/bin/cmd.js --debug Main.ts -p [ tsify ] --exclude kurento-browser-extensions | ../node_modules/terser/bin/terser --source-map content=inline --output ../static/js/openvidu-browser-$VERSION.min.js",
|
||||||
"build": "cd src/OpenVidu && ./../../node_modules/typescript/bin/tsc && cd ../.. && ./node_modules/typescript/bin/tsc --declaration src/index.ts --outDir ./lib --sourceMap --target es5 --lib dom,es5,es2015.promise,scripthost && rm -rf ./ts4.4 && mkdir -p ./ts4.4/lib && cp -r ./lib ./ts4.4 && find ./ts4.4/lib -type f ! -iname '*.d.ts' -delete && ./config/replace_for_ts44.sh",
|
"build": "npm run lint && npm run beautify && cd src/OpenVidu && ./../../node_modules/typescript/bin/tsc && cd ../.. && ./node_modules/typescript/bin/tsc --declaration src/index.ts --outDir ./lib --sourceMap --target es2015 --module commonjs --moduleResolution node --lib dom,es2015,scripthost && rm -rf ./ts4.4 && mkdir -p ./ts4.4/lib && cp -r ./lib ./ts4.4 && find ./ts4.4/lib -type f ! -iname '*.d.ts' -delete && ./config/replace_for_ts44.sh",
|
||||||
"docs": "./generate-docs.sh"
|
"docs": "./generate-docs.sh",
|
||||||
|
"lint": "eslint . --ext .ts",
|
||||||
|
"beautify": "prettier --write ."
|
||||||
},
|
},
|
||||||
"types": "lib/index.d.ts",
|
"types": "lib/index.d.ts",
|
||||||
"typesVersions": {
|
"typesVersions": {
|
||||||
|
|
@ -44,5 +53,5 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"version": "2.30.0"
|
"version": "2.32.1"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,10 @@ export class Connection {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
constructor(private session: Session, connectionOptions: LocalConnectionOptions | RemoteConnectionOptions) {
|
constructor(
|
||||||
|
private session: Session,
|
||||||
|
connectionOptions: LocalConnectionOptions | RemoteConnectionOptions
|
||||||
|
) {
|
||||||
let msg = "'Connection' created ";
|
let msg = "'Connection' created ";
|
||||||
if (!!(<LocalConnectionOptions>connectionOptions).role) {
|
if (!!(<LocalConnectionOptions>connectionOptions).role) {
|
||||||
// Connection is local
|
// Connection is local
|
||||||
|
|
@ -129,7 +132,6 @@ export class Connection {
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
sendIceCandidate(candidate: RTCIceCandidate): void {
|
sendIceCandidate(candidate: RTCIceCandidate): void {
|
||||||
|
|
||||||
if (!this.disposed) {
|
if (!this.disposed) {
|
||||||
logger.debug((!!this.stream!.outboundStreamOpts ? 'Local' : 'Remote') + 'candidate for' + this.connectionId, candidate);
|
logger.debug((!!this.stream!.outboundStreamOpts ? 'Local' : 'Remote') + 'candidate for' + this.connectionId, candidate);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ import { Stream } from './Stream';
|
||||||
import { LocalRecorderState } from '../OpenViduInternal/Enums/LocalRecorderState';
|
import { LocalRecorderState } from '../OpenViduInternal/Enums/LocalRecorderState';
|
||||||
import { OpenViduLogger } from '../OpenViduInternal/Logger/OpenViduLogger';
|
import { OpenViduLogger } from '../OpenViduInternal/Logger/OpenViduLogger';
|
||||||
import { PlatformUtils } from '../OpenViduInternal/Utils/Platform';
|
import { PlatformUtils } from '../OpenViduInternal/Utils/Platform';
|
||||||
import Mime = require('mime/lite');
|
import mime from 'mime';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
|
|
@ -288,7 +288,7 @@ export class LocalRecorder {
|
||||||
|
|
||||||
const url = globalThis.URL.createObjectURL(<any>this.blob);
|
const url = globalThis.URL.createObjectURL(<any>this.blob);
|
||||||
a.href = url;
|
a.href = url;
|
||||||
a.download = this.id + '.' + Mime.getExtension(this.blob!.type);
|
a.download = this.id + '.' + mime.getExtension(this.blob!.type);
|
||||||
a.click();
|
a.click();
|
||||||
globalThis.URL.revokeObjectURL(url);
|
globalThis.URL.revokeObjectURL(url);
|
||||||
|
|
||||||
|
|
@ -383,7 +383,7 @@ export class LocalRecorder {
|
||||||
}
|
}
|
||||||
|
|
||||||
const sendable = new FormData();
|
const sendable = new FormData();
|
||||||
sendable.append('file', this.blob!, this.id + '.' + Mime.getExtension(this.blob!.type));
|
sendable.append('file', this.blob!, this.id + '.' + mime.getExtension(this.blob!.type));
|
||||||
|
|
||||||
http.onreadystatechange = () => {
|
http.onreadystatechange = () => {
|
||||||
if (http.readyState === 4) {
|
if (http.readyState === 4) {
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ export class OpenVidu {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
sendBrowserLogs: OpenViduLoggerConfiguration = OpenViduLoggerConfiguration.disabled;
|
sendBrowserLogs: OpenViduLoggerConfiguration = 'disabled' as OpenViduLoggerConfiguration;
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
|
|
@ -220,8 +220,8 @@ export class OpenVidu {
|
||||||
typeof MediaStreamTrack !== 'undefined' && properties.videoSource instanceof MediaStreamTrack
|
typeof MediaStreamTrack !== 'undefined' && properties.videoSource instanceof MediaStreamTrack
|
||||||
? undefined
|
? undefined
|
||||||
: typeof properties.frameRate !== 'undefined'
|
: typeof properties.frameRate !== 'undefined'
|
||||||
? properties.frameRate
|
? properties.frameRate
|
||||||
: undefined,
|
: undefined,
|
||||||
insertMode:
|
insertMode:
|
||||||
typeof properties.insertMode !== 'undefined'
|
typeof properties.insertMode !== 'undefined'
|
||||||
? typeof properties.insertMode === 'string'
|
? typeof properties.insertMode === 'string'
|
||||||
|
|
@ -235,8 +235,8 @@ export class OpenVidu {
|
||||||
typeof MediaStreamTrack !== 'undefined' && properties.videoSource instanceof MediaStreamTrack
|
typeof MediaStreamTrack !== 'undefined' && properties.videoSource instanceof MediaStreamTrack
|
||||||
? undefined
|
? undefined
|
||||||
: typeof properties.resolution !== 'undefined'
|
: typeof properties.resolution !== 'undefined'
|
||||||
? properties.resolution
|
? properties.resolution
|
||||||
: '640x480',
|
: '640x480',
|
||||||
videoSource: typeof properties.videoSource !== 'undefined' ? properties.videoSource : undefined,
|
videoSource: typeof properties.videoSource !== 'undefined' ? properties.videoSource : undefined,
|
||||||
videoSimulcast: properties.videoSimulcast,
|
videoSimulcast: properties.videoSimulcast,
|
||||||
filter: properties.filter
|
filter: properties.filter
|
||||||
|
|
@ -567,7 +567,10 @@ export class OpenVidu {
|
||||||
if (navigator.mediaDevices['getDisplayMedia'] && !platform.isElectron()) {
|
if (navigator.mediaDevices['getDisplayMedia'] && !platform.isElectron()) {
|
||||||
// getDisplayMedia supported
|
// getDisplayMedia supported
|
||||||
try {
|
try {
|
||||||
const mediaStream = await navigator.mediaDevices['getDisplayMedia']({ video: true, audio: options.audioSource === 'screen' });
|
const mediaStream = await navigator.mediaDevices['getDisplayMedia']({
|
||||||
|
video: true,
|
||||||
|
audio: options.audioSource === 'screen'
|
||||||
|
});
|
||||||
this.addAlreadyProvidedTracks(myConstraints, mediaStream);
|
this.addAlreadyProvidedTracks(myConstraints, mediaStream);
|
||||||
if (mustAskForAudioTrackLater) {
|
if (mustAskForAudioTrackLater) {
|
||||||
return await askForAudioStreamOnly(mediaStream, <MediaStreamConstraints>myConstraints.constraints);
|
return await askForAudioStreamOnly(mediaStream, <MediaStreamConstraints>myConstraints.constraints);
|
||||||
|
|
@ -587,9 +590,7 @@ export class OpenVidu {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Use already calculated constraints
|
// Use already calculated constraints
|
||||||
const constraintsAux = mustAskForAudioTrackLater
|
const constraintsAux = mustAskForAudioTrackLater ? { video: myConstraints.constraints!.video } : myConstraints.constraints;
|
||||||
? { video: myConstraints.constraints!.video }
|
|
||||||
: myConstraints.constraints;
|
|
||||||
try {
|
try {
|
||||||
const mediaStream = await navigator.mediaDevices.getUserMedia(constraintsAux);
|
const mediaStream = await navigator.mediaDevices.getUserMedia(constraintsAux);
|
||||||
this.addAlreadyProvidedTracks(myConstraints, mediaStream);
|
this.addAlreadyProvidedTracks(myConstraints, mediaStream);
|
||||||
|
|
@ -614,14 +615,12 @@ export class OpenVidu {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* tslint:disable:no-empty */
|
|
||||||
/**
|
/**
|
||||||
* Disable all logging except error level
|
* Disable all logging except error level
|
||||||
*/
|
*/
|
||||||
enableProdMode(): void {
|
enableProdMode(): void {
|
||||||
logger.enableProdMode();
|
logger.enableProdMode();
|
||||||
}
|
}
|
||||||
/* tslint:enable:no-empty */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set OpenVidu advanced configuration options. `configuration` is an object of type {@link OpenViduAdvancedConfiguration}. Call this method to override previous values at any moment.
|
* Set OpenVidu advanced configuration options. `configuration` is an object of type {@link OpenViduAdvancedConfiguration}. Call this method to override previous values at any moment.
|
||||||
|
|
@ -642,7 +641,12 @@ export class OpenVidu {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
sendNewVideoDimensionsIfRequired(publisher: Publisher, reason: StreamPropertyChangedEventReason, WAIT_INTERVAL: number, MAX_ATTEMPTS: number) {
|
sendNewVideoDimensionsIfRequired(
|
||||||
|
publisher: Publisher,
|
||||||
|
reason: StreamPropertyChangedEventReason,
|
||||||
|
WAIT_INTERVAL: number,
|
||||||
|
MAX_ATTEMPTS: number
|
||||||
|
) {
|
||||||
let attempts = 0;
|
let attempts = 0;
|
||||||
const oldWidth = publisher?.stream?.videoDimensions?.width || 0;
|
const oldWidth = publisher?.stream?.videoDimensions?.width || 0;
|
||||||
const oldHeight = publisher?.stream?.videoDimensions?.height || 0;
|
const oldHeight = publisher?.stream?.videoDimensions?.height || 0;
|
||||||
|
|
@ -1025,7 +1029,9 @@ export class OpenVidu {
|
||||||
if (!this.isScreenShare(videoSource)) {
|
if (!this.isScreenShare(videoSource)) {
|
||||||
this.setVideoSource(myConstraints, videoSource);
|
this.setVideoSource(myConstraints, videoSource);
|
||||||
if (audioSource === 'screen') {
|
if (audioSource === 'screen') {
|
||||||
logger.warn('Parameter "audioSource" is set to "screen", which means rquesting audio from screen sharing source. But "videoSource" is not set to "screen". No audio source will be requested');
|
logger.warn(
|
||||||
|
'Parameter "audioSource" is set to "screen", which means rquesting audio from screen sharing source. But "videoSource" is not set to "screen". No audio source will be requested'
|
||||||
|
);
|
||||||
myConstraints.constraints!.audio = false;
|
myConstraints.constraints!.audio = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1035,9 +1041,9 @@ export class OpenVidu {
|
||||||
const error = new OpenViduError(
|
const error = new OpenViduError(
|
||||||
OpenViduErrorName.SCREEN_SHARING_NOT_SUPPORTED,
|
OpenViduErrorName.SCREEN_SHARING_NOT_SUPPORTED,
|
||||||
'You can only screen share in desktop Chrome, Firefox, Opera, Safari (>=13.0), Edge (>= 80) or Electron. Detected client: ' +
|
'You can only screen share in desktop Chrome, Firefox, Opera, Safari (>=13.0), Edge (>= 80) or Electron. Detected client: ' +
|
||||||
platform.getName() +
|
platform.getName() +
|
||||||
' ' +
|
' ' +
|
||||||
platform.getVersion()
|
platform.getVersion()
|
||||||
);
|
);
|
||||||
logger.error(error);
|
logger.error(error);
|
||||||
return reject(error);
|
return reject(error);
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ export class Publisher extends StreamManager {
|
||||||
|
|
||||||
private accessDenied = false;
|
private accessDenied = false;
|
||||||
protected properties: PublisherProperties;
|
protected properties: PublisherProperties;
|
||||||
private permissionDialogTimeout: NodeJS.Timer;
|
private permissionDialogTimeout: ReturnType<typeof setTimeout>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
|
|
@ -76,7 +76,7 @@ export class Publisher extends StreamManager {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
screenShareResizeInterval: NodeJS.Timer;
|
screenShareResizeInterval: ReturnType<typeof setInterval>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
|
|
@ -172,11 +172,11 @@ export class Publisher extends StreamManager {
|
||||||
*
|
*
|
||||||
* @param enabled `true` to publish the video stream, `false` to unpublish it
|
* @param enabled `true` to publish the video stream, `false` to unpublish it
|
||||||
* @param resource
|
* @param resource
|
||||||
*
|
*
|
||||||
* If parameter **`enabled`** is `false`, this optional parameter is of type boolean. It can be set to `true` to forcibly free the hardware resource associated to the video track, or can be set to `false` to keep the access to the hardware resource.
|
* If parameter **`enabled`** is `false`, this optional parameter is of type boolean. It can be set to `true` to forcibly free the hardware resource associated to the video track, or can be set to `false` to keep the access to the hardware resource.
|
||||||
* Not freeing the resource makes the operation much more efficient, but depending on the platform two side-effects can be introduced: the video device may not be accessible by other applications and the access light of
|
* Not freeing the resource makes the operation much more efficient, but depending on the platform two side-effects can be introduced: the video device may not be accessible by other applications and the access light of
|
||||||
* webcams may remain on. This is platform-dependent: some browsers will not present the side-effects even when not freeing the resource.
|
* webcams may remain on. This is platform-dependent: some browsers will not present the side-effects even when not freeing the resource.
|
||||||
*
|
*
|
||||||
* If parameter **`enabled`** is `true`, this optional parameter is of type [MediaStreamTrack](https://developer.mozilla.org/docs/Web/API/MediaStreamTrack). It can be set to force the restoration of the video track with a custom track. This may be
|
* If parameter **`enabled`** is `true`, this optional parameter is of type [MediaStreamTrack](https://developer.mozilla.org/docs/Web/API/MediaStreamTrack). It can be set to force the restoration of the video track with a custom track. This may be
|
||||||
* useful if the Publisher was unpublished freeing the hardware resource, and openvidu-browser is not able to successfully re-create the video track as it was before unpublishing. In this way previous track settings will be ignored and this MediaStreamTrack
|
* useful if the Publisher was unpublished freeing the hardware resource, and openvidu-browser is not able to successfully re-create the video track as it was before unpublishing. In this way previous track settings will be ignored and this MediaStreamTrack
|
||||||
* will be used instead.
|
* will be used instead.
|
||||||
|
|
@ -470,8 +470,7 @@ export class Publisher extends StreamManager {
|
||||||
};
|
};
|
||||||
|
|
||||||
if (this.stream.isSendScreen()) {
|
if (this.stream.isSendScreen()) {
|
||||||
|
if (this.stream.isSendAudio() && mediaStream.getAudioTracks().length === 0) {
|
||||||
if(this.stream.isSendAudio() && mediaStream.getAudioTracks().length === 0){
|
|
||||||
// If sending audio is enabled and there are no audio tracks in the mediaStream, disable audio for screen sharing.
|
// If sending audio is enabled and there are no audio tracks in the mediaStream, disable audio for screen sharing.
|
||||||
this.stream.audioActive = false;
|
this.stream.audioActive = false;
|
||||||
this.stream.hasAudio = false;
|
this.stream.hasAudio = false;
|
||||||
|
|
@ -653,7 +652,10 @@ export class Publisher extends StreamManager {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (this.stream.isSendScreen() && navigator.mediaDevices['getDisplayMedia'] && !platform.isElectron()) {
|
if (this.stream.isSendScreen() && navigator.mediaDevices['getDisplayMedia'] && !platform.isElectron()) {
|
||||||
const mediaStream = await navigator.mediaDevices['getDisplayMedia']({ video: true, audio: this.properties.audioSource === 'screen' });
|
const mediaStream = await navigator.mediaDevices['getDisplayMedia']({
|
||||||
|
video: true,
|
||||||
|
audio: this.properties.audioSource === 'screen'
|
||||||
|
});
|
||||||
this.openvidu.addAlreadyProvidedTracks(myConstraints, mediaStream);
|
this.openvidu.addAlreadyProvidedTracks(myConstraints, mediaStream);
|
||||||
await getMediaSuccess(mediaStream, definedAudioConstraint);
|
await getMediaSuccess(mediaStream, definedAudioConstraint);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -709,7 +711,8 @@ export class Publisher extends StreamManager {
|
||||||
getVideoDimensions(): Promise<{ width: number; height: number }> {
|
getVideoDimensions(): Promise<{ width: number; height: number }> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
// Ionic iOS and Safari iOS supposedly require the video element to actually exist inside the DOM
|
// Ionic iOS and Safari iOS supposedly require the video element to actually exist inside the DOM
|
||||||
const requiresDomInsertion: boolean = (platform.isIonicIos() || platform.isIOSWithSafari()) && (this.videoReference.readyState < 1);
|
const requiresDomInsertion: boolean =
|
||||||
|
(platform.isIonicIos() || platform.isIOSWithSafari()) && this.videoReference.readyState < 1;
|
||||||
|
|
||||||
let loadedmetadataListener;
|
let loadedmetadataListener;
|
||||||
const resolveDimensions = () => {
|
const resolveDimensions = () => {
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,13 @@ import { OpenViduError, OpenViduErrorName } from '../OpenViduInternal/Enums/Open
|
||||||
import { VideoInsertMode } from '../OpenViduInternal/Enums/VideoInsertMode';
|
import { VideoInsertMode } from '../OpenViduInternal/Enums/VideoInsertMode';
|
||||||
import { OpenViduLogger } from '../OpenViduInternal/Logger/OpenViduLogger';
|
import { OpenViduLogger } from '../OpenViduInternal/Logger/OpenViduLogger';
|
||||||
import { PlatformUtils } from '../OpenViduInternal/Utils/Platform';
|
import { PlatformUtils } from '../OpenViduInternal/Utils/Platform';
|
||||||
import { StreamPropertyChangedEventReason, ChangedPropertyType, RecordingEventReason, ConnectionEventReason, StreamEventReason } from '../OpenViduInternal/Events/Types/Types';
|
import {
|
||||||
|
StreamPropertyChangedEventReason,
|
||||||
|
ChangedPropertyType,
|
||||||
|
RecordingEventReason,
|
||||||
|
ConnectionEventReason,
|
||||||
|
StreamEventReason
|
||||||
|
} from '../OpenViduInternal/Events/Types/Types';
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
|
|
@ -183,12 +189,12 @@ export class Session extends EventDispatcher {
|
||||||
new OpenViduError(
|
new OpenViduError(
|
||||||
OpenViduErrorName.BROWSER_NOT_SUPPORTED,
|
OpenViduErrorName.BROWSER_NOT_SUPPORTED,
|
||||||
'Browser ' +
|
'Browser ' +
|
||||||
platform.getName() +
|
platform.getName() +
|
||||||
' (version ' +
|
' (version ' +
|
||||||
platform.getVersion() +
|
platform.getVersion() +
|
||||||
') for ' +
|
') for ' +
|
||||||
platform.getFamily() +
|
platform.getFamily() +
|
||||||
' is not supported in OpenVidu'
|
' is not supported in OpenVidu'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -471,7 +477,7 @@ export class Session extends EventDispatcher {
|
||||||
return reject(
|
return reject(
|
||||||
new Error(
|
new Error(
|
||||||
'The associated Connection object of this Publisher is not your local Connection. ' +
|
'The associated Connection object of this Publisher is not your local Connection. ' +
|
||||||
"Only moderators can force unpublish on remote Streams via 'forceUnpublish' method"
|
"Only moderators can force unpublish on remote Streams via 'forceUnpublish' method"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -652,7 +658,7 @@ export class Session extends EventDispatcher {
|
||||||
*
|
*
|
||||||
* @param stream - The Stream for which you want to start receiving {@link SpeechToTextEvent}.
|
* @param stream - The Stream for which you want to start receiving {@link SpeechToTextEvent}.
|
||||||
* @param lang - The language of the Stream's audio track. It must be a valid [BCP-47](https://tools.ietf.org/html/bcp47) language tag like "en-US" or "es-ES".
|
* @param lang - The language of the Stream's audio track. It must be a valid [BCP-47](https://tools.ietf.org/html/bcp47) language tag like "en-US" or "es-ES".
|
||||||
*
|
*
|
||||||
* @returns A Promise (to which you can optionally subscribe to) that is resolved if the speech-to-text subscription
|
* @returns A Promise (to which you can optionally subscribe to) that is resolved if the speech-to-text subscription
|
||||||
* was successful and rejected with an Error object if not.
|
* was successful and rejected with an Error object if not.
|
||||||
*/
|
*/
|
||||||
|
|
@ -949,11 +955,11 @@ export class Session extends EventDispatcher {
|
||||||
this.getConnection(
|
this.getConnection(
|
||||||
event.from,
|
event.from,
|
||||||
"Connection '" +
|
"Connection '" +
|
||||||
event.from +
|
event.from +
|
||||||
"' unknown when 'onNewMessage'. Existing remote connections: " +
|
"' unknown when 'onNewMessage'. Existing remote connections: " +
|
||||||
JSON.stringify(this.remoteConnections.keys()) +
|
JSON.stringify(this.remoteConnections.keys()) +
|
||||||
'. Existing local connection: ' +
|
'. Existing local connection: ' +
|
||||||
this.connection.connectionId
|
this.connection.connectionId
|
||||||
)
|
)
|
||||||
|
|
||||||
.then((connection) => {
|
.then((connection) => {
|
||||||
|
|
@ -977,7 +983,13 @@ export class Session extends EventDispatcher {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
onStreamPropertyChanged(event: { connectionId: string; streamId: string; property: ChangedPropertyType; newValue: any; reason: StreamPropertyChangedEventReason }): void {
|
onStreamPropertyChanged(event: {
|
||||||
|
connectionId: string;
|
||||||
|
streamId: string;
|
||||||
|
property: ChangedPropertyType;
|
||||||
|
newValue: any;
|
||||||
|
reason: StreamPropertyChangedEventReason;
|
||||||
|
}): void {
|
||||||
const callback = (connection: Connection) => {
|
const callback = (connection: Connection) => {
|
||||||
if (!!connection.stream && connection.stream.streamId === event.streamId) {
|
if (!!connection.stream && connection.stream.streamId === event.streamId) {
|
||||||
const stream = connection.stream;
|
const stream = connection.stream;
|
||||||
|
|
@ -993,7 +1005,7 @@ export class Session extends EventDispatcher {
|
||||||
event.newValue = event.newValue === 'true';
|
event.newValue = event.newValue === 'true';
|
||||||
stream.videoActive = event.newValue;
|
stream.videoActive = event.newValue;
|
||||||
const videoTrack = stream?.getMediaStream()?.getVideoTracks()?.[0];
|
const videoTrack = stream?.getMediaStream()?.getVideoTracks()?.[0];
|
||||||
if(videoTrack && !videoTrack.enabled && stream.videoActive){
|
if (videoTrack && !videoTrack.enabled && stream.videoActive) {
|
||||||
videoTrack.enabled = true;
|
videoTrack.enabled = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -1034,10 +1046,10 @@ export class Session extends EventDispatcher {
|
||||||
} else {
|
} else {
|
||||||
logger.error(
|
logger.error(
|
||||||
"No stream with streamId '" +
|
"No stream with streamId '" +
|
||||||
event.streamId +
|
event.streamId +
|
||||||
"' found for connection '" +
|
"' found for connection '" +
|
||||||
event.connectionId +
|
event.connectionId +
|
||||||
"' on 'streamPropertyChanged' event"
|
"' on 'streamPropertyChanged' event"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -1123,11 +1135,11 @@ export class Session extends EventDispatcher {
|
||||||
this.getConnection(
|
this.getConnection(
|
||||||
event.senderConnectionId,
|
event.senderConnectionId,
|
||||||
'Connection not found for connectionId ' +
|
'Connection not found for connectionId ' +
|
||||||
event.senderConnectionId +
|
event.senderConnectionId +
|
||||||
' owning endpoint ' +
|
' owning endpoint ' +
|
||||||
event.endpointName +
|
event.endpointName +
|
||||||
'. Ice candidate will be ignored: ' +
|
'. Ice candidate will be ignored: ' +
|
||||||
iceCandidate
|
iceCandidate
|
||||||
)
|
)
|
||||||
.then((connection) => {
|
.then((connection) => {
|
||||||
const stream: Stream = connection.stream!;
|
const stream: Stream = connection.stream!;
|
||||||
|
|
@ -1232,7 +1244,8 @@ export class Session extends EventDispatcher {
|
||||||
const stream: Stream = connection.stream!;
|
const stream: Stream = connection.stream!;
|
||||||
if (!stream || !stream.filter) {
|
if (!stream || !stream.filter) {
|
||||||
return logger.error(
|
return logger.error(
|
||||||
`Filter event of type "${event.eventType}" dispatched for stream ${stream.streamId} but there is no ${!stream ? 'stream' : 'filter'
|
`Filter event of type "${event.eventType}" dispatched for stream ${stream.streamId} but there is no ${
|
||||||
|
!stream ? 'stream' : 'filter'
|
||||||
} defined`
|
} defined`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -1356,7 +1369,7 @@ export class Session extends EventDispatcher {
|
||||||
lang: string;
|
lang: string;
|
||||||
}): Promise<void> {
|
}): Promise<void> {
|
||||||
const connection = await this.getConnection(event.connectionId, 'No connection found for connectionId ' + event.connectionId);
|
const connection = await this.getConnection(event.connectionId, 'No connection found for connectionId ' + event.connectionId);
|
||||||
const ev = new SpeechToTextEvent(this, connection, event.text, <any>(event.reason).toLowerCase(), event.raw, event.lang);
|
const ev = new SpeechToTextEvent(this, connection, event.text, <any>event.reason.toLowerCase(), event.raw, event.lang);
|
||||||
this.ee.emitEvent('speechToTextMessage', [ev]);
|
this.ee.emitEvent('speechToTextMessage', [ev]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1503,12 +1516,12 @@ export class Session extends EventDispatcher {
|
||||||
} else {
|
} else {
|
||||||
logger.error(
|
logger.error(
|
||||||
'Browser ' +
|
'Browser ' +
|
||||||
platform.getName() +
|
platform.getName() +
|
||||||
' (version ' +
|
' (version ' +
|
||||||
platform.getVersion() +
|
platform.getVersion() +
|
||||||
') for ' +
|
') for ' +
|
||||||
platform.getFamily() +
|
platform.getFamily() +
|
||||||
' is not supported in OpenVidu for Network Quality'
|
' is not supported in OpenVidu for Network Quality'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1783,15 +1796,15 @@ export class Session extends EventDispatcher {
|
||||||
if (semverMajor(opts.version) !== semverMajor(this.openvidu.libraryVersion) || !(minorDifference == 0 || minorDifference == 1)) {
|
if (semverMajor(opts.version) !== semverMajor(this.openvidu.libraryVersion) || !(minorDifference == 0 || minorDifference == 1)) {
|
||||||
logger.error(
|
logger.error(
|
||||||
`openvidu-browser (${this.openvidu.libraryVersion}) and openvidu-server (${opts.version}) versions are incompatible. ` +
|
`openvidu-browser (${this.openvidu.libraryVersion}) and openvidu-server (${opts.version}) versions are incompatible. ` +
|
||||||
'Errors are likely to occur. openvidu-browser SDK is only compatible with the same version or the immediately following minor version of an OpenVidu deployment'
|
'Errors are likely to occur. openvidu-browser SDK is only compatible with the same version or the immediately following minor version of an OpenVidu deployment'
|
||||||
);
|
);
|
||||||
} else if (minorDifference == 1) {
|
} else if (minorDifference == 1) {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
`openvidu-browser version ${this.openvidu.libraryVersion} does not match openvidu-server version ${opts.version}. ` +
|
`openvidu-browser version ${this.openvidu.libraryVersion} does not match openvidu-server version ${opts.version}. ` +
|
||||||
`These versions are still compatible with each other, but openvidu-browser version must be updated as soon as possible to ${semverMajor(
|
`These versions are still compatible with each other, but openvidu-browser version must be updated as soon as possible to ${semverMajor(
|
||||||
opts.version
|
opts.version
|
||||||
)}.${semverMinor(opts.version)}.x. ` +
|
)}.${semverMinor(opts.version)}.x. ` +
|
||||||
`This client using openvidu-browser ${this.openvidu.libraryVersion} will become incompatible with the next release of openvidu-server`
|
`This client using openvidu-browser ${this.openvidu.libraryVersion} will become incompatible with the next release of openvidu-server`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ import { TypeOfVideo } from '../OpenViduInternal/Enums/TypeOfVideo';
|
||||||
import { OpenViduLogger } from '../OpenViduInternal/Logger/OpenViduLogger';
|
import { OpenViduLogger } from '../OpenViduInternal/Logger/OpenViduLogger';
|
||||||
import { PlatformUtils } from '../OpenViduInternal/Utils/Platform';
|
import { PlatformUtils } from '../OpenViduInternal/Utils/Platform';
|
||||||
|
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuid } from 'uuid';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
|
|
@ -414,7 +414,7 @@ export class Stream {
|
||||||
|
|
||||||
const afterScriptLoaded = async () => {
|
const afterScriptLoaded = async () => {
|
||||||
try {
|
try {
|
||||||
const id = this.streamId + '_' + uuidv4();
|
const id = this.streamId + '_' + uuid();
|
||||||
const mediaStreamClone = this.mediaStream!.clone();
|
const mediaStreamClone = this.mediaStream!.clone();
|
||||||
const videoClone = this.streamManager.videos[0].video.cloneNode(false) as HTMLVideoElement;
|
const videoClone = this.streamManager.videos[0].video.cloneNode(false) as HTMLVideoElement;
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|
@ -707,11 +707,11 @@ export class Stream {
|
||||||
this.stopWebRtcStats();
|
this.stopWebRtcStats();
|
||||||
logger.info(
|
logger.info(
|
||||||
(!!this.outboundStreamOpts ? 'Outbound ' : 'Inbound ') +
|
(!!this.outboundStreamOpts ? 'Outbound ' : 'Inbound ') +
|
||||||
'RTCPeerConnection with id [' +
|
'RTCPeerConnection with id [' +
|
||||||
webrtcId +
|
webrtcId +
|
||||||
"] from 'Stream' with id [" +
|
"] from 'Stream' with id [" +
|
||||||
this.streamId +
|
this.streamId +
|
||||||
'] is now closed'
|
'] is now closed'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -790,12 +790,14 @@ export class Stream {
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
isSendScreen(): boolean {
|
isSendScreen(): boolean {
|
||||||
let screen = false
|
let screen = false;
|
||||||
if (typeof MediaStreamTrack !== 'undefined' &&
|
if (
|
||||||
this.outboundStreamOpts.publisherProperties.videoSource instanceof MediaStreamTrack) {
|
typeof MediaStreamTrack !== 'undefined' &&
|
||||||
|
this.outboundStreamOpts.publisherProperties.videoSource instanceof MediaStreamTrack
|
||||||
|
) {
|
||||||
let trackSettings: any = this.outboundStreamOpts.publisherProperties.videoSource.getSettings();
|
let trackSettings: any = this.outboundStreamOpts.publisherProperties.videoSource.getSettings();
|
||||||
if (trackSettings.displaySurface) {
|
if (trackSettings.displaySurface) {
|
||||||
screen = ["monitor", "window", "browser"].includes(trackSettings.displaySurface);
|
screen = ['monitor', 'window', 'browser'].includes(trackSettings.displaySurface);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!screen && platform.isElectron()) {
|
if (!screen && platform.isElectron()) {
|
||||||
|
|
@ -1074,7 +1076,8 @@ export class Stream {
|
||||||
}
|
}
|
||||||
if (!!this.session.openvidu.advancedConfiguration.forceMediaReconnectionAfterNetworkDrop) {
|
if (!!this.session.openvidu.advancedConfiguration.forceMediaReconnectionAfterNetworkDrop) {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
`OpenVidu Browser advanced configuration option "forceMediaReconnectionAfterNetworkDrop" is enabled. Stream ${this.streamId
|
`OpenVidu Browser advanced configuration option "forceMediaReconnectionAfterNetworkDrop" is enabled. Stream ${
|
||||||
|
this.streamId
|
||||||
} (${this.isLocal() ? 'Publisher' : 'Subscriber'}) will force a reconnection`
|
} (${this.isLocal() ? 'Publisher' : 'Subscriber'}) will force a reconnection`
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -1112,7 +1115,8 @@ export class Stream {
|
||||||
} else {
|
} else {
|
||||||
// Ongoing reconnection
|
// Ongoing reconnection
|
||||||
console.warn(
|
console.warn(
|
||||||
`Trying to reconnect stream ${this.streamId} (${this.isLocal() ? 'Publisher' : 'Subscriber'
|
`Trying to reconnect stream ${this.streamId} (${
|
||||||
|
this.isLocal() ? 'Publisher' : 'Subscriber'
|
||||||
}) but an ongoing reconnection process is active. Waiting for response...`
|
}) but an ongoing reconnection process is active. Waiting for response...`
|
||||||
);
|
);
|
||||||
this.reconnectionEventEmitter.once('success', () => resolve());
|
this.reconnectionEventEmitter.once('success', () => resolve());
|
||||||
|
|
@ -1167,11 +1171,11 @@ export class Stream {
|
||||||
if (this.isSendVideo()) {
|
if (this.isSendVideo()) {
|
||||||
typeOfVideo =
|
typeOfVideo =
|
||||||
typeof MediaStreamTrack !== 'undefined' &&
|
typeof MediaStreamTrack !== 'undefined' &&
|
||||||
this.outboundStreamOpts.publisherProperties.videoSource instanceof MediaStreamTrack
|
this.outboundStreamOpts.publisherProperties.videoSource instanceof MediaStreamTrack
|
||||||
? TypeOfVideo.CUSTOM
|
? TypeOfVideo.CUSTOM
|
||||||
: this.isSendScreen()
|
: this.isSendScreen()
|
||||||
? TypeOfVideo.SCREEN
|
? TypeOfVideo.SCREEN
|
||||||
: TypeOfVideo.CAMERA;
|
: TypeOfVideo.CAMERA;
|
||||||
}
|
}
|
||||||
params = {
|
params = {
|
||||||
doLoopback: this.displayMyRemote() || false,
|
doLoopback: this.displayMyRemote() || false,
|
||||||
|
|
@ -1216,10 +1220,10 @@ export class Stream {
|
||||||
this.initWebRtcStats();
|
this.initWebRtcStats();
|
||||||
logger.info(
|
logger.info(
|
||||||
"'Publisher' (" +
|
"'Publisher' (" +
|
||||||
this.streamId +
|
this.streamId +
|
||||||
') successfully ' +
|
') successfully ' +
|
||||||
(reconnect ? 'reconnected' : 'published') +
|
(reconnect ? 'reconnected' : 'published') +
|
||||||
' to session'
|
' to session'
|
||||||
);
|
);
|
||||||
|
|
||||||
finalResolve();
|
finalResolve();
|
||||||
|
|
@ -1298,11 +1302,11 @@ export class Stream {
|
||||||
finalRejectForSubscription(reconnect: boolean, error: any, reject: (reason?: any) => void) {
|
finalRejectForSubscription(reconnect: boolean, error: any, reject: (reason?: any) => void) {
|
||||||
logger.error(
|
logger.error(
|
||||||
"Error for 'Subscriber' (" +
|
"Error for 'Subscriber' (" +
|
||||||
this.streamId +
|
this.streamId +
|
||||||
') while trying to ' +
|
') while trying to ' +
|
||||||
(reconnect ? 'reconnect' : 'subscribe') +
|
(reconnect ? 'reconnect' : 'subscribe') +
|
||||||
': ' +
|
': ' +
|
||||||
error.toString()
|
error.toString()
|
||||||
);
|
);
|
||||||
if (reconnect) {
|
if (reconnect) {
|
||||||
this.reconnectionEventEmitter?.emitEvent('error', [error]);
|
this.reconnectionEventEmitter?.emitEvent('error', [error]);
|
||||||
|
|
@ -1494,7 +1498,9 @@ export class Stream {
|
||||||
this.mediaStream.getAudioTracks()[0].enabled = enabled;
|
this.mediaStream.getAudioTracks()[0].enabled = enabled;
|
||||||
}
|
}
|
||||||
if (!!this.mediaStream.getVideoTracks()[0]) {
|
if (!!this.mediaStream.getVideoTracks()[0]) {
|
||||||
const enabled = reconnect ? this.videoActive : !!this.videoActive && !!(this.streamManager as Subscriber).properties.subscribeToVideo;
|
const enabled = reconnect
|
||||||
|
? this.videoActive
|
||||||
|
: !!this.videoActive && !!(this.streamManager as Subscriber).properties.subscribeToVideo;
|
||||||
this.mediaStream.getVideoTracks()[0].enabled = enabled;
|
this.mediaStream.getVideoTracks()[0].enabled = enabled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1546,7 +1552,8 @@ export class Stream {
|
||||||
private onIceConnectionFailed() {
|
private onIceConnectionFailed() {
|
||||||
// Immediately reconnect, as this is a terminal error
|
// Immediately reconnect, as this is a terminal error
|
||||||
logger.log(
|
logger.log(
|
||||||
`[ICE_CONNECTION_FAILED] Handling ICE_CONNECTION_FAILED event. Reconnecting stream ${this.streamId} (${this.isLocal() ? 'Publisher' : 'Subscriber'
|
`[ICE_CONNECTION_FAILED] Handling ICE_CONNECTION_FAILED event. Reconnecting stream ${this.streamId} (${
|
||||||
|
this.isLocal() ? 'Publisher' : 'Subscriber'
|
||||||
})`
|
})`
|
||||||
);
|
);
|
||||||
this.reconnectStreamAndLogResultingIceConnectionState(ExceptionEventName.ICE_CONNECTION_FAILED);
|
this.reconnectStreamAndLogResultingIceConnectionState(ExceptionEventName.ICE_CONNECTION_FAILED);
|
||||||
|
|
@ -1555,7 +1562,8 @@ export class Stream {
|
||||||
private onIceConnectionDisconnected() {
|
private onIceConnectionDisconnected() {
|
||||||
// Wait to see if the ICE connection is able to reconnect
|
// Wait to see if the ICE connection is able to reconnect
|
||||||
logger.log(
|
logger.log(
|
||||||
`[ICE_CONNECTION_DISCONNECTED] Handling ICE_CONNECTION_DISCONNECTED event. Waiting for ICE to be restored and reconnect stream ${this.streamId
|
`[ICE_CONNECTION_DISCONNECTED] Handling ICE_CONNECTION_DISCONNECTED event. Waiting for ICE to be restored and reconnect stream ${
|
||||||
|
this.streamId
|
||||||
} (${this.isLocal() ? 'Publisher' : 'Subscriber'}) if not possible`
|
} (${this.isLocal() ? 'Publisher' : 'Subscriber'}) if not possible`
|
||||||
);
|
);
|
||||||
const timeout = this.session.openvidu.advancedConfiguration.iceConnectionDisconnectedExceptionTimeout || 4000;
|
const timeout = this.session.openvidu.advancedConfiguration.iceConnectionDisconnectedExceptionTimeout || 4000;
|
||||||
|
|
@ -1564,14 +1572,16 @@ export class Stream {
|
||||||
case 'failed':
|
case 'failed':
|
||||||
// Do nothing, as an ICE_CONNECTION_FAILED event will have already raised
|
// Do nothing, as an ICE_CONNECTION_FAILED event will have already raised
|
||||||
logger.warn(
|
logger.warn(
|
||||||
`[ICE_CONNECTION_DISCONNECTED] ICE connection of stream ${this.streamId} (${this.isLocal() ? 'Publisher' : 'Subscriber'
|
`[ICE_CONNECTION_DISCONNECTED] ICE connection of stream ${this.streamId} (${
|
||||||
|
this.isLocal() ? 'Publisher' : 'Subscriber'
|
||||||
}) is now failed after ICE_CONNECTION_DISCONNECTED`
|
}) is now failed after ICE_CONNECTION_DISCONNECTED`
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case 'connected':
|
case 'connected':
|
||||||
case 'completed':
|
case 'completed':
|
||||||
logger.log(
|
logger.log(
|
||||||
`[ICE_CONNECTION_DISCONNECTED] ICE connection of stream ${this.streamId} (${this.isLocal() ? 'Publisher' : 'Subscriber'
|
`[ICE_CONNECTION_DISCONNECTED] ICE connection of stream ${this.streamId} (${
|
||||||
|
this.isLocal() ? 'Publisher' : 'Subscriber'
|
||||||
}) automatically restored after ICE_CONNECTION_DISCONNECTED. Current ICE connection state: ${state}`
|
}) automatically restored after ICE_CONNECTION_DISCONNECTED. Current ICE connection state: ${state}`
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
@ -1581,7 +1591,8 @@ export class Stream {
|
||||||
case 'disconnected':
|
case 'disconnected':
|
||||||
// Rest of states
|
// Rest of states
|
||||||
logger.warn(
|
logger.warn(
|
||||||
`[ICE_CONNECTION_DISCONNECTED] ICE connection of stream ${this.streamId} (${this.isLocal() ? 'Publisher' : 'Subscriber'
|
`[ICE_CONNECTION_DISCONNECTED] ICE connection of stream ${this.streamId} (${
|
||||||
|
this.isLocal() ? 'Publisher' : 'Subscriber'
|
||||||
}) couldn't be restored after ICE_CONNECTION_DISCONNECTED event. Current ICE connection state after ${timeout} ms: ${state}`
|
}) couldn't be restored after ICE_CONNECTION_DISCONNECTED event. Current ICE connection state after ${timeout} ms: ${state}`
|
||||||
);
|
);
|
||||||
this.reconnectStreamAndLogResultingIceConnectionState(ExceptionEventName.ICE_CONNECTION_DISCONNECTED);
|
this.reconnectStreamAndLogResultingIceConnectionState(ExceptionEventName.ICE_CONNECTION_DISCONNECTED);
|
||||||
|
|
@ -1597,20 +1608,23 @@ export class Stream {
|
||||||
case 'connected':
|
case 'connected':
|
||||||
case 'completed':
|
case 'completed':
|
||||||
logger.log(
|
logger.log(
|
||||||
`[${event}] Stream ${this.streamId} (${this.isLocal() ? 'Publisher' : 'Subscriber'
|
`[${event}] Stream ${this.streamId} (${
|
||||||
|
this.isLocal() ? 'Publisher' : 'Subscriber'
|
||||||
}) successfully reconnected after ${event}. Current ICE connection state: ${finalIceStateAfterReconnection}`
|
}) successfully reconnected after ${event}. Current ICE connection state: ${finalIceStateAfterReconnection}`
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
logger.error(
|
logger.error(
|
||||||
`[${event}] Stream ${this.streamId} (${this.isLocal() ? 'Publisher' : 'Subscriber'
|
`[${event}] Stream ${this.streamId} (${
|
||||||
|
this.isLocal() ? 'Publisher' : 'Subscriber'
|
||||||
}) failed to reconnect after ${event}. Current ICE connection state: ${finalIceStateAfterReconnection}`
|
}) failed to reconnect after ${event}. Current ICE connection state: ${finalIceStateAfterReconnection}`
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(
|
logger.error(
|
||||||
`[${event}] Error reconnecting stream ${this.streamId} (${this.isLocal() ? 'Publisher' : 'Subscriber'
|
`[${event}] Error reconnecting stream ${this.streamId} (${
|
||||||
|
this.isLocal() ? 'Publisher' : 'Subscriber'
|
||||||
}) after ${event}: ${error}`
|
}) after ${event}: ${error}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -1650,7 +1664,8 @@ export class Stream {
|
||||||
if (isWsConnected) {
|
if (isWsConnected) {
|
||||||
// There is connection to openvidu-server. The RTCPeerConnection is the only one broken
|
// There is connection to openvidu-server. The RTCPeerConnection is the only one broken
|
||||||
logger.log(
|
logger.log(
|
||||||
`[${event}] Trying to reconnect stream ${this.streamId} (${this.isLocal() ? 'Publisher' : 'Subscriber'
|
`[${event}] Trying to reconnect stream ${this.streamId} (${
|
||||||
|
this.isLocal() ? 'Publisher' : 'Subscriber'
|
||||||
}) and the websocket is opened`
|
}) and the websocket is opened`
|
||||||
);
|
);
|
||||||
if (this.isLocal()) {
|
if (this.isLocal()) {
|
||||||
|
|
@ -1661,8 +1676,9 @@ export class Stream {
|
||||||
} else {
|
} else {
|
||||||
// There is no connection to openvidu-server. Nothing can be done. The automatic reconnection
|
// There is no connection to openvidu-server. Nothing can be done. The automatic reconnection
|
||||||
// feature should handle a possible reconnection of RTCPeerConnection in case network comes back
|
// feature should handle a possible reconnection of RTCPeerConnection in case network comes back
|
||||||
const errorMsg = `[${event}] Trying to reconnect stream ${this.streamId} (${this.isLocal() ? 'Publisher' : 'Subscriber'
|
const errorMsg = `[${event}] Trying to reconnect stream ${this.streamId} (${
|
||||||
}) but the websocket wasn't opened`;
|
this.isLocal() ? 'Publisher' : 'Subscriber'
|
||||||
|
}) but the websocket wasn't opened`;
|
||||||
logger.error(errorMsg);
|
logger.error(errorMsg);
|
||||||
throw Error(errorMsg);
|
throw Error(errorMsg);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -388,14 +388,14 @@ export abstract class StreamManager extends EventDispatcher {
|
||||||
typeof publisherSpeakingEventsOptions.interval === 'number'
|
typeof publisherSpeakingEventsOptions.interval === 'number'
|
||||||
? publisherSpeakingEventsOptions.interval
|
? publisherSpeakingEventsOptions.interval
|
||||||
: typeof currentHarkOptions.interval === 'number'
|
: typeof currentHarkOptions.interval === 'number'
|
||||||
? currentHarkOptions.interval
|
? currentHarkOptions.interval
|
||||||
: 100;
|
: 100;
|
||||||
const newThreshold =
|
const newThreshold =
|
||||||
typeof publisherSpeakingEventsOptions.threshold === 'number'
|
typeof publisherSpeakingEventsOptions.threshold === 'number'
|
||||||
? publisherSpeakingEventsOptions.threshold
|
? publisherSpeakingEventsOptions.threshold
|
||||||
: typeof currentHarkOptions.threshold === 'number'
|
: typeof currentHarkOptions.threshold === 'number'
|
||||||
? currentHarkOptions.threshold
|
? currentHarkOptions.threshold
|
||||||
: -50;
|
: -50;
|
||||||
this.stream.harkOptions = {
|
this.stream.harkOptions = {
|
||||||
interval: newInterval,
|
interval: newInterval,
|
||||||
threshold: newThreshold
|
threshold: newThreshold
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,9 @@
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"allowSyntheticDefaultImports": true,
|
"allowSyntheticDefaultImports": true,
|
||||||
"emitBOM": false,
|
"emitBOM": false,
|
||||||
|
"esModuleInterop": true,
|
||||||
"forceConsistentCasingInFileNames": true,
|
"forceConsistentCasingInFileNames": true,
|
||||||
"lib": [
|
"lib": ["dom", "es2015", "scripthost"],
|
||||||
"dom",
|
|
||||||
"es2015.promise",
|
|
||||||
"es5",
|
|
||||||
"scripthost"
|
|
||||||
],
|
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
"noFallthroughCasesInSwitch": true,
|
"noFallthroughCasesInSwitch": true,
|
||||||
//"noImplicitAny": true,
|
//"noImplicitAny": true,
|
||||||
|
|
@ -28,8 +24,6 @@
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"strictNullChecks": true,
|
"strictNullChecks": true,
|
||||||
"suppressExcessPropertyErrors": true,
|
"target": "es2015"
|
||||||
"suppressImplicitAnyIndexErrors": true,
|
|
||||||
"target": "es5"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,6 @@ export class ConnectionEvent extends Event {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
callDefaultBehavior() { }
|
callDefaultBehavior() {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,6 @@ export class ConnectionPropertyChangedEvent extends Event {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
callDefaultBehavior() {}
|
callDefaultBehavior() {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,6 @@ export abstract class Event {
|
||||||
* by calling {@link Subscriber.createVideoElement}). For every video removed, the Subscriber object will also dispatch a `videoElementDestroyed` event.
|
* by calling {@link Subscriber.createVideoElement}). For every video removed, the Subscriber object will also dispatch a `videoElementDestroyed` event.
|
||||||
*/
|
*/
|
||||||
preventDefault() {
|
preventDefault() {
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
this.callDefaultBehavior = () => {};
|
this.callDefaultBehavior = () => {};
|
||||||
this.hasBeenPrevented = true;
|
this.hasBeenPrevented = true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ export interface SessionEventMap extends EventMap {
|
||||||
* and
|
* and
|
||||||
* <a href="https://docs.openvidu.io/en/stable/openvidu-enterprise/" style="display: inline-block; background-color: rgb(156, 39, 176); color: white; font-weight: bold; padding: 0px 5px; margin: 0 2px 0 2px; border-radius: 3px; font-size: 13px; line-height:21px; text-decoration: none; font-family: Montserrat, sans-serif">ENTERPRISE</a>
|
* <a href="https://docs.openvidu.io/en/stable/openvidu-enterprise/" style="display: inline-block; background-color: rgb(156, 39, 176); color: white; font-weight: bold; padding: 0px 5px; margin: 0 2px 0 2px; border-radius: 3px; font-size: 13px; line-height:21px; text-decoration: none; font-family: Montserrat, sans-serif">ENTERPRISE</a>
|
||||||
* editions**
|
* editions**
|
||||||
*
|
*
|
||||||
* Event dispatched when a property of the local {@link Connection} object changes.
|
* Event dispatched when a property of the local {@link Connection} object changes.
|
||||||
*
|
*
|
||||||
* It is fired only for the local user.
|
* It is fired only for the local user.
|
||||||
|
|
@ -162,7 +162,7 @@ export interface SessionEventMap extends EventMap {
|
||||||
* and
|
* and
|
||||||
* <a href="https://docs.openvidu.io/en/stable/openvidu-enterprise/" style="display: inline-block; background-color: rgb(156, 39, 176); color: white; font-weight: bold; padding: 0px 5px; margin: 0 2px 0 2px; border-radius: 3px; font-size: 13px; line-height:21px; text-decoration: none; font-family: Montserrat, sans-serif">ENTERPRISE</a>
|
* <a href="https://docs.openvidu.io/en/stable/openvidu-enterprise/" style="display: inline-block; background-color: rgb(156, 39, 176); color: white; font-weight: bold; padding: 0px 5px; margin: 0 2px 0 2px; border-radius: 3px; font-size: 13px; line-height:21px; text-decoration: none; font-family: Montserrat, sans-serif">ENTERPRISE</a>
|
||||||
* editions**
|
* editions**
|
||||||
*
|
*
|
||||||
* Event dispatched when the session has started being broadcasted. See [Broadcast to YouTube/Twitch](/en/stable/advanced-features/broadcast/)
|
* Event dispatched when the session has started being broadcasted. See [Broadcast to YouTube/Twitch](/en/stable/advanced-features/broadcast/)
|
||||||
*/
|
*/
|
||||||
broadcastStarted: never;
|
broadcastStarted: never;
|
||||||
|
|
@ -173,7 +173,7 @@ export interface SessionEventMap extends EventMap {
|
||||||
* and
|
* and
|
||||||
* <a href="https://docs.openvidu.io/en/stable/openvidu-enterprise/" style="display: inline-block; background-color: rgb(156, 39, 176); color: white; font-weight: bold; padding: 0px 5px; margin: 0 2px 0 2px; border-radius: 3px; font-size: 13px; line-height:21px; text-decoration: none; font-family: Montserrat, sans-serif">ENTERPRISE</a>
|
* <a href="https://docs.openvidu.io/en/stable/openvidu-enterprise/" style="display: inline-block; background-color: rgb(156, 39, 176); color: white; font-weight: bold; padding: 0px 5px; margin: 0 2px 0 2px; border-radius: 3px; font-size: 13px; line-height:21px; text-decoration: none; font-family: Montserrat, sans-serif">ENTERPRISE</a>
|
||||||
* editions**
|
* editions**
|
||||||
*
|
*
|
||||||
* Event dispatched when the session has stopped being broadcasted. See [Broadcast to YouTube/Twitch](/en/stable/advanced-features/broadcast/)
|
* Event dispatched when the session has stopped being broadcasted. See [Broadcast to YouTube/Twitch](/en/stable/advanced-features/broadcast/)
|
||||||
*/
|
*/
|
||||||
broadcastStopped: never;
|
broadcastStopped: never;
|
||||||
|
|
@ -195,7 +195,7 @@ export interface SessionEventMap extends EventMap {
|
||||||
* and
|
* and
|
||||||
* <a href="https://docs.openvidu.io/en/stable/openvidu-enterprise/" style="display: inline-block; background-color: rgb(156, 39, 176); color: white; font-weight: bold; padding: 0px 5px; margin: 0 2px 0 2px; border-radius: 3px; font-size: 13px; line-height:21px; text-decoration: none; font-family: Montserrat, sans-serif">ENTERPRISE</a>
|
* <a href="https://docs.openvidu.io/en/stable/openvidu-enterprise/" style="display: inline-block; background-color: rgb(156, 39, 176); color: white; font-weight: bold; padding: 0px 5px; margin: 0 2px 0 2px; border-radius: 3px; font-size: 13px; line-height:21px; text-decoration: none; font-family: Montserrat, sans-serif">ENTERPRISE</a>
|
||||||
* editions**
|
* editions**
|
||||||
*
|
*
|
||||||
* Event dispatched when a speech-to-text message has been received for certain Stream. See [Speech To Text](/en/stable/advanced-features/speech-to-text/).
|
* Event dispatched when a speech-to-text message has been received for certain Stream. See [Speech To Text](/en/stable/advanced-features/speech-to-text/).
|
||||||
*/
|
*/
|
||||||
speechToTextMessage: SpeechToTextEvent;
|
speechToTextMessage: SpeechToTextEvent;
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ export enum ExceptionEventName {
|
||||||
*
|
*
|
||||||
* {@link ExceptionEvent} objects with this {@link ExceptionEvent.name} will have as {@link ExceptionEvent.origin} property a {@link Session} object.
|
* {@link ExceptionEvent} objects with this {@link ExceptionEvent.name} will have as {@link ExceptionEvent.origin} property a {@link Session} object.
|
||||||
*/
|
*/
|
||||||
SPEECH_TO_TEXT_DISCONNECTED = 'SPEECH_TO_TEXT_DISCONNECTED',
|
SPEECH_TO_TEXT_DISCONNECTED = 'SPEECH_TO_TEXT_DISCONNECTED'
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -131,6 +131,6 @@ export class ExceptionEvent extends Event {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
callDefaultBehavior() { }
|
callDefaultBehavior() {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,6 @@ export class FilterEvent extends Event {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
callDefaultBehavior() {}
|
callDefaultBehavior() {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,6 @@ export class NetworkQualityLevelChangedEvent extends Event {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
callDefaultBehavior() {}
|
callDefaultBehavior() {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,6 @@ export class PublisherSpeakingEvent extends Event {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
callDefaultBehavior() {}
|
callDefaultBehavior() {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,6 @@ export class RecordingEvent extends Event {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
callDefaultBehavior() { }
|
callDefaultBehavior() {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,6 @@ export class SignalEvent extends Event {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
callDefaultBehavior() {}
|
callDefaultBehavior() {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ import { SpeechToTextEventReason } from './Types/Types';
|
||||||
* Triggered by {@link SessionEventMap.speechToTextMessage}
|
* Triggered by {@link SessionEventMap.speechToTextMessage}
|
||||||
*/
|
*/
|
||||||
export class SpeechToTextEvent extends Event {
|
export class SpeechToTextEvent extends Event {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link Connection} owning the Stream that produced the speech-to-text event.
|
* The {@link Connection} owning the Stream that produced the speech-to-text event.
|
||||||
* In other words, this is the participant that spoke and produced this transcription event.
|
* In other words, this is the participant that spoke and produced this transcription event.
|
||||||
|
|
@ -37,7 +36,7 @@ export class SpeechToTextEvent extends Event {
|
||||||
text: string;
|
text: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* All speech-to-text events are generated
|
* All speech-to-text events are generated
|
||||||
*/
|
*/
|
||||||
reason: SpeechToTextEventReason;
|
reason: SpeechToTextEventReason;
|
||||||
|
|
||||||
|
|
@ -67,6 +66,6 @@ export class SpeechToTextEvent extends Event {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
callDefaultBehavior() { }
|
callDefaultBehavior() {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,6 @@ export class StreamManagerEvent extends Event {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
callDefaultBehavior() {}
|
callDefaultBehavior() {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,6 @@ export class StreamPropertyChangedEvent extends Event {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
callDefaultBehavior() { }
|
callDefaultBehavior() {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,42 +1,26 @@
|
||||||
export type ChangedPropertyType =
|
export type ChangedPropertyType = 'videoActive' | 'audioActive' | 'videoTrack' | 'audioTrack' | 'videoDimensions' | 'filter';
|
||||||
'videoActive' |
|
|
||||||
'audioActive' |
|
|
||||||
'videoTrack' |
|
|
||||||
'audioTrack' |
|
|
||||||
'videoDimensions' |
|
|
||||||
'filter';
|
|
||||||
|
|
||||||
export type StreamPropertyChangedEventReason =
|
export type StreamPropertyChangedEventReason =
|
||||||
'publishVideo' |
|
| 'publishVideo'
|
||||||
'publishAudio' |
|
| 'publishAudio'
|
||||||
'trackReplaced' |
|
| 'trackReplaced'
|
||||||
'deviceRotated' |
|
| 'deviceRotated'
|
||||||
'screenResized' |
|
| 'screenResized'
|
||||||
'applyFilter' |
|
| 'applyFilter'
|
||||||
'execFilterMethod' |
|
| 'execFilterMethod'
|
||||||
'removeFilter';
|
| 'removeFilter';
|
||||||
|
|
||||||
export type ConnectionEventReason =
|
export type ConnectionEventReason =
|
||||||
'disconnect' |
|
| 'disconnect'
|
||||||
'forceDisconnectByUser' |
|
| 'forceDisconnectByUser'
|
||||||
'forceDisconnectByServer' |
|
| 'forceDisconnectByServer'
|
||||||
'sessionClosedByServer' |
|
| 'sessionClosedByServer'
|
||||||
'networkDisconnect' |
|
| 'networkDisconnect'
|
||||||
'nodeCrashed' |
|
| 'nodeCrashed'
|
||||||
'';
|
| '';
|
||||||
|
|
||||||
export type StreamEventReason =
|
export type StreamEventReason = ConnectionEventReason | 'unpublish' | 'forceUnpublishByUser' | 'forceUnpublishByServer';
|
||||||
ConnectionEventReason |
|
|
||||||
'unpublish' |
|
|
||||||
'forceUnpublishByUser' |
|
|
||||||
'forceUnpublishByServer';
|
|
||||||
|
|
||||||
export type RecordingEventReason =
|
export type RecordingEventReason = 'recordingStoppedByServer' | 'sessionClosedByServer' | 'automaticStop' | 'nodeCrashed';
|
||||||
'recordingStoppedByServer' |
|
|
||||||
'sessionClosedByServer' |
|
|
||||||
'automaticStop' |
|
|
||||||
'nodeCrashed';
|
|
||||||
|
|
||||||
export type SpeechToTextEventReason =
|
export type SpeechToTextEventReason = 'recognizing' | 'recognized';
|
||||||
'recognizing' |
|
|
||||||
'recognized';
|
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,6 @@ export class VideoElementEvent extends Event {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
// tslint:disable-next-line:no-empty
|
|
||||||
callDefaultBehavior() {}
|
callDefaultBehavior() {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,10 +32,10 @@ export class ConsoleLogger {
|
||||||
|
|
||||||
constructor(console: Console) {
|
constructor(console: Console) {
|
||||||
this.logger = console;
|
this.logger = console;
|
||||||
(this.log = console.log),
|
((this.log = console.log),
|
||||||
(this.info = console.info),
|
(this.info = console.info),
|
||||||
(this.debug = console.debug),
|
(this.debug = console.debug),
|
||||||
(this.warn = console.warn),
|
(this.warn = console.warn),
|
||||||
(this.error = console.error);
|
(this.error = console.error));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -182,8 +182,6 @@ export class PlatformUtils {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import freeice = require('freeice');
|
import freeice = require('freeice');
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuid } from 'uuid';
|
||||||
import { TypeOfVideo } from '../Enums/TypeOfVideo';
|
import { TypeOfVideo } from '../Enums/TypeOfVideo';
|
||||||
import { ExceptionEventName } from '../Events/ExceptionEvent';
|
import { ExceptionEventName } from '../Events/ExceptionEvent';
|
||||||
import { OpenViduLogger } from '../Logger/OpenViduLogger';
|
import { OpenViduLogger } from '../Logger/OpenViduLogger';
|
||||||
|
|
@ -391,7 +391,8 @@ export class WebRtcPeer {
|
||||||
offerToReceiveAudio: offerAudio,
|
offerToReceiveAudio: offerAudio,
|
||||||
offerToReceiveVideo: offerVideo
|
offerToReceiveVideo: offerVideo
|
||||||
};
|
};
|
||||||
(this.pc as RTCPeerConnection).createAnswer(constraints)
|
(this.pc as RTCPeerConnection)
|
||||||
|
.createAnswer(constraints)
|
||||||
.then((sdpAnswer) => resolve(sdpAnswer))
|
.then((sdpAnswer) => resolve(sdpAnswer))
|
||||||
.catch((error) => reject(error));
|
.catch((error) => reject(error));
|
||||||
}
|
}
|
||||||
|
|
@ -574,7 +575,7 @@ export class WebRtcPeer {
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
generateUniqueId(): string {
|
generateUniqueId(): string {
|
||||||
return uuidv4();
|
return uuid();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,6 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// tslint:disable:no-string-literal
|
|
||||||
|
|
||||||
import { Stream } from '../../OpenVidu/Stream';
|
import { Stream } from '../../OpenVidu/Stream';
|
||||||
import { OpenViduLogger } from '../Logger/OpenViduLogger';
|
import { OpenViduLogger } from '../Logger/OpenViduLogger';
|
||||||
import { PlatformUtils } from '../Utils/Platform';
|
import { PlatformUtils } from '../Utils/Platform';
|
||||||
|
|
@ -108,7 +106,7 @@ export class WebRtcStats {
|
||||||
private readonly STATS_ITEM_NAME = 'webrtc-stats-config';
|
private readonly STATS_ITEM_NAME = 'webrtc-stats-config';
|
||||||
|
|
||||||
private webRtcStatsEnabled = false;
|
private webRtcStatsEnabled = false;
|
||||||
private webRtcStatsIntervalId: NodeJS.Timer;
|
private webRtcStatsIntervalId: ReturnType<typeof setInterval>;
|
||||||
private statsInterval = 1;
|
private statsInterval = 1;
|
||||||
private POST_URL: string;
|
private POST_URL: string;
|
||||||
|
|
||||||
|
|
@ -126,8 +124,7 @@ export class WebRtcStats {
|
||||||
// accessing localStorage in a third-party iframe throws a DOMException.
|
// accessing localStorage in a third-party iframe throws a DOMException.
|
||||||
try {
|
try {
|
||||||
webrtcObj = localStorage.getItem(this.STATS_ITEM_NAME);
|
webrtcObj = localStorage.getItem(this.STATS_ITEM_NAME);
|
||||||
}
|
} catch (e) {}
|
||||||
catch(e){}
|
|
||||||
|
|
||||||
if (!!webrtcObj) {
|
if (!!webrtcObj) {
|
||||||
this.webRtcStatsEnabled = true;
|
this.webRtcStatsEnabled = true;
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,9 @@
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"allowSyntheticDefaultImports": true,
|
"allowSyntheticDefaultImports": true,
|
||||||
"emitBOM": false,
|
"emitBOM": false,
|
||||||
|
"esModuleInterop": true,
|
||||||
"forceConsistentCasingInFileNames": true,
|
"forceConsistentCasingInFileNames": true,
|
||||||
"lib": [
|
"lib": ["dom", "es2015", "scripthost"],
|
||||||
"dom",
|
|
||||||
"es2015.promise",
|
|
||||||
"es5",
|
|
||||||
"scripthost"
|
|
||||||
],
|
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
"noFallthroughCasesInSwitch": true,
|
"noFallthroughCasesInSwitch": true,
|
||||||
//"noImplicitAny": true,
|
//"noImplicitAny": true,
|
||||||
|
|
@ -29,8 +25,6 @@
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"strictNullChecks": true,
|
"strictNullChecks": true,
|
||||||
"suppressExcessPropertyErrors": true,
|
"target": "es2015"
|
||||||
"suppressImplicitAnyIndexErrors": true,
|
|
||||||
"target": "es5"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ public class OpenViduClient {
|
||||||
public void reconnecting() {
|
public void reconnecting() {
|
||||||
log.warn("JsonRpcWebsocket connection: is reconnecting");
|
log.warn("JsonRpcWebsocket connection: is reconnecting");
|
||||||
}
|
}
|
||||||
}, new SslContextFactory(true)));
|
}, new SslContextFactory.Client(true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public OpenViduClient(JsonRpcClient client) {
|
public OpenViduClient(JsonRpcClient client) {
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "openvidu-components-testapp",
|
"name": "openvidu-components-testapp",
|
||||||
"version": "2.30.0",
|
"version": "2.32.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "openvidu-components-testapp",
|
"name": "openvidu-components-testapp",
|
||||||
"version": "2.30.0",
|
"version": "2.32.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular/animations": "17.3.10",
|
"@angular/animations": "17.3.10",
|
||||||
"@angular/cdk": "17.3.10",
|
"@angular/cdk": "17.3.10",
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
"@angular/platform-browser-dynamic": "17.3.10",
|
"@angular/platform-browser-dynamic": "17.3.10",
|
||||||
"@angular/router": "17.3.10",
|
"@angular/router": "17.3.10",
|
||||||
"autolinker": "4.0.0",
|
"autolinker": "4.0.0",
|
||||||
"openvidu-browser": "2.30.0",
|
"openvidu-browser": "2.32.1",
|
||||||
"rxjs": "7.5.7",
|
"rxjs": "7.5.7",
|
||||||
"tslib": "2.3.1",
|
"tslib": "2.3.1",
|
||||||
"zone.js": "^0.14.6"
|
"zone.js": "^0.14.6"
|
||||||
|
|
@ -506,6 +506,7 @@
|
||||||
"version": "17.3.10",
|
"version": "17.3.10",
|
||||||
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.10.tgz",
|
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.10.tgz",
|
||||||
"integrity": "sha512-9fR5snTuG4aM2K54TG/6DXcKXMDKZMovZhjQOxO8l68/oqn6fKrHs8DLzckFs0XGRZ+2OyURH8WggFm1Z828rA==",
|
"integrity": "sha512-9fR5snTuG4aM2K54TG/6DXcKXMDKZMovZhjQOxO8l68/oqn6fKrHs8DLzckFs0XGRZ+2OyURH8WggFm1Z828rA==",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.3.0"
|
"tslib": "^2.3.0"
|
||||||
},
|
},
|
||||||
|
|
@ -520,6 +521,7 @@
|
||||||
"version": "17.3.10",
|
"version": "17.3.10",
|
||||||
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.3.10.tgz",
|
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.3.10.tgz",
|
||||||
"integrity": "sha512-b1qktT2c1TTTe5nTji/kFAVW92fULK0YhYAvJ+BjZTPKu2FniZNe8o4qqQ0pUuvtMu+ZQxp/QqFYoidIVCjScg==",
|
"integrity": "sha512-b1qktT2c1TTTe5nTji/kFAVW92fULK0YhYAvJ+BjZTPKu2FniZNe8o4qqQ0pUuvtMu+ZQxp/QqFYoidIVCjScg==",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.3.0"
|
"tslib": "^2.3.0"
|
||||||
},
|
},
|
||||||
|
|
@ -620,6 +622,7 @@
|
||||||
"version": "17.3.10",
|
"version": "17.3.10",
|
||||||
"resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.10.tgz",
|
"resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.10.tgz",
|
||||||
"integrity": "sha512-6SfD21M3LujymmZsZQIxAsV8Bj5u6He6ImZ+p2rr7FAhFxpVJyKldK8LCmJcFsBD4srpQcxEZ0iDxXvg+0ihAw==",
|
"integrity": "sha512-6SfD21M3LujymmZsZQIxAsV8Bj5u6He6ImZ+p2rr7FAhFxpVJyKldK8LCmJcFsBD4srpQcxEZ0iDxXvg+0ihAw==",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.3.0"
|
"tslib": "^2.3.0"
|
||||||
},
|
},
|
||||||
|
|
@ -635,6 +638,7 @@
|
||||||
"version": "17.3.10",
|
"version": "17.3.10",
|
||||||
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.10.tgz",
|
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.10.tgz",
|
||||||
"integrity": "sha512-6Ce4siHyF0fCZBDm/cz+blJByGDu1/hbPkQVGmk5HGZTmCUeKkgyjoM6bZr7ssAsyGDRwxBh2SGHO4Ce31vuPA==",
|
"integrity": "sha512-6Ce4siHyF0fCZBDm/cz+blJByGDu1/hbPkQVGmk5HGZTmCUeKkgyjoM6bZr7ssAsyGDRwxBh2SGHO4Ce31vuPA==",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.3.0"
|
"tslib": "^2.3.0"
|
||||||
},
|
},
|
||||||
|
|
@ -655,6 +659,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.10.tgz",
|
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.10.tgz",
|
||||||
"integrity": "sha512-85SBphqRj3szac3FbeYgEZ+I6WaAlo5h7JX06BdjOLLiaoIwlFhLeAuG+jVekseV+95grFUxIsCMphWHi2e6hQ==",
|
"integrity": "sha512-85SBphqRj3szac3FbeYgEZ+I6WaAlo5h7JX06BdjOLLiaoIwlFhLeAuG+jVekseV+95grFUxIsCMphWHi2e6hQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "7.23.9",
|
"@babel/core": "7.23.9",
|
||||||
"@jridgewell/sourcemap-codec": "^1.4.14",
|
"@jridgewell/sourcemap-codec": "^1.4.14",
|
||||||
|
|
@ -682,6 +687,7 @@
|
||||||
"version": "17.3.10",
|
"version": "17.3.10",
|
||||||
"resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.10.tgz",
|
"resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.10.tgz",
|
||||||
"integrity": "sha512-ocEKu7X0yFCOvgJn1uZy76qjhsjKvULrO1k/BuIX0nwhp61DTGYTvCqKmwCBLM8/gvcKYH5vMKMHoQKtiSGE0A==",
|
"integrity": "sha512-ocEKu7X0yFCOvgJn1uZy76qjhsjKvULrO1k/BuIX0nwhp61DTGYTvCqKmwCBLM8/gvcKYH5vMKMHoQKtiSGE0A==",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.3.0"
|
"tslib": "^2.3.0"
|
||||||
},
|
},
|
||||||
|
|
@ -729,6 +735,7 @@
|
||||||
"version": "17.3.10",
|
"version": "17.3.10",
|
||||||
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.10.tgz",
|
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.10.tgz",
|
||||||
"integrity": "sha512-0VZWSXDi2M3DAGJlpdV3lo73Yo/73GPRqmfTOrvIoUIenFg5Dz6oNGzvt/1aRkRn6HKccjix6iMpH91EN65pWA==",
|
"integrity": "sha512-0VZWSXDi2M3DAGJlpdV3lo73Yo/73GPRqmfTOrvIoUIenFg5Dz6oNGzvt/1aRkRn6HKccjix6iMpH91EN65pWA==",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.3.0"
|
"tslib": "^2.3.0"
|
||||||
},
|
},
|
||||||
|
|
@ -810,6 +817,7 @@
|
||||||
"version": "17.3.10",
|
"version": "17.3.10",
|
||||||
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.10.tgz",
|
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.10.tgz",
|
||||||
"integrity": "sha512-LEhBDOKm2A7nRmZqsafVp6OinRDG1OYZBSqjnT1jZ+f0CRRFIXz6aJ0TMPoU6vq9SLRJ7vrGD9P/eBf2hW00NQ==",
|
"integrity": "sha512-LEhBDOKm2A7nRmZqsafVp6OinRDG1OYZBSqjnT1jZ+f0CRRFIXz6aJ0TMPoU6vq9SLRJ7vrGD9P/eBf2hW00NQ==",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.3.0"
|
"tslib": "^2.3.0"
|
||||||
},
|
},
|
||||||
|
|
@ -888,6 +896,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz",
|
||||||
"integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
|
"integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ampproject/remapping": "^2.2.0",
|
"@ampproject/remapping": "^2.2.0",
|
||||||
"@babel/code-frame": "^7.23.5",
|
"@babel/code-frame": "^7.23.5",
|
||||||
|
|
@ -2774,6 +2783,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz",
|
||||||
"integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==",
|
"integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ampproject/remapping": "^2.2.0",
|
"@ampproject/remapping": "^2.2.0",
|
||||||
"@babel/code-frame": "^7.24.2",
|
"@babel/code-frame": "^7.24.2",
|
||||||
|
|
@ -5495,6 +5505,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz",
|
||||||
"integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==",
|
"integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": "~5.26.4"
|
"undici-types": "~5.26.4"
|
||||||
}
|
}
|
||||||
|
|
@ -5808,6 +5819,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
|
||||||
"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
|
"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"acorn": "bin/acorn"
|
"acorn": "bin/acorn"
|
||||||
},
|
},
|
||||||
|
|
@ -5890,6 +5902,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
|
||||||
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
|
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fast-deep-equal": "^3.1.1",
|
"fast-deep-equal": "^3.1.1",
|
||||||
"json-schema-traverse": "^1.0.0",
|
"json-schema-traverse": "^1.0.0",
|
||||||
|
|
@ -6582,6 +6595,7 @@
|
||||||
"url": "https://github.com/sponsors/ai"
|
"url": "https://github.com/sponsors/ai"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"caniuse-lite": "^1.0.30001587",
|
"caniuse-lite": "^1.0.30001587",
|
||||||
"electron-to-chromium": "^1.4.668",
|
"electron-to-chromium": "^1.4.668",
|
||||||
|
|
@ -7039,6 +7053,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
|
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
|
||||||
"integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
|
"integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^1.9.0"
|
"tslib": "^1.9.0"
|
||||||
},
|
},
|
||||||
|
|
@ -7059,13 +7074,15 @@
|
||||||
"version": "1.14.1",
|
"version": "1.14.1",
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
|
||||||
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
|
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/codelyzer/node_modules/zone.js": {
|
"node_modules/codelyzer/node_modules/zone.js": {
|
||||||
"version": "0.10.3",
|
"version": "0.10.3",
|
||||||
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz",
|
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz",
|
||||||
"integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==",
|
"integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==",
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/color-convert": {
|
"node_modules/color-convert": {
|
||||||
"version": "1.9.3",
|
"version": "1.9.3",
|
||||||
|
|
@ -10923,7 +10940,8 @@
|
||||||
"version": "3.10.1",
|
"version": "3.10.1",
|
||||||
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz",
|
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz",
|
||||||
"integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==",
|
"integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==",
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/jasmine-spec-reporter": {
|
"node_modules/jasmine-spec-reporter": {
|
||||||
"version": "7.0.0",
|
"version": "7.0.0",
|
||||||
|
|
@ -11121,6 +11139,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/karma/-/karma-6.4.3.tgz",
|
"resolved": "https://registry.npmjs.org/karma/-/karma-6.4.3.tgz",
|
||||||
"integrity": "sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q==",
|
"integrity": "sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@colors/colors": "1.5.0",
|
"@colors/colors": "1.5.0",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
|
|
@ -11345,6 +11364,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz",
|
||||||
"integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==",
|
"integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"jasmine-core": "^3.6.0"
|
"jasmine-core": "^3.6.0"
|
||||||
},
|
},
|
||||||
|
|
@ -11579,6 +11599,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz",
|
||||||
"integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==",
|
"integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"copy-anything": "^2.0.1",
|
"copy-anything": "^2.0.1",
|
||||||
"parse-node-version": "^1.0.1",
|
"parse-node-version": "^1.0.1",
|
||||||
|
|
@ -12799,6 +12820,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-17.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-17.3.0.tgz",
|
||||||
"integrity": "sha512-kMSqxeDgv88SWCoapWNRRN1UdBgwu9/Pw/j7u2WFGmzrIWUFivNWBBSSL94kMxr2La+Z9wMwiL8EwKNvmCpg2A==",
|
"integrity": "sha512-kMSqxeDgv88SWCoapWNRRN1UdBgwu9/Pw/j7u2WFGmzrIWUFivNWBBSSL94kMxr2La+Z9wMwiL8EwKNvmCpg2A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@rollup/plugin-json": "^6.0.1",
|
"@rollup/plugin-json": "^6.0.1",
|
||||||
"@rollup/plugin-node-resolve": "^15.2.3",
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
||||||
|
|
@ -13328,43 +13350,33 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/openvidu-browser": {
|
"node_modules/openvidu-browser": {
|
||||||
"version": "2.30.0",
|
"version": "2.32.1",
|
||||||
"resolved": "https://registry.npmjs.org/openvidu-browser/-/openvidu-browser-2.30.0.tgz",
|
"resolved": "https://registry.npmjs.org/openvidu-browser/-/openvidu-browser-2.32.1.tgz",
|
||||||
"integrity": "sha512-OTtbo3gwdZp1i1I5DNHPRIPSoG7lJawXHXgYTUZ+IFrbXzvoBjJHilskJVLeAeTPcMwPLxJ96JLd+6sS946JWQ==",
|
"integrity": "sha512-XNRP5vMveJsbiOhgOP7N5sbRbrWDj1zfVuCvfnUE77ni7zEIb8IEK0pHsGQPCQHqZE5u0cs3hpT+KfxdOEfsfA==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"events": "3.3.0",
|
"events": "3.3.0",
|
||||||
"freeice": "2.2.2",
|
"freeice": "2.2.2",
|
||||||
"hark": "1.2.3",
|
"hark": "1.2.3",
|
||||||
"inherits": "2.0.4",
|
"inherits": "2.0.4",
|
||||||
"jsnlog": "2.30.0",
|
"jsnlog": "2.30.0",
|
||||||
"mime": "3.0.0",
|
"mime": "2.6.0",
|
||||||
"platform": "1.3.6",
|
"platform": "1.3.6",
|
||||||
"semver": "7.6.2",
|
"semver": "7.7.3",
|
||||||
"uuid": "9.0.1",
|
"uuid": "^8.3.2",
|
||||||
"wolfy87-eventemitter": "5.2.9"
|
"wolfy87-eventemitter": "5.2.9"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/openvidu-browser/node_modules/mime": {
|
"node_modules/openvidu-browser/node_modules/mime": {
|
||||||
"version": "3.0.0",
|
"version": "2.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
|
||||||
"integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
|
"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
|
||||||
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
"mime": "cli.js"
|
"mime": "cli.js"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.0.0"
|
"node": ">=4.0.0"
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/openvidu-browser/node_modules/uuid": {
|
|
||||||
"version": "9.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
|
|
||||||
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
|
|
||||||
"funding": [
|
|
||||||
"https://github.com/sponsors/broofa",
|
|
||||||
"https://github.com/sponsors/ctavan"
|
|
||||||
],
|
|
||||||
"bin": {
|
|
||||||
"uuid": "dist/bin/uuid"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ora": {
|
"node_modules/ora": {
|
||||||
|
|
@ -14094,6 +14106,7 @@
|
||||||
"url": "https://github.com/sponsors/ai"
|
"url": "https://github.com/sponsors/ai"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"nanoid": "^3.3.7",
|
"nanoid": "^3.3.7",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.0.0",
|
||||||
|
|
@ -14885,6 +14898,7 @@
|
||||||
"version": "7.5.7",
|
"version": "7.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz",
|
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz",
|
||||||
"integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==",
|
"integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.1.0"
|
"tslib": "^2.1.0"
|
||||||
}
|
}
|
||||||
|
|
@ -14946,6 +14960,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz",
|
"resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz",
|
||||||
"integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==",
|
"integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chokidar": ">=3.0.0 <4.0.0",
|
"chokidar": ">=3.0.0 <4.0.0",
|
||||||
"immutable": "^4.0.0",
|
"immutable": "^4.0.0",
|
||||||
|
|
@ -15072,9 +15087,10 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/semver": {
|
"node_modules/semver": {
|
||||||
"version": "7.6.2",
|
"version": "7.7.3",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
||||||
"integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
|
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
|
||||||
|
"license": "ISC",
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
},
|
},
|
||||||
|
|
@ -16102,6 +16118,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||||
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fast-deep-equal": "^3.1.1",
|
"fast-deep-equal": "^3.1.1",
|
||||||
"fast-json-stable-stringify": "^2.0.0",
|
"fast-json-stable-stringify": "^2.0.0",
|
||||||
|
|
@ -16390,7 +16407,8 @@
|
||||||
"node_modules/tslib": {
|
"node_modules/tslib": {
|
||||||
"version": "2.3.1",
|
"version": "2.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||||
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
|
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
|
||||||
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/tslint": {
|
"node_modules/tslint": {
|
||||||
"version": "6.1.3",
|
"version": "6.1.3",
|
||||||
|
|
@ -16398,6 +16416,7 @@
|
||||||
"integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==",
|
"integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==",
|
||||||
"deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.",
|
"deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/code-frame": "^7.0.0",
|
"@babel/code-frame": "^7.0.0",
|
||||||
"builtin-modules": "^1.1.1",
|
"builtin-modules": "^1.1.1",
|
||||||
|
|
@ -16686,6 +16705,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
|
||||||
"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
|
"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
"tsserver": "bin/tsserver"
|
"tsserver": "bin/tsserver"
|
||||||
|
|
@ -16950,7 +16970,6 @@
|
||||||
"version": "8.3.2",
|
"version": "8.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
|
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
|
||||||
"dev": true,
|
|
||||||
"bin": {
|
"bin": {
|
||||||
"uuid": "dist/bin/uuid"
|
"uuid": "dist/bin/uuid"
|
||||||
}
|
}
|
||||||
|
|
@ -17002,6 +17021,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.1.7.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-5.1.7.tgz",
|
||||||
"integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==",
|
"integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.19.3",
|
"esbuild": "^0.19.3",
|
||||||
"postcss": "^8.4.35",
|
"postcss": "^8.4.35",
|
||||||
|
|
@ -17503,6 +17523,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz",
|
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz",
|
||||||
"integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==",
|
"integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/eslint-scope": "^3.7.3",
|
"@types/eslint-scope": "^3.7.3",
|
||||||
"@types/estree": "^1.0.5",
|
"@types/estree": "^1.0.5",
|
||||||
|
|
@ -17646,6 +17667,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz",
|
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz",
|
||||||
"integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==",
|
"integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/bonjour": "^3.5.9",
|
"@types/bonjour": "^3.5.9",
|
||||||
"@types/connect-history-api-fallback": "^1.3.5",
|
"@types/connect-history-api-fallback": "^1.3.5",
|
||||||
|
|
@ -17781,6 +17803,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||||
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fast-deep-equal": "^3.1.1",
|
"fast-deep-equal": "^3.1.1",
|
||||||
"fast-json-stable-stringify": "^2.0.0",
|
"fast-json-stable-stringify": "^2.0.0",
|
||||||
|
|
@ -18284,7 +18307,8 @@
|
||||||
"node_modules/zone.js": {
|
"node_modules/zone.js": {
|
||||||
"version": "0.14.6",
|
"version": "0.14.6",
|
||||||
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.6.tgz",
|
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.6.tgz",
|
||||||
"integrity": "sha512-vyRNFqofdaHVdWAy7v3Bzmn84a1JHWSjpuTZROT/uYn8I3p2cmo7Ro9twFmYRQDPhiYOV7QLk0hhY4JJQVqS6Q=="
|
"integrity": "sha512-vyRNFqofdaHVdWAy7v3Bzmn84a1JHWSjpuTZROT/uYn8I3p2cmo7Ro9twFmYRQDPhiYOV7QLk0hhY4JJQVqS6Q==",
|
||||||
|
"peer": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
"@angular/platform-browser-dynamic": "17.3.10",
|
"@angular/platform-browser-dynamic": "17.3.10",
|
||||||
"@angular/router": "17.3.10",
|
"@angular/router": "17.3.10",
|
||||||
"autolinker": "4.0.0",
|
"autolinker": "4.0.0",
|
||||||
"openvidu-browser": "2.30.0",
|
"openvidu-browser": "2.32.1",
|
||||||
"rxjs": "7.5.7",
|
"rxjs": "7.5.7",
|
||||||
"tslib": "2.3.1",
|
"tslib": "2.3.1",
|
||||||
"zone.js": "^0.14.6"
|
"zone.js": "^0.14.6"
|
||||||
|
|
@ -78,5 +78,5 @@
|
||||||
"webcomponent:e2e-pro-ci": "cross-env LAUNCH_MODE=CI npm run webcomponent:e2e-pro",
|
"webcomponent:e2e-pro-ci": "cross-env LAUNCH_MODE=CI npm run webcomponent:e2e-pro",
|
||||||
"webcomponent:serve-testapp": "npx http-server ./e2e/webcomponent-app/ && echo http://localhost:8080/?OV_URL=https://localhost:4443&OV_SECRET=MY_SECRET&prejoin=false"
|
"webcomponent:serve-testapp": "npx http-server ./e2e/webcomponent-app/ && echo http://localhost:8080/?OV_URL=https://localhost:4443&OV_SECRET=MY_SECRET&prejoin=false"
|
||||||
},
|
},
|
||||||
"version": "2.30.0"
|
"version": "2.32.1"
|
||||||
}
|
}
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "openvidu-angular",
|
"name": "openvidu-angular",
|
||||||
"version": "2.30.0",
|
"version": "2.32.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "openvidu-angular",
|
"name": "openvidu-angular",
|
||||||
"version": "2.30.0",
|
"version": "2.32.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.3.0"
|
"tslib": "^2.3.0"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
"@angular/material": "^16.0.0 || ^17.0.0",
|
"@angular/material": "^16.0.0 || ^17.0.0",
|
||||||
"autolinker": "^4.0.0",
|
"autolinker": "^4.0.0",
|
||||||
"buffer": "^6.0.3",
|
"buffer": "^6.0.3",
|
||||||
"openvidu-browser": "2.30.0"
|
"openvidu-browser": "2.32.1"
|
||||||
},
|
},
|
||||||
"version": "2.30.0"
|
"version": "2.32.1"
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>io.openvidu</groupId>
|
||||||
|
<artifactId>openvidu-java-client</artifactId>
|
||||||
|
<version>2.32.1</version>
|
||||||
|
<name>OpenVidu Java Client</name>
|
||||||
|
<description>OpenVidu client for your Java backend: get sessionId's and tokens easily from your OpenVidu server</description>
|
||||||
|
<url>https://openvidu.io</url>
|
||||||
|
<licenses>
|
||||||
|
<license>
|
||||||
|
<name>Apache 2.0</name>
|
||||||
|
<url>http://www.apache.org/licenses/LICENSE-2.0</url>
|
||||||
|
<distribution>repo</distribution>
|
||||||
|
</license>
|
||||||
|
</licenses>
|
||||||
|
<developers>
|
||||||
|
<developer>
|
||||||
|
<id>openvidu.io</id>
|
||||||
|
<name>-openvidu.io Community</name>
|
||||||
|
<organization>openvidu.io</organization>
|
||||||
|
<organizationUrl>https://openvidu.io</organizationUrl>
|
||||||
|
</developer>
|
||||||
|
</developers>
|
||||||
|
<scm>
|
||||||
|
<connection>scm:git:git://github.com/OpenVidu/openvidu.git</connection>
|
||||||
|
<developerConnection>scm:git:git@github.com:OpenVidu/openvidu.git</developerConnection>
|
||||||
|
<tag>develop</tag>
|
||||||
|
<url>https://github.com/OpenVidu/openvidu.git</url>
|
||||||
|
</scm>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents.client5</groupId>
|
||||||
|
<artifactId>httpclient5</artifactId>
|
||||||
|
<version>5.4.4</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
<version>2.13.2</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>2.0.17</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-validator</groupId>
|
||||||
|
<artifactId>commons-validator</artifactId>
|
||||||
|
<version>1.10.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>openvidu-java-client</artifactId>
|
<artifactId>openvidu-java-client</artifactId>
|
||||||
<version>2.30.0</version>
|
<version>2.32.1</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>OpenVidu Java Client</name>
|
<name>OpenVidu Java Client</name>
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<maven.compiler.release>11</maven.compiler.release>
|
<maven.compiler.release>${java.version}</maven.compiler.release>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<distributionManagement>
|
<distributionManagement>
|
||||||
|
|
@ -66,38 +66,36 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents.client5</groupId>
|
<groupId>org.apache.httpcomponents.client5</groupId>
|
||||||
<artifactId>httpclient5</artifactId>
|
<artifactId>httpclient5</artifactId>
|
||||||
<version>5.1.4</version>
|
<version>5.4.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.code.gson</groupId>
|
<groupId>com.google.code.gson</groupId>
|
||||||
<artifactId>gson</artifactId>
|
<artifactId>gson</artifactId>
|
||||||
<version>2.10</version>
|
<!-- The below dependency cannot be declared as ${version.gson} because
|
||||||
|
openvidu-java-client must be self-contained to be used as an external dependency
|
||||||
|
outside from this multi-module project. The version number must be EXACTLY
|
||||||
|
the same as in the parent pom.xml nonetheless -->
|
||||||
|
<version>2.13.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>slf4j-api</artifactId>
|
<artifactId>slf4j-api</artifactId>
|
||||||
<version>1.7.36</version>
|
<!-- The below dependency cannot be declared as ${version.slf4j} because
|
||||||
</dependency>
|
openvidu-java-client must be self-contained to be used as an external dependency
|
||||||
<dependency>
|
outside from this multi-module project. The version number must be EXACTLY
|
||||||
<groupId>org.junit.jupiter</groupId>
|
the same as in the parent pom.xml nonetheless -->
|
||||||
<artifactId>junit-jupiter-api</artifactId>
|
<version>2.0.17</version>
|
||||||
<version>5.9.1</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-validator</groupId>
|
<groupId>commons-validator</groupId>
|
||||||
<artifactId>commons-validator</artifactId>
|
<artifactId>commons-validator</artifactId>
|
||||||
<version>1.7</version>
|
<version>1.10.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!--
|
|
||||||
This dependency is used by commons-validator 1.7. But it should be
|
|
||||||
replaced or updated in the future:
|
|
||||||
https://issues.apache.org/jira/browse/VALIDATOR-485?jql=project%20%3D%20VALIDATOR%20AND%20fixVersion%20%3D%202.0
|
|
||||||
-->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.junit.jupiter</groupId>
|
||||||
<artifactId>commons-collections4</artifactId>
|
<artifactId>junit-jupiter-api</artifactId>
|
||||||
<version>4.4</version>
|
<version>5.14.1</version>
|
||||||
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
@ -185,17 +183,40 @@
|
||||||
</executions>
|
</executions>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.sonatype.plugins</groupId>
|
<groupId>org.sonatype.central</groupId>
|
||||||
<artifactId>nexus-staging-maven-plugin</artifactId>
|
<artifactId>central-publishing-maven-plugin</artifactId>
|
||||||
<version>${version.nexus.staging.plugin}</version>
|
<version>${version.sonatype.central.plugin}</version>
|
||||||
<extensions>true</extensions>
|
<extensions>true</extensions>
|
||||||
<configuration>
|
<configuration>
|
||||||
<serverId>ossrh</serverId>
|
<publishingServerId>ossrh</publishingServerId>
|
||||||
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
|
<autoPublish>true</autoPublish>
|
||||||
<autoReleaseAfterClose>true</autoReleaseAfterClose>
|
|
||||||
<stagingProgressTimeoutMinutes>30</stagingProgressTimeoutMinutes>
|
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<!-- Add this in the default profile's plugins section -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>flatten-maven-plugin</artifactId>
|
||||||
|
<version>1.6.0</version>
|
||||||
|
<configuration>
|
||||||
|
<flattenMode>ossrh</flattenMode>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>flatten</id>
|
||||||
|
<phase>process-resources</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>flatten</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>flatten.clean</id>
|
||||||
|
<phase>clean</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>clean</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
</profile>
|
</profile>
|
||||||
|
|
@ -234,4 +255,4 @@
|
||||||
</profile>
|
</profile>
|
||||||
</profiles>
|
</profiles>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package io.openvidu.java.client;
|
||||||
|
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
|
||||||
|
public final class GsonTypes {
|
||||||
|
|
||||||
|
public static final Type STRING_OBJECT_MAP = new TypeToken<Map<String, Object>>() {
|
||||||
|
}.getType();
|
||||||
|
|
||||||
|
private GsonTypes() {
|
||||||
|
// Utility class
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -19,7 +19,7 @@ package io.openvidu.java.client;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URI;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.security.KeyManagementException;
|
import java.security.KeyManagementException;
|
||||||
import java.security.KeyStoreException;
|
import java.security.KeyStoreException;
|
||||||
|
|
@ -32,7 +32,6 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import javax.net.ssl.SSLContext;
|
import javax.net.ssl.SSLContext;
|
||||||
|
|
||||||
|
|
@ -41,6 +40,7 @@ import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
|
||||||
import org.apache.hc.client5.http.classic.methods.HttpDelete;
|
import org.apache.hc.client5.http.classic.methods.HttpDelete;
|
||||||
import org.apache.hc.client5.http.classic.methods.HttpGet;
|
import org.apache.hc.client5.http.classic.methods.HttpGet;
|
||||||
import org.apache.hc.client5.http.classic.methods.HttpPost;
|
import org.apache.hc.client5.http.classic.methods.HttpPost;
|
||||||
|
import org.apache.hc.client5.http.config.ConnectionConfig;
|
||||||
import org.apache.hc.client5.http.config.RequestConfig;
|
import org.apache.hc.client5.http.config.RequestConfig;
|
||||||
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
|
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
|
||||||
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
|
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
|
||||||
|
|
@ -48,9 +48,9 @@ import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
|
||||||
import org.apache.hc.client5.http.impl.classic.HttpClients;
|
import org.apache.hc.client5.http.impl.classic.HttpClients;
|
||||||
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
|
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
|
||||||
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
|
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
|
||||||
|
import org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy;
|
||||||
|
import org.apache.hc.client5.http.ssl.HostnameVerificationPolicy;
|
||||||
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
|
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
|
||||||
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
|
|
||||||
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder;
|
|
||||||
import org.apache.hc.core5.http.ClassicHttpResponse;
|
import org.apache.hc.core5.http.ClassicHttpResponse;
|
||||||
import org.apache.hc.core5.http.HttpEntity;
|
import org.apache.hc.core5.http.HttpEntity;
|
||||||
import org.apache.hc.core5.http.HttpException;
|
import org.apache.hc.core5.http.HttpException;
|
||||||
|
|
@ -63,6 +63,7 @@ import org.apache.hc.core5.http.io.entity.StringEntity;
|
||||||
import org.apache.hc.core5.ssl.SSLContextBuilder;
|
import org.apache.hc.core5.ssl.SSLContextBuilder;
|
||||||
import org.apache.hc.core5.ssl.TrustStrategy;
|
import org.apache.hc.core5.ssl.TrustStrategy;
|
||||||
import org.apache.hc.core5.util.TimeValue;
|
import org.apache.hc.core5.util.TimeValue;
|
||||||
|
import org.apache.hc.core5.util.Timeout;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
|
@ -121,14 +122,17 @@ public class OpenVidu {
|
||||||
} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
|
} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
final SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder.create()
|
final DefaultClientTlsStrategy tlsStrategy = new DefaultClientTlsStrategy(sslContext,
|
||||||
.setHostnameVerifier(NoopHostnameVerifier.INSTANCE).setSslContext(sslContext).build();
|
HostnameVerificationPolicy.CLIENT, NoopHostnameVerifier.INSTANCE);
|
||||||
|
|
||||||
|
final ConnectionConfig connectionConfig = ConnectionConfig.custom().setConnectTimeout(Timeout.ofSeconds(30))
|
||||||
|
.setTimeToLive(TimeValue.ofSeconds(30)).build();
|
||||||
|
|
||||||
final HttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
|
final HttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
|
||||||
.setSSLSocketFactory(sslSocketFactory).setConnectionTimeToLive(TimeValue.ofSeconds(30)).build();
|
.setTlsSocketStrategy(tlsStrategy).setDefaultConnectionConfig(connectionConfig).build();
|
||||||
|
|
||||||
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(30, TimeUnit.SECONDS)
|
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(Timeout.ofSeconds(30))
|
||||||
.setConnectionRequestTimeout(30, TimeUnit.SECONDS).setResponseTimeout(30, TimeUnit.SECONDS).build();
|
.setResponseTimeout(Timeout.ofSeconds(30)).build();
|
||||||
|
|
||||||
this.httpClient = HttpClients.custom().setConnectionManager(connectionManager)
|
this.httpClient = HttpClients.custom().setConnectionManager(connectionManager)
|
||||||
.setDefaultRequestConfig(requestConfig).setDefaultCredentialsProvider(credentialsProvider).build();
|
.setDefaultRequestConfig(requestConfig).setDefaultCredentialsProvider(credentialsProvider).build();
|
||||||
|
|
@ -836,8 +840,8 @@ public class OpenVidu {
|
||||||
|
|
||||||
private void testHostname(String hostnameStr) {
|
private void testHostname(String hostnameStr) {
|
||||||
try {
|
try {
|
||||||
new URL(hostnameStr);
|
URI.create(hostnameStr).toURL();
|
||||||
} catch (MalformedURLException e) {
|
} catch (IllegalArgumentException | MalformedURLException e) {
|
||||||
throw new RuntimeException("The hostname \"" + hostnameStr + "\" is not a valid URL: " + e.getMessage());
|
throw new RuntimeException("The hostname \"" + hostnameStr + "\" is not a valid URL: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -123,8 +123,8 @@ public class Recording {
|
||||||
}
|
}
|
||||||
this.status = Recording.Status.valueOf(json.get("status").getAsString());
|
this.status = Recording.Status.valueOf(json.get("status").getAsString());
|
||||||
|
|
||||||
RecordingProperties.Builder builder = RecordingProperties
|
Map<String, Object> recordingProps = new Gson().fromJson(json.toString(), GsonTypes.STRING_OBJECT_MAP);
|
||||||
.fromJson(new Gson().fromJson(json.toString(), Map.class), null);
|
RecordingProperties.Builder builder = RecordingProperties.fromJson(recordingProps, null);
|
||||||
this.recordingProperties = builder.build();
|
this.recordingProperties = builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -544,6 +544,7 @@ public class RecordingProperties {
|
||||||
Boolean ignoreFailedStreamsParam;
|
Boolean ignoreFailedStreamsParam;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@SuppressWarnings("unused")
|
||||||
String session = (String) params.get("session");
|
String session = (String) params.get("session");
|
||||||
nameParam = (String) params.get("name");
|
nameParam = (String) params.get("name");
|
||||||
hasAudioParam = (Boolean) params.get("hasAudio");
|
hasAudioParam = (Boolean) params.get("hasAudio");
|
||||||
|
|
|
||||||
|
|
@ -727,8 +727,8 @@ public class Session {
|
||||||
.recordingMode(RecordingMode.valueOf(json.get("recordingMode").getAsString()));
|
.recordingMode(RecordingMode.valueOf(json.get("recordingMode").getAsString()));
|
||||||
if (json.has("defaultRecordingProperties")) {
|
if (json.has("defaultRecordingProperties")) {
|
||||||
String jsonString = json.get("defaultRecordingProperties").getAsJsonObject().toString();
|
String jsonString = json.get("defaultRecordingProperties").getAsJsonObject().toString();
|
||||||
RecordingProperties.Builder recBuilder = RecordingProperties
|
Map<String, Object> recordingProps = new Gson().fromJson(jsonString, GsonTypes.STRING_OBJECT_MAP);
|
||||||
.fromJson(new Gson().fromJson(jsonString, Map.class), null);
|
RecordingProperties.Builder recBuilder = RecordingProperties.fromJson(recordingProps, null);
|
||||||
builder.defaultRecordingProperties(recBuilder.build());
|
builder.defaultRecordingProperties(recBuilder.build());
|
||||||
}
|
}
|
||||||
if (json.has("customSessionId")) {
|
if (json.has("customSessionId")) {
|
||||||
|
|
|
||||||
|
|
@ -17,14 +17,12 @@
|
||||||
|
|
||||||
package io.openvidu.java.client;
|
package io.openvidu.java.client;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
import com.google.gson.JsonPrimitive;
|
import com.google.gson.JsonPrimitive;
|
||||||
import com.google.gson.reflect.TypeToken;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See {@link io.openvidu.java.client.OpenVidu#createSession(SessionProperties)}
|
* See {@link io.openvidu.java.client.OpenVidu#createSession(SessionProperties)}
|
||||||
|
|
@ -376,8 +374,8 @@ public class SessionProperties {
|
||||||
JsonObject defaultRecordingPropertiesJson = null;
|
JsonObject defaultRecordingPropertiesJson = null;
|
||||||
if (params.get("defaultRecordingProperties") != null) {
|
if (params.get("defaultRecordingProperties") != null) {
|
||||||
try {
|
try {
|
||||||
defaultRecordingPropertiesJson = new Gson()
|
defaultRecordingPropertiesJson = new Gson().toJsonTree(params.get("defaultRecordingProperties"),
|
||||||
.toJsonTree(params.get("defaultRecordingProperties"), Map.class).getAsJsonObject();
|
GsonTypes.STRING_OBJECT_MAP).getAsJsonObject();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Error in parameter 'defaultRecordingProperties'. It is not a valid JSON object");
|
"Error in parameter 'defaultRecordingProperties'. It is not a valid JSON object");
|
||||||
|
|
@ -386,8 +384,9 @@ public class SessionProperties {
|
||||||
if (defaultRecordingPropertiesJson != null) {
|
if (defaultRecordingPropertiesJson != null) {
|
||||||
try {
|
try {
|
||||||
String jsonString = defaultRecordingPropertiesJson.toString();
|
String jsonString = defaultRecordingPropertiesJson.toString();
|
||||||
RecordingProperties.Builder recBuilder = RecordingProperties
|
Map<String, Object> recordingProps = new Gson().fromJson(jsonString,
|
||||||
.fromJson(new Gson().fromJson(jsonString, Map.class), null);
|
GsonTypes.STRING_OBJECT_MAP);
|
||||||
|
RecordingProperties.Builder recBuilder = RecordingProperties.fromJson(recordingProps, null);
|
||||||
RecordingProperties defaultRecordingProperties = recBuilder.build();
|
RecordingProperties defaultRecordingProperties = recBuilder.build();
|
||||||
builder = builder.defaultRecordingProperties(defaultRecordingProperties);
|
builder = builder.defaultRecordingProperties(defaultRecordingProperties);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
@ -419,9 +418,7 @@ public class SessionProperties {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
try {
|
try {
|
||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
Type gsonType = new TypeToken<Map>() {
|
String gsonString = gson.toJson(params.get("mediaNode"), GsonTypes.STRING_OBJECT_MAP);
|
||||||
}.getType();
|
|
||||||
String gsonString = gson.toJson(params.get("mediaNode"), gsonType);
|
|
||||||
mediaNodeJson = JsonParser.parseString(gsonString).getAsJsonObject();
|
mediaNodeJson = JsonParser.parseString(gsonString).getAsJsonObject();
|
||||||
} catch (Exception e2) {
|
} catch (Exception e2) {
|
||||||
throw new IllegalArgumentException("Error in parameter 'mediaNode'. It is not a valid JSON object");
|
throw new IllegalArgumentException("Error in parameter 'mediaNode'. It is not a valid JSON object");
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import com.google.gson.JsonObject;
|
||||||
* @deprecated Use {@link io.openvidu.java.client.ConnectionProperties
|
* @deprecated Use {@link io.openvidu.java.client.ConnectionProperties
|
||||||
* ConnectionProperties} instead
|
* ConnectionProperties} instead
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public class TokenOptions {
|
public class TokenOptions {
|
||||||
|
|
||||||
private OpenViduRole role;
|
private OpenViduRole role;
|
||||||
|
|
@ -34,6 +35,7 @@ public class TokenOptions {
|
||||||
* @deprecated Use {@link io.openvidu.java.client.ConnectionProperties.Builder
|
* @deprecated Use {@link io.openvidu.java.client.ConnectionProperties.Builder
|
||||||
* ConnectionProperties.Builder} instead
|
* ConnectionProperties.Builder} instead
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
|
|
||||||
private OpenViduRole role = OpenViduRole.PUBLISHER;
|
private OpenViduRole role = OpenViduRole.PUBLISHER;
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
import io.openvidu.java.client.ConnectionProperties;
|
import io.openvidu.java.client.ConnectionProperties;
|
||||||
|
import io.openvidu.java.client.GsonTypes;
|
||||||
|
|
||||||
public class ConnectionPropertiesTest {
|
public class ConnectionPropertiesTest {
|
||||||
|
|
||||||
|
|
@ -96,7 +97,7 @@ public class ConnectionPropertiesTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, ?> mapFromJsonString(String json) {
|
private Map<String, ?> mapFromJsonString(String json) {
|
||||||
return new Gson().fromJson(json, Map.class);
|
return new Gson().fromJson(json, GsonTypes.STRING_OBJECT_MAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertException(Map<String, ?> params, String containsError) {
|
private void assertException(Map<String, ?> params, String containsError) {
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,9 @@ import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuil
|
||||||
import org.apache.hc.client5.http.impl.routing.DefaultProxyRoutePlanner;
|
import org.apache.hc.client5.http.impl.routing.DefaultProxyRoutePlanner;
|
||||||
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
|
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
|
||||||
import org.apache.hc.client5.http.protocol.HttpClientContext;
|
import org.apache.hc.client5.http.protocol.HttpClientContext;
|
||||||
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
|
import org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy;
|
||||||
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder;
|
import org.apache.hc.client5.http.ssl.HostnameVerificationPolicy;
|
||||||
|
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
|
||||||
import org.apache.hc.core5.http.HttpHeaders;
|
import org.apache.hc.core5.http.HttpHeaders;
|
||||||
import org.apache.hc.core5.http.HttpHost;
|
import org.apache.hc.core5.http.HttpHost;
|
||||||
import org.apache.hc.core5.http.message.BasicHeader;
|
import org.apache.hc.core5.http.message.BasicHeader;
|
||||||
|
|
@ -35,7 +36,7 @@ public class OpenViduConstructorTest {
|
||||||
RuntimeException thrown = Assertions.assertThrows(RuntimeException.class, () -> {
|
RuntimeException thrown = Assertions.assertThrows(RuntimeException.class, () -> {
|
||||||
new OpenVidu("WRONG_URL", "MY_SECRET");
|
new OpenVidu("WRONG_URL", "MY_SECRET");
|
||||||
});
|
});
|
||||||
Assertions.assertEquals("The hostname \"WRONG_URL\" is not a valid URL: no protocol: WRONG_URL",
|
Assertions.assertEquals("The hostname \"WRONG_URL\" is not a valid URL: URI is not absolute",
|
||||||
thrown.getMessage());
|
thrown.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -70,16 +71,17 @@ public class OpenViduConstructorTest {
|
||||||
builder.setRoutePlanner(routePlanner);
|
builder.setRoutePlanner(routePlanner);
|
||||||
|
|
||||||
// Custom SSLContext
|
// Custom SSLContext
|
||||||
SSLContext sslContext = null;
|
SSLContext sslContext;
|
||||||
try {
|
try {
|
||||||
sslContext = SSLContext.getInstance("TLSv1.2");
|
sslContext = SSLContext.getInstance("TLSv1.2");
|
||||||
sslContext.init(null, null, null);
|
sslContext.init(null, null, null);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
final SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder.create()
|
final DefaultClientTlsStrategy tlsStrategy = new DefaultClientTlsStrategy(sslContext,
|
||||||
.setSslContext(sslContext).build();
|
HostnameVerificationPolicy.CLIENT, NoopHostnameVerifier.INSTANCE);
|
||||||
final HttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
|
final HttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
|
||||||
.setSSLSocketFactory(sslSocketFactory).build();
|
.setTlsSocketStrategy(tlsStrategy).build();
|
||||||
builder.setConnectionManager(connectionManager);
|
builder.setConnectionManager(connectionManager);
|
||||||
|
|
||||||
// Custom CredentialsProvider
|
// Custom CredentialsProvider
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import com.google.gson.JsonObject;
|
||||||
|
|
||||||
import io.openvidu.java.client.Recording.OutputMode;
|
import io.openvidu.java.client.Recording.OutputMode;
|
||||||
import io.openvidu.java.client.RecordingProperties;
|
import io.openvidu.java.client.RecordingProperties;
|
||||||
|
import io.openvidu.java.client.GsonTypes;
|
||||||
|
|
||||||
public class RecordingPropertiesTest {
|
public class RecordingPropertiesTest {
|
||||||
|
|
||||||
|
|
@ -137,7 +138,7 @@ public class RecordingPropertiesTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, ?> mapFromJsonString(String json) {
|
private Map<String, ?> mapFromJsonString(String json) {
|
||||||
return new Gson().fromJson(json, Map.class);
|
return new Gson().fromJson(json, GsonTypes.STRING_OBJECT_MAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T extends Exception> void assertException(Map<String, ?> params, String containsError,
|
private <T extends Exception> void assertException(Map<String, ?> params, String containsError,
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
import io.openvidu.java.client.SessionProperties;
|
import io.openvidu.java.client.SessionProperties;
|
||||||
|
import io.openvidu.java.client.GsonTypes;
|
||||||
|
|
||||||
public class SessionPropertiesTest {
|
public class SessionPropertiesTest {
|
||||||
|
|
||||||
|
|
@ -39,7 +40,7 @@ public class SessionPropertiesTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, ?> mapFromJsonString(String json) {
|
private Map<String, ?> mapFromJsonString(String json) {
|
||||||
return new Gson().fromJson(json, Map.class);
|
return new Gson().fromJson(json, GsonTypes.STRING_OBJECT_MAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertException(Map<String, ?> params, String containsError) {
|
private void assertException(Map<String, ?> params, String containsError) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
node_modules
|
||||||
|
lib
|
||||||
|
coverage
|
||||||
|
dist
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
"singleQuote": true,
|
"singleQuote": true,
|
||||||
"printWidth": 140,
|
"printWidth": 140,
|
||||||
"trailingComma": "none",
|
"trailingComma": "none",
|
||||||
"semi": true,
|
"semi": true,
|
||||||
"bracketSpacing": true,
|
"bracketSpacing": true,
|
||||||
"useTabs": false,
|
"useTabs": false,
|
||||||
"jsxSingleQuote": true,
|
"jsxSingleQuote": true,
|
||||||
"tabWidth": 4
|
"tabWidth": 4
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"printWidth": 120,
|
||||||
|
"tabWidth": 4,
|
||||||
|
"singleQuote": true,
|
||||||
|
"trailingComma": "none",
|
||||||
|
"semi": true,
|
||||||
|
"arrowParens": "avoid"
|
||||||
|
}
|
||||||
|
|
@ -5,8 +5,7 @@
|
||||||
|
|
||||||
[![][OpenViduLogo]](https://openvidu.io)
|
[![][OpenViduLogo]](https://openvidu.io)
|
||||||
|
|
||||||
openvidu-node-client
|
# openvidu-node-client
|
||||||
===
|
|
||||||
|
|
||||||
- **Description**: Library for your NODE server. It is a fully compatible and simple alternative to the REST API exposed by OpenVidu Server.
|
- **Description**: Library for your NODE server. It is a fully compatible and simple alternative to the REST API exposed by OpenVidu Server.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,4 +17,4 @@
|
||||||
"excludeProtected": true,
|
"excludeProtected": true,
|
||||||
"excludeInternal": true
|
"excludeInternal": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,81 +1,37 @@
|
||||||
{
|
{
|
||||||
"extends": "tslint:recommended",
|
"extends": "tslint:recommended",
|
||||||
"rules": {
|
"rules": {
|
||||||
"array-type": [
|
"array-type": [true, "array"],
|
||||||
true,
|
|
||||||
"array"
|
|
||||||
],
|
|
||||||
"ban-types": {
|
"ban-types": {
|
||||||
"options": [
|
"options": [
|
||||||
[
|
["Object", "Avoid using the `Object` type. Did you mean `object`?"],
|
||||||
"Object",
|
|
||||||
"Avoid using the `Object` type. Did you mean `object`?"
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
"Function",
|
"Function",
|
||||||
"Avoid using the `Function` type. Prefer a specific function type, like `() => void`, or use `ts.AnyFunction`."
|
"Avoid using the `Function` type. Prefer a specific function type, like `() => void`, or use `ts.AnyFunction`."
|
||||||
],
|
],
|
||||||
[
|
["Boolean", "Avoid using the `Boolean` type. Did you mean `boolean`?"],
|
||||||
"Boolean",
|
["Number", "Avoid using the `Number` type. Did you mean `number`?"],
|
||||||
"Avoid using the `Boolean` type. Did you mean `boolean`?"
|
["String", "Avoid using the `String` type. Did you mean `string`?"]
|
||||||
],
|
|
||||||
[
|
|
||||||
"Number",
|
|
||||||
"Avoid using the `Number` type. Did you mean `number`?"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"String",
|
|
||||||
"Avoid using the `String` type. Did you mean `string`?"
|
|
||||||
]
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"class-name": true,
|
"class-name": true,
|
||||||
"comment-format": [
|
"comment-format": [true, "check-space"],
|
||||||
true,
|
"curly": [true, "ignore-same-line"],
|
||||||
"check-space"
|
"indent": [true, "spaces", 2],
|
||||||
],
|
"interface-name": [true, "never-prefix"],
|
||||||
"curly": [
|
|
||||||
true,
|
|
||||||
"ignore-same-line"
|
|
||||||
],
|
|
||||||
"indent": [
|
|
||||||
true,
|
|
||||||
"spaces",
|
|
||||||
2
|
|
||||||
],
|
|
||||||
"interface-name": [
|
|
||||||
true,
|
|
||||||
"never-prefix"
|
|
||||||
],
|
|
||||||
"interface-over-type-literal": true,
|
"interface-over-type-literal": true,
|
||||||
"jsdoc-format": true,
|
"jsdoc-format": true,
|
||||||
"no-inferrable-types": true,
|
"no-inferrable-types": true,
|
||||||
"no-internal-module": true,
|
"no-internal-module": true,
|
||||||
"no-null-keyword": false,
|
"no-null-keyword": false,
|
||||||
"no-switch-case-fall-through": true,
|
"no-switch-case-fall-through": true,
|
||||||
"no-trailing-whitespace": [
|
"no-trailing-whitespace": [true, "ignore-template-strings"],
|
||||||
true,
|
|
||||||
"ignore-template-strings"
|
|
||||||
],
|
|
||||||
"no-var-keyword": true,
|
"no-var-keyword": true,
|
||||||
"object-literal-shorthand": true,
|
"object-literal-shorthand": true,
|
||||||
"one-line": [
|
"one-line": [true, "check-open-brace", "check-whitespace"],
|
||||||
true,
|
|
||||||
"check-open-brace",
|
|
||||||
"check-whitespace"
|
|
||||||
],
|
|
||||||
"prefer-const": true,
|
"prefer-const": true,
|
||||||
"quotemark": [
|
"quotemark": [true, "single", "avoid-escape", "avoid-template"],
|
||||||
true,
|
"semicolon": [true, "always", "ignore-bound-class-methods"],
|
||||||
"single",
|
|
||||||
"avoid-escape",
|
|
||||||
"avoid-template"
|
|
||||||
],
|
|
||||||
"semicolon": [
|
|
||||||
true,
|
|
||||||
"always",
|
|
||||||
"ignore-bound-class-methods"
|
|
||||||
],
|
|
||||||
"space-within-parens": true,
|
"space-within-parens": true,
|
||||||
"triple-equals": true,
|
"triple-equals": true,
|
||||||
"typedef-whitespace": [
|
"typedef-whitespace": [
|
||||||
|
|
@ -95,29 +51,10 @@
|
||||||
"variable-declaration": "onespace"
|
"variable-declaration": "onespace"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"whitespace": [
|
"whitespace": [true, "check-branch", "check-decl", "check-operator", "check-module", "check-separator", "check-type"],
|
||||||
true,
|
"no-implicit-dependencies": [true, "dev"],
|
||||||
"check-branch",
|
"object-literal-key-quotes": [true, "consistent-as-needed"],
|
||||||
"check-decl",
|
"variable-name": [true, "ban-keywords", "check-format", "allow-leading-underscore"],
|
||||||
"check-operator",
|
|
||||||
"check-module",
|
|
||||||
"check-separator",
|
|
||||||
"check-type"
|
|
||||||
],
|
|
||||||
"no-implicit-dependencies": [
|
|
||||||
true,
|
|
||||||
"dev"
|
|
||||||
],
|
|
||||||
"object-literal-key-quotes": [
|
|
||||||
true,
|
|
||||||
"consistent-as-needed"
|
|
||||||
],
|
|
||||||
"variable-name": [
|
|
||||||
true,
|
|
||||||
"ban-keywords",
|
|
||||||
"check-format",
|
|
||||||
"allow-leading-underscore"
|
|
||||||
],
|
|
||||||
"arrow-parens": false,
|
"arrow-parens": false,
|
||||||
"arrow-return-shorthand": false,
|
"arrow-return-shorthand": false,
|
||||||
"forin": false,
|
"forin": false,
|
||||||
|
|
@ -151,4 +88,4 @@
|
||||||
"one-variable-per-declaration": false,
|
"one-variable-per-declaration": false,
|
||||||
"unified-signatures": false
|
"unified-signatures": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,17 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
lib: [
|
lib: ['lib.dom.d.ts', 'lib.es5.d.ts', 'lib.es2015.promise.d.ts', 'lib.scripthost.d.ts'],
|
||||||
"lib.dom.d.ts",
|
mode: 'file',
|
||||||
"lib.es5.d.ts",
|
module: 'commonjs',
|
||||||
"lib.es2015.promise.d.ts",
|
name: 'OpenVidu Node Client',
|
||||||
"lib.scripthost.d.ts"
|
target: 'es5',
|
||||||
],
|
externalPattern: 'node_modules',
|
||||||
mode: "file",
|
|
||||||
module: "commonjs",
|
|
||||||
name: "OpenVidu Node Client",
|
|
||||||
target: "es5",
|
|
||||||
externalPattern: "node_modules",
|
|
||||||
excludeExternals: true,
|
excludeExternals: true,
|
||||||
excludePrivate: true,
|
excludePrivate: true,
|
||||||
excludeProtected: true,
|
excludeProtected: true,
|
||||||
excludeNotExported: true,
|
excludeNotExported: true,
|
||||||
theme: "default",
|
theme: 'default',
|
||||||
readme: "none",
|
readme: 'none',
|
||||||
includeVersion: true,
|
includeVersion: true,
|
||||||
listInvalidSymbolLinks: true,
|
listInvalidSymbolLinks: true,
|
||||||
out: "./docs"
|
out: './docs'
|
||||||
}
|
};
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,90 @@
|
||||||
|
import importPlugin from 'eslint-plugin-import';
|
||||||
|
import jsdoc from 'eslint-plugin-jsdoc';
|
||||||
|
import tseslint from 'typescript-eslint';
|
||||||
|
|
||||||
|
export default tseslint.config(
|
||||||
|
{
|
||||||
|
ignores: ['lib/**', 'node_modules/**']
|
||||||
|
},
|
||||||
|
...tseslint.configs.recommended,
|
||||||
|
...tseslint.configs.stylistic,
|
||||||
|
{
|
||||||
|
files: ['src/**/*.ts'],
|
||||||
|
languageOptions: {
|
||||||
|
parser: tseslint.parser
|
||||||
|
},
|
||||||
|
plugins: {
|
||||||
|
'@typescript-eslint': tseslint.plugin,
|
||||||
|
import: importPlugin,
|
||||||
|
jsdoc
|
||||||
|
},
|
||||||
|
settings: {
|
||||||
|
jsdoc: {
|
||||||
|
mode: 'typescript'
|
||||||
|
},
|
||||||
|
'import/resolver': {
|
||||||
|
typescript: {
|
||||||
|
project: ['./tsconfig.json']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
'@typescript-eslint/array-type': ['error', { default: 'array-simple', readonly: 'array-simple' }],
|
||||||
|
'@typescript-eslint/no-restricted-types': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
types: {
|
||||||
|
Object: {
|
||||||
|
message: 'Avoid using the `Object` type. Did you mean `object`?'
|
||||||
|
},
|
||||||
|
Function: {
|
||||||
|
message: 'Avoid using the `Function` type. Prefer a specific function type, like `() => void`.'
|
||||||
|
},
|
||||||
|
Boolean: {
|
||||||
|
message: 'Avoid using the `Boolean` type. Did you mean `boolean`?'
|
||||||
|
},
|
||||||
|
Number: {
|
||||||
|
message: 'Avoid using the `Number` type. Did you mean `number`?'
|
||||||
|
},
|
||||||
|
String: {
|
||||||
|
message: 'Avoid using the `String` type. Did you mean `string`?'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'@typescript-eslint/consistent-type-definitions': ['error', 'interface'],
|
||||||
|
'@typescript-eslint/consistent-indexed-object-style': 'off',
|
||||||
|
'@typescript-eslint/consistent-type-assertions': 'off',
|
||||||
|
'@typescript-eslint/no-duplicate-enum-values': 'off',
|
||||||
|
'@typescript-eslint/no-explicit-any': 'off',
|
||||||
|
'@typescript-eslint/no-inferrable-types': 'off',
|
||||||
|
'@typescript-eslint/no-namespace': 'off',
|
||||||
|
'@typescript-eslint/no-require-imports': 'off',
|
||||||
|
'@typescript-eslint/no-unused-vars': [
|
||||||
|
'error',
|
||||||
|
{ argsIgnorePattern: '^_', varsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_' }
|
||||||
|
],
|
||||||
|
'@typescript-eslint/naming-convention': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
selector: 'interface',
|
||||||
|
format: ['PascalCase'],
|
||||||
|
custom: {
|
||||||
|
regex: '^I[A-Z]',
|
||||||
|
match: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'dot-notation': 'error',
|
||||||
|
semi: ['error', 'always'],
|
||||||
|
'import/no-extraneous-dependencies': ['error', { devDependencies: true }],
|
||||||
|
'jsdoc/check-alignment': 'off',
|
||||||
|
'jsdoc/check-indentation': 'off',
|
||||||
|
'no-trailing-spaces': ['error', { skipBlankLines: false, ignoreComments: false }],
|
||||||
|
'no-var': 'off',
|
||||||
|
'prefer-rest-params': 'off',
|
||||||
|
'prefer-const': 'off',
|
||||||
|
quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: true }]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,16 +1,22 @@
|
||||||
{
|
{
|
||||||
"author": "OpenVidu",
|
"author": "OpenVidu",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "1.7.1",
|
"axios": "1.13.2",
|
||||||
"buffer": "6.0.3"
|
"buffer": "6.0.3"
|
||||||
},
|
},
|
||||||
"description": "OpenVidu Node Client",
|
"description": "OpenVidu Node Client",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "20.12.12",
|
"@eslint/js": "9.39.1",
|
||||||
|
"@types/node": "24.10.1",
|
||||||
|
"eslint": "9.39.1",
|
||||||
|
"eslint-import-resolver-typescript": "4.4.4",
|
||||||
|
"eslint-plugin-import": "2.32.0",
|
||||||
|
"eslint-plugin-jsdoc": "61.3.0",
|
||||||
|
"prettier": "3.6.2",
|
||||||
"ts-node": "10.9.2",
|
"ts-node": "10.9.2",
|
||||||
"tslint": "6.1.3",
|
"typedoc": "0.28.14",
|
||||||
"typedoc": "0.25.13",
|
"typescript": "5.9.3",
|
||||||
"typescript": "5.4.5"
|
"typescript-eslint": "8.47.0"
|
||||||
},
|
},
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
|
|
@ -20,9 +26,11 @@
|
||||||
"url": "git://github.com/OpenVidu/openvidu"
|
"url": "git://github.com/OpenVidu/openvidu"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "./node_modules/typescript/bin/tsc",
|
"build": "npm run lint && npm run beautify && ./node_modules/typescript/bin/tsc",
|
||||||
"docs": "./generate-docs.sh"
|
"docs": "./generate-docs.sh",
|
||||||
|
"lint": "eslint \"src/**/*.ts\"",
|
||||||
|
"beautify": "prettier --write ."
|
||||||
},
|
},
|
||||||
"typings": "lib/index.d.ts",
|
"typings": "lib/index.d.ts",
|
||||||
"version": "2.30.0"
|
"version": "2.32.1"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -162,7 +162,7 @@ export class Connection {
|
||||||
json.publishers.forEach((jsonPublisher) => {
|
json.publishers.forEach((jsonPublisher) => {
|
||||||
const publisherObj: Publisher = new Publisher(jsonPublisher);
|
const publisherObj: Publisher = new Publisher(jsonPublisher);
|
||||||
fetchedPublisherIds.push(publisherObj.streamId);
|
fetchedPublisherIds.push(publisherObj.streamId);
|
||||||
let storedPublisher = this.publishers.find((c) => c.streamId === publisherObj.streamId);
|
const storedPublisher = this.publishers.find((c) => c.streamId === publisherObj.streamId);
|
||||||
|
|
||||||
if (!!storedPublisher) {
|
if (!!storedPublisher) {
|
||||||
// 2. Update existing Publisher
|
// 2. Update existing Publisher
|
||||||
|
|
@ -174,7 +174,7 @@ export class Connection {
|
||||||
});
|
});
|
||||||
|
|
||||||
// 4. Remove closed Publishers from local collection
|
// 4. Remove closed Publishers from local collection
|
||||||
for (var i = this.publishers.length - 1; i >= 0; --i) {
|
for (let i = this.publishers.length - 1; i >= 0; --i) {
|
||||||
if (!fetchedPublisherIds.includes(this.publishers[i].streamId)) {
|
if (!fetchedPublisherIds.includes(this.publishers[i].streamId)) {
|
||||||
this.publishers.splice(i, 1);
|
this.publishers.splice(i, 1);
|
||||||
}
|
}
|
||||||
|
|
@ -194,7 +194,7 @@ export class Connection {
|
||||||
});
|
});
|
||||||
|
|
||||||
// 3. Remove closed Subscribers from local collection
|
// 3. Remove closed Subscribers from local collection
|
||||||
for (var i = this.subscribers.length - 1; i >= 0; --i) {
|
for (let i = this.subscribers.length - 1; i >= 0; --i) {
|
||||||
if (!fetchedSubscriberIds.includes(this.subscribers[i])) {
|
if (!fetchedSubscriberIds.includes(this.subscribers[i])) {
|
||||||
this.subscribers.splice(i, 1);
|
this.subscribers.splice(i, 1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ export class OpenViduLogger {
|
||||||
*/
|
*/
|
||||||
log(...args: any[]) {
|
log(...args: any[]) {
|
||||||
if (!this.isProdMode) {
|
if (!this.isProdMode) {
|
||||||
this.defaultConsoleLogger.log.apply(this.defaultConsoleLogger.logger, arguments);
|
this.defaultConsoleLogger.log.apply(this.defaultConsoleLogger.logger, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -29,7 +29,7 @@ export class OpenViduLogger {
|
||||||
*/
|
*/
|
||||||
debug(...args: any[]) {
|
debug(...args: any[]) {
|
||||||
if (!this.isProdMode) {
|
if (!this.isProdMode) {
|
||||||
this.defaultConsoleLogger.debug.apply(this.defaultConsoleLogger.logger, arguments);
|
this.defaultConsoleLogger.debug.apply(this.defaultConsoleLogger.logger, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -38,7 +38,7 @@ export class OpenViduLogger {
|
||||||
*/
|
*/
|
||||||
info(...args: any[]) {
|
info(...args: any[]) {
|
||||||
if (!this.isProdMode) {
|
if (!this.isProdMode) {
|
||||||
this.defaultConsoleLogger.info.apply(this.defaultConsoleLogger.logger, arguments);
|
this.defaultConsoleLogger.info.apply(this.defaultConsoleLogger.logger, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -46,14 +46,14 @@ export class OpenViduLogger {
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
warn(...args: any[]) {
|
warn(...args: any[]) {
|
||||||
this.defaultConsoleLogger.warn.apply(this.defaultConsoleLogger.logger, arguments);
|
this.defaultConsoleLogger.warn.apply(this.defaultConsoleLogger.logger, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
error(...args: any[]) {
|
error(...args: any[]) {
|
||||||
this.defaultConsoleLogger.error.apply(this.defaultConsoleLogger.logger, arguments);
|
this.defaultConsoleLogger.error.apply(this.defaultConsoleLogger.logger, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
enableProdMode() {
|
enableProdMode() {
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,10 @@ export class OpenVidu {
|
||||||
*
|
*
|
||||||
* @param secret Secret configured in your OpenVidu deployment
|
* @param secret Secret configured in your OpenVidu deployment
|
||||||
*/
|
*/
|
||||||
constructor(private hostname: string, secret: string) {
|
constructor(
|
||||||
|
private hostname: string,
|
||||||
|
secret: string
|
||||||
|
) {
|
||||||
this.setHostnameAndPort();
|
this.setHostnameAndPort();
|
||||||
this.basicAuth = this.getBasicAuth(secret);
|
this.basicAuth = this.getBasicAuth(secret);
|
||||||
}
|
}
|
||||||
|
|
@ -136,7 +139,7 @@ export class OpenVidu {
|
||||||
const session = new Session(this, properties);
|
const session = new Session(this, properties);
|
||||||
session
|
session
|
||||||
.getSessionHttp()
|
.getSessionHttp()
|
||||||
.then((response) => {
|
.then((_response) => {
|
||||||
this.activeSessions.push(session);
|
this.activeSessions.push(session);
|
||||||
resolve(session);
|
resolve(session);
|
||||||
})
|
})
|
||||||
|
|
@ -542,7 +545,7 @@ export class OpenVidu {
|
||||||
res.data.content.forEach((jsonSession) => {
|
res.data.content.forEach((jsonSession) => {
|
||||||
const fetchedSession: Session = new Session(this, jsonSession);
|
const fetchedSession: Session = new Session(this, jsonSession);
|
||||||
fetchedSessionIds.push(fetchedSession.sessionId);
|
fetchedSessionIds.push(fetchedSession.sessionId);
|
||||||
let storedSession = this.activeSessions.find((s) => s.sessionId === fetchedSession.sessionId);
|
const storedSession = this.activeSessions.find((s) => s.sessionId === fetchedSession.sessionId);
|
||||||
|
|
||||||
if (!!storedSession) {
|
if (!!storedSession) {
|
||||||
// 2. Update existing Session
|
// 2. Update existing Session
|
||||||
|
|
@ -559,8 +562,8 @@ export class OpenVidu {
|
||||||
});
|
});
|
||||||
|
|
||||||
// 4. Remove closed sessions from local collection
|
// 4. Remove closed sessions from local collection
|
||||||
for (var i = this.activeSessions.length - 1; i >= 0; --i) {
|
for (let i = this.activeSessions.length - 1; i >= 0; --i) {
|
||||||
let sessionId = this.activeSessions[i].sessionId;
|
const sessionId = this.activeSessions[i].sessionId;
|
||||||
if (!fetchedSessionIds.includes(sessionId)) {
|
if (!fetchedSessionIds.includes(sessionId)) {
|
||||||
logger.log("Removing closed session '" + sessionId + "'");
|
logger.log("Removing closed session '" + sessionId + "'");
|
||||||
hasChanged = true;
|
hasChanged = true;
|
||||||
|
|
@ -587,7 +590,7 @@ export class OpenVidu {
|
||||||
* @returns A map paring every existing sessionId with true or false depending on whether it has changed or not
|
* @returns A map paring every existing sessionId with true or false depending on whether it has changed or not
|
||||||
*/
|
*/
|
||||||
fetchWebRtc(): Promise<any> {
|
fetchWebRtc(): Promise<any> {
|
||||||
// tslint:disable:no-string-literal
|
/* eslint-disable dot-notation */
|
||||||
const addWebRtcStatsToConnections = (connection: Connection, connectionsExtendedInfo: any) => {
|
const addWebRtcStatsToConnections = (connection: Connection, connectionsExtendedInfo: any) => {
|
||||||
const connectionExtended = connectionsExtendedInfo.find((c) => c.connectionId === connection.connectionId);
|
const connectionExtended = connectionsExtendedInfo.find((c) => c.connectionId === connection.connectionId);
|
||||||
if (!!connectionExtended) {
|
if (!!connectionExtended) {
|
||||||
|
|
@ -679,7 +682,7 @@ export class OpenVidu {
|
||||||
addWebRtcStatsToConnections(connection, jsonSession.connections.content);
|
addWebRtcStatsToConnections(connection, jsonSession.connections.content);
|
||||||
});
|
});
|
||||||
fetchedSessionIds.push(fetchedSession.sessionId);
|
fetchedSessionIds.push(fetchedSession.sessionId);
|
||||||
let storedSession = this.activeSessions.find((s) => s.sessionId === fetchedSession.sessionId);
|
const storedSession = this.activeSessions.find((s) => s.sessionId === fetchedSession.sessionId);
|
||||||
|
|
||||||
if (!!storedSession) {
|
if (!!storedSession) {
|
||||||
// 2. Update existing Session
|
// 2. Update existing Session
|
||||||
|
|
@ -713,8 +716,8 @@ export class OpenVidu {
|
||||||
});
|
});
|
||||||
|
|
||||||
// 4. Remove closed sessions from local collection
|
// 4. Remove closed sessions from local collection
|
||||||
for (var i = this.activeSessions.length - 1; i >= 0; --i) {
|
for (let i = this.activeSessions.length - 1; i >= 0; --i) {
|
||||||
let sessionId = this.activeSessions[i].sessionId;
|
const sessionId = this.activeSessions[i].sessionId;
|
||||||
if (!fetchedSessionIds.includes(sessionId)) {
|
if (!fetchedSessionIds.includes(sessionId)) {
|
||||||
logger.log("Removing closed session '" + sessionId + "'");
|
logger.log("Removing closed session '" + sessionId + "'");
|
||||||
sessionChanges[sessionId] = true;
|
sessionChanges[sessionId] = true;
|
||||||
|
|
@ -736,7 +739,7 @@ export class OpenVidu {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// tslint:enable:no-string-literal
|
/* eslint-enable dot-notation */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disable all logging except error level
|
* Disable all logging except error level
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ export class Recording {
|
||||||
*/
|
*/
|
||||||
properties: RecordingProperties;
|
properties: RecordingProperties;
|
||||||
|
|
||||||
/* tslint:disable:no-string-literal */
|
/* eslint-disable dot-notation */
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
|
|
@ -105,7 +105,7 @@ export class Recording {
|
||||||
: Recording.DefaultRecordingPropertiesValues.ignoreFailedStreams;
|
: Recording.DefaultRecordingPropertiesValues.ignoreFailedStreams;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* tslint:enable:no-string-literal */
|
/* eslint-enable dot-notation */
|
||||||
}
|
}
|
||||||
|
|
||||||
export namespace Recording {
|
export namespace Recording {
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,10 @@ export class Session {
|
||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
constructor(private ov: OpenVidu, propertiesOrJson?) {
|
constructor(
|
||||||
|
private ov: OpenVidu,
|
||||||
|
propertiesOrJson?
|
||||||
|
) {
|
||||||
if (!!propertiesOrJson) {
|
if (!!propertiesOrJson) {
|
||||||
// Defined parameter
|
// Defined parameter
|
||||||
if (!!propertiesOrJson.sessionId) {
|
if (!!propertiesOrJson.sessionId) {
|
||||||
|
|
@ -315,11 +318,11 @@ export class Session {
|
||||||
connectionClosed.publishers.forEach((publisher) => {
|
connectionClosed.publishers.forEach((publisher) => {
|
||||||
this.connections.forEach((con) => {
|
this.connections.forEach((con) => {
|
||||||
con.subscribers = con.subscribers.filter((subscriber) => {
|
con.subscribers = con.subscribers.filter((subscriber) => {
|
||||||
// tslint:disable:no-string-literal
|
/* eslint-disable dot-notation */
|
||||||
if (!!subscriber['streamId']) {
|
if (!!subscriber['streamId']) {
|
||||||
// Subscriber with advanced webRtc configuration properties
|
// Subscriber with advanced webRtc configuration properties
|
||||||
return subscriber['streamId'] !== publisher.streamId;
|
return subscriber['streamId'] !== publisher.streamId;
|
||||||
// tslint:enable:no-string-literal
|
/* eslint-enable dot-notation */
|
||||||
} else {
|
} else {
|
||||||
// Regular string subscribers
|
// Regular string subscribers
|
||||||
return subscriber !== publisher.streamId;
|
return subscriber !== publisher.streamId;
|
||||||
|
|
@ -381,11 +384,11 @@ export class Session {
|
||||||
connection.publishers = connection.publishers.filter((pub) => pub.streamId !== streamId);
|
connection.publishers = connection.publishers.filter((pub) => pub.streamId !== streamId);
|
||||||
// Try to remove the Publisher from the Connection subscribers collection
|
// Try to remove the Publisher from the Connection subscribers collection
|
||||||
if (!!connection.subscribers && connection.subscribers.length > 0) {
|
if (!!connection.subscribers && connection.subscribers.length > 0) {
|
||||||
// tslint:disable:no-string-literal
|
/* eslint-disable dot-notation */
|
||||||
if (!!connection.subscribers[0]['streamId']) {
|
if (!!connection.subscribers[0]['streamId']) {
|
||||||
// Subscriber with advanced webRtc configuration properties
|
// Subscriber with advanced webRtc configuration properties
|
||||||
connection.subscribers = connection.subscribers.filter((sub) => sub['streamId'] !== streamId);
|
connection.subscribers = connection.subscribers.filter((sub) => sub['streamId'] !== streamId);
|
||||||
// tslint:enable:no-string-literal
|
/* eslint-enable dot-notation */
|
||||||
} else {
|
} else {
|
||||||
// Regular string subscribers
|
// Regular string subscribers
|
||||||
connection.subscribers = connection.subscribers.filter((sub) => sub !== streamId);
|
connection.subscribers = connection.subscribers.filter((sub) => sub !== streamId);
|
||||||
|
|
@ -570,7 +573,7 @@ export class Session {
|
||||||
json.connections.content.forEach((jsonConnection) => {
|
json.connections.content.forEach((jsonConnection) => {
|
||||||
const connectionObj: Connection = new Connection(jsonConnection);
|
const connectionObj: Connection = new Connection(jsonConnection);
|
||||||
fetchedConnectionIds.push(connectionObj.connectionId);
|
fetchedConnectionIds.push(connectionObj.connectionId);
|
||||||
let storedConnection = this.connections.find((c) => c.connectionId === connectionObj.connectionId);
|
const storedConnection = this.connections.find((c) => c.connectionId === connectionObj.connectionId);
|
||||||
|
|
||||||
if (!!storedConnection) {
|
if (!!storedConnection) {
|
||||||
// 2. Update existing Connection
|
// 2. Update existing Connection
|
||||||
|
|
@ -582,7 +585,7 @@ export class Session {
|
||||||
});
|
});
|
||||||
|
|
||||||
// 4. Remove closed sessions from local collection
|
// 4. Remove closed sessions from local collection
|
||||||
for (var i = this.connections.length - 1; i >= 0; --i) {
|
for (let i = this.connections.length - 1; i >= 0; --i) {
|
||||||
if (!fetchedConnectionIds.includes(this.connections[i].connectionId)) {
|
if (!fetchedConnectionIds.includes(this.connections[i].connectionId)) {
|
||||||
this.connections.splice(i, 1);
|
this.connections.splice(i, 1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,17 @@
|
||||||
{
|
{
|
||||||
"compileOnSave": false,
|
"compileOnSave": false,
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "lib",
|
"outDir": "lib",
|
||||||
"baseUrl": "src",
|
"baseUrl": "src",
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"declaration": true,
|
"declaration": true,
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"emitDecoratorMetadata": true,
|
"emitDecoratorMetadata": true,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"target": "es5",
|
"target": "es5",
|
||||||
"typeRoots": [
|
"typeRoots": ["node_modules/@types"],
|
||||||
"node_modules/@types"
|
"types": ["node"],
|
||||||
],
|
"lib": ["es2016", "dom"]
|
||||||
"types": ["node"],
|
},
|
||||||
"lib": [
|
"exclude": ["config", "docs", "lib", "node_modules"]
|
||||||
"es2016",
|
|
||||||
"dom"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"exclude": [
|
|
||||||
"config",
|
|
||||||
"docs",
|
|
||||||
"lib",
|
|
||||||
"node_modules"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -234,7 +234,7 @@ Resources:
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
while true; do
|
while true; do
|
||||||
HTTP_STATUS=$(curl -Ik http://localhost:5443 | head -n1 | awk '{print $2}')
|
HTTP_STATUS=$(curl -Ik http://localhost:5443 | head -n1 | awk '{print $2}')
|
||||||
if [ $HTTP_STATUS == 200 ]; then
|
if [ $HTTP_STATUS == 401 ]; then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
@ -355,7 +355,7 @@ Resources:
|
||||||
BlockDeviceMappings:
|
BlockDeviceMappings:
|
||||||
- DeviceName: /dev/sda1
|
- DeviceName: /dev/sda1
|
||||||
Ebs:
|
Ebs:
|
||||||
VolumeType: gp2
|
VolumeType: gp3
|
||||||
DeleteOnTermination: true
|
DeleteOnTermination: true
|
||||||
VolumeSize: 200
|
VolumeSize: 200
|
||||||
|
|
||||||
|
|
@ -501,11 +501,11 @@ Resources:
|
||||||
# Get original ami name
|
# Get original ami name
|
||||||
public_ami_filter = [{ 'Name': 'image-id', 'Values': [ source_image_id ] }]
|
public_ami_filter = [{ 'Name': 'image-id', 'Values': [ source_image_id ] }]
|
||||||
|
|
||||||
response = ec2_client_ov.describe_images(Filters=public_ami_filter)
|
response = ec2_client_ov.describe_images(IncludeDeprecated=True, Filters=public_ami_filter)
|
||||||
new_ami_name= "[ OpenVidu CE AMI Copy ] - " + response['Images'][0]['Name']
|
new_ami_name= "[ OpenVidu CE AMI Copy ] - " + response['Images'][0]['Name']
|
||||||
|
|
||||||
own_ami_filter = [{ 'Name': 'name', 'Values': [new_ami_name] }]
|
own_ami_filter = [{ 'Name': 'name', 'Values': [new_ami_name] }]
|
||||||
response = ec2_client.describe_images(Filters=own_ami_filter)
|
response = ec2_client.describe_images(IncludeDeprecated=True, Filters=own_ami_filter)
|
||||||
if (len(response['Images']) == 1):
|
if (len(response['Images']) == 1):
|
||||||
# If AMI exists, don't copy
|
# If AMI exists, don't copy
|
||||||
new_images.append(response['Images'][0]['ImageId'])
|
new_images.append(response['Images'][0]['ImageId'])
|
||||||
|
|
@ -535,7 +535,7 @@ Resources:
|
||||||
Handler: index.handler
|
Handler: index.handler
|
||||||
Role:
|
Role:
|
||||||
!GetAtt CloudformationLambdaRole.Arn
|
!GetAtt CloudformationLambdaRole.Arn
|
||||||
Runtime: python3.11
|
Runtime: python3.13
|
||||||
Timeout: 900
|
Timeout: 900
|
||||||
|
|
||||||
CloudformationLambdaInvoke:
|
CloudformationLambdaInvoke:
|
||||||
|
|
|
||||||
|
|
@ -88,14 +88,14 @@ Resources:
|
||||||
IMAGES="$(cat docker-compose.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
IMAGES="$(cat docker-compose.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
||||||
for IMG in $IMAGES
|
for IMG in $IMAGES
|
||||||
do
|
do
|
||||||
sed -i "s|$IMG.*|$IMG:master|g" docker-compose.yml
|
sed -i "s|$IMG.*|$IMG:master-v2|g" docker-compose.yml
|
||||||
done
|
done
|
||||||
|
|
||||||
# docker-compose.override.yml replace with master version
|
# docker-compose.override.yml replace with master version
|
||||||
IMAGES="$(cat docker-compose.override.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
IMAGES="$(cat docker-compose.override.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
||||||
for IMG in $IMAGES
|
for IMG in $IMAGES
|
||||||
do
|
do
|
||||||
sed -i "s|$IMG.*|$IMG:master|g" docker-compose.override.yml
|
sed -i "s|$IMG.*|$IMG:master-v2|g" docker-compose.override.yml
|
||||||
done
|
done
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
|
@ -159,15 +159,22 @@ Resources:
|
||||||
- Key: Name
|
- Key: Name
|
||||||
Value: !Ref AWS::StackName
|
Value: !Ref AWS::StackName
|
||||||
KeyName: AWS_KEY_NAME
|
KeyName: AWS_KEY_NAME
|
||||||
|
BlockDeviceMappings:
|
||||||
|
- DeviceName: /dev/sda1
|
||||||
|
Ebs:
|
||||||
|
VolumeType: gp3
|
||||||
|
DeleteOnTermination: true
|
||||||
|
VolumeSize: 12
|
||||||
UserData:
|
UserData:
|
||||||
"Fn::Base64":
|
"Fn::Base64":
|
||||||
!Sub |
|
!Sub |
|
||||||
#!/bin/bash -x
|
#!/bin/bash -x
|
||||||
set -eu -o pipefail
|
set -eu -o pipefail
|
||||||
apt-get update && apt-get install -y \
|
apt-get update && apt-get install -y \
|
||||||
|
python3-setuptools \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
ec2-instance-connect
|
ec2-instance-connect
|
||||||
pip3 install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz
|
pip3 install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz --break-system-packages
|
||||||
|
|
||||||
cfn-init --region ${AWS::Region} --stack ${AWS::StackId} --resource OpenviduServerCE
|
cfn-init --region ${AWS::Region} --stack ${AWS::StackId} --resource OpenviduServerCE
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ TEMPJSON=$(mktemp -t cloudformation-XXX --suffix .json)
|
||||||
getUbuntuAmiId() {
|
getUbuntuAmiId() {
|
||||||
local AMI_ID=$(
|
local AMI_ID=$(
|
||||||
aws --region ${1} ec2 describe-images \
|
aws --region ${1} ec2 describe-images \
|
||||||
--filters "Name=name,Values=*ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*" \
|
--filters "Name=name,Values=*ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*" \
|
||||||
"Name=owner-alias,Values=amazon" \
|
"Name=owner-alias,Values=amazon" \
|
||||||
--query "sort_by(Images, &CreationDate)" |
|
--query "sort_by(Images, &CreationDate)" |
|
||||||
jq -r '.[-1].ImageId'
|
jq -r '.[-1].ImageId'
|
||||||
|
|
@ -54,7 +54,7 @@ TEMPLATE_URL=https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/cfn-mkt-ov-ce-am
|
||||||
if [[ ${UPDATE_S3_FILES} == "true" ]]; then
|
if [[ ${UPDATE_S3_FILES} == "true" ]]; then
|
||||||
# Avoid overriding existing versions
|
# Avoid overriding existing versions
|
||||||
# Only master and non existing versions can be overriden
|
# Only master and non existing versions can be overriden
|
||||||
if [[ ${OPENVIDU_VERSION} != "master" ]]; then
|
if [[ ${OPENVIDU_VERSION} != "master-v2" ]]; then
|
||||||
INSTALL_SCRIPT_EXISTS=true
|
INSTALL_SCRIPT_EXISTS=true
|
||||||
aws s3api head-object --bucket aws.openvidu.io --key install_openvidu_$OPENVIDU_VERSION.sh || INSTALL_SCRIPT_EXISTS=false
|
aws s3api head-object --bucket aws.openvidu.io --key install_openvidu_$OPENVIDU_VERSION.sh || INSTALL_SCRIPT_EXISTS=false
|
||||||
if [[ ${INSTALL_SCRIPT_EXISTS} == "true" ]]; then
|
if [[ ${INSTALL_SCRIPT_EXISTS} == "true" ]]; then
|
||||||
|
|
@ -112,7 +112,7 @@ sed -i "s/OPENVIDU_VERSION/${OPENVIDU_VERSION}/g" CF-OpenVidu-${OPENVIDU_VERSION
|
||||||
if [[ ${UPDATE_S3_FILES} == "true" ]]; then
|
if [[ ${UPDATE_S3_FILES} == "true" ]]; then
|
||||||
# Avoid overriding existing versions
|
# Avoid overriding existing versions
|
||||||
# Only master and non existing versions can be overriden
|
# Only master and non existing versions can be overriden
|
||||||
if [[ ${OPENVIDU_VERSION} != "master" ]]; then
|
if [[ ${OPENVIDU_VERSION} != "master-v2" ]]; then
|
||||||
CF_EXIST=true
|
CF_EXIST=true
|
||||||
aws s3api head-object --bucket aws.openvidu.io --key CF-OpenVidu-${OPENVIDU_VERSION}.yaml || CF_EXIST=false
|
aws s3api head-object --bucket aws.openvidu.io --key CF-OpenVidu-${OPENVIDU_VERSION}.yaml || CF_EXIST=false
|
||||||
if [[ ${CF_EXIST} == "true" ]]; then
|
if [[ ${CF_EXIST} == "true" ]]; then
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,7 @@ OPENVIDU_CDR_PATH=/opt/openvidu/cdr
|
||||||
# --------------------------
|
# --------------------------
|
||||||
# Docker hub kurento media server: https://hub.docker.com/r/kurento/kurento-media-server
|
# Docker hub kurento media server: https://hub.docker.com/r/kurento/kurento-media-server
|
||||||
# Uncomment the next line and define this variable with KMS image that you want use
|
# Uncomment the next line and define this variable with KMS image that you want use
|
||||||
# KMS_IMAGE=kurento/kurento-media-server:7.0.1
|
# KMS_IMAGE=kurento/kurento-media-server:7.3.0
|
||||||
|
|
||||||
# Kurento Media Server Level logs
|
# Kurento Media Server Level logs
|
||||||
# -------------------------------
|
# -------------------------------
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,11 @@ services:
|
||||||
#
|
#
|
||||||
# Default Application
|
# Default Application
|
||||||
#
|
#
|
||||||
# Openvidu-Call Version: 2.30.0
|
# Openvidu-Call Version: 2.32.1
|
||||||
#
|
#
|
||||||
# --------------------------------------------------------------
|
# --------------------------------------------------------------
|
||||||
app:
|
app:
|
||||||
image: openvidu/openvidu-call:2.30.0
|
image: openvidu/openvidu-call:2.32.1
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
network_mode: host
|
network_mode: host
|
||||||
environment:
|
environment:
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# This file will be overridden when update OpenVidu Platform
|
# This file will be overridden when update OpenVidu Platform
|
||||||
#
|
#
|
||||||
# Openvidu Version: 2.30.0
|
# Openvidu Version: 2.32.1
|
||||||
#
|
#
|
||||||
# Installation Mode: On Premises
|
# Installation Mode: On Premises
|
||||||
#
|
#
|
||||||
|
|
@ -22,7 +22,7 @@ version: '3.1'
|
||||||
services:
|
services:
|
||||||
|
|
||||||
openvidu-server:
|
openvidu-server:
|
||||||
image: openvidu/openvidu-server:2.30.0
|
image: openvidu/openvidu-server:2.32.1
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
network_mode: host
|
network_mode: host
|
||||||
entrypoint: ['/usr/local/bin/entrypoint.sh']
|
entrypoint: ['/usr/local/bin/entrypoint.sh']
|
||||||
|
|
@ -45,11 +45,14 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
kms:
|
kms:
|
||||||
image: ${KMS_IMAGE:-kurento/kurento-media-server:7.0.1}
|
image: ${KMS_IMAGE:-kurento/kurento-media-server:7.3.0}
|
||||||
restart: always
|
restart: always
|
||||||
network_mode: host
|
network_mode: host
|
||||||
ulimits:
|
ulimits:
|
||||||
core: -1
|
core: -1
|
||||||
|
nofile:
|
||||||
|
soft: 65536
|
||||||
|
hard: 65536
|
||||||
volumes:
|
volumes:
|
||||||
- /opt/openvidu/kms-crashes:/opt/openvidu/kms-crashes
|
- /opt/openvidu/kms-crashes:/opt/openvidu/kms-crashes
|
||||||
- ${OPENVIDU_RECORDING_PATH}:${OPENVIDU_RECORDING_PATH}
|
- ${OPENVIDU_RECORDING_PATH}:${OPENVIDU_RECORDING_PATH}
|
||||||
|
|
@ -65,7 +68,7 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
coturn:
|
coturn:
|
||||||
image: openvidu/openvidu-coturn:2.30.0
|
image: openvidu/openvidu-coturn:2.32.1
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
ports:
|
ports:
|
||||||
- "${COTURN_PORT:-3478}:${COTURN_PORT:-3478}/tcp"
|
- "${COTURN_PORT:-3478}:${COTURN_PORT:-3478}/tcp"
|
||||||
|
|
@ -89,7 +92,7 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
image: openvidu/openvidu-proxy:2.30.0
|
image: openvidu/openvidu-proxy:2.32.1
|
||||||
restart: always
|
restart: always
|
||||||
network_mode: host
|
network_mode: host
|
||||||
volumes:
|
volumes:
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
# Global variables
|
# Global variables
|
||||||
OPENVIDU_FOLDER=openvidu
|
OPENVIDU_FOLDER=openvidu
|
||||||
OPENVIDU_VERSION=master
|
OPENVIDU_VERSION=v2.32.1
|
||||||
OPENVIDU_UPGRADABLE_VERSION="2.30"
|
OPENVIDU_UPGRADABLE_VERSION="2.32"
|
||||||
DOWNLOAD_URL=https://raw.githubusercontent.com/OpenVidu/openvidu/${OPENVIDU_VERSION}
|
DOWNLOAD_URL=https://raw.githubusercontent.com/OpenVidu/openvidu/${OPENVIDU_VERSION}
|
||||||
|
|
||||||
# Support docker compose v1 and v2
|
# Support docker compose v1 and v2
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,11 @@ services:
|
||||||
#
|
#
|
||||||
# Default Application
|
# Default Application
|
||||||
#
|
#
|
||||||
# Openvidu-Call Version: 2.30.0
|
# Openvidu-Call Version: 2.32.1
|
||||||
#
|
#
|
||||||
# --------------------------------------------------------------
|
# --------------------------------------------------------------
|
||||||
app:
|
app:
|
||||||
image: openvidu/openvidu-call:2.30.0
|
image: openvidu/openvidu-call:2.32.1
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
ports:
|
ports:
|
||||||
- 5442:5442
|
- 5442:5442
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
#
|
#
|
||||||
# This file will be overridden when updating OpenVidu Enterprise HA
|
# This file will be overridden when updating OpenVidu Enterprise HA
|
||||||
#
|
#
|
||||||
# Openvidu Version: 2.30.0
|
# Openvidu Version: 2.32.1
|
||||||
#
|
#
|
||||||
# Installation Mode: On Premises
|
# Installation Mode: On Premises
|
||||||
#
|
#
|
||||||
|
|
@ -18,7 +18,7 @@ version: '3.1'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
loadbalancer:
|
loadbalancer:
|
||||||
image: openvidu/openvidu-proxy:2.30.0
|
image: openvidu/openvidu-proxy:2.32.1
|
||||||
restart: always
|
restart: always
|
||||||
volumes:
|
volumes:
|
||||||
- ./certificates:/etc/letsencrypt
|
- ./certificates:/etc/letsencrypt
|
||||||
|
|
@ -55,7 +55,7 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
minio-s3:
|
minio-s3:
|
||||||
image: minio/minio:RELEASE.2023-01-06T18-11-18Z
|
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||||
restart: always
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
- MINIO_ACCESS_KEY=${OPENVIDU_ENTERPRISE_HA_S3_CONFIG_ACCESS_KEY}
|
- MINIO_ACCESS_KEY=${OPENVIDU_ENTERPRISE_HA_S3_CONFIG_ACCESS_KEY}
|
||||||
|
|
@ -73,21 +73,25 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
createbuckets:
|
createbuckets:
|
||||||
image: minio/mc:RELEASE.2022-12-24T15-21-38Z
|
image: minio/mc:RELEASE.2025-08-13T08-35-41Z
|
||||||
depends_on:
|
depends_on:
|
||||||
- minio-s3
|
- minio-s3
|
||||||
|
restart: on-failure
|
||||||
entrypoint: >
|
entrypoint: >
|
||||||
/bin/sh -c "
|
/bin/sh -c "
|
||||||
/usr/bin/mc config host add openvidu-minio \
|
until /usr/bin/mc alias set openvidu-minio \
|
||||||
http://minio-s3:9000 \
|
http://minio-s3:9000 \
|
||||||
'${OPENVIDU_ENTERPRISE_HA_S3_CONFIG_ACCESS_KEY}' \
|
'${OPENVIDU_ENTERPRISE_HA_S3_CONFIG_ACCESS_KEY}' \
|
||||||
'${OPENVIDU_ENTERPRISE_HA_S3_CONFIG_SECRET_KEY}';
|
'${OPENVIDU_ENTERPRISE_HA_S3_CONFIG_SECRET_KEY}'; do
|
||||||
|
echo 'Waiting for MinIO to be ready...';
|
||||||
|
sleep 2;
|
||||||
|
done;
|
||||||
/usr/bin/mc mb 'openvidu-minio/${OPENVIDU_ENTERPRISE_HA_S3_CONFIG_BUCKET}';
|
/usr/bin/mc mb 'openvidu-minio/${OPENVIDU_ENTERPRISE_HA_S3_CONFIG_BUCKET}';
|
||||||
exit 0;
|
exit 0;
|
||||||
"
|
"
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:7.0.8-alpine
|
image: redis:8.2.3-alpine
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "${OPENVIDU_ENTERPRISE_HA_REDIS_PORT:-6379}:${OPENVIDU_ENTERPRISE_HA_REDIS_PORT:-6379}"
|
- "${OPENVIDU_ENTERPRISE_HA_REDIS_PORT:-6379}:${OPENVIDU_ENTERPRISE_HA_REDIS_PORT:-6379}"
|
||||||
|
|
@ -100,7 +104,7 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
elasticsearch:
|
elasticsearch:
|
||||||
image: openvidu/openvidu-elasticsearch:7.8.0
|
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.29
|
||||||
restart: always
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
- discovery.type=single-node
|
- discovery.type=single-node
|
||||||
|
|
@ -120,7 +124,7 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
kibana:
|
kibana:
|
||||||
image: docker.elastic.co/kibana/kibana:7.8.0
|
image: docker.elastic.co/kibana/kibana:7.17.29
|
||||||
restart: always
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
- SERVER_BASEPATH="/kibana"
|
- SERVER_BASEPATH="/kibana"
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
# Global variables
|
# Global variables
|
||||||
OPENVIDU_FOLDER=ov-enterprise-base-services
|
OPENVIDU_FOLDER=ov-enterprise-base-services
|
||||||
ELASTICSEARCH_FOLDER=${OPENVIDU_FOLDER}/elasticsearch
|
ELASTICSEARCH_FOLDER=${OPENVIDU_FOLDER}/elasticsearch
|
||||||
OPENVIDU_VERSION=master
|
OPENVIDU_VERSION=v2.32.1
|
||||||
OPENVIDU_UPGRADABLE_VERSION="2.30"
|
OPENVIDU_UPGRADABLE_VERSION="2.32"
|
||||||
DOWNLOAD_URL=https://raw.githubusercontent.com/OpenVidu/openvidu/${OPENVIDU_VERSION}
|
DOWNLOAD_URL=https://raw.githubusercontent.com/OpenVidu/openvidu/${OPENVIDU_VERSION}
|
||||||
|
|
||||||
# Support docker compose v1 and v2
|
# Support docker compose v1 and v2
|
||||||
|
|
@ -321,4 +321,4 @@ if [[ -n "$1" && "$1" == "upgrade" ]]; then
|
||||||
upgrade_ov "$2"
|
upgrade_ov "$2"
|
||||||
else
|
else
|
||||||
new_ov_installation
|
new_ov_installation
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -319,7 +319,7 @@ OPENVIDU_CDR_PATH=/opt/openvidu/cdr
|
||||||
# Uncomment the next line and define this variable with KMS image that you want use
|
# Uncomment the next line and define this variable with KMS image that you want use
|
||||||
# By default, KMS_IMAGE is defined in media nodes and it does not need to be specified unless
|
# By default, KMS_IMAGE is defined in media nodes and it does not need to be specified unless
|
||||||
# you want to use a specific version of KMS
|
# you want to use a specific version of KMS
|
||||||
# KMS_IMAGE=kurento/kurento-media-server:6.18.0
|
# KMS_IMAGE=kurento/kurento-media-server:7.3.0
|
||||||
|
|
||||||
# Uncomment the next line and define this variable to change
|
# Uncomment the next line and define this variable to change
|
||||||
# the verbosity level of the logs of KMS
|
# the verbosity level of the logs of KMS
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
#
|
#
|
||||||
# This file will be overridden when update OpenVidu Enterprise HA Node
|
# This file will be overridden when update OpenVidu Enterprise HA Node
|
||||||
#
|
#
|
||||||
# Openvidu Version: 2.30.0
|
# Openvidu Version: 2.32.1
|
||||||
#
|
#
|
||||||
# Installation Mode: On Premises
|
# Installation Mode: On Premises
|
||||||
#
|
#
|
||||||
|
|
@ -19,7 +19,7 @@ version: '3.1'
|
||||||
services:
|
services:
|
||||||
|
|
||||||
openvidu-server:
|
openvidu-server:
|
||||||
image: openvidu/openvidu-server-pro:2.30.0
|
image: openvidu/openvidu-server-pro:2.32.1
|
||||||
container_name: openvidu-server
|
container_name: openvidu-server
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
network_mode: host
|
network_mode: host
|
||||||
|
|
@ -66,7 +66,7 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
replication-manager:
|
replication-manager:
|
||||||
image: openvidu/replication-manager-on-prem:2.30.0
|
image: openvidu/replication-manager-on-prem:2.32.1
|
||||||
container_name: replication-manager
|
container_name: replication-manager
|
||||||
restart: always
|
restart: always
|
||||||
network_mode: host
|
network_mode: host
|
||||||
|
|
@ -101,7 +101,7 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
coturn:
|
coturn:
|
||||||
image: openvidu/openvidu-coturn:2.30.0
|
image: openvidu/openvidu-coturn:2.32.1
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
|
|
@ -128,19 +128,22 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
media-node-controller:
|
media-node-controller:
|
||||||
image: openvidu/media-node-controller:2.30.0
|
image: openvidu/media-node-controller:2.32.1
|
||||||
restart: always
|
restart: always
|
||||||
ulimits:
|
ulimits:
|
||||||
core: -1
|
core: -1
|
||||||
|
nofile:
|
||||||
|
soft: 65536
|
||||||
|
hard: 65536
|
||||||
environment:
|
environment:
|
||||||
- MEDIA_NODE_CONTROLLER_RECORDINGS_PATH=/opt/openvidu/mncontroller/recordings
|
- MEDIA_NODE_CONTROLLER_RECORDINGS_PATH=/opt/openvidu/mncontroller/recordings
|
||||||
- KMS_IMAGE=kurento/kurento-media-server:7.0.1
|
- KMS_IMAGE=kurento/kurento-media-server:7.3.0
|
||||||
- MEDIASOUP_IMAGE=openvidu/mediasoup-controller:2.30.0
|
- MEDIASOUP_IMAGE=openvidu/mediasoup-controller:2.32.1
|
||||||
- METRICBEAT_IMAGE=docker.elastic.co/beats/metricbeat-oss:7.8.0
|
- METRICBEAT_IMAGE=docker.elastic.co/beats/metricbeat-oss:7.12.1
|
||||||
- FILEBEAT_IMAGE=docker.elastic.co/beats/filebeat-oss:7.8.0
|
- FILEBEAT_IMAGE=docker.elastic.co/beats/filebeat-oss:7.12.1
|
||||||
- OPENVIDU_RECORDING_IMAGE=openvidu/openvidu-recording:2.30.0
|
- OPENVIDU_RECORDING_IMAGE=openvidu/openvidu-recording:2.32.1
|
||||||
- COTURN_IMAGE=openvidu/openvidu-coturn:2.30.0
|
- COTURN_IMAGE=openvidu/openvidu-coturn:2.32.1
|
||||||
- SPEECH_TO_TEXT_IMAGE=openvidu/speech-to-text-service:2.30.0
|
- SPEECH_TO_TEXT_IMAGE=openvidu/speech-to-text-service:2.32.1
|
||||||
- NO_COLOR=true
|
- NO_COLOR=true
|
||||||
ports:
|
ports:
|
||||||
- 3000:3000
|
- 3000:3000
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
# Global variables
|
# Global variables
|
||||||
OPENVIDU_FOLDER=openvidu
|
OPENVIDU_FOLDER=openvidu
|
||||||
OPENVIDU_VERSION=master
|
OPENVIDU_VERSION=v2.32.1
|
||||||
OPENVIDU_UPGRADABLE_VERSION="2.30"
|
OPENVIDU_UPGRADABLE_VERSION="2.32"
|
||||||
BEATS_FOLDER=${OPENVIDU_FOLDER}/beats
|
BEATS_FOLDER=${OPENVIDU_FOLDER}/beats
|
||||||
DOWNLOAD_URL=https://raw.githubusercontent.com/OpenVidu/openvidu/${OPENVIDU_VERSION}
|
DOWNLOAD_URL=https://raw.githubusercontent.com/OpenVidu/openvidu/${OPENVIDU_VERSION}
|
||||||
IMAGES_MEDIA_NODE_CONTROLLER=(
|
IMAGES_MEDIA_NODE_CONTROLLER=(
|
||||||
|
|
|
||||||
|
|
@ -242,7 +242,7 @@ check_env_var_is_value() {
|
||||||
|
|
||||||
start_openvidu() {
|
start_openvidu() {
|
||||||
export INITIAL_CONFIG_SYNC=true
|
export INITIAL_CONFIG_SYNC=true
|
||||||
if ! docker-compose up --exit-code-from replication-manager replication-manager; then
|
if ! docker-compose run replication-manager; then
|
||||||
printf "\n ERROR: Openvidu Node failed to start"
|
printf "\n ERROR: Openvidu Node failed to start"
|
||||||
printf "\n"
|
printf "\n"
|
||||||
unset INITIAL_CONFIG_SYNC
|
unset INITIAL_CONFIG_SYNC
|
||||||
|
|
|
||||||
|
|
@ -744,7 +744,7 @@ Resources:
|
||||||
BlockDeviceMappings:
|
BlockDeviceMappings:
|
||||||
- DeviceName: /dev/sda1
|
- DeviceName: /dev/sda1
|
||||||
Ebs:
|
Ebs:
|
||||||
VolumeType: gp2
|
VolumeType: gp3
|
||||||
DeleteOnTermination: true
|
DeleteOnTermination: true
|
||||||
VolumeSize: 50
|
VolumeSize: 50
|
||||||
|
|
||||||
|
|
@ -898,9 +898,9 @@ Resources:
|
||||||
Port: 4443
|
Port: 4443
|
||||||
Protocol: HTTP
|
Protocol: HTTP
|
||||||
Matcher:
|
Matcher:
|
||||||
HttpCode: '200'
|
HttpCode: '401-403'
|
||||||
HealthCheckIntervalSeconds: 10
|
HealthCheckIntervalSeconds: 10
|
||||||
HealthCheckPath: /openvidu/health
|
HealthCheckPath: /
|
||||||
HealthCheckProtocol: HTTP
|
HealthCheckProtocol: HTTP
|
||||||
HealthCheckPort: '4443'
|
HealthCheckPort: '4443'
|
||||||
HealthCheckTimeoutSeconds: 5
|
HealthCheckTimeoutSeconds: 5
|
||||||
|
|
@ -1005,7 +1005,7 @@ Resources:
|
||||||
BlockDeviceMappings:
|
BlockDeviceMappings:
|
||||||
- DeviceName: /dev/sda1
|
- DeviceName: /dev/sda1
|
||||||
Ebs:
|
Ebs:
|
||||||
VolumeType: gp2
|
VolumeType: gp3
|
||||||
DeleteOnTermination: true
|
DeleteOnTermination: true
|
||||||
VolumeSize: 100
|
VolumeSize: 100
|
||||||
UserData:
|
UserData:
|
||||||
|
|
@ -1284,7 +1284,7 @@ Resources:
|
||||||
Handler: index.handler
|
Handler: index.handler
|
||||||
Role:
|
Role:
|
||||||
!GetAtt LambdaOnDeleteRole.Arn
|
!GetAtt LambdaOnDeleteRole.Arn
|
||||||
Runtime: python3.11
|
Runtime: python3.13
|
||||||
Timeout: 900
|
Timeout: 900
|
||||||
|
|
||||||
LambdaOnDeleteInvoke:
|
LambdaOnDeleteInvoke:
|
||||||
|
|
@ -1353,7 +1353,7 @@ Resources:
|
||||||
|
|
||||||
def copy_ami_operation(source_image_id, source_region, new_ami_name, ec2_client):
|
def copy_ami_operation(source_image_id, source_region, new_ami_name, ec2_client):
|
||||||
own_ami_filter = [{ 'Name': 'name', 'Values': [new_ami_name] }]
|
own_ami_filter = [{ 'Name': 'name', 'Values': [new_ami_name] }]
|
||||||
amis_response = ec2_client.describe_images(Filters=own_ami_filter)
|
amis_response = ec2_client.describe_images(IncludeDeprecated=True, Filters=own_ami_filter)
|
||||||
if (len(amis_response['Images']) == 1):
|
if (len(amis_response['Images']) == 1):
|
||||||
# If AMI exists, don't copy
|
# If AMI exists, don't copy
|
||||||
return amis_response['Images'][0]['ImageId']
|
return amis_response['Images'][0]['ImageId']
|
||||||
|
|
@ -1384,9 +1384,9 @@ Resources:
|
||||||
public_ami_master_node_filter = [{ 'Name': 'image-id', 'Values': [ source_image_id_master_node ] }]
|
public_ami_master_node_filter = [{ 'Name': 'image-id', 'Values': [ source_image_id_master_node ] }]
|
||||||
public_ami_media_node_filter = [{ 'Name': 'image-id', 'Values': [ source_image_id_media_node ] }]
|
public_ami_media_node_filter = [{ 'Name': 'image-id', 'Values': [ source_image_id_media_node ] }]
|
||||||
|
|
||||||
response = ec2_client_ov.describe_images(Filters=public_ami_master_node_filter)
|
response = ec2_client_ov.describe_images(IncludeDeprecated=True, Filters=public_ami_master_node_filter)
|
||||||
new_ami_name_master_node = "[ OpenVidu ENTERPRISE Master Node AMI Copy ] - " + response['Images'][0]['Name']
|
new_ami_name_master_node = "[ OpenVidu ENTERPRISE Master Node AMI Copy ] - " + response['Images'][0]['Name']
|
||||||
response = ec2_client_ov.describe_images(Filters=public_ami_media_node_filter)
|
response = ec2_client_ov.describe_images(IncludeDeprecated=True, Filters=public_ami_media_node_filter)
|
||||||
new_ami_name_media_node = "[ OpenVidu PRO/ENTERPRISE Media Node AMI Copy ] - " + response['Images'][0]['Name']
|
new_ami_name_media_node = "[ OpenVidu PRO/ENTERPRISE Media Node AMI Copy ] - " + response['Images'][0]['Name']
|
||||||
|
|
||||||
# Copy master node AMI and media node AMI
|
# Copy master node AMI and media node AMI
|
||||||
|
|
@ -1408,7 +1408,7 @@ Resources:
|
||||||
Handler: index.handler
|
Handler: index.handler
|
||||||
Role:
|
Role:
|
||||||
!GetAtt LambdaOnCreateRole.Arn
|
!GetAtt LambdaOnCreateRole.Arn
|
||||||
Runtime: python3.11
|
Runtime: python3.13
|
||||||
Timeout: 900
|
Timeout: 900
|
||||||
|
|
||||||
LambdaOnCreateInvoke:
|
LambdaOnCreateInvoke:
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ Resources:
|
||||||
IMAGES="$(cat docker-compose.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
IMAGES="$(cat docker-compose.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
||||||
for IMG in $IMAGES
|
for IMG in $IMAGES
|
||||||
do
|
do
|
||||||
sed -i "s|image: $IMG:.*|image: $IMG:master|g" docker-compose.yml
|
sed -i "s|image: $IMG:.*|image: $IMG:master-v2|g" docker-compose.yml
|
||||||
done
|
done
|
||||||
|
|
||||||
# docker-compose.override.yml replace with master version
|
# docker-compose.override.yml replace with master version
|
||||||
|
|
@ -97,7 +97,7 @@ Resources:
|
||||||
IMAGES="$(cat docker-compose.override.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
IMAGES="$(cat docker-compose.override.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
||||||
for IMG in $IMAGES
|
for IMG in $IMAGES
|
||||||
do
|
do
|
||||||
sed -i "s|image: $IMG:.*|image: $IMG:master|g" docker-compose.override.yml
|
sed -i "s|image: $IMG:.*|image: $IMG:master-v2|g" docker-compose.override.yml
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -192,6 +192,7 @@ Resources:
|
||||||
fi
|
fi
|
||||||
sed -i "s|#OPENVIDU_PRO_RECORDING_STORAGE=|OPENVIDU_PRO_RECORDING_STORAGE=s3|" $WORKINGDIR/.env
|
sed -i "s|#OPENVIDU_PRO_RECORDING_STORAGE=|OPENVIDU_PRO_RECORDING_STORAGE=s3|" $WORKINGDIR/.env
|
||||||
sed -i "s|#OPENVIDU_PRO_AWS_S3_BUCKET=|OPENVIDU_PRO_AWS_S3_BUCKET=${OPENVIDU_PRO_CONFIG_S3_BUCKET}/recordings|" $WORKINGDIR/.env
|
sed -i "s|#OPENVIDU_PRO_AWS_S3_BUCKET=|OPENVIDU_PRO_AWS_S3_BUCKET=${OPENVIDU_PRO_CONFIG_S3_BUCKET}/recordings|" $WORKINGDIR/.env
|
||||||
|
sed -i "s|#OPENVIDU_PRO_AWS_REGION=|OPENVIDU_PRO_AWS_REGION=${AWS_REGION}|" $WORKINGDIR/.env
|
||||||
|
|
||||||
# Deploy Coturn in media nodes
|
# Deploy Coturn in media nodes
|
||||||
OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||||
|
|
@ -254,18 +255,19 @@ Resources:
|
||||||
BlockDeviceMappings:
|
BlockDeviceMappings:
|
||||||
- DeviceName: /dev/sda1
|
- DeviceName: /dev/sda1
|
||||||
Ebs:
|
Ebs:
|
||||||
VolumeType: gp2
|
VolumeType: gp3
|
||||||
DeleteOnTermination: true
|
DeleteOnTermination: true
|
||||||
VolumeSize: 10
|
VolumeSize: 12
|
||||||
UserData:
|
UserData:
|
||||||
"Fn::Base64":
|
"Fn::Base64":
|
||||||
!Sub |
|
!Sub |
|
||||||
#!/bin/bash -x
|
#!/bin/bash -x
|
||||||
set -eu -o pipefail
|
set -eu -o pipefail
|
||||||
apt-get update && apt-get install -y \
|
apt-get update && apt-get install -y \
|
||||||
|
python3-setuptools \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
ec2-instance-connect
|
ec2-instance-connect
|
||||||
pip3 install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz
|
pip3 install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz --break-system-packages
|
||||||
|
|
||||||
cfn-init --region ${AWS::Region} --stack ${AWS::StackId} --resource OpenviduServerPro
|
cfn-init --region ${AWS::Region} --stack ${AWS::StackId} --resource OpenviduServerPro
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ TEMPJSON=$(mktemp -t cloudformation-XXX --suffix .json)
|
||||||
getUbuntuAmiId() {
|
getUbuntuAmiId() {
|
||||||
local AMI_ID=$(
|
local AMI_ID=$(
|
||||||
aws --region ${1} ec2 describe-images \
|
aws --region ${1} ec2 describe-images \
|
||||||
--filters "Name=name,Values=*ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*" \
|
--filters "Name=name,Values=*ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*" \
|
||||||
"Name=owner-alias,Values=amazon" \
|
"Name=owner-alias,Values=amazon" \
|
||||||
--query "sort_by(Images, &CreationDate)" |
|
--query "sort_by(Images, &CreationDate)" |
|
||||||
jq -r '.[-1].ImageId'
|
jq -r '.[-1].ImageId'
|
||||||
|
|
@ -56,7 +56,7 @@ TEMPLATE_URL=https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/cfn-crete-ov-aws
|
||||||
if [[ ${UPDATE_S3_FILES} == "true" ]]; then
|
if [[ ${UPDATE_S3_FILES} == "true" ]]; then
|
||||||
# Avoid overriding existing versions
|
# Avoid overriding existing versions
|
||||||
# Only master and non existing versions can be overriden
|
# Only master and non existing versions can be overriden
|
||||||
if [[ ${OPENVIDU_PRO_VERSION} != "master" ]]; then
|
if [[ ${OPENVIDU_PRO_VERSION} != "master-v2" ]]; then
|
||||||
INSTALL_SCRIPT_EXISTS=true
|
INSTALL_SCRIPT_EXISTS=true
|
||||||
aws s3api head-object --bucket aws.openvidu.io --key install_openvidu_enterprise_master_node_$OPENVIDU_PRO_VERSION.sh || INSTALL_SCRIPT_EXISTS=false
|
aws s3api head-object --bucket aws.openvidu.io --key install_openvidu_enterprise_master_node_$OPENVIDU_PRO_VERSION.sh || INSTALL_SCRIPT_EXISTS=false
|
||||||
if [[ ${INSTALL_SCRIPT_EXISTS} == "true" ]]; then
|
if [[ ${INSTALL_SCRIPT_EXISTS} == "true" ]]; then
|
||||||
|
|
@ -121,7 +121,7 @@ sed -i "s/KMS_AMI_ID/${KMS_AMI_ID}/g" CF-OpenVidu-Enterprise-${OPENVIDU_PRO_VERS
|
||||||
if [[ ${UPDATE_S3_FILES} == "true" ]]; then
|
if [[ ${UPDATE_S3_FILES} == "true" ]]; then
|
||||||
# Avoid overriding existing versions
|
# Avoid overriding existing versions
|
||||||
# Only master and non existing versions can be overriden
|
# Only master and non existing versions can be overriden
|
||||||
if [[ ${OPENVIDU_PRO_VERSION} != "master" ]]; then
|
if [[ ${OPENVIDU_PRO_VERSION} != "master-v2" ]]; then
|
||||||
CF_EXIST=true
|
CF_EXIST=true
|
||||||
aws s3api head-object --bucket aws.openvidu.io --key CF-OpenVidu-Enterprise-${OPENVIDU_PRO_VERSION}.yaml || CF_EXIST=false
|
aws s3api head-object --bucket aws.openvidu.io --key CF-OpenVidu-Enterprise-${OPENVIDU_PRO_VERSION}.yaml || CF_EXIST=false
|
||||||
if [[ ${CF_EXIST} == "true" ]]; then
|
if [[ ${CF_EXIST} == "true" ]]; then
|
||||||
|
|
|
||||||
|
|
@ -1229,7 +1229,7 @@ Resources:
|
||||||
Handler: index.handler
|
Handler: index.handler
|
||||||
Role:
|
Role:
|
||||||
!GetAtt LambdaOnDeleteRole.Arn
|
!GetAtt LambdaOnDeleteRole.Arn
|
||||||
Runtime: python3.11
|
Runtime: python3.13
|
||||||
Timeout: 900
|
Timeout: 900
|
||||||
|
|
||||||
LambdaOnDeleteInvoke:
|
LambdaOnDeleteInvoke:
|
||||||
|
|
@ -1298,7 +1298,7 @@ Resources:
|
||||||
|
|
||||||
def copy_ami_operation(source_image_id, source_region, new_ami_name, ec2_client):
|
def copy_ami_operation(source_image_id, source_region, new_ami_name, ec2_client):
|
||||||
own_ami_filter = [{ 'Name': 'name', 'Values': [new_ami_name] }]
|
own_ami_filter = [{ 'Name': 'name', 'Values': [new_ami_name] }]
|
||||||
amis_response = ec2_client.describe_images(Filters=own_ami_filter)
|
amis_response = ec2_client.describe_images(IncludeDeprecated=True, Filters=own_ami_filter)
|
||||||
if (len(amis_response['Images']) == 1):
|
if (len(amis_response['Images']) == 1):
|
||||||
# If AMI exists, don't copy
|
# If AMI exists, don't copy
|
||||||
return amis_response['Images'][0]['ImageId']
|
return amis_response['Images'][0]['ImageId']
|
||||||
|
|
@ -1329,9 +1329,9 @@ Resources:
|
||||||
public_ami_master_node_filter = [{ 'Name': 'image-id', 'Values': [ source_image_id_master_node ] }]
|
public_ami_master_node_filter = [{ 'Name': 'image-id', 'Values': [ source_image_id_master_node ] }]
|
||||||
public_ami_media_node_filter = [{ 'Name': 'image-id', 'Values': [ source_image_id_media_node ] }]
|
public_ami_media_node_filter = [{ 'Name': 'image-id', 'Values': [ source_image_id_media_node ] }]
|
||||||
|
|
||||||
response = ec2_client_ov.describe_images(Filters=public_ami_master_node_filter)
|
response = ec2_client_ov.describe_images(IncludeDeprecated=True, Filters=public_ami_master_node_filter)
|
||||||
new_ami_name_master_node = "[ OpenVidu ENTERPRISE Master Node AMI Copy ] - " + response['Images'][0]['Name']
|
new_ami_name_master_node = "[ OpenVidu ENTERPRISE Master Node AMI Copy ] - " + response['Images'][0]['Name']
|
||||||
response = ec2_client_ov.describe_images(Filters=public_ami_media_node_filter)
|
response = ec2_client_ov.describe_images(IncludeDeprecated=True, Filters=public_ami_media_node_filter)
|
||||||
new_ami_name_media_node = "[ OpenVidu PRO/ENTERPRISE Media Node AMI Copy ] - " + response['Images'][0]['Name']
|
new_ami_name_media_node = "[ OpenVidu PRO/ENTERPRISE Media Node AMI Copy ] - " + response['Images'][0]['Name']
|
||||||
|
|
||||||
# Copy master node AMI and media node AMI
|
# Copy master node AMI and media node AMI
|
||||||
|
|
@ -1353,7 +1353,7 @@ Resources:
|
||||||
Handler: index.handler
|
Handler: index.handler
|
||||||
Role:
|
Role:
|
||||||
!GetAtt LambdaOnCreateRole.Arn
|
!GetAtt LambdaOnCreateRole.Arn
|
||||||
Runtime: python3.11
|
Runtime: python3.13
|
||||||
Timeout: 900
|
Timeout: 900
|
||||||
|
|
||||||
LambdaOnCreateInvoke:
|
LambdaOnCreateInvoke:
|
||||||
|
|
|
||||||
|
|
@ -80,8 +80,8 @@ Resources:
|
||||||
|
|
||||||
# Install openvidu-pro
|
# Install openvidu-pro
|
||||||
cd /opt
|
cd /opt
|
||||||
if [[ "OPENVIDU_VERSION" == "master" ]]; then
|
if [[ "OPENVIDU_VERSION" == "master-v2" ]]; then
|
||||||
curl https://raw.githubusercontent.com/OpenVidu/openvidu/master/openvidu-server/deployments/enterprise/docker-compose/install_openvidu_enterprise_master_node.sh | bash
|
curl https://raw.githubusercontent.com/OpenVidu/openvidu/v2/openvidu-server/deployments/enterprise/docker-compose/install_openvidu_enterprise_master_node.sh | bash
|
||||||
else
|
else
|
||||||
curl https://raw.githubusercontent.com/OpenVidu/openvidu/vOPENVIDU_VERSION/openvidu-server/deployments/enterprise/docker-compose/install_openvidu_enterprise_master_node.sh | bash
|
curl https://raw.githubusercontent.com/OpenVidu/openvidu/vOPENVIDU_VERSION/openvidu-server/deployments/enterprise/docker-compose/install_openvidu_enterprise_master_node.sh | bash
|
||||||
fi
|
fi
|
||||||
|
|
@ -93,7 +93,7 @@ Resources:
|
||||||
IMAGES="$(cat docker-compose.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
IMAGES="$(cat docker-compose.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
||||||
for IMG in $IMAGES
|
for IMG in $IMAGES
|
||||||
do
|
do
|
||||||
sed -i "s|image: $IMG:.*|image: $IMG:master|g" docker-compose.yml
|
sed -i "s|image: $IMG:.*|image: $IMG:master-v2|g" docker-compose.yml
|
||||||
done
|
done
|
||||||
|
|
||||||
# docker-compose.override.yml replace with master version
|
# docker-compose.override.yml replace with master version
|
||||||
|
|
@ -101,7 +101,7 @@ Resources:
|
||||||
IMAGES="$(cat docker-compose.override.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
IMAGES="$(cat docker-compose.override.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
||||||
for IMG in $IMAGES
|
for IMG in $IMAGES
|
||||||
do
|
do
|
||||||
sed -i "s|image: $IMG:.*|image: $IMG:master|g" docker-compose.override.yml
|
sed -i "s|image: $IMG:.*|image: $IMG:master-v2|g" docker-compose.override.yml
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -251,18 +251,19 @@ Resources:
|
||||||
BlockDeviceMappings:
|
BlockDeviceMappings:
|
||||||
- DeviceName: /dev/sda1
|
- DeviceName: /dev/sda1
|
||||||
Ebs:
|
Ebs:
|
||||||
VolumeType: gp2
|
VolumeType: gp3
|
||||||
DeleteOnTermination: true
|
DeleteOnTermination: true
|
||||||
VolumeSize: 10
|
VolumeSize: 12
|
||||||
UserData:
|
UserData:
|
||||||
"Fn::Base64":
|
"Fn::Base64":
|
||||||
!Sub |
|
!Sub |
|
||||||
#!/bin/bash -x
|
#!/bin/bash -x
|
||||||
set -eu -o pipefail
|
set -eu -o pipefail
|
||||||
apt-get update && apt-get install -y \
|
apt-get update && apt-get install -y \
|
||||||
|
python3-setuptools \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
ec2-instance-connect
|
ec2-instance-connect
|
||||||
pip3 install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz
|
pip3 install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz --break-system-packages
|
||||||
|
|
||||||
cfn-init --region ${AWS::Region} --stack ${AWS::StackId} --resource OpenviduServerPro
|
cfn-init --region ${AWS::Region} --stack ${AWS::StackId} --resource OpenviduServerPro
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ TEMPJSON=$(mktemp -t cloudformation-XXX --suffix .json)
|
||||||
getUbuntuAmiId() {
|
getUbuntuAmiId() {
|
||||||
local AMI_ID=$(
|
local AMI_ID=$(
|
||||||
aws --region ${1} ec2 describe-images \
|
aws --region ${1} ec2 describe-images \
|
||||||
--filters "Name=name,Values=*ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*" \
|
--filters "Name=name,Values=*ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*" \
|
||||||
"Name=owner-alias,Values=amazon" \
|
"Name=owner-alias,Values=amazon" \
|
||||||
--query "sort_by(Images, &CreationDate)" |
|
--query "sort_by(Images, &CreationDate)" |
|
||||||
jq -r '.[-1].ImageId'
|
jq -r '.[-1].ImageId'
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ TEMP_JSON_ES_EBS_OPT=$(mktemp -t es-ebs-XXX --suffix .json)
|
||||||
cat > "$TEMP_JSON_ES_EBS_OPT"<<EOF
|
cat > "$TEMP_JSON_ES_EBS_OPT"<<EOF
|
||||||
{
|
{
|
||||||
"EBSEnabled": true,
|
"EBSEnabled": true,
|
||||||
"VolumeType": "gp2",
|
"VolumeType": "gp3",
|
||||||
"VolumeSize": 10
|
"VolumeSize": 10
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
|
||||||
|
|
@ -379,7 +379,7 @@ ELASTICSEARCH_PASSWORD=
|
||||||
# Uncomment the next line and define this variable with KMS image that you want use
|
# Uncomment the next line and define this variable with KMS image that you want use
|
||||||
# By default, KMS_IMAGE is defined in media nodes and it does not need to be specified unless
|
# By default, KMS_IMAGE is defined in media nodes and it does not need to be specified unless
|
||||||
# you want to use a specific version of KMS
|
# you want to use a specific version of KMS
|
||||||
# KMS_IMAGE=kurento/kurento-media-server:7.0.1
|
# KMS_IMAGE=kurento/kurento-media-server:7.3.0
|
||||||
|
|
||||||
# Uncomment the next line and define this variable to change
|
# Uncomment the next line and define this variable to change
|
||||||
# the verbosity level of the logs of KMS
|
# the verbosity level of the logs of KMS
|
||||||
|
|
@ -399,6 +399,13 @@ ELASTICSEARCH_PASSWORD=
|
||||||
# - https://docs.openvidu.io/en/stable/deployment/pro/on-premises/#coturn-configuration
|
# - https://docs.openvidu.io/en/stable/deployment/pro/on-premises/#coturn-configuration
|
||||||
OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=false
|
OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=false
|
||||||
|
|
||||||
|
# TURN traffic through internal network
|
||||||
|
# --------------------------
|
||||||
|
# Wether to route TURN traffic through the internal network
|
||||||
|
# Default value is COTURN_INTERNAL_RELAY=true
|
||||||
|
COTURN_INTERNAL_RELAY=true
|
||||||
|
|
||||||
|
|
||||||
# Private Docker registries for custom images
|
# Private Docker registries for custom images
|
||||||
# --------------------------
|
# --------------------------
|
||||||
# By default OpenVidu PRO/Enterprise uses the public Docker Hub registry to pull the images,
|
# By default OpenVidu PRO/Enterprise uses the public Docker Hub registry to pull the images,
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ docker run --rm amazon/aws-cli:${AWS_CLI_DOCKER_TAG} ec2 run-instances \
|
||||||
--subnet-id ${AWS_SUBNET_ID} \
|
--subnet-id ${AWS_SUBNET_ID} \
|
||||||
--tag-specifications "ResourceType=instance,Tags=[{Key='Name',Value='Media Node'},{Key='ov-cluster-member',Value='kms'},{Key='ov-stack-name',Value='${AWS_STACK_NAME}'},{Key='ov-stack-region',Value='${AWS_DEFAULT_REGION}'}]" \
|
--tag-specifications "ResourceType=instance,Tags=[{Key='Name',Value='Media Node'},{Key='ov-cluster-member',Value='kms'},{Key='ov-stack-name',Value='${AWS_STACK_NAME}'},{Key='ov-stack-region',Value='${AWS_DEFAULT_REGION}'}]" \
|
||||||
--iam-instance-profile Name="OpenViduInstanceProfile-${AWS_STACK_NAME}-${AWS_DEFAULT_REGION}" \
|
--iam-instance-profile Name="OpenViduInstanceProfile-${AWS_STACK_NAME}-${AWS_DEFAULT_REGION}" \
|
||||||
--block-device-mappings "DeviceName=/dev/sda1,Ebs={DeleteOnTermination=True,VolumeType='gp2',VolumeSize='${AWS_VOLUME_SIZE}'}" \
|
--block-device-mappings "DeviceName=/dev/sda1,Ebs={DeleteOnTermination=True,VolumeType='gp3',VolumeSize='${AWS_VOLUME_SIZE}'}" \
|
||||||
--security-group-ids ${AWS_SECURITY_GROUP} > ${OUTPUT} 2> ${ERROUTPUT}
|
--security-group-ids ${AWS_SECURITY_GROUP} > ${OUTPUT} 2> ${ERROUTPUT}
|
||||||
|
|
||||||
docker run --rm amazon/aws-cli:${AWS_CLI_DOCKER_TAG} ec2 wait instance-running --instance-ids $(cat ${OUTPUT} | jq --raw-output ' .Instances[] | .InstanceId')
|
docker run --rm amazon/aws-cli:${AWS_CLI_DOCKER_TAG} ec2 wait instance-running --instance-ids $(cat ${OUTPUT} | jq --raw-output ' .Instances[] | .InstanceId')
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# This file will be overridden when update OpenVidu Platform
|
# This file will be overridden when update OpenVidu Platform
|
||||||
#
|
#
|
||||||
# Openvidu Version: 2.30.0
|
# Openvidu Version: 2.32.1
|
||||||
#
|
#
|
||||||
# Installation Mode: On Premises
|
# Installation Mode: On Premises
|
||||||
#
|
#
|
||||||
|
|
@ -22,7 +22,7 @@ version: '3.1'
|
||||||
services:
|
services:
|
||||||
|
|
||||||
openvidu-server:
|
openvidu-server:
|
||||||
image: openvidu/openvidu-server-pro:2.30.0
|
image: openvidu/openvidu-server-pro:2.32.1
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
network_mode: host
|
network_mode: host
|
||||||
entrypoint: ['/usr/local/bin/entrypoint.sh']
|
entrypoint: ['/usr/local/bin/entrypoint.sh']
|
||||||
|
|
@ -60,7 +60,7 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
replication-manager:
|
replication-manager:
|
||||||
image: openvidu/replication-manager:2.30.0
|
image: openvidu/replication-manager:2.32.1
|
||||||
restart: always
|
restart: always
|
||||||
network_mode: host
|
network_mode: host
|
||||||
volumes:
|
volumes:
|
||||||
|
|
@ -89,7 +89,7 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
coturn:
|
coturn:
|
||||||
image: openvidu/openvidu-coturn:2.30.0
|
image: openvidu/openvidu-coturn:2.32.1
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
network_mode: host
|
network_mode: host
|
||||||
env_file:
|
env_file:
|
||||||
|
|
@ -112,7 +112,7 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
metricbeat:
|
metricbeat:
|
||||||
image: docker.elastic.co/beats/metricbeat-oss:7.8.0
|
image: docker.elastic.co/beats/metricbeat-oss:7.12.1
|
||||||
network_mode: host
|
network_mode: host
|
||||||
restart: always
|
restart: always
|
||||||
user: root
|
user: root
|
||||||
|
|
@ -152,7 +152,7 @@ services:
|
||||||
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"
|
||||||
|
|
||||||
filebeat:
|
filebeat:
|
||||||
image: docker.elastic.co/beats/filebeat-oss:7.8.0
|
image: docker.elastic.co/beats/filebeat-oss:7.12.1
|
||||||
network_mode: host
|
network_mode: host
|
||||||
restart: always
|
restart: always
|
||||||
user: root
|
user: root
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue