diff --git a/.env.template b/.env.template
index 772ed632..649cdfc0 100644
--- a/.env.template
+++ b/.env.template
@@ -1,14 +1,16 @@
-# サンプルやテストに利用する Sora の Signaling URL を指定してください
+# サンプルに利用する Sora の Signaling URL を指定してください
VITE_SORA_SIGNALING_URL=wss://sora.example.com/signaling
-# サンプルやテストに利用する Sora の ChannelID を指定してください
+# サンプルに利用する Sora の ChannelID を指定してください
VITE_SORA_CHANNEL_ID=sora-js-sdk
-# サンプルやテストに利用するアクセストークンを指定してください、不要であれば空欄で大丈夫です
+# サンプルに利用するアクセストークンを指定してください、不要であれば空欄で大丈夫です
VITE_ACCESS_TOKEN=access_token
-# サンプルやテストに利用する Sora の API URL を指定ください、不要であれば空欄で大丈夫です
-VITE_SORA_API_URL=https://sora.example.com/api
-# サンプルやテストに利用する Sora の WHIP のエンドポイント URL を指定してください、不要であれば空欄で大丈夫です
-VITE_SORA_WHIP_ENDPOINT_URL=https://sora.example.com/whip
-# サンプルやテストに利用する Sora の WHEP のエンドポイント URL を指定してください、不要であれば空欄で大丈夫です
-VITE_SORA_WHEP_ENDPOINT_URL=https://sora.example.com/whep
\ No newline at end of file
+# テストに利用する Sora の設定
+VITE_TEST_SIGNALING_URL=
+VITE_TEST_CHANNEL_ID_PREFIX=
+VITE_TEST_CHANNEL_ID_SUFFIX=
+VITE_TEST_API_URL=
+VITE_TEST_WHIP_ENDPOINT_URL=
+VITE_TEST_WHEP_ENDPOINT_URL=
+VITE_TEST_SECRET_KEY=
\ No newline at end of file
diff --git a/.github/workflows/e2e-test.yml b/.github/workflows/e2e-test.yml
index 6770a991..73fd39d8 100644
--- a/.github/workflows/e2e-test.yml
+++ b/.github/workflows/e2e-test.yml
@@ -23,12 +23,12 @@ jobs:
# browser: ["chromium", "firefox", "webkit"]
browser: ["chromium"]
env:
- VITE_SORA_SIGNALING_URL: ${{ secrets.TEST_SIGNALING_URL }}
- VITE_SORA_WHIP_ENDPOINT_URL: ${{ secrets.TEST_WHIP_ENDPOINT_URL }}
- VITE_SORA_WHEP_ENDPOINT_URL: ${{ secrets.TEST_WHEP_ENDPOINT_URL }}
- VITE_SORA_CHANNEL_ID_PREFIX: ${{ secrets.TEST_CHANNEL_ID_PREFIX }}
- VITE_SORA_API_URL: ${{ secrets.TEST_API_URL }}
- VITE_ACCESS_TOKEN: ${{ secrets.TEST_SECRET_KEY }}
+ VITE_TEST_SIGNALING_URL: ${{ secrets.TEST_SIGNALING_URL }}
+ VITE_TEST_WHIP_ENDPOINT_URL: ${{ secrets.TEST_WHIP_ENDPOINT_URL }}
+ VITE_TEST_WHEP_ENDPOINT_URL: ${{ secrets.TEST_WHEP_ENDPOINT_URL }}
+ VITE_TEST_CHANNEL_ID_PREFIX: ${{ secrets.TEST_CHANNEL_ID_PREFIX }}
+ VITE_TEST_API_URL: ${{ secrets.TEST_API_URL }}
+ VITE_TEST_SECRET_KEY: ${{ secrets.TEST_SECRET_KEY }}
steps:
- uses: actions/checkout@v4
- uses: tailscale/github-action@v2
@@ -46,7 +46,7 @@ jobs:
- run: pnpm exec playwright install ${{ matrix.browser }} --with-deps
- run: pnpm exec playwright test --project=${{ matrix.browser }}
env:
- VITE_SORA_CHANNEL_ID_SUFFIX: _${{ matrix.node }}
+ VITE_TEST_CHANNEL_ID_SUFFIX: _${{ matrix.node }}
# - uses: actions/upload-artifact@v4
# if: always()
# with:
diff --git a/.github/workflows/npm-pkg-e2e-test.yml b/.github/workflows/npm-pkg-e2e-test.yml
index 37564990..473202c6 100644
--- a/.github/workflows/npm-pkg-e2e-test.yml
+++ b/.github/workflows/npm-pkg-e2e-test.yml
@@ -35,12 +35,12 @@ jobs:
# browser: ["chromium", "firefox", "webkit"]
browser: ["chromium"]
env:
- VITE_SORA_SIGNALING_URL: ${{ secrets.TEST_SIGNALING_URL }}
- VITE_SORA_WHIP_ENDPOINT_URL: ${{ secrets.TEST_WHIP_ENDPOINT_URL }}
- VITE_SORA_WHEP_ENDPOINT_URL: ${{ secrets.TEST_WHEP_ENDPOINT_URL }}
- VITE_SORA_CHANNEL_ID_PREFIX: ${{ secrets.TEST_CHANNEL_ID_PREFIX }}
- VITE_SORA_API_URL: ${{ secrets.TEST_API_URL }}
- VITE_ACCESS_TOKEN: ${{ secrets.TEST_SECRET_KEY }}
+ VITE_TEST_SIGNALING_URL: ${{ secrets.TEST_SIGNALING_URL }}
+ VITE_TEST_WHIP_ENDPOINT_URL: ${{ secrets.TEST_WHIP_ENDPOINT_URL }}
+ VITE_TEST_WHEP_ENDPOINT_URL: ${{ secrets.TEST_WHEP_ENDPOINT_URL }}
+ VITE_TEST_CHANNEL_ID_PREFIX: ${{ secrets.TEST_CHANNEL_ID_PREFIX }}
+ VITE_TEST_API_URL: ${{ secrets.TEST_API_URL }}
+ VITE_TEST_SECRET_KEY: ${{ secrets.TEST_SECRET_KEY }}
NPM_PKG_E2E_TEST: true
steps:
- uses: actions/checkout@v4
@@ -62,7 +62,7 @@ jobs:
- run: pnpm exec playwright install ${{ matrix.browser }} --with-deps
- run: pnpm exec playwright test --project=${{ matrix.browser }}
env:
- VITE_SORA_CHANNEL_ID_SUFFIX: _${{ matrix.node }}_${{ matrix.sdk_version }}
+ VITE_TEST_CHANNEL_ID_SUFFIX: _${{ matrix.node }}_${{ matrix.sdk_version }}
# - uses: actions/upload-artifact@v4
# if: always()
# with:
diff --git a/CHANGES.md b/CHANGES.md
index 1cc372d1..a9263200 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -25,7 +25,10 @@
- @voluntas
- [ADD] .markdownlint.yaml ファイルを追加する
- @voluntas
+- [ADD] 新しい examples を追加する
+ - @voluntas
- [CHANGE] examples を e2e-tests に変更する
+ - 環境変数の Prefix を TEST_ に切り替える
- @voluntas
- [CHANGE] tsconfig.json の moduleResolution を Bundler に変更する
- @voluntas
diff --git a/README.md b/README.md
index aefd3206..c9d69466 100644
--- a/README.md
+++ b/README.md
@@ -46,6 +46,18 @@ pnpm add sora-js-sdk
> - Firefox 113 以降
> - Safari 16.4 以降
+## サンプル
+
+サンプルを Vite にて起動できます。
+
+```bash
+# .env.local を作成して適切な値を設定してください
+$ cp .env.template .env.local
+$ pnpm install
+$ pnpm run build
+$ pnpm run dev
+```
+
## E2E (End to End) テスト
Playwright を利用した E2E テストを実行できます。
@@ -59,6 +71,14 @@ $ pnpm exec playwright install chromium --with-deps
$ pnpm run e2e-test
```
+### E2E テストページ
+
+E2E テストで実行するページを Vite にて起動できます。
+
+```bash
+pnpm run e2e-dev
+```
+
## マルチトラックについて
[WebRTC SFU Sora](https://sora.shiguredo.jp) は 1 メディアストリームにつき 1 音声トラック、
diff --git a/biome.jsonc b/biome.jsonc
index 144a0739..198592e1 100644
--- a/biome.jsonc
+++ b/biome.jsonc
@@ -4,7 +4,15 @@
"enabled": true
},
"files": {
- "include": ["src/**", "examples/**", "tests/**", "*.config.mjs", "package.json", "biome.jsonc"]
+ "include": [
+ "src/**",
+ "examples/**",
+ "tests/**",
+ "e2e-tests/**",
+ "*.config.mjs",
+ "package.json",
+ "biome.jsonc"
+ ]
},
"linter": {
"enabled": true,
diff --git a/e2e-tests/data_channel_signaling_only/index.html b/e2e-tests/data_channel_signaling_only/index.html
index c44ec923..eb2965d0 100644
--- a/e2e-tests/data_channel_signaling_only/index.html
+++ b/e2e-tests/data_channel_signaling_only/index.html
@@ -2,12 +2,12 @@
- Sendonly test
+ DataChannelSignalingOnly test
-
Sendonly test
+
DataChannelSignalingOnly test
diff --git a/e2e-tests/data_channel_signaling_only/main.mts b/e2e-tests/data_channel_signaling_only/main.mts
index 95c0da32..26f4c907 100644
--- a/e2e-tests/data_channel_signaling_only/main.mts
+++ b/e2e-tests/data_channel_signaling_only/main.mts
@@ -7,17 +7,12 @@ import Sora, {
} from 'sora-js-sdk'
document.addEventListener('DOMContentLoaded', async () => {
- const SORA_SIGNALING_URL = import.meta.env.VITE_SORA_SIGNALING_URL
- const SORA_CHANNEL_ID_PREFIX = import.meta.env.VITE_SORA_CHANNEL_ID_PREFIX || ''
- const SORA_CHANNEL_ID_SUFFIX = import.meta.env.VITE_SORA_CHANNEL_ID_SUFFIX || ''
- const ACCESS_TOKEN = import.meta.env.VITE_ACCESS_TOKEN || ''
-
- const client = new SoraClient(
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
- )
+ const signalingUrl = import.meta.env.VITE_TEST_SIGNALING_URL
+ const channelIdPrefix = import.meta.env.VITE_TEST_CHANNEL_ID_PREFIX || ''
+ const channelIdSuffix = import.meta.env.VITE_TEST_CHANNEL_ID_SUFFIX || ''
+ const secretKey = import.meta.env.VITE_TEST_SECRET_KEY
+
+ const client = new SoraClient(signalingUrl, channelIdPrefix, channelIdSuffix, secretKey)
// SDK バージョンの表示
const sdkVersionElement = document.querySelector('#sdk-version')
@@ -77,17 +72,17 @@ class SoraClient {
private connection: ConnectionPublisher
constructor(
- signaling_url: string,
- channel_id_prefix: string,
- channel_id_suffix: string,
- access_token: string,
+ signalingUrl: string,
+ channelIdPrefix: string,
+ channelIdSuffix: string,
+ secretKey: string,
) {
- this.sora = Sora.connection(signaling_url, this.debug)
+ this.sora = Sora.connection(signalingUrl, this.debug)
// channel_id の生成
- this.channelId = `${channel_id_prefix}sendonly_recvonly${channel_id_suffix}`
+ this.channelId = `${channelIdPrefix}sendonly_recvonly${channelIdSuffix}`
// access_token を指定する metadata の生成
- this.metadata = { access_token: access_token }
+ this.metadata = { access_token: secretKey }
this.connection = this.sora.sendonly(this.channelId, this.metadata, this.options)
this.connection.on('notify', this.onNotify.bind(this))
@@ -145,9 +140,9 @@ class SoraClient {
// E2E テスト側で実行した方が良い気がする
async apiDisconnect(): Promise
{
- const apiUrl = import.meta.env.VITE_SORA_API_URL
+ const apiUrl = import.meta.env.VITE_TEST_API_URL
if (apiUrl === '') {
- console.error('VITE_SORA_API_URL is not set')
+ console.error('VITE_TEST_API_URL is not set')
}
const response = await fetch(apiUrl, {
method: 'POST',
diff --git a/e2e-tests/index.html b/e2e-tests/index.html
index 6062d99e..653e4f3b 100644
--- a/e2e-tests/index.html
+++ b/e2e-tests/index.html
@@ -8,20 +8,18 @@
diff --git a/e2e-tests/messaging/main.mts b/e2e-tests/messaging/main.mts
index 411418ca..81a8ef17 100644
--- a/e2e-tests/messaging/main.mts
+++ b/e2e-tests/messaging/main.mts
@@ -16,10 +16,10 @@ const getChannelName = (): string => {
}
document.addEventListener('DOMContentLoaded', async () => {
- const SORA_SIGNALING_URL = import.meta.env.VITE_SORA_SIGNALING_URL
- const SORA_CHANNEL_ID_PREFIX = import.meta.env.VITE_SORA_CHANNEL_ID_PREFIX || ''
- const SORA_CHANNEL_ID_SUFFIX = import.meta.env.VITE_SORA_CHANNEL_ID_SUFFIX || ''
- const ACCESS_TOKEN = import.meta.env.VITE_ACCESS_TOKEN || ''
+ const signalingUrl = import.meta.env.VITE_TEST_SIGNALING_URL
+ const channelIdPrefix = import.meta.env.VITE_TEST_CHANNEL_ID_PREFIX || ''
+ const channelIdSuffix = import.meta.env.VITE_TEST_CHANNEL_ID_SUFFIX || ''
+ const secretKey = import.meta.env.VITE_TEST_SECRET_KEY
const soraJsSdkVersion = Sora.version()
const soraJsSdkVersionElement = document.getElementById('sora-js-sdk-version')
@@ -31,13 +31,7 @@ document.addEventListener('DOMContentLoaded', async () => {
document.querySelector('#connect')?.addEventListener('click', async () => {
const channelName = getChannelName()
- client = new SoraClient(
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
- channelName,
- )
+ client = new SoraClient(signalingUrl, channelIdPrefix, channelIdSuffix, secretKey, channelName)
const checkCompress = document.getElementById('check-compress') as HTMLInputElement
const compress = checkCompress.checked
const checkHeader = document.getElementById('check-header') as HTMLInputElement
@@ -94,12 +88,12 @@ class SoraClient {
signalingUrl: string,
channelIdPrefix: string,
channelIdSuffix: string,
- accessToken: string,
+ secretKey: string,
channelName: string,
) {
this.sora = Sora.connection(signalingUrl, this.debug)
this.channelId = `${channelIdPrefix}${channelName}${channelIdSuffix}`
- this.metadata = { access_token: accessToken }
+ this.metadata = { access_token: secretKey }
this.options = {
dataChannelSignaling: true,
diff --git a/e2e-tests/package.json b/e2e-tests/package.json
index 97f6e2a5..d027db46 100644
--- a/e2e-tests/package.json
+++ b/e2e-tests/package.json
@@ -1,5 +1,5 @@
{
- "name": "sora-js-sdk-examples",
+ "name": "sora-js-sdk-e2e-tests",
"scripts": {
"lint": "biome lint .",
"fmt": "biome format --write .",
diff --git a/e2e-tests/recvonly/main.mts b/e2e-tests/recvonly/main.mts
index 5193a186..c19bfd25 100644
--- a/e2e-tests/recvonly/main.mts
+++ b/e2e-tests/recvonly/main.mts
@@ -6,18 +6,13 @@ import Sora, {
document.addEventListener('DOMContentLoaded', () => {
// 環境変数の読み込み
- const SORA_SIGNALING_URL = import.meta.env.VITE_SORA_SIGNALING_URL
- const SORA_CHANNEL_ID_PREFIX = import.meta.env.VITE_SORA_CHANNEL_ID_PREFIX || ''
- const SORA_CHANNEL_ID_SUFFIX = import.meta.env.VITE_SORA_CHANNEL_ID_SUFFIX || ''
- const ACCESS_TOKEN = import.meta.env.VITE_ACCESS_TOKEN || ''
+ const signalingUrl = import.meta.env.VITE_TEST_SIGNALING_URL
+ const channelIdPrefix = import.meta.env.VITE_TEST_CHANNEL_ID_PREFIX || ''
+ const channelIdSuffix = import.meta.env.VITE_TEST_CHANNEL_ID_SUFFIX || ''
+ const secretKey = import.meta.env.VITE_TEST_SECRET_KEY
// Sora クライアントの初期化
- const client = new SoraClient(
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
- )
+ const client = new SoraClient(signalingUrl, channelIdPrefix, channelIdSuffix, secretKey)
// SDK バージョンの表示
const sdkVersionElement = document.querySelector('#sdk-version')
diff --git a/e2e-tests/sendonly/main.mts b/e2e-tests/sendonly/main.mts
index a4ca9a4e..c8732509 100644
--- a/e2e-tests/sendonly/main.mts
+++ b/e2e-tests/sendonly/main.mts
@@ -6,17 +6,12 @@ import Sora, {
} from 'sora-js-sdk'
document.addEventListener('DOMContentLoaded', async () => {
- const SORA_SIGNALING_URL = import.meta.env.VITE_SORA_SIGNALING_URL
- const SORA_CHANNEL_ID_PREFIX = import.meta.env.VITE_SORA_CHANNEL_ID_PREFIX || ''
- const SORA_CHANNEL_ID_SUFFIX = import.meta.env.VITE_SORA_CHANNEL_ID_SUFFIX || ''
- const ACCESS_TOKEN = import.meta.env.VITE_ACCESS_TOKEN || ''
-
- const client = new SoraClient(
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
- )
+ const signalingUrl = import.meta.env.VITE_TEST_SIGNALING_URL
+ const channelIdPrefix = import.meta.env.VITE_TEST_CHANNEL_ID_PREFIX || ''
+ const channelIdSuffix = import.meta.env.VITE_TEST_CHANNEL_ID_SUFFIX || ''
+ const secretKey = import.meta.env.VITE_TEST_SECRET_KEY
+
+ const client = new SoraClient(signalingUrl, channelIdPrefix, channelIdSuffix, secretKey)
// SDK バージョンの表示
const sdkVersionElement = document.querySelector('#sdk-version')
@@ -69,17 +64,17 @@ class SoraClient {
private connection: ConnectionPublisher
constructor(
- signaling_url: string,
- channel_id_prefix: string,
- channel_id_suffix: string,
- access_token: string,
+ signalingUrl: string,
+ channelIdPrefix: string,
+ channelIdSuffix: string,
+ secretKey: string,
) {
- this.sora = Sora.connection(signaling_url, this.debug)
+ this.sora = Sora.connection(signalingUrl, this.debug)
// channel_id の生成
- this.channelId = `${channel_id_prefix}sendonly_recvonly${channel_id_suffix}`
+ this.channelId = `${channelIdPrefix}sendonly_recvonly${channelIdSuffix}`
// access_token を指定する metadata の生成
- this.metadata = { access_token: access_token }
+ this.metadata = { access_token: secretKey }
this.connection = this.sora.sendonly(this.channelId, this.metadata, this.options)
this.connection.on('notify', this.onNotify.bind(this))
diff --git a/e2e-tests/sendonly_audio/main.mts b/e2e-tests/sendonly_audio/main.mts
index 9305e06b..dd8305e8 100644
--- a/e2e-tests/sendonly_audio/main.mts
+++ b/e2e-tests/sendonly_audio/main.mts
@@ -5,17 +5,12 @@ import Sora, {
} from 'sora-js-sdk'
document.addEventListener('DOMContentLoaded', async () => {
- const SORA_SIGNALING_URL = import.meta.env.VITE_SORA_SIGNALING_URL
- const SORA_CHANNEL_ID_PREFIX = import.meta.env.VITE_SORA_CHANNEL_ID_PREFIX || ''
- const SORA_CHANNEL_ID_SUFFIX = import.meta.env.VITE_SORA_CHANNEL_ID_SUFFIX || ''
- const ACCESS_TOKEN = import.meta.env.VITE_ACCESS_TOKEN || ''
-
- const client = new SoraClient(
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
- )
+ const signalingUrl = import.meta.env.VITE_TEST_SIGNALING_URL
+ const channelIdPrefix = import.meta.env.VITE_TEST_CHANNEL_ID_PREFIX || ''
+ const channelIdSuffix = import.meta.env.VITE_TEST_CHANNEL_ID_SUFFIX || ''
+ const secretKey = import.meta.env.VITE_TEST_SECRET_KEY
+
+ const client = new SoraClient(signalingUrl, channelIdPrefix, channelIdSuffix, secretKey)
document.querySelector('#connect')?.addEventListener('click', async () => {
const stream = await navigator.mediaDevices.getUserMedia({ video: false, audio: true })
@@ -73,17 +68,17 @@ class SoraClient {
private connection: ConnectionPublisher
constructor(
- signaling_url: string,
- channel_id_prefix: string,
- channel_id_suffix: string,
- access_token: string,
+ signalingUrl: string,
+ channelIdPrefix: string,
+ channelIdSuffix: string,
+ secretKey: string,
) {
- this.sora = Sora.connection(signaling_url, this.debug)
+ this.sora = Sora.connection(signalingUrl, this.debug)
// channel_id の生成
- this.channelId = `${channel_id_prefix}sendonly_audio_codec${channel_id_suffix}`
+ this.channelId = `${channelIdPrefix}sendonly_audio_codec${channelIdSuffix}`
// access_token を指定する metadata の生成
- this.metadata = { access_token: access_token }
+ this.metadata = { access_token: secretKey }
this.connection = this.sora.sendonly(this.channelId, this.metadata, this.options)
this.connection.on('notify', this.onnotify.bind(this))
diff --git a/e2e-tests/sendrecv/main.mts b/e2e-tests/sendrecv/main.mts
index ca7f2c6d..9cef7cb8 100644
--- a/e2e-tests/sendrecv/main.mts
+++ b/e2e-tests/sendrecv/main.mts
@@ -25,10 +25,10 @@ const getVideoCodecType = (): VideoCodecType | undefined => {
}
document.addEventListener('DOMContentLoaded', async () => {
- const SORA_SIGNALING_URL = import.meta.env.VITE_SORA_SIGNALING_URL
- const SORA_CHANNEL_ID_PREFIX = import.meta.env.VITE_SORA_CHANNEL_ID_PREFIX || ''
- const SORA_CHANNEL_ID_SUFFIX = import.meta.env.VITE_SORA_CHANNEL_ID_SUFFIX || ''
- const ACCESS_TOKEN = import.meta.env.VITE_ACCESS_TOKEN || ''
+ const signalingUrl = import.meta.env.VITE_TEST_SIGNALING_URL
+ const channelIdPrefix = import.meta.env.VITE_TEST_CHANNEL_ID_PREFIX || ''
+ const channelIdSuffix = import.meta.env.VITE_TEST_CHANNEL_ID_SUFFIX || ''
+ const secretKey = import.meta.env.VITE_TEST_SECRET_KEY
let client: SoraClient
@@ -37,10 +37,10 @@ document.addEventListener('DOMContentLoaded', async () => {
const videoCodecType = getVideoCodecType()
client = new SoraClient(
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
+ signalingUrl,
+ channelIdPrefix,
+ channelIdSuffix,
+ secretKey,
channelName,
videoCodecType,
)
@@ -92,7 +92,7 @@ class SoraClient {
signalingUrl: string,
channelIdPrefix: string,
channelIdSuffix: string,
- accessToken: string,
+ secretKey: string,
channelName: string,
videoCodecType: VideoCodecType | undefined,
) {
@@ -100,7 +100,7 @@ class SoraClient {
this.channelId = `${channelIdPrefix}${channelName}${channelIdSuffix}`
- this.metadata = { access_token: accessToken }
+ this.metadata = { access_token: secretKey }
this.options = {}
if (videoCodecType !== undefined) {
diff --git a/e2e-tests/simulcast/main.mts b/e2e-tests/simulcast/main.mts
index b34ed3ea..d195cfb3 100644
--- a/e2e-tests/simulcast/main.mts
+++ b/e2e-tests/simulcast/main.mts
@@ -7,39 +7,39 @@ import Sora, {
} from 'sora-js-sdk'
document.addEventListener('DOMContentLoaded', () => {
- const SORA_SIGNALING_URL = import.meta.env.VITE_SORA_SIGNALING_URL
- const SORA_CHANNEL_ID_PREFIX = import.meta.env.VITE_SORA_CHANNEL_ID_PREFIX || ''
- const SORA_CHANNEL_ID_SUFFIX = import.meta.env.VITE_SORA_CHANNEL_ID_SUFFIX || ''
- const ACCESS_TOKEN = import.meta.env.VITE_ACCESS_TOKEN || ''
+ const signalingUrl = import.meta.env.VITE_TEST_SIGNALING_URL
+ const channelIdPrefix = import.meta.env.VITE_TEST_CHANNEL_ID_PREFIX || ''
+ const channelIdSuffix = import.meta.env.VITE_TEST_CHANNEL_ID_SUFFIX || ''
+ const secretKey = import.meta.env.VITE_TEST_SECRET_KEY
const sendonly = new SimulcastSendonlySoraClient(
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
+ signalingUrl,
+ channelIdPrefix,
+ channelIdSuffix,
+ secretKey,
)
const recvonlyR0 = new SimulcastRecvonlySoraClient(
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
+ signalingUrl,
+ channelIdPrefix,
+ channelIdSuffix,
+ secretKey,
'r0',
)
const recvonlyR1 = new SimulcastRecvonlySoraClient(
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
+ signalingUrl,
+ channelIdPrefix,
+ channelIdSuffix,
+ secretKey,
'r1',
)
const recvonlyR2 = new SimulcastRecvonlySoraClient(
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
+ signalingUrl,
+ channelIdPrefix,
+ channelIdSuffix,
+ secretKey,
'r2',
)
@@ -104,17 +104,17 @@ class SimulcastSendonlySoraClient {
private connection: ConnectionPublisher
constructor(
- signaling_url: string,
- channel_id_prefix: string,
- channel_id_suffix: string,
- access_token: string,
+ signalingUrl: string,
+ channelIdPrefix: string,
+ channelIdSuffix: string,
+ secretKey: string,
) {
- this.channelId = `${channel_id_prefix}simulcast${channel_id_suffix}`
+ this.channelId = `${channelIdPrefix}simulcast${channelIdSuffix}`
- this.sora = Sora.connection(signaling_url, this.debug)
+ this.sora = Sora.connection(signalingUrl, this.debug)
this.connection = this.sora.sendonly(
this.channelId,
- { access_token },
+ { access_token: secretKey },
{ audio: false, video: true, videoCodecType: 'VP8', videoBitRate: 2500, simulcast: true },
)
@@ -167,19 +167,19 @@ class SimulcastRecvonlySoraClient {
private connection: ConnectionSubscriber
constructor(
- signaling_url: string,
- channel_id_prefix: string,
- channel_id_suffix: string,
- access_token: string,
+ signalingUrl: string,
+ channelIdPrefix: string,
+ channelIdSuffix: string,
+ secretKey: string,
rid: SimulcastRid,
) {
- this.channelId = `${channel_id_prefix}simulcast${channel_id_suffix}`
+ this.channelId = `${channelIdPrefix}simulcast${channelIdSuffix}`
this.rid = rid
- this.sora = Sora.connection(signaling_url, this.debug)
+ this.sora = Sora.connection(signalingUrl, this.debug)
this.connection = this.sora.recvonly(
this.channelId,
- { access_token },
+ { access_token: secretKey },
{ simulcastRid: this.rid, simulcast: true },
)
diff --git a/e2e-tests/spotlight_recvonly/main.mts b/e2e-tests/spotlight_recvonly/main.mts
index 7e00cf48..d3f343c3 100644
--- a/e2e-tests/spotlight_recvonly/main.mts
+++ b/e2e-tests/spotlight_recvonly/main.mts
@@ -6,18 +6,13 @@ import Sora, {
document.addEventListener('DOMContentLoaded', () => {
// 環境変数の読み込み
- const SORA_SIGNALING_URL = import.meta.env.VITE_SORA_SIGNALING_URL
- const SORA_CHANNEL_ID_PREFIX = import.meta.env.VITE_SORA_CHANNEL_ID_PREFIX || ''
- const SORA_CHANNEL_ID_SUFFIX = import.meta.env.VITE_SORA_CHANNEL_ID_SUFFIX || ''
- const ACCESS_TOKEN = import.meta.env.VITE_ACCESS_TOKEN || ''
+ const signalingUrl = import.meta.env.VITE_TEST_SIGNALING_URL
+ const channelIdPrefix = import.meta.env.VITE_TEST_CHANNEL_ID_PREFIX || ''
+ const channelIdSuffix = import.meta.env.VITE_TEST_CHANNEL_ID_SUFFIX || ''
+ const secretKey = import.meta.env.VITE_TEST_SECRET_KEY
// Sora クライアントの初期化
- const client = new SoraClient(
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
- )
+ const client = new SoraClient(signalingUrl, channelIdPrefix, channelIdSuffix, secretKey)
document.querySelector('#connect')?.addEventListener('click', async () => {
await client.connect()
@@ -38,12 +33,12 @@ class SoraClient {
private connection: ConnectionSubscriber
constructor(
- signaling_url: string,
- channel_id_prefix: string,
- channel_id_suffix: string,
- access_token: string,
+ signalingUrl: string,
+ channelIdPrefix: string,
+ channelIdSuffix: string,
+ secretKey: string,
) {
- this.sora = Sora.connection(signaling_url, this.debug)
+ this.sora = Sora.connection(signalingUrl, this.debug)
this.options = {
multistream: true,
@@ -52,9 +47,9 @@ class SoraClient {
}
// channel_id の生成
- this.channelId = `${channel_id_prefix}spotlight_sendonly_recvonly${channel_id_suffix}`
+ this.channelId = `${channelIdPrefix}spotlight_recvonly${channelIdSuffix}`
// access_token を指定する metadata の生成
- this.metadata = { access_token: access_token }
+ this.metadata = { access_token: secretKey }
this.connection = this.sora.recvonly(this.channelId, this.metadata, this.options)
this.connection.on('notify', this.onnotify.bind(this))
diff --git a/e2e-tests/spotlight_sendonly/main.mts b/e2e-tests/spotlight_sendonly/main.mts
index bc80563c..d93272e0 100644
--- a/e2e-tests/spotlight_sendonly/main.mts
+++ b/e2e-tests/spotlight_sendonly/main.mts
@@ -5,17 +5,12 @@ import Sora, {
} from 'sora-js-sdk'
document.addEventListener('DOMContentLoaded', async () => {
- const SORA_SIGNALING_URL = import.meta.env.VITE_SORA_SIGNALING_URL
- const SORA_CHANNEL_ID_PREFIX = import.meta.env.VITE_SORA_CHANNEL_ID_PREFIX || ''
- const SORA_CHANNEL_ID_SUFFIX = import.meta.env.VITE_SORA_CHANNEL_ID_SUFFIX || ''
- const ACCESS_TOKEN = import.meta.env.VITE_ACCESS_TOKEN || ''
-
- const client = new SoraClient(
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
- )
+ const signalingUrl = import.meta.env.VITE_TEST_SIGNALING_URL
+ const channelIdPrefix = import.meta.env.VITE_TEST_CHANNEL_ID_PREFIX || ''
+ const channelIdSuffix = import.meta.env.VITE_TEST_CHANNEL_ID_SUFFIX || ''
+ const secretKey = import.meta.env.VITE_TEST_SECRET_KEY
+
+ const client = new SoraClient(signalingUrl, channelIdPrefix, channelIdSuffix, secretKey)
document.querySelector('#connect')?.addEventListener('click', async () => {
const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true })
@@ -37,12 +32,12 @@ class SoraClient {
private connection: ConnectionPublisher
constructor(
- signaling_url: string,
- channel_id_prefix: string,
- channel_id_suffix: string,
- access_token: string,
+ signalingUrl: string,
+ channelIdPrefix: string,
+ channelIdSuffix: string,
+ secretKey: string,
) {
- this.sora = Sora.connection(signaling_url, this.debug)
+ this.sora = Sora.connection(signalingUrl, this.debug)
this.options = {
multistream: true,
@@ -51,9 +46,9 @@ class SoraClient {
}
// channel_id の生成
- this.channelId = `${channel_id_prefix}spotlight_sendonly_recvonly${channel_id_suffix}`
+ this.channelId = `${channelIdPrefix}spotlight_sendonly_recvonly${channelIdSuffix}`
// access_token を指定する metadata の生成
- this.metadata = { access_token: access_token }
+ this.metadata = { access_token: secretKey }
this.connection = this.sora.sendonly(this.channelId, this.metadata, this.options)
this.connection.on('notify', this.onnotify.bind(this))
diff --git a/e2e-tests/spotlight_sendrecv/main.mts b/e2e-tests/spotlight_sendrecv/main.mts
index e9ee49ca..10d6fef0 100644
--- a/e2e-tests/spotlight_sendrecv/main.mts
+++ b/e2e-tests/spotlight_sendrecv/main.mts
@@ -5,25 +5,25 @@ import Sora, {
} from 'sora-js-sdk'
document.addEventListener('DOMContentLoaded', async () => {
- const SORA_SIGNALING_URL = import.meta.env.VITE_SORA_SIGNALING_URL
- const SORA_CHANNEL_ID_PREFIX = import.meta.env.VITE_SORA_CHANNEL_ID_PREFIX || ''
- const SORA_CHANNEL_ID_SUFFIX = import.meta.env.VITE_SORA_CHANNEL_ID_SUFFIX || ''
- const ACCESS_TOKEN = import.meta.env.VITE_ACCESS_TOKEN || ''
+ const signalingUrl = import.meta.env.VITE_TEST_SIGNALING_URL
+ const channelIdPrefix = import.meta.env.VITE_TEST_CHANNEL_ID_PREFIX || ''
+ const channelIdSuffix = import.meta.env.VITE_TEST_CHANNEL_ID_SUFFIX || ''
+ const secretKey = import.meta.env.VITE_TEST_SECRET_KEY
const sendrecv1 = new SoraClient(
'sendrecv1',
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
+ signalingUrl,
+ channelIdPrefix,
+ channelIdSuffix,
+ secretKey,
)
const sendrecv2 = new SoraClient(
'sendrecv2',
- SORA_SIGNALING_URL,
- SORA_CHANNEL_ID_PREFIX,
- SORA_CHANNEL_ID_SUFFIX,
- ACCESS_TOKEN,
+ signalingUrl,
+ channelIdPrefix,
+ channelIdSuffix,
+ secretKey,
)
document.querySelector('#sendrecv1-connect')?.addEventListener('click', async () => {
@@ -63,13 +63,13 @@ class SoraClient {
signalingUrl: string,
channelIdPrefix: string,
channelIdSuffix: string,
- accessToken: string,
+ secretKey: string,
) {
this.label = label
this.sora = Sora.connection(signalingUrl, this.debug)
this.channelId = `${channelIdPrefix}spotlight_sendrecv${channelIdSuffix}`
- this.metadata = { access_token: accessToken }
+ this.metadata = { access_token: secretKey }
this.options = {
audio: true,
video: true,
diff --git a/e2e-tests/vite-env.d.ts b/e2e-tests/vite-env.d.ts
index e71a892a..c6e893f9 100644
--- a/e2e-tests/vite-env.d.ts
+++ b/e2e-tests/vite-env.d.ts
@@ -1,14 +1,14 @@
///
interface ImportMetaEnv {
- VITE_SORA_SIGNALING_URL: string
- VITE_SORA_API_URL: string
- VITE_SORA_CHANNEL_ID_PREFIX: string
- VITE_SORA_CHANNEL_ID_SUFFIX: string
- VITE_ACCESS_TOKEN: string
+ VITE_TEST_SIGNALING_URL: string
+ VITE_TEST_API_URL: string
+ VITE_TEST_CHANNEL_ID_PREFIX: string
+ VITE_TEST_CHANNEL_ID_SUFFIX: string
+ VITE_TEST_SECRET_KEY: string
- VITE_SORA_WHIP_ENDPOINT_URL: string
- VITE_SORA_WHEP_ENDPOINT_URL: string
+ VITE_TEST_WHIP_ENDPOINT_URL: string
+ VITE_TEST_WHEP_ENDPOINT_URL: string
}
interface ImportMeta {
diff --git a/e2e-tests/whep/main.mts b/e2e-tests/whep/main.mts
index 4f08e240..2b59fa69 100644
--- a/e2e-tests/whep/main.mts
+++ b/e2e-tests/whep/main.mts
@@ -1,8 +1,8 @@
document.addEventListener('DOMContentLoaded', async () => {
- const endpointUrl = import.meta.env.VITE_SORA_WHEP_ENDPOINT_URL
- const channelIdPrefix = import.meta.env.VITE_SORA_CHANNEL_ID_PREFIX || ''
- const channelIdSuffix = import.meta.env.VITE_SORA_CHANNEL_ID_SUFFIX || ''
- const accessToken = import.meta.env.VITE_ACCESS_TOKEN
+ const endpointUrl = import.meta.env.VITE_TEST_WHEP_ENDPOINT_URL
+ const channelIdPrefix = import.meta.env.VITE_TEST_CHANNEL_ID_PREFIX || ''
+ const channelIdSuffix = import.meta.env.VITE_TEST_CHANNEL_ID_SUFFIX || ''
+ const secretKey = import.meta.env.VITE_TEST_SECRET_KEY
let whepClient: WhepClient | undefined
@@ -18,7 +18,7 @@ document.addEventListener('DOMContentLoaded', async () => {
throw new Error('Video codec type select element not found')
}
- whepClient = new WhepClient(endpointUrl, channelId, videoCodecTypeElement.value, accessToken)
+ whepClient = new WhepClient(endpointUrl, channelId, videoCodecTypeElement.value, secretKey)
await whepClient.connect()
})
@@ -38,14 +38,14 @@ class WhepClient {
private channelId: string
private videoCodecType: string
- private accessToken: string
+ private secretKey: string
private pc: RTCPeerConnection | undefined
- constructor(endpointUrl: string, channelId: string, videoCodecType: string, accessToken: string) {
+ constructor(endpointUrl: string, channelId: string, videoCodecType: string, secretKey: string) {
this.endpointUrl = endpointUrl
this.channelId = channelId
this.videoCodecType = videoCodecType
- this.accessToken = accessToken
+ this.secretKey = secretKey
}
async connect(): Promise {
@@ -112,7 +112,7 @@ class WhepClient {
const response = await fetch(whepEndpointUrl, {
method: 'POST',
headers: {
- Authorization: `Bearer ${this.accessToken}`,
+ Authorization: `Bearer ${this.secretKey}`,
'Content-Type': 'application/sdp',
},
body: offer.sdp,
@@ -165,7 +165,7 @@ class WhepClient {
const response = await fetch(this.resourceUrl, {
method: 'DELETE',
headers: {
- Authorization: `Bearer ${this.accessToken}`,
+ Authorization: `Bearer ${this.secretKey}`,
},
})
diff --git a/e2e-tests/whip/main.mts b/e2e-tests/whip/main.mts
index bc174d2c..06bec2a5 100644
--- a/e2e-tests/whip/main.mts
+++ b/e2e-tests/whip/main.mts
@@ -1,8 +1,8 @@
document.addEventListener('DOMContentLoaded', async () => {
- const endpointUrl = import.meta.env.VITE_SORA_WHIP_ENDPOINT_URL
- const channelIdPrefix = import.meta.env.VITE_SORA_CHANNEL_ID_PREFIX || ''
- const channelIdSuffix = import.meta.env.VITE_SORA_CHANNEL_ID_SUFFIX || ''
- const accessToken = import.meta.env.VITE_ACCESS_TOKEN
+ const endpointUrl = import.meta.env.VITE_TEST_WHIP_ENDPOINT_URL
+ const channelIdPrefix = import.meta.env.VITE_TEST_CHANNEL_ID_PREFIX || ''
+ const channelIdSuffix = import.meta.env.VITE_TEST_CHANNEL_ID_SUFFIX || ''
+ const secretKey = import.meta.env.VITE_TEST_SECRET_KEY
let whipClient: WhipClient | undefined
@@ -18,7 +18,7 @@ document.addEventListener('DOMContentLoaded', async () => {
throw new Error('Video codec type select element not found')
}
- whipClient = new WhipClient(endpointUrl, channelId, videoCodecTypeElement.value, accessToken)
+ whipClient = new WhipClient(endpointUrl, channelId, videoCodecTypeElement.value, secretKey)
const stream = await navigator.mediaDevices.getUserMedia({
video: true,
@@ -58,16 +58,16 @@ class WhipClient {
private videoCodecType: string
- private accessToken: string
+ private secretKey: string
private pc: RTCPeerConnection | undefined
private stream: MediaStream | undefined
- constructor(endpointUrl: string, channelId: string, videoCodecType: string, accessToken: string) {
+ constructor(endpointUrl: string, channelId: string, videoCodecType: string, secretKey: string) {
this.endpointUrl = endpointUrl
this.channelId = channelId
this.videoCodecType = videoCodecType
- this.accessToken = accessToken
+ this.secretKey = secretKey
}
async connect(stream: MediaStream, channelId: string): Promise {
@@ -137,7 +137,7 @@ class WhipClient {
method: 'POST',
headers: {
// 認証は Bearer Token を利用する
- Authorization: `Bearer ${this.accessToken}`,
+ Authorization: `Bearer ${this.secretKey}`,
// application/sdp を指定する
'Content-Type': 'application/sdp',
},
@@ -196,7 +196,7 @@ class WhipClient {
const response = await fetch(this.resourceUrl, {
method: 'DELETE',
headers: {
- Authorization: `Bearer ${this.accessToken}`,
+ Authorization: `Bearer ${this.secretKey}`,
},
})
diff --git a/examples/README.md b/examples/README.md
new file mode 100644
index 00000000..14732d02
--- /dev/null
+++ b/examples/README.md
@@ -0,0 +1,13 @@
+# Sora JavaScript SDK サンプル
+
+## 使い方
+
+```bash
+$ git clone git@github.com:shiguredo/sora-js-sdk.git
+$ cd sora-js-sdk
+# .env.local を作成して適切な値を設定してください
+$ cp .env.template .env.local
+$ pnpm install
+$ pnpm build
+$ pnpm dev
+```
diff --git a/e2e-tests/check_stereo/index.html b/examples/check_stereo/index.html
similarity index 93%
rename from e2e-tests/check_stereo/index.html
rename to examples/check_stereo/index.html
index 6a1d52e8..590b4bfc 100644
--- a/e2e-tests/check_stereo/index.html
+++ b/examples/check_stereo/index.html
@@ -2,7 +2,7 @@
- Stereo Check
+ Stereo Check シンプルサンプル