diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 0000000000..dd98ef416a
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,224 @@
+# CLAUDE.md
+
+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+
+## Project Overview
+
+This is the documentation site for 100ms.live, built as a Next.js application that renders MDX files into interactive documentation. The site runs on port 4000 by default and uses a file-based routing system where MDX files in the `/docs` directory automatically generate pages.
+
+**Base Path:** All routes are served under `/docs` prefix (configured in [next.config.js:10](next.config.js#L10))
+
+## Development Commands
+
+**Local Development:**
+```bash
+yarn dev # Start dev server on port 4000
+yarn id # Shortcut for yarn && yarn dev
+```
+
+**Building:**
+```bash
+yarn build # Updates releases, builds Next.js, and generates search index
+yarn updatereleases # Must run before viewing local release version changes
+```
+
+**Code Quality:**
+```bash
+yarn lint # Lint components and lib files
+yarn format # Format code with Prettier
+```
+
+**Documentation Linting (Vale):**
+```bash
+brew install vale
+vale sync
+vale docs/*
+```
+
+Add whitelisted tokens to [.github/workflows/styles/Vocab/HMSVocab/accept.txt](.github/workflows/styles/Vocab/HMSVocab/accept.txt)
+
+**Build Artifacts:**
+- Post-build generates sitemap via `next-sitemap` (configured in [next-sitemap.js](next-sitemap.js))
+- Search index is generated by [searchIndex.js](searchIndex.js) which calls `updateIndex()` from [lib/algolia/getRecords.ts](lib/algolia/getRecords.ts)
+
+## Architecture
+
+### Documentation Structure
+
+**File System Routing:**
+- All docs are MDX files in `/docs` directory, organized by platform:
+ - `/docs/android/` - Android SDK docs
+ - `/docs/ios/` - iOS SDK docs
+ - `/docs/javascript/` - JavaScript SDK docs
+ - `/docs/flutter/` - Flutter SDK docs
+ - `/docs/react-native/` - React Native SDK docs
+ - `/docs/server-side/` - Server-side API docs
+ - `/docs/prebuilt/` - Prebuilt UI docs
+ - `/docs/get-started/` - Getting started guides
+ - `/docs/api-reference/` - API reference docs
+
+**MDX Processing Pipeline:**
+The main routing is handled by [pages/[...slug].tsx](pages/[...slug].tsx):
+1. **Static Generation:** Uses `getStaticPaths()` to find all MDX files via [lib/mdxUtils.ts](lib/mdxUtils.ts)
+2. **Content Bundling:** Uses `mdx-bundler` to compile MDX with plugins
+3. **Rendering:** MDX components defined in [components/MDXComponents.tsx](components/MDXComponents.tsx)
+
+**Remark/Rehype Plugin Chain:**
+- `imagePlugin` - Custom image handling
+- `remarkGfm` - GitHub Flavored Markdown
+- `remarkA11yEmoji` - Accessible emoji
+- `remarkCodeHeader` - Code block headers
+- `withTableofContents` - TOC generation
+- `rehypeRaw` - Raw HTML support
+- `mdxPrism` - Syntax highlighting
+
+### FrontMatter Requirements
+
+Every MDX file must include:
+```yaml
+---
+title: Page Title # Used for SEO and page heading
+nav: 14 # Sidebar ordering (can be decimal for insertion)
+---
+```
+
+**Note:** If no `nav` value is specified, it defaults to `Infinity` (appears at the end)
+
+### Navigation System
+
+Navigation is auto-generated from the file system:
+- [lib/mdxUtils.ts](lib/mdxUtils.ts) scans all MDX files
+- `getAllDocs()` extracts frontmatter (title, nav, description)
+- `getNavfromDocs()` builds nested navigation structure using dot notation
+- Sidebar ordering controlled by `nav` frontmatter value
+
+### Custom Components
+
+MDX files have access to auto-imported components from [components/MDXComponents.tsx](components/MDXComponents.tsx):
+
+**Note Components:**
+```mdx
+> Default note (uses blockquote)
+
+Success message
+Error message
+Warning message
+```
+
+**Tabs:**
+```mdx
+
+
+Java code here
+
+
+Kotlin code here
+
+```
+**Important:** Tab IDs must match the Tabs `id` with index suffix
+
+**Other Components:**
+- `` - Embed CodeSandbox
+- `` - Automatic code wrapper with copy button
+- API request components: ``, ``, ``, ``, ``
+- Layout components: ``, ``, ``, ``, ``, ``
+
+### Content Reuse
+
+To avoid duplicating common content:
+1. Create a file in `/common` directory (`.md` or `.mdx`)
+ - Use `.md` for plain Markdown
+ - Use `.mdx` if embedding JSX (escape `<>{}` with backslash or use backticks)
+2. Import as PascalCase: `import Test from '@/common/test.md'`
+3. Use in MDX: ``
+
+### Version Management
+
+Release versions are tracked in [releases.js](releases.js) and automatically updated:
+- `yarn updatereleases` scans `/docs` for latest version numbers
+- Uses [lib/getNewReleases.js](lib/getNewReleases.js) to extract versions from release note files
+- Updates `releases.js` with platform versions and dates
+
+### Redirects
+
+Extensive redirect configuration in [next.config.js](next.config.js):
+- **Rewrites** (lines 33-56): URL normalization for case-sensitive paths
+- **Redirects** (lines 57-1550): Legacy URL redirects, doc reorganization redirects
+- Pattern: Old doc structure redirected to new `how-to-guides` organization
+
+**Key redirect patterns:**
+- `/concepts/` → `/get-started/`
+- Platform-specific `/:platform/v2/guides:path` → `/:platform/v2/get-started:path`
+- Feature docs reorganized under `how-to-guides` with categorization
+
+### Algolia Search
+
+Search powered by Algolia:
+- Index built during `yarn build` via [searchIndex.js](searchIndex.js)
+- Implementation in [lib/algolia/](lib/algolia/)
+- Search UI components in [components/](components/)
+
+## File Naming Conventions
+
+**DO:**
+- Use kebab-case for filenames: `my-feature.mdx`
+- Keep titles in frontmatter, not filename
+
+**DON'T:**
+- Use decimal numbers in filenames: ~~`v-1.3.2.mdx`~~ (use frontmatter `title` instead)
+- Use ampersands: ~~`tips-&-tricks.mdx`~~ (breaks sitemap generation)
+- Use bold in headers: ~~`## **Don't**~~
+- Use emojis in filenames (but DO use them in content!)
+
+## Adding New Documentation
+
+### To Existing Section
+1. Create MDX file in appropriate `/docs/[platform]/` subdirectory
+2. Add frontmatter with `title` and `nav` value
+3. Folder names become section headers (capitalized, hyphens → spaces)
+
+### New Documentation Version
+To add a new version (e.g., `v3`):
+1. Create `/docs/v3` folder
+2. Create `/pages/v3/index.tsx` with redirect:
+ ```tsx
+ import redirect from '@/lib/redirect';
+ export default redirect('/v3/100ms-v3/basics');
+ ```
+3. Add MDX files following existing structure
+
+## Build Configuration
+
+**Node Version:** `^22` (specified in [package.json:36](package.json#L36))
+
+**Key Dependencies:**
+- `next@12.3.4` - Next.js framework
+- `mdx-bundler@^9.2.1` - MDX compilation
+- `@100mslive/react-ui` & `@100mslive/react-icons` - 100ms UI library
+- `algoliasearch` - Search functionality
+- `shiki` - Syntax highlighting
+
+**Webpack Config:**
+- Raw loader for `.md` files (allows importing as strings)
+- ESM externals set to 'loose' for compatibility
+
+## Styling
+
+All styles use CSS variables (tokens) defined in [styles/theme.css](styles/theme.css):
+- Tokens prefixed with `token` control syntax highlighting
+- Fully customizable theme via CSS variables
+- No CSS-in-JS, plain CSS with variables
+
+## Content Guidelines
+
+From [README.md](README.md):
+
+**DO:**
+- Use emojis in content
+- Maintain header hierarchy (H1 → H2 → H3)
+- Add language attributes to code blocks for syntax highlighting
+- Use https://tableconvert.com/ for Markdown tables
+
+**DON'T:**
+- Use bold in headers
+- Use decimal numbers in filenames
diff --git a/docs/android/v2/how-to-guides/captions/live-captions.mdx b/docs/android/v2/how-to-guides/captions/live-captions.mdx
index ed78071724..070c981f70 100644
--- a/docs/android/v2/how-to-guides/captions/live-captions.mdx
+++ b/docs/android/v2/how-to-guides/captions/live-captions.mdx
@@ -1,5 +1,5 @@
---
-title: Live Transcription for Conferencing (Closed Captions - Beta)
+title: Live Transcription for Conferencing (Closed Captions)
nav: 15.1
---
@@ -10,6 +10,7 @@ nav: 15.1
- Minimum 100ms SDK version required is `2.9.54`
## Checking if captions are enabled in a room.
+
To check if WebRTC (not hls) captions are enabled in a room. Look for any transcriptions being in a started state in the room data.
`val captionsEnabled = hmsSDK.getRoom()?.transcriptions?.find { it.state == TranscriptionState.STARTED } != null`
@@ -20,12 +21,13 @@ Implement `fun onTranscripts(transcripts: HmsTranscripts)` in the `HMSUpdateList
For an example implementation look at [`TranscriptionUseCase.kt`](https://github.com/100mslive/100ms-android/blob/ac66fa76503ec990322c293f8ce6a504c0c3c444/room-kit/src/main/java/live/hms/roomkit/ui/meeting/TranscriptionUseCase.kt#L44) in the 100ms-android [sample app](https://github.com/100mslive/100ms-android/blob/ac66fa76503ec990322c293f8ce6a504c0c3c444/room-kit/src/main/java/live/hms/roomkit/ui/meeting/TranscriptionUseCase.kt#L44) repository.
## Toggling Live Transcripts
+
To save on cost, live transcriptions can be disabled for everyone at runtime and toggled on again when required.
```kotlin
// Start Real Time Transcription
hmsSDK.startRealTimeTranscription(
-
+
TranscriptionsMode.CAPTION,
object : HMSActionResultListener {
@@ -40,9 +42,9 @@ hmsSDK.startRealTimeTranscription(
hmsSDK.stopRealTimeTranscription(
TranscriptionsMode.CAPTION,
-
+
object : HMSActionResultListener {
override fun onError(error: HMSException) {}
override fun onSuccess() {}
})
-```
\ No newline at end of file
+```
diff --git a/docs/android/v2/how-to-guides/interact-with-room/room/spotlight.mdx b/docs/android/v2/how-to-guides/interact-with-room/room/spotlight.mdx
new file mode 100644
index 0000000000..834f4afa99
--- /dev/null
+++ b/docs/android/v2/how-to-guides/interact-with-room/room/spotlight.mdx
@@ -0,0 +1,85 @@
+---
+title: Spotlight
+nav: 10.25
+---
+
+Spotlight lets you bring a particular peer's video to center stage for everyone in the room. It uses the [Session Store](/android/v2/how-to-guides/interact-with-room/room/session-store) — a shared key-value store synced across all peers.
+
+When a host spotlights someone, every participant in the room sees that peer in a focused/pinned view.
+
+## Prerequisites
+
+- User must be joined to the room
+- Session Store must be available (provided via `onSessionStoreAvailable` callback)
+
+## Setting a Spotlight
+
+Write the peer's video `trackId` to the `"spotlight"` key in Session Store:
+
+```kotlin
+// Save the session store reference when it becomes available
+var hmsSessionStore: HmsSessionStore? = null
+
+override fun onSessionStoreAvailable(sessionStore: HmsSessionStore) {
+ hmsSessionStore = sessionStore
+}
+
+// Spotlight a peer's video track for everyone
+fun spotlightTrack(trackId: String) {
+ hmsSessionStore?.set(trackId, "spotlight", object : HMSActionResultListener {
+ override fun onSuccess() { }
+ override fun onError(error: HMSException) { }
+ })
+}
+```
+
+## Removing a Spotlight
+
+Set the `"spotlight"` key to `null`:
+
+```kotlin
+fun removeSpotlight() {
+ hmsSessionStore?.set(null, "spotlight", object : HMSActionResultListener {
+ override fun onSuccess() { }
+ override fun onError(error: HMSException) { }
+ })
+}
+```
+
+## Listening for Spotlight Changes
+
+Register a key change listener for the `"spotlight"` key. This fires for all peers in the room, including the one who set the spotlight.
+
+```kotlin
+sessionStore.addKeyChangeListener(
+ listOf("spotlight"),
+ object : HMSKeyChangeListener {
+ override fun onKeyChanged(key: String, value: JsonElement?) {
+ if (key == "spotlight") {
+ val trackId = value?.asString
+ if (trackId != null) {
+ // A track has been spotlighted — find and display it
+ showSpotlightView(trackId)
+ } else {
+ // Spotlight removed — return to default view
+ showDefaultView()
+ }
+ }
+ }
+ },
+ object : HMSActionResultListener {
+ override fun onSuccess() { }
+ override fun onError(error: HMSException) { }
+ }
+)
+```
+
+## Role-Gating
+
+You may want to restrict spotlight to host/moderator roles only. Check an appropriate permission before showing the spotlight option:
+
+```kotlin
+fun isAllowedToSpotlight(): Boolean {
+ return hmsSDK.getLocalPeer()?.hmsRole?.permission?.changeRole == true
+}
+```
diff --git a/docs/android/v2/quickstart/prebuilt-android.mdx b/docs/android/v2/quickstart/prebuilt-android.mdx
index 46ec583d6e..e5827291ec 100644
--- a/docs/android/v2/quickstart/prebuilt-android.mdx
+++ b/docs/android/v2/quickstart/prebuilt-android.mdx
@@ -76,5 +76,58 @@ class HMSPrebuiltOptions {
}
```
+
+
+## Customizing Foreground Notification
+
+
+When your app goes to the background during an active call, a foreground service notification is displayed to keep the call alive. You can customize this notification to match your app's branding using `CallNotificationConfig`.
+
+### Available Options
+
+| Parameter | Type | Default | Description |
+|-----------|------|---------|-------------|
+| `smallIcon` | `@DrawableRes Int?` | Default icon | Small icon shown in status bar and notification header. Should be monochrome for best results. |
+| `largeIcon` | `@DrawableRes Int?` | Default icon | Large icon shown on the right side of the notification. Can be full-color. |
+| `title` | `String?` | "Call in progress" | Notification title text. |
+| `text` | `String?` | "Tap to return to the call" | Notification body text. |
+| `channelName` | `String?` | "Ongoing Call" | Name for the notification channel (visible in system settings). |
+| `channelDescription` | `String?` | Default description | Description for the notification channel. |
+
+### Example Usage
+
+```kotlin
+import live.hms.roomkit.ui.HMSRoomKit
+import live.hms.roomkit.ui.HMSPrebuiltOptions
+import live.hms.roomkit.ui.notification.CallNotificationConfig
+
+class MainActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ val roomCode = ""
+
+ val notificationConfig = CallNotificationConfig(
+ smallIcon = R.drawable.my_app_logo, // Your app's notification icon
+ largeIcon = R.drawable.my_app_icon, // Optional larger icon
+ title = "MyApp - Call Active",
+ text = "Tap to return to your call",
+ channelName = "MyApp Calls",
+ channelDescription = "Notifications for ongoing calls"
+ )
+
+ val options = HMSPrebuiltOptions(
+ userName = "",
+ callNotificationConfig = notificationConfig
+ )
+
+ HMSRoomKit.launchPrebuilt(roomCode, this, options)
+ }
+}
+```
+
+All parameters are optional. If not provided, default values will be used.
+
+
## Sample Code
The sample project for the library is at https://github.com/100mslive/AndroidPrebuiltDemo#readme you can download the app for it [here](https://github.com/100mslive/AndroidPrebuiltDemo/suites/14604646490/artifacts/827757135).
diff --git a/docs/android/v2/release-notes/release-notes.mdx b/docs/android/v2/release-notes/release-notes.mdx
index 1c1653f6c5..64ce25d886 100644
--- a/docs/android/v2/release-notes/release-notes.mdx
+++ b/docs/android/v2/release-notes/release-notes.mdx
@@ -19,10 +19,56 @@ import AndroidPrebuiltVersionShield from '@/common/android-prebuilt-version-shie
| live.100ms:virtual-background: ||
| live.100ms:hms-noise-cancellation-android: | |
+## v2.9.86 - 2026-08-26
+### Fixed
+* Fixed still-image capture (`captureImageAtMaxResolution`) failing with error code 8001 on some devices. The camera image buffer is now released on every capture path — preventing a leak that could make subsequent captures fail — and a failed capture can no longer crash the app.
+* Restored the still-capture timeout to 5 seconds so slower captures on lower-end devices complete instead of timing out.
+
+## v2.9.85 - 2026-08-05
+### Fixed
+* Fixed a low-volume production crash in the ICE-failure retry path.
+
+
+## v2.9.84 - 2026-06-19
+### Fixed
+* Fixed the local peer's video appearing black/frozen to remote peers after the app returned from the background. When the app is fully backgrounded, Android revokes the camera; the SDK now automatically re-acquires it when the app returns to the foreground (previously the published video stayed frozen until the user manually toggled their video).
+
+## v2.9.83 - 2026-04-10
+### Fixed
+* Improved Bluetooth permission handling on Android 12+ — the SDK now declares `BLUETOOTH_CONNECT` in the manifest and detects when it is missing at runtime.
+
+### Changed
+* Improved audio manager selection logic on Android 12+ for more consistent behavior across devices.
+
+## v2.9.82 - 2026-04-07
+### Fixed
+* Fixed Bluetooth audio devices not appearing in `getAudioDevicesList()` on Android 12+.
+* Added `AUTOMATIC` option to the audio device list on Android 12+.
+
+## v2.9.80 - 2026-02-10
+### Fixed
+* Bug fix for image capture callback reliability during camera operations.
+
+## v2.9.79 - 2025-11-24
+### Fixed
+* Bug fix to handle NPE at room leave.
+
+## v2.9.78 - 2025-10-15
+### Fixed
+* Fix for memory leak issue
+
+## v2.9.77 - 2025-08-07
+### Added
+* Support for 16kb page size
+
+## v2.9.76 - 2025-04-16
+### Fixed
+* Screen share rotation crash fix on android 12 and above
+
## v2.9.74 - 2025-03-3
### Added
* Renamed the namespace of all WebRTC-related files to prevent conflicts with files from other WebRTC vendors when integrated into an application.
-### Breaking
+### Breaking
* Due to the namespace changes, imports for WebRTC files must be updated from org.webrtc to hms.webrtc throughout the application, if present
## v2.9.73 - 2025-02-12
diff --git a/docs/api-reference/javascript/v2/classes/Diagnostics.md b/docs/api-reference/javascript/v2/classes/Diagnostics.md
index 73a3d07fca..0c6c45ce4b 100644
--- a/docs/api-reference/javascript/v2/classes/Diagnostics.md
+++ b/docs/api-reference/javascript/v2/classes/Diagnostics.md
@@ -62,7 +62,7 @@ nav: '3.1'
### requestPermission
-▸ **requestPermission**(`check`): `Promise`<[`MediaPermissionCheck`](/api-reference/javascript/v2/interfaces/MediaPermissionCheck)\>
+▸ **requestPermission**(`check`): `Promise`\<[`MediaPermissionCheck`](/api-reference/javascript/v2/interfaces/MediaPermissionCheck)\>
#### Parameters
@@ -72,7 +72,7 @@ nav: '3.1'
#### Returns
-`Promise`<[`MediaPermissionCheck`](/api-reference/javascript/v2/interfaces/MediaPermissionCheck)\>
+`Promise`\<[`MediaPermissionCheck`](/api-reference/javascript/v2/interfaces/MediaPermissionCheck)\>
#### Implementation of
@@ -82,7 +82,7 @@ nav: '3.1'
### startCameraCheck
-▸ **startCameraCheck**(`inputDevice?`): `Promise`<`void`\>
+▸ **startCameraCheck**(`inputDevice?`): `Promise`\<`void`\>
#### Parameters
@@ -92,7 +92,7 @@ nav: '3.1'
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
#### Implementation of
@@ -102,7 +102,7 @@ nav: '3.1'
### startConnectivityCheck
-▸ **startConnectivityCheck**(`progress`, `completed`, `region?`, `duration?`): `Promise`<`void`\>
+▸ **startConnectivityCheck**(`progress`, `completed`, `region?`, `duration?`): `Promise`\<`void`\>
#### Parameters
@@ -115,7 +115,7 @@ nav: '3.1'
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
#### Implementation of
@@ -125,7 +125,7 @@ nav: '3.1'
### startMicCheck
-▸ **startMicCheck**(`«destructured»`): `Promise`<`void`\>
+▸ **startMicCheck**(`«destructured»`): `Promise`\<`void`\>
#### Parameters
@@ -139,7 +139,7 @@ nav: '3.1'
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
#### Implementation of
@@ -163,11 +163,11 @@ nav: '3.1'
### stopConnectivityCheck
-▸ **stopConnectivityCheck**(): `Promise`<`void`\>
+▸ **stopConnectivityCheck**(): `Promise`\<`void`\>
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
#### Implementation of
diff --git a/docs/api-reference/javascript/v2/classes/EventBus.md b/docs/api-reference/javascript/v2/classes/EventBus.md
index 6120496df0..aa9899ab29 100644
--- a/docs/api-reference/javascript/v2/classes/EventBus.md
+++ b/docs/api-reference/javascript/v2/classes/EventBus.md
@@ -13,103 +13,103 @@ nav: '3.2'
### analytics
-• `Readonly` **analytics**: `HMSInternalEvent`<`default`\>
+• `Readonly` **analytics**: `HMSInternalEvent`\<`default`\>
---
### audioPluginFailed
-• `Readonly` **audioPluginFailed**: `HMSInternalEvent`<`HMSException`\>
+• `Readonly` **audioPluginFailed**: `HMSInternalEvent`\<`HMSException`\>
---
### audioTrackAdded
-• `Readonly` **audioTrackAdded**: `HMSInternalEvent`<{ `peer`: `HMSRemotePeer` ; `track`: `HMSRemoteAudioTrack` }\>
+• `Readonly` **audioTrackAdded**: `HMSInternalEvent`\<\{ `peer`: `HMSRemotePeer` ; `track`: `HMSRemoteAudioTrack` }\>
---
### audioTrackRemoved
-• `Readonly` **audioTrackRemoved**: `HMSInternalEvent`<`HMSRemoteAudioTrack`\>
+• `Readonly` **audioTrackRemoved**: `HMSInternalEvent`\<`HMSRemoteAudioTrack`\>
---
### audioTrackUpdate
-• `Readonly` **audioTrackUpdate**: `HMSInternalEvent`<{ `enabled`: `boolean` ; `track`: `HMSRemoteAudioTrack` }\>
+• `Readonly` **audioTrackUpdate**: `HMSInternalEvent`\<\{ `enabled`: `boolean` ; `track`: `HMSRemoteAudioTrack` }\>
---
### autoplayError
-• `Readonly` **autoplayError**: `HMSInternalEvent`<`HMSException`\>
+• `Readonly` **autoplayError**: `HMSInternalEvent`\<`HMSException`\>
---
### deviceChange
-• `Readonly` **deviceChange**: `HMSInternalEvent`<`HMSDeviceChangeEvent`\>
+• `Readonly` **deviceChange**: `HMSInternalEvent`\<`HMSDeviceChangeEvent`\>
---
### error
-• `Readonly` **error**: `HMSInternalEvent`<`HMSException`\>
+• `Readonly` **error**: `HMSInternalEvent`\<`HMSException`\>
---
### leave
-• `Readonly` **leave**: `HMSInternalEvent`<`undefined` \| `HMSException`\>
+• `Readonly` **leave**: `HMSInternalEvent`\<`undefined` \| `HMSException`\>
---
### localAudioEnabled
-• `Readonly` **localAudioEnabled**: `HMSInternalEvent`<{ `enabled`: `boolean` ; `track`: `HMSLocalAudioTrack` }\>
+• `Readonly` **localAudioEnabled**: `HMSInternalEvent`\<\{ `enabled`: `boolean` ; `track`: `HMSLocalAudioTrack` }\>
---
### localAudioSilence
-• `Readonly` **localAudioSilence**: `HMSInternalEvent`<{ `track`: `HMSLocalAudioTrack` }\>
+• `Readonly` **localAudioSilence**: `HMSInternalEvent`\<\{ `track`: `HMSLocalAudioTrack` }\>
---
### localAudioUnmutedNatively
-• `Readonly` **localAudioUnmutedNatively**: `HMSInternalEvent`<`unknown`\>
+• `Readonly` **localAudioUnmutedNatively**: `HMSInternalEvent`\<`unknown`\>
---
### localRoleUpdate
-• `Readonly` **localRoleUpdate**: `HMSInternalEvent`<{ `newRole`: [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole) ; `oldRole`: [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole) }\>
+• `Readonly` **localRoleUpdate**: `HMSInternalEvent`\<\{ `newRole`: [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole) ; `oldRole`: [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole) }\>
---
### localVideoEnabled
-• `Readonly` **localVideoEnabled**: `HMSInternalEvent`<{ `enabled`: `boolean` ; `track`: `HMSLocalVideoTrack` }\>
+• `Readonly` **localVideoEnabled**: `HMSInternalEvent`\<\{ `enabled`: `boolean` ; `track`: `HMSLocalVideoTrack` }\>
---
### localVideoUnmutedNatively
-• `Readonly` **localVideoUnmutedNatively**: `HMSInternalEvent`<`unknown`\>
+• `Readonly` **localVideoUnmutedNatively**: `HMSInternalEvent`\<`unknown`\>
---
### policyChange
-• `Readonly` **policyChange**: `HMSInternalEvent`<`PolicyParams`\>
+• `Readonly` **policyChange**: `HMSInternalEvent`\<`PolicyParams`\>
---
### statsUpdate
-• `Readonly` **statsUpdate**: `HMSInternalEvent`<`HMSWebrtcStats`\>
+• `Readonly` **statsUpdate**: `HMSInternalEvent`\<`HMSWebrtcStats`\>
Emitter which processes raw RTC stats from rtcStatsUpdate and calls client callback
@@ -117,7 +117,7 @@ Emitter which processes raw RTC stats from rtcStatsUpdate and calls client callb
### trackAudioLevelUpdate
-• `Readonly` **trackAudioLevelUpdate**: `HMSInternalEvent`<`ITrackAudioLevelUpdate`\>
+• `Readonly` **trackAudioLevelUpdate**: `HMSInternalEvent`\<`ITrackAudioLevelUpdate`\>
Emits audio level updates for audio tracks(used with local track in preview)
@@ -125,10 +125,16 @@ Emits audio level updates for audio tracks(used with local track in preview)
### trackDegraded
-• `Readonly` **trackDegraded**: `HMSInternalEvent`<`HMSRemoteVideoTrack`\>
+• `Readonly` **trackDegraded**: `HMSInternalEvent`\<`HMSRemoteVideoTrack`\>
+
+---
+
+### trackInterruption
+
+• `Readonly` **trackInterruption**: `HMSInternalEvent`\<[`HMSTrackInterruption`](/api-reference/javascript/v2/interfaces/HMSTrackInterruption)\>
---
### trackRestored
-• `Readonly` **trackRestored**: `HMSInternalEvent`<`HMSRemoteVideoTrack`\>
+• `Readonly` **trackRestored**: `HMSInternalEvent`\<`HMSRemoteVideoTrack`\>
diff --git a/docs/api-reference/javascript/v2/classes/HMSReactiveStore.md b/docs/api-reference/javascript/v2/classes/HMSReactiveStore.md
index be702cbe62..3e96239af5 100644
--- a/docs/api-reference/javascript/v2/classes/HMSReactiveStore.md
+++ b/docs/api-reference/javascript/v2/classes/HMSReactiveStore.md
@@ -5,42 +5,42 @@ nav: '3.3'
## Type parameters
-| Name | Type |
-| :--- | :------------------------------------------------------------------------------------------------------------------------------------ |
-| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = { `sessionStore`: `Record`<`string`, `any`\> } |
+| Name | Type |
+| :--- | :-------------------------------------------------------------------------------------------------------------------------------------- |
+| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = \{ `sessionStore`: `Record`\<`string`, `any`\> } |
## Constructors
### constructor
-• **new HMSReactiveStore**<`T`\>(`hmsStore?`, `hmsActions?`, `hmsNotifications?`)
+• **new HMSReactiveStore**\<`T`\>(`hmsStore?`, `hmsActions?`, `hmsNotifications?`)
#### Type parameters
-| Name | Type |
-| :--- | :------------------------------------------------------------------------------------------------------------------------------------ |
-| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = { `sessionStore`: `Record`<`string`, `any`\> } |
+| Name | Type |
+| :--- | :-------------------------------------------------------------------------------------------------------------------------------------- |
+| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = \{ `sessionStore`: `Record`\<`string`, `any`\> } |
#### Parameters
-| Name | Type |
-| :------------------ | :----------------------------------------------------------------------- |
-| `hmsStore?` | [`IHMSStore`](/api-reference/javascript/v2/interfaces/IHMSStore)<`T`\> |
-| `hmsActions?` | [`HMSActions`](/api-reference/javascript/v2/interfaces/HMSActions)<`T`\> |
-| `hmsNotifications?` | `HMSNotifications`<`T`\> |
+| Name | Type |
+| :------------------ | :------------------------------------------------------------------------ |
+| `hmsStore?` | [`IHMSStore`](/api-reference/javascript/v2/interfaces/IHMSStore)\<`T`\> |
+| `hmsActions?` | [`HMSActions`](/api-reference/javascript/v2/interfaces/HMSActions)\<`T`\> |
+| `hmsNotifications?` | `HMSNotifications`\<`T`\> |
## Methods
### getActions
-▸ **getActions**(): [`HMSActions`](/api-reference/javascript/v2/interfaces/HMSActions)<`T`\>
+▸ **getActions**(): [`HMSActions`](/api-reference/javascript/v2/interfaces/HMSActions)\<`T`\>
Any action which may modify the store or may need to talk to the SDK will happen
through the IHMSActions instance returned by this
#### Returns
-[`HMSActions`](/api-reference/javascript/v2/interfaces/HMSActions)<`T`\>
+[`HMSActions`](/api-reference/javascript/v2/interfaces/HMSActions)\<`T`\>
---
@@ -56,14 +56,14 @@ through the IHMSActions instance returned by this
### getHMSActions
-▸ **getHMSActions**(): [`HMSActions`](/api-reference/javascript/v2/interfaces/HMSActions)<`T`\>
+▸ **getHMSActions**(): [`HMSActions`](/api-reference/javascript/v2/interfaces/HMSActions)\<`T`\>
Any action which may modify the store or may need to talk to the SDK will happen
through the IHMSActions instance returned by this
#### Returns
-[`HMSActions`](/api-reference/javascript/v2/interfaces/HMSActions)<`T`\>
+[`HMSActions`](/api-reference/javascript/v2/interfaces/HMSActions)\<`T`\>
**`Deprecated`**
@@ -97,7 +97,7 @@ for analytics
### getStore
-▸ **getStore**(): [`HMSStoreWrapper`](/api-reference/javascript/v2/interfaces/HMSStoreWrapper)<{ `sessionStore`: `Record`<`string`, `any`\> }\>
+▸ **getStore**(): [`HMSStoreWrapper`](/api-reference/javascript/v2/interfaces/HMSStoreWrapper)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>
A reactive store which has a subscribe method you can use in combination with selectors
to subscribe to a subset of the store. The store serves as a single source of truth for
@@ -105,7 +105,7 @@ all data related to the corresponding HMS Room.
#### Returns
-[`HMSStoreWrapper`](/api-reference/javascript/v2/interfaces/HMSStoreWrapper)<{ `sessionStore`: `Record`<`string`, `any`\> }\>
+[`HMSStoreWrapper`](/api-reference/javascript/v2/interfaces/HMSStoreWrapper)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>
---
diff --git a/docs/api-reference/javascript/v2/enums/HMSNotificationTypes.md b/docs/api-reference/javascript/v2/enums/HMSNotificationTypes.md
index 22d02fec66..54f0dd17f7 100644
--- a/docs/api-reference/javascript/v2/enums/HMSNotificationTypes.md
+++ b/docs/api-reference/javascript/v2/enums/HMSNotificationTypes.md
@@ -155,6 +155,18 @@ nav: '2.11'
---
+### TRACK_INTERRUPTION_END
+
+• **TRACK_INTERRUPTION_END** = `"TRACK_INTERRUPTION_END"`
+
+---
+
+### TRACK_INTERRUPTION_START
+
+• **TRACK_INTERRUPTION_START** = `"TRACK_INTERRUPTION_START"`
+
+---
+
### TRACK_MUTED
• **TRACK_MUTED** = `"TRACK_MUTED"`
diff --git a/docs/api-reference/javascript/v2/home/content.md b/docs/api-reference/javascript/v2/home/content.md
index 694d726145..2a2f039bac 100644
--- a/docs/api-reference/javascript/v2/home/content.md
+++ b/docs/api-reference/javascript/v2/home/content.md
@@ -120,6 +120,8 @@ nav: '1.1'
- [HMSStatsStoreWrapper](/api-reference/javascript/v2/interfaces/HMSStatsStoreWrapper)
- [HMSStore](/api-reference/javascript/v2/interfaces/HMSStore)
- [HMSTrackException](/api-reference/javascript/v2/interfaces/HMSTrackException)
+- [HMSTrackInterruption](/api-reference/javascript/v2/interfaces/HMSTrackInterruption)
+- [HMSTrackInterruptionNotification](/api-reference/javascript/v2/interfaces/HMSTrackInterruptionNotification)
- [HMSTrackNotification](/api-reference/javascript/v2/interfaces/HMSTrackNotification)
- [HMSTrackStats](/api-reference/javascript/v2/interfaces/HMSTrackStats)
- [HMSTranscriptionInfo](/api-reference/javascript/v2/interfaces/HMSTranscriptionInfo)
@@ -175,13 +177,13 @@ Renames and re-exports [HMSNotifications](/api-reference/javascript/v2/interface
### HMSNotification
-Ƭ **HMSNotification**: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) \| [`HMSPeerListNotification`](/api-reference/javascript/v2/interfaces/HMSPeerListNotification) \| [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) \| [`HMSMessageNotification`](/api-reference/javascript/v2/interfaces/HMSMessageNotification) \| [`HMSExceptionNotification`](/api-reference/javascript/v2/interfaces/HMSExceptionNotification) \| [`HMSChangeTrackStateRequestNotification`](/api-reference/javascript/v2/interfaces/HMSChangeTrackStateRequestNotification) \| [`HMSChangeMultiTrackStateRequestNotification`](/api-reference/javascript/v2/interfaces/HMSChangeMultiTrackStateRequestNotification) \| [`HMSLeaveRoomRequestNotification`](/api-reference/javascript/v2/interfaces/HMSLeaveRoomRequestNotification) \| [`HMSDeviceChangeEventNotification`](/api-reference/javascript/v2/interfaces/HMSDeviceChangeEventNotification) \| [`HMSReconnectionNotification`](/api-reference/javascript/v2/interfaces/HMSReconnectionNotification) \| [`HMSTranscriptionNotification`](/api-reference/javascript/v2/interfaces/HMSTranscriptionNotification) \| [`HMSPlaylistItemNotification`](/api-reference/javascript/v2/interfaces/HMSPlaylistItemNotification)<`any`\>
+Ƭ **HMSNotification**: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) \| [`HMSPeerListNotification`](/api-reference/javascript/v2/interfaces/HMSPeerListNotification) \| [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) \| [`HMSMessageNotification`](/api-reference/javascript/v2/interfaces/HMSMessageNotification) \| [`HMSExceptionNotification`](/api-reference/javascript/v2/interfaces/HMSExceptionNotification) \| [`HMSChangeTrackStateRequestNotification`](/api-reference/javascript/v2/interfaces/HMSChangeTrackStateRequestNotification) \| [`HMSChangeMultiTrackStateRequestNotification`](/api-reference/javascript/v2/interfaces/HMSChangeMultiTrackStateRequestNotification) \| [`HMSLeaveRoomRequestNotification`](/api-reference/javascript/v2/interfaces/HMSLeaveRoomRequestNotification) \| [`HMSDeviceChangeEventNotification`](/api-reference/javascript/v2/interfaces/HMSDeviceChangeEventNotification) \| [`HMSReconnectionNotification`](/api-reference/javascript/v2/interfaces/HMSReconnectionNotification) \| [`HMSTrackInterruptionNotification`](/api-reference/javascript/v2/interfaces/HMSTrackInterruptionNotification) \| [`HMSTranscriptionNotification`](/api-reference/javascript/v2/interfaces/HMSTranscriptionNotification) \| [`HMSPlaylistItemNotification`](/api-reference/javascript/v2/interfaces/HMSPlaylistItemNotification)\<`any`\>
---
### HMSNotificationCallback
-Ƭ **HMSNotificationCallback**<`T`\>: (`notification`: [`HMSNotificationInCallback`](/api-reference/javascript/v2/home/content#hmsnotificationincallback)<`T`\>) => `void`
+Ƭ **HMSNotificationCallback**\<`T`\>: (`notification`: [`HMSNotificationInCallback`](/api-reference/javascript/v2/home/content#hmsnotificationincallback)\<`T`\>) => `void`
#### Type parameters
@@ -195,9 +197,9 @@ Renames and re-exports [HMSNotifications](/api-reference/javascript/v2/interface
##### Parameters
-| Name | Type |
-| :------------- | :------------------------------------------------------------------------------------------------------- |
-| `notification` | [`HMSNotificationInCallback`](/api-reference/javascript/v2/home/content#hmsnotificationincallback)<`T`\> |
+| Name | Type |
+| :------------- | :-------------------------------------------------------------------------------------------------------- |
+| `notification` | [`HMSNotificationInCallback`](/api-reference/javascript/v2/home/content#hmsnotificationincallback)\<`T`\> |
##### Returns
@@ -207,7 +209,7 @@ Renames and re-exports [HMSNotifications](/api-reference/javascript/v2/interface
### HMSNotificationInCallback
-Ƭ **HMSNotificationInCallback**<`T`\>: `T` extends [`HMSNotificationTypes`](/api-reference/javascript/v2/enums/HMSNotificationTypes)[] ? [`MappedNotifications`](/api-reference/javascript/v2/home/content#mappednotifications)<`T`\>[`number`] : `T` extends [`HMSNotificationTypes`](/api-reference/javascript/v2/enums/HMSNotificationTypes) ? [`HMSNotificationMapping`](/api-reference/javascript/v2/home/content#hmsnotificationmapping)<`T`\> : [`HMSNotification`](/api-reference/javascript/v2/home/content#hmsnotification)
+Ƭ **HMSNotificationInCallback**\<`T`\>: `T` extends [`HMSNotificationTypes`](/api-reference/javascript/v2/enums/HMSNotificationTypes)[] ? [`MappedNotifications`](/api-reference/javascript/v2/home/content#mappednotifications)\<`T`\>[`number`] : `T` extends [`HMSNotificationTypes`](/api-reference/javascript/v2/enums/HMSNotificationTypes) ? [`HMSNotificationMapping`](/api-reference/javascript/v2/home/content#hmsnotificationmapping)\<`T`\> : [`HMSNotification`](/api-reference/javascript/v2/home/content#hmsnotification)
#### Type parameters
@@ -219,7 +221,7 @@ Renames and re-exports [HMSNotifications](/api-reference/javascript/v2/interface
### HMSNotificationMapping
-Ƭ **HMSNotificationMapping**<`T`, `C`\>: { `CHANGE_MULTI_TRACK_STATE_REQUEST`: [`HMSChangeMultiTrackStateRequestNotification`](/api-reference/javascript/v2/interfaces/HMSChangeMultiTrackStateRequestNotification) ; `CHANGE_TRACK_STATE_REQUEST`: [`HMSChangeTrackStateRequestNotification`](/api-reference/javascript/v2/interfaces/HMSChangeTrackStateRequestNotification) ; `DEVICE_CHANGE_UPDATE`: [`HMSDeviceChangeEventNotification`](/api-reference/javascript/v2/interfaces/HMSDeviceChangeEventNotification) ; `ERROR`: [`HMSExceptionNotification`](/api-reference/javascript/v2/interfaces/HMSExceptionNotification) ; `HAND_RAISE_CHANGED`: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) ; `METADATA_UPDATED`: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) ; `NAME_UPDATED`: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) ; `NEW_MESSAGE`: [`HMSMessageNotification`](/api-reference/javascript/v2/interfaces/HMSMessageNotification) ; `PEER_JOINED`: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) ; `PEER_LEFT`: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) ; `PEER_LIST`: [`HMSPeerListNotification`](/api-reference/javascript/v2/interfaces/HMSPeerListNotification) ; `PLAYLIST_TRACK_ENDED`: [`HMSPlaylistItemNotification`](/api-reference/javascript/v2/interfaces/HMSPlaylistItemNotification)<`C`\> ; `POLLS_LIST`: [`HMSPollNotification`](/api-reference/javascript/v2/interfaces/HMSPollNotification) ; `POLL_CREATED`: [`HMSPollNotification`](/api-reference/javascript/v2/interfaces/HMSPollNotification) ; `POLL_STARTED`: [`HMSPollNotification`](/api-reference/javascript/v2/interfaces/HMSPollNotification) ; `POLL_STOPPED`: [`HMSPollNotification`](/api-reference/javascript/v2/interfaces/HMSPollNotification) ; `POLL_VOTES_UPDATED`: [`HMSPollNotification`](/api-reference/javascript/v2/interfaces/HMSPollNotification) ; `RECONNECTED`: [`HMSReconnectionNotification`](/api-reference/javascript/v2/interfaces/HMSReconnectionNotification) ; `RECONNECTING`: [`HMSReconnectionNotification`](/api-reference/javascript/v2/interfaces/HMSReconnectionNotification) ; `REMOVED_FROM_ROOM`: [`HMSLeaveRoomRequestNotification`](/api-reference/javascript/v2/interfaces/HMSLeaveRoomRequestNotification) ; `ROLE_UPDATED`: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) ; `ROOM_ENDED`: [`HMSLeaveRoomRequestNotification`](/api-reference/javascript/v2/interfaces/HMSLeaveRoomRequestNotification) ; `TRACK_ADDED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRACK_DEGRADED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRACK_DESCRIPTION_CHANGED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRACK_MUTED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRACK_REMOVED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRACK_RESTORED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRACK_UNMUTED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRANSCRIPTION_STATE_UPDATED`: [`HMSTranscriptionNotification`](/api-reference/javascript/v2/interfaces/HMSTranscriptionNotification) }[`T`]
+Ƭ **HMSNotificationMapping**\<`T`, `C`\>: \{ `CHANGE_MULTI_TRACK_STATE_REQUEST`: [`HMSChangeMultiTrackStateRequestNotification`](/api-reference/javascript/v2/interfaces/HMSChangeMultiTrackStateRequestNotification) ; `CHANGE_TRACK_STATE_REQUEST`: [`HMSChangeTrackStateRequestNotification`](/api-reference/javascript/v2/interfaces/HMSChangeTrackStateRequestNotification) ; `DEVICE_CHANGE_UPDATE`: [`HMSDeviceChangeEventNotification`](/api-reference/javascript/v2/interfaces/HMSDeviceChangeEventNotification) ; `ERROR`: [`HMSExceptionNotification`](/api-reference/javascript/v2/interfaces/HMSExceptionNotification) ; `HAND_RAISE_CHANGED`: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) ; `METADATA_UPDATED`: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) ; `NAME_UPDATED`: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) ; `NEW_MESSAGE`: [`HMSMessageNotification`](/api-reference/javascript/v2/interfaces/HMSMessageNotification) ; `PEER_JOINED`: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) ; `PEER_LEFT`: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) ; `PEER_LIST`: [`HMSPeerListNotification`](/api-reference/javascript/v2/interfaces/HMSPeerListNotification) ; `PLAYLIST_TRACK_ENDED`: [`HMSPlaylistItemNotification`](/api-reference/javascript/v2/interfaces/HMSPlaylistItemNotification)\<`C`\> ; `POLLS_LIST`: [`HMSPollNotification`](/api-reference/javascript/v2/interfaces/HMSPollNotification) ; `POLL_CREATED`: [`HMSPollNotification`](/api-reference/javascript/v2/interfaces/HMSPollNotification) ; `POLL_STARTED`: [`HMSPollNotification`](/api-reference/javascript/v2/interfaces/HMSPollNotification) ; `POLL_STOPPED`: [`HMSPollNotification`](/api-reference/javascript/v2/interfaces/HMSPollNotification) ; `POLL_VOTES_UPDATED`: [`HMSPollNotification`](/api-reference/javascript/v2/interfaces/HMSPollNotification) ; `RECONNECTED`: [`HMSReconnectionNotification`](/api-reference/javascript/v2/interfaces/HMSReconnectionNotification) ; `RECONNECTING`: [`HMSReconnectionNotification`](/api-reference/javascript/v2/interfaces/HMSReconnectionNotification) ; `REMOVED_FROM_ROOM`: [`HMSLeaveRoomRequestNotification`](/api-reference/javascript/v2/interfaces/HMSLeaveRoomRequestNotification) ; `ROLE_UPDATED`: [`HMSPeerNotification`](/api-reference/javascript/v2/interfaces/HMSPeerNotification) ; `ROOM_ENDED`: [`HMSLeaveRoomRequestNotification`](/api-reference/javascript/v2/interfaces/HMSLeaveRoomRequestNotification) ; `TRACK_ADDED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRACK_DEGRADED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRACK_DESCRIPTION_CHANGED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRACK_INTERRUPTION_END`: [`HMSTrackInterruptionNotification`](/api-reference/javascript/v2/interfaces/HMSTrackInterruptionNotification) ; `TRACK_INTERRUPTION_START`: [`HMSTrackInterruptionNotification`](/api-reference/javascript/v2/interfaces/HMSTrackInterruptionNotification) ; `TRACK_MUTED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRACK_REMOVED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRACK_RESTORED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRACK_UNMUTED`: [`HMSTrackNotification`](/api-reference/javascript/v2/interfaces/HMSTrackNotification) ; `TRANSCRIPTION_STATE_UPDATED`: [`HMSTranscriptionNotification`](/api-reference/javascript/v2/interfaces/HMSTranscriptionNotification) }[`T`]
#### Type parameters
@@ -250,7 +252,7 @@ Renames and re-exports [HMSNotifications](/api-reference/javascript/v2/interface
### HMSPreferredSimulcastLayer
-Ƭ **HMSPreferredSimulcastLayer**: `Exclude`<[`HMSSimulcastLayer`](/api-reference/javascript/v2/enums/HMSSimulcastLayer), [`NONE`](/api-reference/javascript/v2/enums/HMSSimulcastLayer#none)\>
+Ƭ **HMSPreferredSimulcastLayer**: `Exclude`\<[`HMSSimulcastLayer`](/api-reference/javascript/v2/enums/HMSSimulcastLayer), [`NONE`](/api-reference/javascript/v2/enums/HMSSimulcastLayer#none)\>
---
@@ -313,7 +315,7 @@ selfBrowser - the current browser tab is being shared
### MappedNotifications
-Ƭ **MappedNotifications**<`Type`\>: { [index in keyof Type]: HMSNotificationMapping }
+Ƭ **MappedNotifications**\<`Type`\>: \{ [index in keyof Type]: HMSNotificationMapping\ }
#### Type parameters
@@ -331,7 +333,20 @@ selfBrowser - the current browser tab is being shared
### parsedUserAgent
-• `Const` **parsedUserAgent**: `UAParserInstance`
+• `Const` **parsedUserAgent**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :---------------- | :--------------------------- |
+| `getBrowser` | () => `IBrowser` |
+| `getCPU` | () => `ICPU` |
+| `getDevice` | () => `IDevice` |
+| `getEngine` | () => `IEngine` |
+| `getOS` | () => `IOS` |
+| `getResult` | () => `IResult` |
+| `getUA` | () => `string` |
+| `withClientHints` | () => `Promise`\<`IResult`\> |
---
@@ -347,24 +362,26 @@ selfBrowser - the current browser tab is being shared
#### Type declaration
-| Name | Type |
-| :---------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `availablePublishBitrate` | `OutputSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
-| `availableSubscribeBitrate` | `OutputSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
-| `jitter` | `OutputSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
-| `localAudioTrackStats` | `OutputSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats), (`res1`: `Record`<`string`, `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)[]\>, `res2`: `undefined` \| `string`) => `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)\> |
-| `localAudioTrackStatsByID` | (`id?`: `string`) => `StoreSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)\> |
-| `localPeerStats` | `OutputSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats), (`res1`: `Record`<`string`, `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)\>, `res2`: `string`) => `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)\> |
-| `localVideoTrackStats` | `OutputSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats), (`res1`: `Record`<`string`, `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)[]\>, `res2`: `undefined` \| `string`) => `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)\> |
-| `localVideoTrackStatsByID` | (`id?`: `string`) => `StoreSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)[]\> |
-| `localVideoTrackStatsByLayer` | (`layer?`: [`HMSPreferredSimulcastLayer`](/api-reference/javascript/v2/home/content#hmspreferredsimulcastlayer)) => (`id?`: `string`) => `StoreSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)\> |
-| `packetsLost` | `OutputSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
-| `peerStatsByID` | (`id?`: `string`) => `StoreSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)\> |
-| `publishBitrate` | `OutputSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
-| `subscribeBitrate` | `OutputSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
-| `totalBytesReceived` | `OutputSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
-| `totalBytesSent` | `OutputSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
-| `trackStatsByID` | (`id?`: `string`) => `StoreSelector`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)\> |
+| Name | Type |
+| :---------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `availablePublishBitrate` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
+| `availableSubscribeBitrate` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
+| `jitter` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
+| `localAudioTrackStats` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats), (`res1`: `Record`\<`string`, `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)[]\>, `res2`: `undefined` \| `string`) => `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)\> |
+| `localAudioTrackStatsByID` | (`id?`: `string`) => `StoreSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)\> |
+| `localPeerStats` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats), (`res1`: `Record`\<`string`, `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)\>, `res2`: `string`) => `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)\> |
+| `localVideoTrackStats` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats), (`res1`: `Record`\<`string`, `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)[]\>, `res2`: `undefined` \| `string`) => `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)\> |
+| `localVideoTrackStatsByID` | (`id?`: `string`) => `StoreSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)[]\> |
+| `localVideoTrackStatsByLayer` | (`layer?`: [`HMSPreferredSimulcastLayer`](/api-reference/javascript/v2/home/content#hmspreferredsimulcastlayer)) => (`id?`: `string`) => `StoreSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)\> |
+| `packetsLost` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
+| `peerStatsByID` | (`id?`: `string`) => `StoreSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)\> |
+| `publishBitrate` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
+| `publishConnectionType` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `HMSConnectionType`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `HMSConnectionType`\> |
+| `subscribeBitrate` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
+| `subscribeConnectionType` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `HMSConnectionType`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `HMSConnectionType`\> |
+| `totalBytesReceived` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
+| `totalBytesSent` | `OutputSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| `number`, (`res`: `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)) => `undefined` \| `number`\> |
+| `trackStatsByID` | (`id?`: `string`) => `StoreSelector`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore), `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)\> |
---
@@ -416,7 +433,7 @@ selfBrowser - the current browser tab is being shared
### selectAppData
-▸ **selectAppData**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `any`\>
+▸ **selectAppData**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `any`\>
Select a particular key from ui app data by passed in key.
if key is not passed, full data is returned.
@@ -429,13 +446,13 @@ if key is not passed, full data is returned.
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `any`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `any`\>
---
### selectAppDataByPath
-▸ **selectAppDataByPath**(`...keys`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `Record`<`string`, `any`\>, (`res`: `undefined` \| `Record`<`string`, `any`\>) => `undefined` \| `Record`<`string`, `any`\>\>
+▸ **selectAppDataByPath**(`...keys`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `Record`\<`string`, `any`\>, (`res`: `undefined` \| `Record`\<`string`, `any`\>) => `undefined` \| `Record`\<`string`, `any`\>\>
#### Parameters
@@ -445,13 +462,13 @@ if key is not passed, full data is returned.
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `Record`<`string`, `any`\>, (`res`: `undefined` \| `Record`<`string`, `any`\>) => `undefined` \| `Record`<`string`, `any`\>\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `Record`\<`string`, `any`\>, (`res`: `undefined` \| `Record`\<`string`, `any`\>) => `undefined` \| `Record`\<`string`, `any`\>\>
---
### selectAudioPlaylistTrackByPeerID
-▸ **selectAudioPlaylistTrackByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
+▸ **selectAudioPlaylistTrackByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
takes in a normal selector which has store and id as input and curries it to make it easier to use.
Before: store.getState((store) => normalSelector(store, peerID))
@@ -465,13 +482,13 @@ After: store.getState(curriedSelector(peerID))
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
---
### selectAudioTrackByID
-▸ **selectAudioTrackByID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
+▸ **selectAudioTrackByID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
Select the [HMSAudioTrack](/api-reference/javascript/v2/interfaces/HMSAudioTrack) object given a track ID.
@@ -483,13 +500,13 @@ Select the [HMSAudioTrack](/api-reference/javascript/v2/interfaces/HMSAudioTrack
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
---
### selectAudioTrackByPeerID
-▸ **selectAudioTrackByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
+▸ **selectAudioTrackByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
Select the primary audio track of a peer given a peer ID.
@@ -501,13 +518,13 @@ Select the primary audio track of a peer given a peer ID.
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
---
### selectAudioTrackVolume
-▸ **selectAudioTrackVolume**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `number`\>
+▸ **selectAudioTrackVolume**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `number`\>
Select the local audio volume of an audio track given a track ID.
@@ -524,13 +541,13 @@ NOTE: **Volume** of a track is different from **Audio Level** of a track,
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `number`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `number`\>
---
### selectAudioVolumeByPeerID
-▸ **selectAudioVolumeByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `number`\>
+▸ **selectAudioVolumeByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `number`\>
Select the local audio volume of the primary audio track of a peer given a peer ID.
@@ -542,13 +559,13 @@ Select the local audio volume of the primary audio track of a peer given a peer
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `number`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `number`\>
---
### selectAuxiliaryAudioByPeerID
-▸ **selectAuxiliaryAudioByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
+▸ **selectAuxiliaryAudioByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
Select the first auxiliary audio track of a peer given a peer ID.
@@ -560,13 +577,13 @@ Select the first auxiliary audio track of a peer given a peer ID.
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
---
### selectAuxiliaryTracksByPeerID
-▸ **selectAuxiliaryTracksByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSTrack`](/api-reference/javascript/v2/home/content#hmstrack)[]\>
+▸ **selectAuxiliaryTracksByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSTrack`](/api-reference/javascript/v2/home/content#hmstrack)[]\>
Select an array of auxiliary tracks of a peer given a peer ID.
@@ -578,7 +595,7 @@ Select an array of auxiliary tracks of a peer given a peer ID.
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSTrack`](/api-reference/javascript/v2/home/content#hmstrack)[]\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSTrack`](/api-reference/javascript/v2/home/content#hmstrack)[]\>
---
@@ -590,9 +607,9 @@ Select an array of names of available roles in the room.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -606,9 +623,9 @@ Select an array of names of available roles in the room.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -622,9 +639,9 @@ Select an array of names of available roles in the room.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -634,7 +651,7 @@ Select an array of names of available roles in the room.
### selectCameraStreamByPeerID
-▸ **selectCameraStreamByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
+▸ **selectCameraStreamByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
Select the camera stream of a peer given a peer ID.
This is the primary video track of a peer.
@@ -647,29 +664,29 @@ This is the primary video track of a peer.
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
---
### selectConnectionQualities
-▸ **selectConnectionQualities**(`store`): `Record`<`string`, `HMSConnectionQuality`\>
+▸ **selectConnectionQualities**(`store`): `Record`\<`string`, `HMSConnectionQuality`\>
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
-`Record`<`string`, `HMSConnectionQuality`\>
+`Record`\<`string`, `HMSConnectionQuality`\>
---
### selectConnectionQualityByPeerID
-▸ **selectConnectionQualityByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `HMSConnectionQuality`\>
+▸ **selectConnectionQualityByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `HMSConnectionQuality`\>
takes in a normal selector which has store and id as input and curries it to make it easier to use.
Before: store.getState((store) => normalSelector(store, peerID))
@@ -683,7 +700,7 @@ After: store.getState(curriedSelector(peerID))
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `HMSConnectionQuality`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `HMSConnectionQuality`\>
---
@@ -695,9 +712,9 @@ Select an array of tracks that have been degraded(receiving lower video quality/
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -713,9 +730,9 @@ Select the available audio input, audio output and video input devices on your m
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -735,7 +752,7 @@ type DeviceMap = {
### selectDidIJoinWithin
-▸ **selectDidIJoinWithin**(`timeMs`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `boolean`, (`res`: [`HMSRoom`](/api-reference/javascript/v2/interfaces/HMSRoom)) => `undefined` \| `boolean`\>
+▸ **selectDidIJoinWithin**(`timeMs`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `boolean`, (`res`: [`HMSRoom`](/api-reference/javascript/v2/interfaces/HMSRoom)) => `undefined` \| `boolean`\>
Returns a boolean to indicate if the local peer joined within the past `timeMs` milliseconds.
@@ -753,7 +770,7 @@ const joinedWithinASecond = useHMSStore(selectDidIJoinWithin(1000));
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `boolean`, (`res`: [`HMSRoom`](/api-reference/javascript/v2/interfaces/HMSRoom)) => `undefined` \| `boolean`\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `boolean`, (`res`: [`HMSRoom`](/api-reference/javascript/v2/interfaces/HMSRoom)) => `undefined` \| `boolean`\>
---
@@ -765,9 +782,9 @@ Select the peer who's speaking the loudest at the moment
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -781,9 +798,9 @@ Select the peer who's speaking the loudest at the moment
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -799,9 +816,9 @@ Select the current [[]](/api-reference/javascript/v2/interfaces/HMSException) ob
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -815,9 +832,9 @@ Select the current [[]](/api-reference/javascript/v2/interfaces/HMSException) ob
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -831,9 +848,9 @@ Select the current [[]](/api-reference/javascript/v2/interfaces/HMSException) ob
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -849,9 +866,9 @@ Select an array of messages in the room(sent and received).
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -867,9 +884,9 @@ Select the number of messages(sent and received).
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -883,9 +900,9 @@ Select the number of messages(sent and received).
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -895,7 +912,7 @@ Select the number of messages(sent and received).
### selectHasPeerHandRaised
-▸ **selectHasPeerHandRaised**(`peerId`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `boolean`, (`res`: `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)) => `boolean`\>
+▸ **selectHasPeerHandRaised**(`peerId`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `boolean`, (`res`: `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)) => `boolean`\>
#### Parameters
@@ -905,7 +922,7 @@ Select the number of messages(sent and received).
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `boolean`, (`res`: `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)) => `boolean`\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `boolean`, (`res`: `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)) => `boolean`\>
---
@@ -917,9 +934,9 @@ Select what streams is the local peer allowed to preview from video, audio
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -935,9 +952,9 @@ Select what streams is the local peer allowed to publish from video, audio and s
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -953,9 +970,9 @@ Select a boolean denoting whether if your local peer is allowed to subscribe to
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -965,7 +982,7 @@ Select a boolean denoting whether if your local peer is allowed to subscribe to
### selectIsAudioLocallyMuted
-▸ **selectIsAudioLocallyMuted**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `boolean`\>
+▸ **selectIsAudioLocallyMuted**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `boolean`\>
Select a boolean denoting whether you've muted an audio track locally(only for you) given a track ID.
@@ -977,7 +994,7 @@ Select a boolean denoting whether you've muted an audio track locally(only for y
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `boolean`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `boolean`\>
---
@@ -990,9 +1007,9 @@ NOTE: Returns true only after join, returns false during preview.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1006,9 +1023,9 @@ NOTE: Returns true only after join, returns false during preview.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1024,9 +1041,9 @@ Select a boolean denoting whether the room is in Preview state.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1040,9 +1057,9 @@ Select a boolean denoting whether the room is in Preview state.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1059,9 +1076,31 @@ and the audio from your microphone is shared to remote peers
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
+
+#### Returns
+
+`boolean`
+
+---
+
+### selectIsLocalAudioInterrupted
+
+▸ **selectIsLocalAudioInterrupted**(`store`): `boolean`
+
+Select a boolean denoting whether the OS or another app has taken your microphone, eg. an
+incoming call. Cleared once capture is back, however it came back.
+
+Backgrounding the tab on mobile does not set this - the mic is handed back on return. It is set
+on return if the mic did not come back.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1071,7 +1110,7 @@ and the audio from your microphone is shared to remote peers
### selectIsLocalAudioPluginPresent
-▸ **selectIsLocalAudioPluginPresent**(`pluginName`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `boolean`, (`res`: `string`[]) => `boolean`\>
+▸ **selectIsLocalAudioPluginPresent**(`pluginName`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `boolean`, (`res`: `string`[]) => `boolean`\>
#### Parameters
@@ -1081,7 +1120,7 @@ and the audio from your microphone is shared to remote peers
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `boolean`, (`res`: `string`[]) => `boolean`\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `boolean`, (`res`: `string`[]) => `boolean`\>
---
@@ -1093,9 +1132,9 @@ Select a boolean denoting whether your screen is shared to remote peers in the r
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1116,9 +1155,9 @@ without waiting for the video source
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1135,9 +1174,9 @@ and the video from your camera is shared to remote peers
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1145,9 +1184,31 @@ and the video from your camera is shared to remote peers
---
+### selectIsLocalVideoInterrupted
+
+▸ **selectIsLocalVideoInterrupted**(`store`): `boolean`
+
+Select a boolean denoting whether the OS or another app has taken your camera.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
+
+#### Returns
+
+`boolean`
+
+**`See`**
+
+selectIsLocalAudioInterrupted
+
+---
+
### selectIsLocalVideoPluginPresent
-▸ **selectIsLocalVideoPluginPresent**(`pluginName`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `boolean`, (`res`: `string`[]) => `boolean`\>
+▸ **selectIsLocalVideoPluginPresent**(`pluginName`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `boolean`, (`res`: `string`[]) => `boolean`\>
#### Parameters
@@ -1157,13 +1218,13 @@ and the video from your camera is shared to remote peers
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `boolean`, (`res`: `string`[]) => `boolean`\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `boolean`, (`res`: `string`[]) => `boolean`\>
---
### selectIsLocallyMutedByPeerID
-▸ **selectIsLocallyMutedByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `boolean`\>
+▸ **selectIsLocallyMutedByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `boolean`\>
Select a boolean denoting whether you've muted the primary audio track of a peer locally(only for you) given a peer ID.
@@ -1175,13 +1236,13 @@ Select a boolean denoting whether you've muted the primary audio track of a peer
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `boolean`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `boolean`\>
---
### selectIsPeerAudioEnabled
-▸ **selectIsPeerAudioEnabled**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `boolean`\>
+▸ **selectIsPeerAudioEnabled**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `boolean`\>
Select a boolean denoting whether a peer has unmuted audio and sharing it to other peers.
@@ -1193,13 +1254,13 @@ Select a boolean denoting whether a peer has unmuted audio and sharing it to oth
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `boolean`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `boolean`\>
---
### selectIsPeerVideoEnabled
-▸ **selectIsPeerVideoEnabled**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `boolean`\>
+▸ **selectIsPeerVideoEnabled**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `boolean`\>
Select a boolean denoting whether a peer has unmuted video and sharing it to other peers.
@@ -1211,13 +1272,13 @@ Select a boolean denoting whether a peer has unmuted video and sharing it to oth
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `boolean`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `boolean`\>
---
### selectIsRoleAllowedToPublish
-▸ **selectIsRoleAllowedToPublish**(`roleName`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSPublishAllowed`](/api-reference/javascript/v2/interfaces/HMSPublishAllowed), (`res`: [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)) => [`HMSPublishAllowed`](/api-reference/javascript/v2/interfaces/HMSPublishAllowed)\>
+▸ **selectIsRoleAllowedToPublish**(`roleName`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSPublishAllowed`](/api-reference/javascript/v2/interfaces/HMSPublishAllowed), (`res`: [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)) => [`HMSPublishAllowed`](/api-reference/javascript/v2/interfaces/HMSPublishAllowed)\>
#### Parameters
@@ -1227,13 +1288,13 @@ Select a boolean denoting whether a peer has unmuted video and sharing it to oth
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSPublishAllowed`](/api-reference/javascript/v2/interfaces/HMSPublishAllowed), (`res`: [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)) => [`HMSPublishAllowed`](/api-reference/javascript/v2/interfaces/HMSPublishAllowed)\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSPublishAllowed`](/api-reference/javascript/v2/interfaces/HMSPublishAllowed), (`res`: [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)) => [`HMSPublishAllowed`](/api-reference/javascript/v2/interfaces/HMSPublishAllowed)\>
---
### selectIsScreenShareLocallyMutedByPeerID
-▸ **selectIsScreenShareLocallyMutedByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `boolean`\>
+▸ **selectIsScreenShareLocallyMutedByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `boolean`\>
Select a boolean denoting whether you've muted the screen share audio track of a peer locally(only for you) given a peer ID.
@@ -1245,7 +1306,7 @@ Select a boolean denoting whether you've muted the screen share audio track of a
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `boolean`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `boolean`\>
---
@@ -1257,9 +1318,9 @@ Select a boolean denoting whether someone is sharing screen in the room.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1269,7 +1330,7 @@ Select a boolean denoting whether someone is sharing screen in the room.
### selectIsTranscriptionAllowedByMode
-▸ **selectIsTranscriptionAllowedByMode**(`mode`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `boolean`, (`res`: `null` \| [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)) => `boolean`\>
+▸ **selectIsTranscriptionAllowedByMode**(`mode`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `boolean`, (`res`: `null` \| [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)) => `boolean`\>
#### Parameters
@@ -1279,7 +1340,7 @@ Select a boolean denoting whether someone is sharing screen in the room.
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `boolean`, (`res`: `null` \| [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)) => `boolean`\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `boolean`, (`res`: `null` \| [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)) => `boolean`\>
---
@@ -1289,9 +1350,9 @@ Select a boolean denoting whether someone is sharing screen in the room.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1305,9 +1366,9 @@ Select a boolean denoting whether someone is sharing screen in the room.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1323,9 +1384,9 @@ Select the track ID of your local peer's primary audio track
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1342,9 +1403,9 @@ i.e., choosen audio input device, audio output device and video input device, au
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1360,9 +1421,9 @@ Select the local peer object object assigned to you.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1378,9 +1439,9 @@ Select the peer ID of your local peer.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1396,9 +1457,9 @@ Select the peer name of your local peer.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1414,9 +1475,9 @@ Select the [HMSRole](/api-reference/javascript/v2/interfaces/HMSRole) object of
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1432,9 +1493,9 @@ Select the role name of your local peer.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1450,9 +1511,9 @@ Select an array of track IDs of all your local peer's tracks
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1468,9 +1529,9 @@ Select the track ID of your local peer's primary video track
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1480,7 +1541,7 @@ Select the track ID of your local peer's primary video track
### selectMessageByMessageID
-▸ **selectMessageByMessageID**(`id`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage), (`res`: `Record`<`string`, [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)\>) => [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)\>
+▸ **selectMessageByMessageID**(`id`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage), (`res`: `Record`\<`string`, [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)\>) => [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)\>
#### Parameters
@@ -1490,7 +1551,7 @@ Select the track ID of your local peer's primary video track
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage), (`res`: `Record`<`string`, [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)\>) => [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage), (`res`: `Record`\<`string`, [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)\>) => [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)\>
---
@@ -1502,9 +1563,9 @@ Select IDs of messages you've sent or received sorted chronologically.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1514,7 +1575,7 @@ Select IDs of messages you've sent or received sorted chronologically.
### selectMessagesByPeerID
-▸ **selectMessagesByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)[]\>
+▸ **selectMessagesByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)[]\>
takes in a normal selector which has store and id as input and curries it to make it easier to use.
Before: store.getState((store) => normalSelector(store, peerID))
@@ -1528,13 +1589,13 @@ After: store.getState(curriedSelector(peerID))
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)[]\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)[]\>
---
### selectMessagesByRole
-▸ **selectMessagesByRole**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)[]\>
+▸ **selectMessagesByRole**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)[]\>
takes in a normal selector which has store and id as input and curries it to make it easier to use.
Before: store.getState((store) => normalSelector(store, peerID))
@@ -1548,13 +1609,13 @@ After: store.getState(curriedSelector(peerID))
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)[]\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)[]\>
---
### selectMessagesUnreadCountByPeerID
-▸ **selectMessagesUnreadCountByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `number`\>
+▸ **selectMessagesUnreadCountByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `number`\>
takes in a normal selector which has store and id as input and curries it to make it easier to use.
Before: store.getState((store) => normalSelector(store, peerID))
@@ -1568,13 +1629,13 @@ After: store.getState(curriedSelector(peerID))
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `number`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `number`\>
---
### selectMessagesUnreadCountByRole
-▸ **selectMessagesUnreadCountByRole**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `number`\>
+▸ **selectMessagesUnreadCountByRole**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `number`\>
takes in a normal selector which has store and id as input and curries it to make it easier to use.
Before: store.getState((store) => normalSelector(store, peerID))
@@ -1588,13 +1649,13 @@ After: store.getState(curriedSelector(peerID))
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `number`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `number`\>
---
### selectPeerAudioByID
-▸ **selectPeerAudioByID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `number`\>
+▸ **selectPeerAudioByID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `number`\>
Select audio level of audioTrack of a peer given a peer IDß.
@@ -1606,13 +1667,13 @@ Select audio level of audioTrack of a peer given a peer IDß.
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `number`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `number`\>
---
### selectPeerByCondition
-▸ **selectPeerByCondition**(`predicate`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer), (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => `undefined` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
+▸ **selectPeerByCondition**(`predicate`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer), (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => `undefined` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
Selects the first peer passing the condition given by the argument predicate function
@@ -1630,13 +1691,13 @@ const spotlightPeer = useHMSStore(selectPeerByCondition(peer => JSON.parse(peer.
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer), (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => `undefined` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer), (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => `undefined` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
---
### selectPeerByID
-▸ **selectPeerByID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
+▸ **selectPeerByID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
Select the [HMSPeer](/api-reference/javascript/v2/interfaces/HMSPeer) object given a peer ID.
@@ -1648,7 +1709,7 @@ Select the [HMSPeer](/api-reference/javascript/v2/interfaces/HMSPeer) object giv
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
---
@@ -1663,9 +1724,9 @@ without having details of everyone depending on dashboard settings.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1675,7 +1736,7 @@ without having details of everyone depending on dashboard settings.
### selectPeerMetadata
-▸ **selectPeerMetadata**(`peerId`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `any`, (`res`: `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)) => `any`\>
+▸ **selectPeerMetadata**(`peerId`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `any`, (`res`: `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)) => `any`\>
Selects the peer metadata for the passed in peer and returns it as JSON. If metadata is not present
or conversion to JSON gives an error, an empty object is returned.
@@ -1689,13 +1750,13 @@ Please directly use peer.metadata in case the metadata is not JSON by design.
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `any`, (`res`: `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)) => `any`\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `any`, (`res`: `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)) => `any`\>
---
### selectPeerName
-▸ **selectPeerName**(`peerId`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `string`, (`res`: `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)) => `undefined` \| `string`\>
+▸ **selectPeerName**(`peerId`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `string`, (`res`: `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)) => `undefined` \| `string`\>
#### Parameters
@@ -1705,13 +1766,13 @@ Please directly use peer.metadata in case the metadata is not JSON by design.
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `string`, (`res`: `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)) => `undefined` \| `string`\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `string`, (`res`: `null` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)) => `undefined` \| `string`\>
---
### selectPeerNameByID
-▸ **selectPeerNameByID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `string`\>
+▸ **selectPeerNameByID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `string`\>
Select the name of a [HMSPeer](/api-reference/javascript/v2/interfaces/HMSPeer) given a peer ID.
@@ -1723,7 +1784,7 @@ Select the name of a [HMSPeer](/api-reference/javascript/v2/interfaces/HMSPeer)
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `string`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `string`\>
---
@@ -1735,9 +1796,9 @@ Select the first peer who is currently sharing their screen.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1753,9 +1814,9 @@ Select the first peer who is currently sharing their audio only screen
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1769,9 +1830,9 @@ Select the first peer who is currently sharing their audio only screen
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1785,9 +1846,9 @@ Select the first peer who is currently sharing their audio only screen
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1797,7 +1858,7 @@ Select the first peer who is currently sharing their audio only screen
### selectPeerTypeByID
-▸ **selectPeerTypeByID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSPeerType`](/api-reference/javascript/v2/enums/HMSPeerType)\>
+▸ **selectPeerTypeByID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSPeerType`](/api-reference/javascript/v2/enums/HMSPeerType)\>
takes in a normal selector which has store and id as input and curries it to make it easier to use.
Before: store.getState((store) => normalSelector(store, peerID))
@@ -1811,7 +1872,7 @@ After: store.getState(curriedSelector(peerID))
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSPeerType`](/api-reference/javascript/v2/enums/HMSPeerType)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSPeerType`](/api-reference/javascript/v2/enums/HMSPeerType)\>
---
@@ -1823,9 +1884,9 @@ Select an array of peers(remote peers and your local peer) present in the room.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1835,7 +1896,7 @@ Select an array of peers(remote peers and your local peer) present in the room.
### selectPeersByCondition
-▸ **selectPeersByCondition**(`predicate`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[], (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
+▸ **selectPeersByCondition**(`predicate`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[], (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
Selects all peers passing the condition given by the argument predicate function
@@ -1853,13 +1914,13 @@ const handRaisedPeers = useHMSStore(selectPeersByCondition(peer => JSON.parse(pe
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[], (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[], (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
---
### selectPeersByRole
-▸ **selectPeersByRole**(`role`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[], (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
+▸ **selectPeersByRole**(`role`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[], (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
Select an array of peers of a particular role
@@ -1871,7 +1932,7 @@ Select an array of peers of a particular role
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[], (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[], (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
HMSPeer[]
@@ -1879,7 +1940,7 @@ HMSPeer[]
### selectPeersByRoles
-▸ **selectPeersByRoles**(`roles`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[], (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
+▸ **selectPeersByRoles**(`roles`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[], (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
Select an array of peers of a particular role
@@ -1891,7 +1952,7 @@ Select an array of peers of a particular role
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[], (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[], (`res`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]) => [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
HMSPeer[]
@@ -1905,9 +1966,9 @@ Select an array of peers who are currently sharing their screen.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1921,9 +1982,9 @@ Select an array of peers who are currently sharing their screen.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1933,25 +1994,25 @@ Select an array of peers who are currently sharing their screen.
### selectPermissions
-▸ **selectPermissions**(`state`): `undefined` \| { `browserRecording`: `boolean` ; `changeRole`: `boolean` ; `endRoom`: `boolean` ; `hlsStreaming`: `boolean` ; `mute`: `boolean` ; `pollRead`: `boolean` ; `pollWrite`: `boolean` ; `removeOthers`: `boolean` ; `rtmpStreaming`: `boolean` ; `transcriptions?`: `Record`<[`CAPTION`](/api-reference/javascript/v2/enums/HMSTranscriptionMode#caption), `HMSPermissionType`[]\> ; `unmute`: `boolean` ; `whiteboard?`: `HMSPermissionType`[] }
+▸ **selectPermissions**(`state`): `undefined` \| \{ `browserRecording`: `boolean` ; `changeRole`: `boolean` ; `endRoom`: `boolean` ; `hlsStreaming`: `boolean` ; `mute`: `boolean` ; `pollRead`: `boolean` ; `pollWrite`: `boolean` ; `removeOthers`: `boolean` ; `rtmpStreaming`: `boolean` ; `transcriptions?`: `Record`\<[`CAPTION`](/api-reference/javascript/v2/enums/HMSTranscriptionMode#caption), `HMSPermissionType`[]\> ; `unmute`: `boolean` ; `whiteboard?`: `HMSPermissionType`[] }
Select the permissions which determine what actions the local peer can do.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
-`undefined` \| { `browserRecording`: `boolean` ; `changeRole`: `boolean` ; `endRoom`: `boolean` ; `hlsStreaming`: `boolean` ; `mute`: `boolean` ; `pollRead`: `boolean` ; `pollWrite`: `boolean` ; `removeOthers`: `boolean` ; `rtmpStreaming`: `boolean` ; `transcriptions?`: `Record`<[`CAPTION`](/api-reference/javascript/v2/enums/HMSTranscriptionMode#caption), `HMSPermissionType`[]\> ; `unmute`: `boolean` ; `whiteboard?`: `HMSPermissionType`[] }
+`undefined` \| \{ `browserRecording`: `boolean` ; `changeRole`: `boolean` ; `endRoom`: `boolean` ; `hlsStreaming`: `boolean` ; `mute`: `boolean` ; `pollRead`: `boolean` ; `pollWrite`: `boolean` ; `removeOthers`: `boolean` ; `rtmpStreaming`: `boolean` ; `transcriptions?`: `Record`\<[`CAPTION`](/api-reference/javascript/v2/enums/HMSTranscriptionMode#caption), `HMSPermissionType`[]\> ; `unmute`: `boolean` ; `whiteboard?`: `HMSPermissionType`[] }
---
### selectPollByID
-▸ **selectPollByID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSPoll`](/api-reference/javascript/v2/interfaces/HMSPoll)\>
+▸ **selectPollByID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSPoll`](/api-reference/javascript/v2/interfaces/HMSPoll)\>
takes in a normal selector which has store and id as input and curries it to make it easier to use.
Before: store.getState((store) => normalSelector(store, peerID))
@@ -1965,7 +2026,7 @@ After: store.getState(curriedSelector(peerID))
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSPoll`](/api-reference/javascript/v2/interfaces/HMSPoll)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSPoll`](/api-reference/javascript/v2/interfaces/HMSPoll)\>
---
@@ -1975,9 +2036,9 @@ After: store.getState(curriedSelector(peerID))
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -1987,17 +2048,17 @@ After: store.getState(curriedSelector(peerID))
### selectPollsMap
-▸ **selectPollsMap**(`store`): `Record`<`string`, [`HMSPoll`](/api-reference/javascript/v2/interfaces/HMSPoll)\>
+▸ **selectPollsMap**(`store`): `Record`\<`string`, [`HMSPoll`](/api-reference/javascript/v2/interfaces/HMSPoll)\>
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
-`Record`<`string`, [`HMSPoll`](/api-reference/javascript/v2/interfaces/HMSPoll)\>
+`Record`\<`string`, [`HMSPoll`](/api-reference/javascript/v2/interfaces/HMSPoll)\>
---
@@ -2009,9 +2070,9 @@ Select the [HMSRole](/api-reference/javascript/v2/interfaces/HMSRole) used for p
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2025,9 +2086,9 @@ Select the [HMSRole](/api-reference/javascript/v2/interfaces/HMSRole) used for p
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2041,9 +2102,9 @@ Select the [HMSRole](/api-reference/javascript/v2/interfaces/HMSRole) used for p
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2059,9 +2120,9 @@ It will help to get the all the error
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2075,9 +2136,9 @@ It will help to get the all the error
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2093,9 +2154,9 @@ Select remote peers(other users you're connected with via the internet) present
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2105,7 +2166,7 @@ Select remote peers(other users you're connected with via the internet) present
### selectRoleByRoleName
-▸ **selectRoleByRoleName**(`roleName`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole), (`res`: `Record`<`string`, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>) => [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>
+▸ **selectRoleByRoleName**(`roleName`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole), (`res`: `Record`\<`string`, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>) => [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>
#### Parameters
@@ -2115,7 +2176,7 @@ Select remote peers(other users you're connected with via the internet) present
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole), (`res`: `Record`<`string`, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>) => [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole), (`res`: `Record`\<`string`, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>) => [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>
---
@@ -2127,9 +2188,9 @@ Select the role change request received for your local peer.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2139,19 +2200,19 @@ Select the role change request received for your local peer.
### selectRolesMap
-▸ **selectRolesMap**(`store`): `Record`<`string`, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>
+▸ **selectRolesMap**(`store`): `Record`\<`string`, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>
Select available roles in the room as a map between the role name and [HMSRole](/api-reference/javascript/v2/interfaces/HMSRole) object.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
-`Record`<`string`, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>
+`Record`\<`string`, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>
---
@@ -2163,9 +2224,9 @@ Select the current [HMSRoom](/api-reference/javascript/v2/interfaces/HMSRoom) ob
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2181,9 +2242,9 @@ Select the ID of the current room to which you are connected.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2197,9 +2258,9 @@ Select the ID of the current room to which you are connected.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2213,9 +2274,9 @@ Select the ID of the current room to which you are connected.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2231,9 +2292,9 @@ Select the current state of the room.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2243,7 +2304,7 @@ Select the current state of the room.
### selectScreenAudioTrackByID
-▸ **selectScreenAudioTrackByID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
+▸ **selectScreenAudioTrackByID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
Select the [HMSScreenAudioTrack](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) object given a track ID.
@@ -2255,13 +2316,13 @@ Select the [HMSScreenAudioTrack](/api-reference/javascript/v2/interfaces/HMSScre
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
---
### selectScreenShareAudioByPeerID
-▸ **selectScreenShareAudioByPeerID**(`id?`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack), (`res`: { `audio`: [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) ; `video`: [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) }) => [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack)\>
+▸ **selectScreenShareAudioByPeerID**(`id?`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack), (`res`: \{ `audio`: [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) ; `video`: [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) }) => [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack)\>
Select the screen share audio track of a peer given a peer ID.
@@ -2273,13 +2334,13 @@ Select the screen share audio track of a peer given a peer ID.
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack), (`res`: { `audio`: [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) ; `video`: [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) }) => [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack)\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack), (`res`: \{ `audio`: [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) ; `video`: [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) }) => [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack)\>
---
### selectScreenShareByPeerID
-▸ **selectScreenShareByPeerID**(`id?`): `OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack), (`res`: { `audio`: [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) ; `video`: [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) }) => [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack)\>
+▸ **selectScreenShareByPeerID**(`id?`): `OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack), (`res`: \{ `audio`: [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) ; `video`: [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) }) => [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack)\>
Select the screen share video track of a peer given a peer ID.
@@ -2291,13 +2352,13 @@ Select the screen share video track of a peer given a peer ID.
#### Returns
-`OutputSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack), (`res`: { `audio`: [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) ; `video`: [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) }) => [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack)\>
+`OutputSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack), (`res`: \{ `audio`: [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) ; `video`: [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) }) => [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack)\>
---
### selectScreenSharesByPeerId
-▸ **selectScreenSharesByPeerId**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, { `audio`: [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) ; `video`: [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) }\>
+▸ **selectScreenSharesByPeerId**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, \{ `audio`: [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) ; `video`: [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) }\>
takes in a normal selector which has store and id as input and curries it to make it easier to use.
Before: store.getState((store) => normalSelector(store, peerID))
@@ -2311,13 +2372,13 @@ After: store.getState(curriedSelector(peerID))
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, { `audio`: [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) ; `video`: [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) }\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, \{ `audio`: [`HMSScreenAudioTrack`](/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack) ; `video`: [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) }\>
---
### selectScreenVideoTrackByID
-▸ **selectScreenVideoTrackByID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack)\>
+▸ **selectScreenVideoTrackByID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack)\>
Select the [HMSScreenVideoTrack](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack) object given a track ID.
@@ -2329,13 +2390,13 @@ Select the [HMSScreenVideoTrack](/api-reference/javascript/v2/interfaces/HMSScre
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack)\>
---
### selectScreenshareAudioVolumeByPeerID
-▸ **selectScreenshareAudioVolumeByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `number`\>
+▸ **selectScreenshareAudioVolumeByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `number`\>
Select the local audio volume of the screen share of a peer given a peer ID.
@@ -2347,7 +2408,7 @@ Select the local audio volume of the screen share of a peer given a peer ID.
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| `number`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| `number`\>
---
@@ -2357,9 +2418,9 @@ Select the local audio volume of the screen share of a peer given a peer ID.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2373,9 +2434,9 @@ Select the local audio volume of the screen share of a peer given a peer ID.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2389,16 +2450,16 @@ Select the local audio volume of the screen share of a peer given a peer ID.
### selectSessionStore
-▸ **selectSessionStore**<`T`\>(): (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<`T`\>) => `T`[``"sessionStore"``] \| `undefined`
+▸ **selectSessionStore**\<`T`\>(): (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<`T`\>) => `T`[``"sessionStore"``] \| `undefined`
Select a particular key from session store by passed in key.
if key is not passed, full data is returned.
#### Type parameters
-| Name | Type |
-| :--- | :------------------------------------------------------------------------------------------------------------------------------------ |
-| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = { `sessionStore`: `Record`<`string`, `any`\> } |
+| Name | Type |
+| :--- | :-------------------------------------------------------------------------------------------------------------------------------------- |
+| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = \{ `sessionStore`: `Record`\<`string`, `any`\> } |
#### Returns
@@ -2408,22 +2469,22 @@ if key is not passed, full data is returned.
##### Parameters
-| Name | Type |
-| :------ | :------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<`T`\> |
+| Name | Type |
+| :------ | :-------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<`T`\> |
##### Returns
`T`[``"sessionStore"``] \| `undefined`
-▸ **selectSessionStore**<`T`, `K`\>(`key`): (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<`T`\>) => `T`[`"sessionStore"`][`K`] \| `undefined`
+▸ **selectSessionStore**\<`T`, `K`\>(`key`): (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<`T`\>) => `T`[`"sessionStore"`][`K`] \| `undefined`
#### Type parameters
-| Name | Type |
-| :--- | :------------------------------------------------------------------------------------------------------------------------------------ |
-| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = { `sessionStore`: `Record`<`string`, `any`\> } |
-| `K` | extends `string` \| `number` \| `symbol` = keyof `T`[``"sessionStore"``] |
+| Name | Type |
+| :--- | :-------------------------------------------------------------------------------------------------------------------------------------- |
+| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = \{ `sessionStore`: `Record`\<`string`, `any`\> } |
+| `K` | extends `string` \| `number` \| `symbol` = keyof `T`[``"sessionStore"``] |
#### Parameters
@@ -2439,9 +2500,9 @@ if key is not passed, full data is returned.
##### Parameters
-| Name | Type |
-| :------ | :------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<`T`\> |
+| Name | Type |
+| :------ | :-------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<`T`\> |
##### Returns
@@ -2451,7 +2512,7 @@ if key is not passed, full data is returned.
### selectSimulcastLayerByTrack
-▸ **selectSimulcastLayerByTrack**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSSimulcastLayer`](/api-reference/javascript/v2/enums/HMSSimulcastLayer)\>
+▸ **selectSimulcastLayerByTrack**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSSimulcastLayer`](/api-reference/javascript/v2/enums/HMSSimulcastLayer)\>
Select the current simulcast layer of a track given a track ID.
@@ -2463,45 +2524,45 @@ Select the current simulcast layer of a track given a track ID.
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSSimulcastLayer`](/api-reference/javascript/v2/enums/HMSSimulcastLayer)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSSimulcastLayer`](/api-reference/javascript/v2/enums/HMSSimulcastLayer)\>
---
### selectSpeakers
-▸ **selectSpeakers**(`store`): `Record`<`string`, [`HMSSpeaker`](/api-reference/javascript/v2/interfaces/HMSSpeaker)\>
+▸ **selectSpeakers**(`store`): `Record`\<`string`, [`HMSSpeaker`](/api-reference/javascript/v2/interfaces/HMSSpeaker)\>
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
-`Record`<`string`, [`HMSSpeaker`](/api-reference/javascript/v2/interfaces/HMSSpeaker)\>
+`Record`\<`string`, [`HMSSpeaker`](/api-reference/javascript/v2/interfaces/HMSSpeaker)\>
---
### selectTemplateAppData
-▸ **selectTemplateAppData**(`store`): `Record`<`string`, `string`\>
+▸ **selectTemplateAppData**(`store`): `Record`\<`string`, `string`\>
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
-`Record`<`string`, `string`\>
+`Record`\<`string`, `string`\>
---
### selectTrackAudioByID
-▸ **selectTrackAudioByID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `number`\>
+▸ **selectTrackAudioByID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `number`\>
Select the audio level of a track given a track ID.
@@ -2513,13 +2574,13 @@ Select the audio level of a track given a track ID.
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `number`\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `number`\>
---
### selectTrackByID
-▸ **selectTrackByID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack) \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack) \| [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack)\>
+▸ **selectTrackByID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack) \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack) \| [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack)\>
Select the [HMSTrack](/api-reference/javascript/v2/home/content#hmstrack) object given a track ID.
@@ -2531,7 +2592,7 @@ Select the [HMSTrack](/api-reference/javascript/v2/home/content#hmstrack) object
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack) \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack) \| [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack) \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack) \| [`HMSScreenVideoTrack`](/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack)\>
---
@@ -2541,9 +2602,9 @@ Select the [HMSTrack](/api-reference/javascript/v2/home/content#hmstrack) object
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2551,6 +2612,34 @@ Select the [HMSTrack](/api-reference/javascript/v2/home/content#hmstrack) object
---
+### selectTranslationState
+
+▸ **selectTranslationState**(`state`): `Object`
+
+Select the current translation state for captions.
+Reads runtime state from transcriptions if captions are running,
+otherwise falls back to template config from translationConfig.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
+
+#### Returns
+
+`Object`
+
+`{ available, enabled, roleLanguages }` or `{ available: false }` if not configured
+
+| Name | Type |
+| :-------------- | :-------------------------------------------- |
+| `available` | `boolean` |
+| `enabled` | `boolean` |
+| `roleLanguages` | `undefined` \| `Record`\<`string`, `string`\> |
+
+---
+
### selectUnreadHMSBroadcastMessagesCount
▸ **selectUnreadHMSBroadcastMessagesCount**(`state`): `number`
@@ -2559,9 +2648,9 @@ Select the number of unread broadcast messages
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2577,9 +2666,9 @@ Select the number of unread messages.
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2589,7 +2678,7 @@ Select the number of unread messages.
### selectVideoPlaylistAudioTrackByPeerID
-▸ **selectVideoPlaylistAudioTrackByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
+▸ **selectVideoPlaylistAudioTrackByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
takes in a normal selector which has store and id as input and curries it to make it easier to use.
Before: store.getState((store) => normalSelector(store, peerID))
@@ -2603,13 +2692,13 @@ After: store.getState(curriedSelector(peerID))
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSAudioTrack`](/api-reference/javascript/v2/interfaces/HMSAudioTrack)\>
---
### selectVideoPlaylistVideoTrackByPeerID
-▸ **selectVideoPlaylistVideoTrackByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
+▸ **selectVideoPlaylistVideoTrackByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
takes in a normal selector which has store and id as input and curries it to make it easier to use.
Before: store.getState((store) => normalSelector(store, peerID))
@@ -2623,13 +2712,13 @@ After: store.getState(curriedSelector(peerID))
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
---
### selectVideoTrackByID
-▸ **selectVideoTrackByID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
+▸ **selectVideoTrackByID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
Select the [HMSVideoTrack](/api-reference/javascript/v2/interfaces/HMSVideoTrack) object given a track ID.
@@ -2641,13 +2730,13 @@ Select the [HMSVideoTrack](/api-reference/javascript/v2/interfaces/HMSVideoTrack
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `null` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `null` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
---
### selectVideoTrackByPeerID
-▸ **selectVideoTrackByPeerID**(`id?`): `StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
+▸ **selectVideoTrackByPeerID**(`id?`): `StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
Select the primary video track of a peer given a peer ID.
@@ -2659,7 +2748,7 @@ Select the primary video track of a peer given a peer ID.
#### Returns
-`StoreSelector`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>, `undefined` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
+`StoreSelector`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>, `undefined` \| [`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack)\>
---
@@ -2671,9 +2760,9 @@ select the primary/first whiteboard of a session
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `state` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
@@ -2683,16 +2772,16 @@ select the primary/first whiteboard of a session
### selectWhiteboards
-▸ **selectWhiteboards**(`store`): `Record`<`string`, `HMSWhiteboard`\>
+▸ **selectWhiteboards**(`store`): `Record`\<`string`, `HMSWhiteboard`\>
select a map of all the whiteboards in the session
#### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
#### Returns
-`Record`<`string`, `HMSWhiteboard`\>
+`Record`\<`string`, `HMSWhiteboard`\>
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSActions.md b/docs/api-reference/javascript/v2/interfaces/HMSActions.md
index 88f273da69..8f41a3364f 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSActions.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSActions.md
@@ -19,9 +19,9 @@ in case you're creating multiple rooms please create new instance per room.
## Type parameters
-| Name | Type |
-| :--- | :------------------------------------------------------------------------------------------------------------------------------------ |
-| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = { `sessionStore`: `Record`<`string`, `any`\> } |
+| Name | Type |
+| :--- | :-------------------------------------------------------------------------------------------------------------------------------------- |
+| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = \{ `sessionStore`: `Record`\<`string`, `any`\> } |
## Properties
@@ -36,11 +36,11 @@ This will be available after joining the room
### endRoom
-• **endRoom**: (`lock`: `boolean`, `reason`: `string`) => `Promise`<`void`\>
+• **endRoom**: (`lock`: `boolean`, `reason`: `string`) => `Promise`\<`void`\>
#### Type declaration
-▸ (`lock`, `reason`): `Promise`<`void`\>
+▸ (`lock`, `reason`): `Promise`\<`void`\>
If you have the **endRoom** permission, you can end the room. That means everyone will be kicked out.
If lock is passed as true, the room cannot be used further.
@@ -54,7 +54,7 @@ If lock is passed as true, the room cannot be used further.
##### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the room is ended
@@ -71,7 +71,7 @@ This will be available after joining the room
### sessionStore
-• **sessionStore**: [`IHMSSessionStoreActions`](/api-reference/javascript/v2/interfaces/IHMSSessionStoreActions)<`T`[``"sessionStore"``]\>
+• **sessionStore**: [`IHMSSessionStoreActions`](/api-reference/javascript/v2/interfaces/IHMSSessionStoreActions)\<`T`[``"sessionStore"``]\>
actions that can be performed on the real-time key-value store
@@ -82,11 +82,11 @@ is persisted throughout a session till the last peer leaves a room(cleared after
### unblockAudio
-• **unblockAudio**: () => `Promise`<`void`\>
+• **unblockAudio**: () => `Promise`\<`void`\>
#### Type declaration
-▸ (): `Promise`<`void`\>
+▸ (): `Promise`\<`void`\>
Method to be called with some UI interaction after autoplay error is received
Most browsers have limitations where an audio can not be played if there was no user interaction.
@@ -95,7 +95,7 @@ to resolve the autoplay error
##### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the autoplay error is resolved
@@ -112,7 +112,7 @@ This will be available after joining the room
### acceptChangeRole
-▸ **acceptChangeRole**(`request`): `Promise`<`void`\>
+▸ **acceptChangeRole**(`request`): `Promise`\<`void`\>
Accept the role change request received
@@ -124,7 +124,7 @@ Accept the role change request received
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the role is accepted
@@ -132,7 +132,7 @@ Promise - resolves when the role is accepted
### addPluginToAudioTrack
-▸ **addPluginToAudioTrack**(`plugin`): `Promise`<`void`\>
+▸ **addPluginToAudioTrack**(`plugin`): `Promise`\<`void`\>
Add or remove a audio plugin from/to the local peer audio track. Eg. gain filter, noise suppression etc.
Audio plugins can be added/removed at any time after the audio track is available
@@ -145,7 +145,7 @@ Audio plugins can be added/removed at any time after the audio track is availabl
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
**`See`**
@@ -155,7 +155,7 @@ HMSAudioPlugin
### addPluginToVideoTrack
-▸ **addPluginToVideoTrack**(`plugin`, `pluginFrameRate?`): `Promise`<`void`\>
+▸ **addPluginToVideoTrack**(`plugin`, `pluginFrameRate?`): `Promise`\<`void`\>
Add or remove a video plugin from/to the local peer video track. Eg. Virtual Background, Face Filters etc.
Video plugins can be added/removed at any time after the video track is available.
@@ -170,7 +170,7 @@ pluginFrameRate is the rate at which the output plugin will do processing
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
**`See`**
@@ -180,7 +180,7 @@ HMSVideoPlugin
### addPluginsToVideoStream
-▸ **addPluginsToVideoStream**(`plugins`): `Promise`<`void`\>
+▸ **addPluginsToVideoStream**(`plugins`): `Promise`\<`void`\>
Add video plugins to the local peer video stream. Eg. Virtual Background, Face Filters etc.
Video plugins can be added/removed at any time after the video track is available.
@@ -193,7 +193,7 @@ Video plugins can be added/removed at any time after the video track is availabl
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
**`See`**
@@ -203,7 +203,7 @@ HMSMediaStreamPlugin
### addTrack
-▸ **addTrack**(`track`, `type`): `Promise`<`void`\>
+▸ **addTrack**(`track`, `type`): `Promise`\<`void`\>
You can use the addTrack method to add an auxiliary track(canvas capture, electron screen-share, etc...)
This method adds the track to the local peer's list of auxiliary tracks and publishes it to make it available to remote peers.
@@ -217,7 +217,7 @@ This method adds the track to the local peer's list of auxiliary tracks and publ
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the track is added
@@ -225,7 +225,7 @@ Promise - resolves when the track is added
### attachVideo
-▸ **attachVideo**(`localTrackID`, `videoElement`): `Promise`<`void`\>
+▸ **attachVideo**(`localTrackID`, `videoElement`): `Promise`\<`void`\>
You can use the attach and detach video function
to add/remove video from an element for a track ID. The benefit of using this
@@ -241,7 +241,7 @@ the stream coming from server saving significant bandwidth for the user.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the video is attached
@@ -249,7 +249,7 @@ Promise - resolves when the video is attached
### autoSelectAudioOutput
-▸ **autoSelectAudioOutput**(`delay?`): `Promise`<`void`\>
+▸ **autoSelectAudioOutput**(`delay?`): `Promise`\<`void`\>
An optional delay to add between earpiece and speakerphone selection
Call this after preview or join is successful
@@ -262,19 +262,19 @@ Call this after preview or join is successful
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### cancelMidCallPreview
-▸ **cancelMidCallPreview**(): `Promise`<`void`\>
+▸ **cancelMidCallPreview**(): `Promise`\<`void`\>
stop tracks fetched during midcall preview and general cleanup
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the tracks are stopped
@@ -282,7 +282,7 @@ Promise - resolves when the tracks are stopped
### changeMetadata
-▸ **changeMetadata**(`metadata`): `Promise`<`void`\>
+▸ **changeMetadata**(`metadata`): `Promise`\<`void`\>
If you want to update the metadata of local peer. If an object is passed, it should be serializable using
JSON.stringify.
@@ -295,13 +295,13 @@ JSON.stringify.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### changeName
-▸ **changeName**(`name`): `Promise`<`void`\>
+▸ **changeName**(`name`): `Promise`\<`void`\>
If you want to update the name of peer.
@@ -313,13 +313,13 @@ If you want to update the name of peer.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### changeRole
-▸ **changeRole**(`forPeerId`, `toRole`, `force?`): `Promise`<`void`\>
+▸ **changeRole**(`forPeerId`, `toRole`, `force?`): `Promise`\<`void`\>
Request for a role change of a remote peer. Can be forced.
@@ -333,7 +333,7 @@ Request for a role change of a remote peer. Can be forced.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
**`Deprecated`**
@@ -343,7 +343,7 @@ Use `changeRoleOfPeer`
### changeRoleOfPeer
-▸ **changeRoleOfPeer**(`forPeerId`, `toRole`, `force?`): `Promise`<`void`\>
+▸ **changeRoleOfPeer**(`forPeerId`, `toRole`, `force?`): `Promise`\<`void`\>
Request for a role change of a remote peer. Can be forced.
@@ -357,7 +357,7 @@ Request for a role change of a remote peer. Can be forced.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the role is changed
@@ -365,7 +365,7 @@ Promise - resolves when the role is changed
### changeRoleOfPeersWithRoles
-▸ **changeRoleOfPeersWithRoles**(`roles`, `toRole`): `Promise`<`void`\>
+▸ **changeRoleOfPeersWithRoles**(`roles`, `toRole`): `Promise`\<`void`\>
Request for a role change of a remote peer. Can be forced.
@@ -378,7 +378,7 @@ Request for a role change of a remote peer. Can be forced.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the role is changed
@@ -386,7 +386,7 @@ Promise - resolves when the role is changed
### detachVideo
-▸ **detachVideo**(`localTrackID`, `videoElement`): `Promise`<`void`\>
+▸ **detachVideo**(`localTrackID`, `videoElement`): `Promise`\<`void`\>
#### Parameters
@@ -397,7 +397,7 @@ Promise - resolves when the role is changed
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
**`See`**
@@ -407,13 +407,13 @@ attachVideo
### enableBeamSpeakerLabelsLogging
-▸ **enableBeamSpeakerLabelsLogging**(): `Promise`<`void`\>
+▸ **enableBeamSpeakerLabelsLogging**(): `Promise`\<`void`\>
enable sending audio speaker data to beam
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the speaker data is enabled
@@ -421,7 +421,7 @@ Promise - resolves when the speaker data is enabled
### findPeerByName
-▸ **findPeerByName**(`options`): `Promise`<{ `eof?`: `boolean` ; `offset`: `number` ; `peers`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[] }\>
+▸ **findPeerByName**(`options`): `Promise`\<\{ `eof?`: `boolean` ; `offset`: `number` ; `peers`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[] }\>
#### Parameters
@@ -431,13 +431,13 @@ Promise - resolves when the speaker data is enabled
#### Returns
-`Promise`<{ `eof?`: `boolean` ; `offset`: `number` ; `peers`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[] }\>
+`Promise`\<\{ `eof?`: `boolean` ; `offset`: `number` ; `peers`: [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[] }\>
---
### getAuthTokenByRoomCode
-▸ **getAuthTokenByRoomCode**(`tokenRequest`, `tokenRequestOptions?`): `Promise`<`string`\>
+▸ **getAuthTokenByRoomCode**(`tokenRequest`, `tokenRequestOptions?`): `Promise`\<`string`\>
Get the auth token for the room code. This is useful when you want to join a room using a room code.
@@ -450,7 +450,7 @@ Get the auth token for the room code. This is useful when you want to join a roo
#### Returns
-`Promise`<`string`\>
+`Promise`\<`string`\>
---
@@ -472,7 +472,7 @@ Get the auth token for the room code. This is useful when you want to join a roo
### getPeer
-▸ **getPeer**(`peerId`): `Promise`<`undefined` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
+▸ **getPeer**(`peerId`): `Promise`\<`undefined` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
get the peer object by peerId
@@ -484,7 +484,7 @@ get the peer object by peerId
#### Returns
-`Promise`<`undefined` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
+`Promise`\<`undefined` \| [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
Promise - resolves with the peer object
@@ -563,9 +563,9 @@ Notifications for the ignored messages will still be sent, it'll only not be put
#### Parameters
-| Name | Type | Description |
-| :----- | :------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `data` | `Record`<`string`, `any`\> | full app data object. use this to initialise app data in store. App Data is a small space in the store for UI to keep a few non updating global state fields for easy reference across UI. Note that if the fields are updating at high frequency or there are too many of them, it's recommended to have another UI side store to avoid performance issues. |
+| Name | Type | Description |
+| :----- | :-------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | `Record`\<`string`, `any`\> | full app data object. use this to initialise app data in store. App Data is a small space in the store for UI to keep a few non updating global state fields for easy reference across UI. Note that if the fields are updating at high frequency or there are too many of them, it's recommended to have another UI side store to avoid performance issues. |
#### Returns
@@ -587,7 +587,7 @@ Method to initialize diagnostics. Should only be called after joining.
### join
-▸ **join**(`config`): `Promise`<`void`\>
+▸ **join**(`config`): `Promise`\<`void`\>
join function can be used to join the room, if the room join is successful,
current details of participants and track details are populated in the store.
@@ -600,7 +600,7 @@ current details of participants and track details are populated in the store.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the room is joined
@@ -613,14 +613,14 @@ is ignored
### leave
-▸ **leave**(): `Promise`<`void`\>
+▸ **leave**(): `Promise`\<`void`\>
This function can be used to leave the room, if the call is repeated it's ignored.
This function also cleans up the store and removes all the tracks and participants.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the room is left
@@ -628,13 +628,13 @@ Promise - resolves when the room is left
### lowerLocalPeerHand
-▸ **lowerLocalPeerHand**(): `Promise`<`void`\>
+▸ **lowerLocalPeerHand**(): `Promise`\<`void`\>
lower hand for local peer
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the hand is lowered
@@ -642,7 +642,7 @@ Promise - resolves when the hand is lowered
### lowerRemotePeerHand
-▸ **lowerRemotePeerHand**(`peerId`): `Promise`<`void`\>
+▸ **lowerRemotePeerHand**(`peerId`): `Promise`\<`void`\>
lower hand for remote peer
@@ -654,7 +654,7 @@ lower hand for remote peer
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the hand is lowered
@@ -662,13 +662,13 @@ Promise - resolves when the hand is lowered
### populateSessionMetadata
-▸ **populateSessionMetadata**(): `Promise`<`void`\>
+▸ **populateSessionMetadata**(): `Promise`\<`void`\>
Fetch the current room metadata from the server and populate it in store
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
**`Deprecated`**
@@ -678,7 +678,7 @@ use `actions.sessionStore.observe` instead
### preview
-▸ **preview**(`config`): `Promise`<`void`\>
+▸ **preview**(`config`): `Promise`\<`void`\>
Preview function can be used to preview the camera and microphone before joining the room.
This function is useful when you want to check and/or modify the camera and microphone settings before joining the Room.
@@ -691,7 +691,7 @@ This function is useful when you want to check and/or modify the camera and micr
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the preview is successful
@@ -699,13 +699,13 @@ Promise - resolves when the preview is successful
### raiseLocalPeerHand
-▸ **raiseLocalPeerHand**(): `Promise`<`void`\>
+▸ **raiseLocalPeerHand**(): `Promise`\<`void`\>
raise hand for local peer
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the hand is raised
@@ -713,7 +713,7 @@ Promise - resolves when the hand is raised
### raiseRemotePeerHand
-▸ **raiseRemotePeerHand**(`peerId`): `Promise`<`void`\>
+▸ **raiseRemotePeerHand**(`peerId`): `Promise`\<`void`\>
raise hand for remote peer
@@ -725,7 +725,7 @@ raise hand for remote peer
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the hand is raised
@@ -733,11 +733,11 @@ Promise - resolves when the hand is raised
### refreshDevices
-▸ **refreshDevices**(): `Promise`<`void`\>
+▸ **refreshDevices**(): `Promise`\<`void`\>
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
@@ -761,7 +761,7 @@ Reject pending role change request
### removePeer
-▸ **removePeer**(`peerID`, `reason`): `Promise`<`void`\>
+▸ **removePeer**(`peerID`, `reason`): `Promise`\<`void`\>
If you have **removeOthers** permission, you can remove a peer from the room.
@@ -774,7 +774,7 @@ If you have **removeOthers** permission, you can remove a peer from the room.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the peer is removed
@@ -782,7 +782,7 @@ Promise - resolves when the peer is removed
### removePluginFromAudioTrack
-▸ **removePluginFromAudioTrack**(`plugin`): `Promise`<`void`\>
+▸ **removePluginFromAudioTrack**(`plugin`): `Promise`\<`void`\>
#### Parameters
@@ -792,7 +792,7 @@ Promise - resolves when the peer is removed
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
**`See`**
@@ -802,7 +802,7 @@ addPluginToAudioTrack
### removePluginFromVideoTrack
-▸ **removePluginFromVideoTrack**(`plugin`): `Promise`<`void`\>
+▸ **removePluginFromVideoTrack**(`plugin`): `Promise`\<`void`\>
#### Parameters
@@ -812,7 +812,7 @@ addPluginToAudioTrack
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
**`See`**
@@ -822,7 +822,7 @@ addPluginToVideoTrack
### removePluginsFromVideoStream
-▸ **removePluginsFromVideoStream**(`plugins`): `Promise`<`void`\>
+▸ **removePluginsFromVideoStream**(`plugins`): `Promise`\<`void`\>
Remove video plugins to the local peer video stream. Eg. Virtual Background, Face Filters etc.
Video plugins can be added/removed at any time after the video track is available.
@@ -835,7 +835,7 @@ Video plugins can be added/removed at any time after the video track is availabl
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
**`See`**
@@ -845,7 +845,7 @@ HMSMediaStreamPlugin
### removeTrack
-▸ **removeTrack**(`trackId`): `Promise`<`void`\>
+▸ **removeTrack**(`trackId`): `Promise`\<`void`\>
You can use the removeTrack method to remove an auxiliary track.
This method removes the track from the local peer's list of auxiliary tracks and unpublishes it.
@@ -858,7 +858,7 @@ This method removes the track from the local peer's list of auxiliary tracks and
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the track is removed
@@ -866,7 +866,7 @@ Promise - resolves when the track is removed
### sendBroadcastMessage
-▸ **sendBroadcastMessage**(`message`, `type?`): `Promise`<`void`\>
+▸ **sendBroadcastMessage**(`message`, `type?`): `Promise`\<`void`\>
Send a plain text message to all the other participants in the room.
@@ -879,7 +879,7 @@ Send a plain text message to all the other participants in the room.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the message is sent
@@ -887,7 +887,7 @@ Promise - resolves when the message is sent
### sendDirectMessage
-▸ **sendDirectMessage**(`message`, `peerID`, `type?`): `Promise`<`void`\>
+▸ **sendDirectMessage**(`message`, `peerID`, `type?`): `Promise`\<`void`\>
#### Parameters
@@ -899,7 +899,7 @@ Promise - resolves when the message is sent
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the message is sent
@@ -907,7 +907,7 @@ Promise - resolves when the message is sent
### sendGroupMessage
-▸ **sendGroupMessage**(`message`, `roles`, `type?`): `Promise`<`void`\>
+▸ **sendGroupMessage**(`message`, `roles`, `type?`): `Promise`\<`void`\>
#### Parameters
@@ -919,7 +919,7 @@ Promise - resolves when the message is sent
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the message is sent
@@ -927,7 +927,7 @@ Promise - resolves when the message is sent
### sendHLSTimedMetadata
-▸ **sendHLSTimedMetadata**(`metadataList`): `Promise`<`void`\>
+▸ **sendHLSTimedMetadata**(`metadataList`): `Promise`\<`void`\>
Used to define date range metadata in a media playlist.
This api adds EXT-X-DATERANGE tags to the media playlist.
@@ -954,7 +954,7 @@ sendHLSTimedMetadata(metadataList);
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
@@ -991,11 +991,11 @@ use it for updating a particular property in the appdata
#### Parameters
-| Name | Type | Description |
-| :------- | :------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `key` | `string` | a string. Does not check for existence. If the key is already not a property of the appData, it is added. |
-| `value` | `Record`<`string` \| `number`, `any`\> | value to set for the key. |
-| `merge?` | `boolean` | set it to true if you want to merge the appdata. - Always replaces the value for a given key if this parameter is not explicitly set to true. - Always replaces if the value is anything other than a plain object (i.e) JSON.parse()able. - If set to true on non-plain objects, this is ignored. |
+| Name | Type | Description |
+| :------- | :-------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `key` | `string` | a string. Does not check for existence. If the key is already not a property of the appData, it is added. |
+| `value` | `Record`\<`string` \| `number`, `any`\> | value to set for the key. |
+| `merge?` | `boolean` | set it to true if you want to merge the appdata. - Always replaces the value for a given key if this parameter is not explicitly set to true. - Always replaces if the value is anything other than a plain object (i.e) JSON.parse()able. - If set to true on non-plain objects, this is ignored. |
#### Returns
@@ -1049,7 +1049,7 @@ cases.
### setAudioOutputDevice
-▸ **setAudioOutputDevice**(`deviceId`): `Promise`<`void`\>
+▸ **setAudioOutputDevice**(`deviceId`): `Promise`\<`void`\>
Set the audio output(speaker) device
@@ -1061,7 +1061,7 @@ Set the audio output(speaker) device
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the audio output device is set
@@ -1069,25 +1069,25 @@ Promise - resolves when the audio output device is set
### setAudioSettings
-▸ **setAudioSettings**(`settings`): `Promise`<`void`\>
+▸ **setAudioSettings**(`settings`): `Promise`\<`void`\>
Change settings of the local peer's audio track
#### Parameters
-| Name | Type | Description |
-| :--------- | :--------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------- |
-| `settings` | `Partial`<[`HMSAudioTrackSettings`](/api-reference/javascript/v2/interfaces/HMSAudioTrackSettings)\> | HMSAudioTrackSettings `({ volume, codec, maxBitrate, deviceId, advanced })` |
+| Name | Type | Description |
+| :--------- | :---------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------- |
+| `settings` | `Partial`\<[`HMSAudioTrackSettings`](/api-reference/javascript/v2/interfaces/HMSAudioTrackSettings)\> | HMSAudioTrackSettings `({ volume, codec, maxBitrate, deviceId, advanced })` |
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### setEnabledTrack
-▸ **setEnabledTrack**(`trackId`, `enabled`): `Promise`<`void`\>
+▸ **setEnabledTrack**(`trackId`, `enabled`): `Promise`\<`void`\>
#### Parameters
@@ -1098,7 +1098,7 @@ Change settings of the local peer's audio track
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the track is enabled
@@ -1106,7 +1106,7 @@ Promise - resolves when the track is enabled
### setLocalAudioEnabled
-▸ **setLocalAudioEnabled**(`enabled`): `Promise`<`void`\>
+▸ **setLocalAudioEnabled**(`enabled`): `Promise`\<`void`\>
This function can be used to enable/disable(unmute/mute) local audio track
@@ -1118,7 +1118,7 @@ This function can be used to enable/disable(unmute/mute) local audio track
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the audio is enabled
@@ -1126,7 +1126,7 @@ Promise - resolves when the audio is enabled
### setLocalVideoEnabled
-▸ **setLocalVideoEnabled**(`enabled`): `Promise`<`void`\>
+▸ **setLocalVideoEnabled**(`enabled`): `Promise`\<`void`\>
This function can be used to enable/disable(unmute/mute) local video track
@@ -1138,7 +1138,7 @@ This function can be used to enable/disable(unmute/mute) local video track
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the video is enabled
@@ -1216,7 +1216,7 @@ Method to override the default settings for playlist tracks
### setPreferredLayer
-▸ **setPreferredLayer**(`trackId`, `layer`): `Promise`<`void`\>
+▸ **setPreferredLayer**(`trackId`, `layer`): `Promise`\<`void`\>
set the quality of the selected videoTrack for simulcast.
@@ -1229,7 +1229,7 @@ set the quality of the selected videoTrack for simulcast.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the layer is set
@@ -1237,7 +1237,7 @@ Promise - resolves when the layer is set
### setRemoteTrackEnabled
-▸ **setRemoteTrackEnabled**(`forRemoteTrackID`, `enabled`): `Promise`<`void`\>
+▸ **setRemoteTrackEnabled**(`forRemoteTrackID`, `enabled`): `Promise`\<`void`\>
Change track state a remote peer's track
This can be used to mute/unmute a remote peer's track
@@ -1251,7 +1251,7 @@ This can be used to mute/unmute a remote peer's track
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the track state is changed
@@ -1259,7 +1259,7 @@ Promise - resolves when the track state is changed
### setRemoteTracksEnabled
-▸ **setRemoteTracksEnabled**(`params`): `Promise`<`void`\>
+▸ **setRemoteTracksEnabled**(`params`): `Promise`\<`void`\>
Use this to mute/unmute multiple tracks by source, role or type
@@ -1271,7 +1271,7 @@ Use this to mute/unmute multiple tracks by source, role or type
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the track state is changed
@@ -1279,7 +1279,7 @@ Promise - resolves when the track state is changed
### setScreenShareEnabled
-▸ **setScreenShareEnabled**(`enabled`, `config?`): `Promise`<`void`\>
+▸ **setScreenShareEnabled**(`enabled`, `config?`): `Promise`\<`void`\>
If you want to enable screenshare for the local peer this class can be called.
The store will be populated with the incoming track, and the subscriber(or
@@ -1294,7 +1294,7 @@ react component if our hook is used) will be notified/rerendered
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the screenshare is enabled
@@ -1302,7 +1302,7 @@ Promise - resolves when the screenshare is enabled
### setSessionMetadata
-▸ **setSessionMetadata**(`metadata`): `Promise`<`void`\>
+▸ **setSessionMetadata**(`metadata`): `Promise`\<`void`\>
If you want to update the metadata of the session. If an object is passed, it should be serializable using
JSON.stringify.
@@ -1318,7 +1318,7 @@ till the last peer leaves a room
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
**`Deprecated`**
@@ -1328,25 +1328,25 @@ use `actions.sessionStore.set` instead
### setVideoSettings
-▸ **setVideoSettings**(`settings`): `Promise`<`void`\>
+▸ **setVideoSettings**(`settings`): `Promise`\<`void`\>
Change settings of the local peer's video track
#### Parameters
-| Name | Type | Description |
-| :--------- | :--------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------- |
-| `settings` | `Partial`<[`HMSVideoTrackSettings`](/api-reference/javascript/v2/interfaces/HMSVideoTrackSettings)\> | HMSVideoTrackSettings `({ width, height, codec, maxFramerate, maxBitrate, deviceId, advanced, facingMode })` |
+| Name | Type | Description |
+| :--------- | :---------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------- |
+| `settings` | `Partial`\<[`HMSVideoTrackSettings`](/api-reference/javascript/v2/interfaces/HMSVideoTrackSettings)\> | HMSVideoTrackSettings `({ width, height, codec, maxFramerate, maxBitrate, deviceId, advanced, facingMode })` |
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### setVolume
-▸ **setVolume**(`value`, `trackId?`): `Promise`<`void`\>
+▸ **setVolume**(`value`, `trackId?`): `Promise`\<`void`\>
Set the output volume of audio tracks(overall/particular audio track)
@@ -1359,7 +1359,7 @@ Set the output volume of audio tracks(overall/particular audio track)
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the volume is set
@@ -1367,7 +1367,7 @@ Promise - resolves when the volume is set
### startHLSStreaming
-▸ **startHLSStreaming**(`params?`): `Promise`<`void`\>
+▸ **startHLSStreaming**(`params?`): `Promise`\<`void`\>
If you have configured HLS streaming from dashboard, no params are required.
otherwise
@@ -1380,7 +1380,7 @@ otherwise
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the HLS streaming is started
@@ -1388,7 +1388,7 @@ Promise - resolves when the HLS streaming is started
### startRTMPOrRecording
-▸ **startRTMPOrRecording**(`params`): `Promise`<`void`\>
+▸ **startRTMPOrRecording**(`params`): `Promise`\<`void`\>
If you want to start RTMP streaming or recording.
@@ -1400,7 +1400,7 @@ If you want to start RTMP streaming or recording.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the RTMP streaming and recording is started
@@ -1408,7 +1408,7 @@ Promise - resolves when the RTMP streaming and recording is started
### startTranscription
-▸ **startTranscription**(`params`): `Promise`<`void`\>
+▸ **startTranscription**(`params`): `Promise`\<`void`\>
If you want to start transcriptions(Closed Caption).
@@ -1420,25 +1420,25 @@ If you want to start transcriptions(Closed Caption).
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### stopHLSStreaming
-▸ **stopHLSStreaming**(`params?`): `Promise`<`void`\>
+▸ **stopHLSStreaming**(`params?`): `Promise`\<`void`\>
If you want to stop HLS streaming. The passed in arguments is not considered at the moment, and everything related to HLS is stopped.
#### Parameters
-| Name | Type | Description |
-| :-------- | :--------------------------------------------------------------- | :---------------------------------------------------- |
-| `params?` | [`HLSConfig`](/api-reference/javascript/v2/interfaces/HLSConfig) | HLSConfig - HLSConfig object with the required fields |
+| Name | Type | Description |
+| :-------- | :-------------- | :---------------------------------------------------- |
+| `params?` | `StopHLSConfig` | HLSConfig - HLSConfig object with the required fields |
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the HLS streaming is stopped
@@ -1446,13 +1446,13 @@ Promise - resolves when the HLS streaming is stopped
### stopRTMPAndRecording
-▸ **stopRTMPAndRecording**(): `Promise`<`void`\>
+▸ **stopRTMPAndRecording**(): `Promise`\<`void`\>
If you want to stop both RTMP streaming and recording.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the RTMP streaming and recording is stopped
@@ -1460,7 +1460,7 @@ Promise - resolves when the RTMP streaming and recording is stopped
### stopTranscription
-▸ **stopTranscription**(`params`): `Promise`<`void`\>
+▸ **stopTranscription**(`params`): `Promise`\<`void`\>
If you want to stop transcriptions(Closed Caption).
@@ -1472,13 +1472,13 @@ If you want to stop transcriptions(Closed Caption).
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### submitSessionFeedback
-▸ **submitSessionFeedback**(`feedback`, `eventEndpoint?`): `Promise`<`void`\>
+▸ **submitSessionFeedback**(`feedback`, `eventEndpoint?`): `Promise`\<`void`\>
After leave send feedback to backend for call quality purpose.
@@ -1491,7 +1491,7 @@ After leave send feedback to backend for call quality purpose.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the feedback is submitted
@@ -1499,18 +1499,37 @@ Promise - resolves when the feedback is submitted
### switchCamera
-▸ **switchCamera**(): `Promise`<`void`\>
+▸ **switchCamera**(): `Promise`\<`void`\>
Toggle the camera between front and back if the both the camera's exist
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
Promise - resolves when the camera is toggled
---
+### updateTranscriptionConfig
+
+▸ **updateTranscriptionConfig**(`params`): `Promise`\<`void`\>
+
+Update transcription config for a running session.
+Use this to enable/disable translation or change the transcription language mid-session.
+
+#### Parameters
+
+| Name | Type |
+| :------- | :-------------------------- |
+| `params` | `TranscriptionConfigUpdate` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+---
+
### validateAudioPluginSupport
▸ **validateAudioPluginSupport**(`plugin`): [`HMSPluginSupportResult`](/api-reference/javascript/v2/interfaces/HMSPluginSupportResult)
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSAudioPlugin.md b/docs/api-reference/javascript/v2/interfaces/HMSAudioPlugin.md
index 0e2d0a02d0..90d144f941 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSAudioPlugin.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSAudioPlugin.md
@@ -61,7 +61,7 @@ based on the type of plugin
### init
-▸ **init**(): `void` \| `Promise`<`void`\>
+▸ **init**(): `void` \| `Promise`\<`void`\>
This function will be called in the beginning for initialization which may include tasks like setting up
variables, loading ML models etc. This can be used by a plugin to ensure it's prepared at the time
@@ -69,7 +69,7 @@ processAudio is called.
#### Returns
-`void` \| `Promise`<`void`\>
+`void` \| `Promise`\<`void`\>
---
@@ -87,7 +87,7 @@ processAudio is called.
### processAudioTrack
-▸ **processAudioTrack**(`ctx`, `source`): `Promise`<`AudioNode`\>
+▸ **processAudioTrack**(`ctx`, `source`): `Promise`\<`AudioNode`\>
This function will be called by the SDK for audio track which the plugin needs to process.
The reason audio context is also part of the interface is that it's recommended to reuse on audio context
@@ -102,7 +102,7 @@ instead of creating new for every use - https://developer.mozilla.org/en-US/docs
#### Returns
-`Promise`<`AudioNode`\>
+`Promise`\<`AudioNode`\>
---
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSAudioTrack.md b/docs/api-reference/javascript/v2/interfaces/HMSAudioTrack.md
index 6c63452599..b22ca8d3b8 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSAudioTrack.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSAudioTrack.md
@@ -53,6 +53,22 @@ BaseTrack.id
---
+### interrupted
+
+• `Optional` **interrupted**: `boolean`
+
+only applicable for local tracks - true while the OS or another app has taken the device, eg.
+an incoming call. Cleared once capture is back, however it came back.
+
+Backgrounding the tab on mobile is not reported here: the device is handed back on return. It
+is set on return if the device did not come back.
+
+#### Inherited from
+
+BaseTrack.interrupted
+
+---
+
### isPublished
• `Optional` **isPublished**: `boolean`
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSDeviceChangeEvent.md b/docs/api-reference/javascript/v2/interfaces/HMSDeviceChangeEvent.md
index 3225e7632e..86e85a708a 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSDeviceChangeEvent.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSDeviceChangeEvent.md
@@ -23,7 +23,7 @@ So, `selection?: MediaDeviceInfo` instead of `selection?: InputDeviceInfo | Medi
### selection
-• `Optional` **selection**: `Partial`<`MediaDeviceInfo`\>
+• `Optional` **selection**: `Partial`\<`MediaDeviceInfo`\>
---
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSDiagnosticsConnectivityListener.md b/docs/api-reference/javascript/v2/interfaces/HMSDiagnosticsConnectivityListener.md
index 4fb852256a..9ac74e9cab 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSDiagnosticsConnectivityListener.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSDiagnosticsConnectivityListener.md
@@ -459,6 +459,26 @@ HMSUpdateListener.onSessionStoreUpdate
---
+### onTrackInterruption
+
+▸ `Optional` **onTrackInterruption**(`interruption`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------------- | :------------------------------------------------------------------------------------- |
+| `interruption` | [`HMSTrackInterruption`](/api-reference/javascript/v2/interfaces/HMSTrackInterruption) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+HMSUpdateListener.onTrackInterruption
+
+---
+
### onTrackUpdate
▸ **onTrackUpdate**(`type`, `track`, `peer`): `void`
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSDiagnosticsInterface.md b/docs/api-reference/javascript/v2/interfaces/HMSDiagnosticsInterface.md
index d24d66a319..72cbff81f9 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSDiagnosticsInterface.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSDiagnosticsInterface.md
@@ -31,7 +31,7 @@ nav: '4.23'
### requestPermission
-▸ **requestPermission**(`check`): `Promise`<[`MediaPermissionCheck`](/api-reference/javascript/v2/interfaces/MediaPermissionCheck)\>
+▸ **requestPermission**(`check`): `Promise`\<[`MediaPermissionCheck`](/api-reference/javascript/v2/interfaces/MediaPermissionCheck)\>
#### Parameters
@@ -41,13 +41,13 @@ nav: '4.23'
#### Returns
-`Promise`<[`MediaPermissionCheck`](/api-reference/javascript/v2/interfaces/MediaPermissionCheck)\>
+`Promise`\<[`MediaPermissionCheck`](/api-reference/javascript/v2/interfaces/MediaPermissionCheck)\>
---
### startCameraCheck
-▸ **startCameraCheck**(`inputDevice?`): `Promise`<`void`\>
+▸ **startCameraCheck**(`inputDevice?`): `Promise`\<`void`\>
#### Parameters
@@ -57,13 +57,13 @@ nav: '4.23'
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### startConnectivityCheck
-▸ **startConnectivityCheck**(`progress`, `completed`, `region?`, `duration?`): `Promise`<`void`\>
+▸ **startConnectivityCheck**(`progress`, `completed`, `region?`, `duration?`): `Promise`\<`void`\>
#### Parameters
@@ -76,13 +76,13 @@ nav: '4.23'
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### startMicCheck
-▸ **startMicCheck**(`args`): `Promise`<`void`\>
+▸ **startMicCheck**(`args`): `Promise`\<`void`\>
#### Parameters
@@ -96,7 +96,7 @@ nav: '4.23'
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
@@ -112,11 +112,11 @@ nav: '4.23'
### stopConnectivityCheck
-▸ **stopConnectivityCheck**(): `Promise`<`void`\>
+▸ **stopConnectivityCheck**(): `Promise`\<`void`\>
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSGenericTypes.md b/docs/api-reference/javascript/v2/interfaces/HMSGenericTypes.md
index 39a1e7e26d..4515fcc6f2 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSGenericTypes.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSGenericTypes.md
@@ -7,4 +7,4 @@ nav: '4.27'
### sessionStore
-• **sessionStore**: `Record`<`string`, `any`\>
+• **sessionStore**: `Record`\<`string`, `any`\>
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSLocalTrackStats.md b/docs/api-reference/javascript/v2/interfaces/HMSLocalTrackStats.md
index 1f9e5d6551..76f1228d08 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSLocalTrackStats.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSLocalTrackStats.md
@@ -229,7 +229,7 @@ MissingOutboundStats.qualityLimitationReason
### remote
-• `Optional` **remote**: `RTCRemoteInboundRtpStreamStats` & { `packetsLostRate?`: `number` }
+• `Optional` **remote**: `RTCRemoteInboundRtpStreamStats` & \{ `packetsLostRate?`: `number` }
Stats perceived by the server(SFU) while receiving the local track sent by the peer
Ref:
@@ -268,6 +268,50 @@ MissingOutboundStats.roundTripTime
---
+### sourceFrameHeight
+
+• `Optional` **sourceFrameHeight**: `number`
+
+---
+
+### sourceFrameWidth
+
+• `Optional` **sourceFrameWidth**: `number`
+
+Capture/source stats from `media-source` (camera or screen).
+
+---
+
+### sourceFrames
+
+• `Optional` **sourceFrames**: `number`
+
+---
+
+### sourceFramesDropped
+
+• `Optional` **sourceFramesDropped**: `number`
+
+---
+
+### sourceFramesPerSecond
+
+• `Optional` **sourceFramesPerSecond**: `number`
+
+---
+
+### sourceStatsAvailable
+
+• `Optional` **sourceStatsAvailable**: `boolean`
+
+---
+
+### sourceTimestamp
+
+• `Optional` **sourceTimestamp**: `number`
+
+---
+
### ssrc
• **ssrc**: `number`
@@ -308,6 +352,16 @@ MissingOutboundStats.totalRoundTripTime
---
+### trackIdentifier
+
+• `Optional` **trackIdentifier**: `string`
+
+#### Inherited from
+
+MissingOutboundStats.trackIdentifier
+
+---
+
### transportId
• `Optional` **transportId**: `string`
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSMediaStreamPlugin.md b/docs/api-reference/javascript/v2/interfaces/HMSMediaStreamPlugin.md
index 80c3911994..e14b863133 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSMediaStreamPlugin.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSMediaStreamPlugin.md
@@ -21,6 +21,20 @@ nav: '4.33'
---
+### getMetrics
+
+▸ `Optional` **getMetrics**(): `undefined` \| `Record`\<`string`, `unknown`\>
+
+Optional method to get performance metrics from the plugin.
+
+#### Returns
+
+`undefined` \| `Record`\<`string`, `unknown`\>
+
+metrics object with fps, processing time, etc. or undefined if not supported
+
+---
+
### getName
▸ **getName**(): `string`
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSNotifications.md b/docs/api-reference/javascript/v2/interfaces/HMSNotifications.md
index d60baf2d53..294d1a3173 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSNotifications.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSNotifications.md
@@ -7,7 +7,7 @@ nav: '4.36'
### onNotification
-▸ **onNotification**<`T`\>(`cb`, `types?`): () => `void`
+▸ **onNotification**\<`T`\>(`cb`, `types?`): () => `void`
you can subscribe to notifications for new message, peer add etc. using this function.
note that this is not meant to maintain any state on your side, as the reactive store already
@@ -22,10 +22,10 @@ We'll provide a display message which can be displayed as it is for common cases
#### Parameters
-| Name | Type |
-| :------- | :--------------------------------------------------------------------------------------------------- |
-| `cb` | [`HMSNotificationCallback`](/api-reference/javascript/v2/home/content#hmsnotificationcallback)<`T`\> |
-| `types?` | `T` |
+| Name | Type |
+| :------- | :---------------------------------------------------------------------------------------------------- |
+| `cb` | [`HMSNotificationCallback`](/api-reference/javascript/v2/home/content#hmsnotificationcallback)\<`T`\> |
+| `types?` | `T` |
#### Returns
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSPeerListIterator.md b/docs/api-reference/javascript/v2/interfaces/HMSPeerListIterator.md
index e292b1dddb..631f4ed06a 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSPeerListIterator.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSPeerListIterator.md
@@ -7,11 +7,11 @@ nav: '4.38'
### findPeers
-▸ **findPeers**(): `Promise`<[`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
+▸ **findPeers**(): `Promise`\<[`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
#### Returns
-`Promise`<[`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
+`Promise`\<[`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
---
@@ -37,8 +37,8 @@ nav: '4.38'
### next
-▸ **next**(): `Promise`<[`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
+▸ **next**(): `Promise`\<[`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
#### Returns
-`Promise`<[`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
+`Promise`\<[`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)[]\>
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSPeerStats.md b/docs/api-reference/javascript/v2/interfaces/HMSPeerStats.md
index e8d3b912fd..d30535b08d 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSPeerStats.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSPeerStats.md
@@ -7,10 +7,10 @@ nav: '4.42'
### publish
-• `Optional` **publish**: `RTCIceCandidatePairStats` & { `bitrate`: `number` }
+• `Optional` **publish**: `RTCIceCandidatePairStats` & \{ `bitrate`: `number` ; `localCandidate?`: `HMSIceCandidateStats` ; `remoteCandidate?`: `HMSIceCandidateStats` } & \{ `outboundRtpBytesSent?`: `number` }
---
### subscribe
-• `Optional` **subscribe**: `RTCIceCandidatePairStats` & { `bitrate`: `number` ; `jitter`: `number` ; `packetsLost`: `number` ; `packetsLostRate`: `number` }
+• `Optional` **subscribe**: `RTCIceCandidatePairStats` & \{ `bitrate`: `number` ; `localCandidate?`: `HMSIceCandidateStats` ; `remoteCandidate?`: `HMSIceCandidateStats` } & \{ `jitter`: `number` ; `packetsLost`: `number` ; `packetsLostRate`: `number` }
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSPlaylist.md b/docs/api-reference/javascript/v2/interfaces/HMSPlaylist.md
index 66b3d06774..9a721de538 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSPlaylist.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSPlaylist.md
@@ -17,14 +17,14 @@ nav: '4.44'
#### Type declaration
-| Name | Type |
-| :------------- | :------------------------------------------------------------------------------------------------------ |
-| `currentTime` | `number` |
-| `list` | `Record`<`string`, [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)<`T`\>\> |
-| `playbackRate` | `number` |
-| `progress` | `number` |
-| `selection` | [`HMSPlaylistSelection`](/api-reference/javascript/v2/interfaces/HMSPlaylistSelection) |
-| `volume` | `number` |
+| Name | Type |
+| :------------- | :-------------------------------------------------------------------------------------------------------- |
+| `currentTime` | `number` |
+| `list` | `Record`\<`string`, [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)\<`T`\>\> |
+| `playbackRate` | `number` |
+| `progress` | `number` |
+| `selection` | [`HMSPlaylistSelection`](/api-reference/javascript/v2/interfaces/HMSPlaylistSelection) |
+| `volume` | `number` |
---
@@ -34,11 +34,11 @@ nav: '4.44'
#### Type declaration
-| Name | Type |
-| :------------- | :------------------------------------------------------------------------------------------------------ |
-| `currentTime` | `number` |
-| `list` | `Record`<`string`, [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)<`T`\>\> |
-| `playbackRate` | `number` |
-| `progress` | `number` |
-| `selection` | [`HMSPlaylistSelection`](/api-reference/javascript/v2/interfaces/HMSPlaylistSelection) |
-| `volume` | `number` |
+| Name | Type |
+| :------------- | :-------------------------------------------------------------------------------------------------------- |
+| `currentTime` | `number` |
+| `list` | `Record`\<`string`, [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)\<`T`\>\> |
+| `playbackRate` | `number` |
+| `progress` | `number` |
+| `selection` | [`HMSPlaylistSelection`](/api-reference/javascript/v2/interfaces/HMSPlaylistSelection) |
+| `volume` | `number` |
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSPlaylistItemNotification.md b/docs/api-reference/javascript/v2/interfaces/HMSPlaylistItemNotification.md
index ca3b3c5aa5..b07c0c97e6 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSPlaylistItemNotification.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSPlaylistItemNotification.md
@@ -19,7 +19,7 @@ nav: '4.46'
### data
-• **data**: [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)<`T`\>
+• **data**: [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)\<`T`\>
---
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSPlaylistSelector.md b/docs/api-reference/javascript/v2/interfaces/HMSPlaylistSelector.md
index f4a35a50eb..ab184e8936 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSPlaylistSelector.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSPlaylistSelector.md
@@ -9,7 +9,7 @@ Helpful selectors for audio and video playlist
### currentTime
-• **currentTime**: (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>) => `number`
+• **currentTime**: (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>) => `number`
#### Type declaration
@@ -19,9 +19,9 @@ returns the current time of the playlist in seconds
##### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
##### Returns
@@ -31,11 +31,11 @@ returns the current time of the playlist in seconds
### list
-• **list**: (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>) => [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)<`T`\>[]
+• **list**: \(`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>) => [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)\<`T`\>[]
#### Type declaration
-▸ <`T`\>(`store`): [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)<`T`\>[]
+▸ \<`T`\>(`store`): [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)\<`T`\>[]
returns the playlist items list as set initially
@@ -47,19 +47,19 @@ returns the playlist items list as set initially
##### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
##### Returns
-[`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)<`T`\>[]
+[`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)\<`T`\>[]
---
### playbackRate
-• **playbackRate**: (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>) => `number`
+• **playbackRate**: (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>) => `number`
#### Type declaration
@@ -69,9 +69,9 @@ returns the playback rate, a number between 0.25-2.0.
##### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
##### Returns
@@ -81,7 +81,7 @@ returns the playback rate, a number between 0.25-2.0.
### progress
-• **progress**: (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>) => `number`
+• **progress**: (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>) => `number`
#### Type declaration
@@ -91,9 +91,9 @@ returns the current progress percentage, a number between 0-100
##### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
##### Returns
@@ -103,11 +103,11 @@ returns the current progress percentage, a number between 0-100
### selectedItem
-• **selectedItem**: (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>) => [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)<`T`\>
+• **selectedItem**: \(`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>) => [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)\<`T`\>
#### Type declaration
-▸ <`T`\>(`store`): [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)<`T`\>
+▸ \<`T`\>(`store`): [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)\<`T`\>
This returns playlist item for corresponding Id in selection
@@ -119,19 +119,19 @@ This returns playlist item for corresponding Id in selection
##### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
##### Returns
-[`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)<`T`\>
+[`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)\<`T`\>
---
### selection
-• **selection**: (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>) => [`HMSPlaylistSelection`](/api-reference/javascript/v2/interfaces/HMSPlaylistSelection)
+• **selection**: (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>) => [`HMSPlaylistSelection`](/api-reference/javascript/v2/interfaces/HMSPlaylistSelection)
#### Type declaration
@@ -141,9 +141,9 @@ This returns playlist selection with `{ id, hasNext, hasPrev }`
##### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
##### Returns
@@ -153,7 +153,7 @@ This returns playlist selection with `{ id, hasNext, hasPrev }`
### volume
-• **volume**: (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\>) => `number`
+• **volume**: (`store`: [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\>) => `number`
#### Type declaration
@@ -163,9 +163,9 @@ returns the current volume the playlist is playing at, a number between 0-100
##### Parameters
-| Name | Type |
-| :------ | :-------------------------------------------------------------------------------------------------------------- |
-| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<{ `sessionStore`: `Record`<`string`, `any`\> }\> |
+| Name | Type |
+| :------ | :----------------------------------------------------------------------------------------------------------------- |
+| `store` | [`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<\{ `sessionStore`: `Record`\<`string`, `any`\> }\> |
##### Returns
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSPollCreateParams.md b/docs/api-reference/javascript/v2/interfaces/HMSPollCreateParams.md
index bc07e3489d..74d07cb7c2 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSPollCreateParams.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSPollCreateParams.md
@@ -5,7 +5,7 @@ nav: '4.51'
## Hierarchy
-- `Pick`<[`HMSPoll`](/api-reference/javascript/v2/interfaces/HMSPoll), `"id"` \| `"title"` \| `"type"` \| `"duration"` \| `"anonymous"` \| `"visibility"` \| `"locked"` \| `"mode"` \| `"rolesThatCanVote"` \| `"rolesThatCanViewResponses"`\>
+- `Pick`\<[`HMSPoll`](/api-reference/javascript/v2/interfaces/HMSPoll), `"id"` \| `"title"` \| `"type"` \| `"duration"` \| `"anonymous"` \| `"visibility"` \| `"locked"` \| `"mode"` \| `"rolesThatCanVote"` \| `"rolesThatCanViewResponses"`\>
↳ **`HMSPollCreateParams`**
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSPollQuestionCreateParams.md b/docs/api-reference/javascript/v2/interfaces/HMSPollQuestionCreateParams.md
index bbee8fb9f7..ba737b09e3 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSPollQuestionCreateParams.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSPollQuestionCreateParams.md
@@ -5,7 +5,7 @@ nav: '4.55'
## Hierarchy
-- `Pick`<[`HMSPollQuestion`](/api-reference/javascript/v2/interfaces/HMSPollQuestion), `"text"` \| `"skippable"` \| `"type"` \| `"answer"`\>
+- `Pick`\<[`HMSPollQuestion`](/api-reference/javascript/v2/interfaces/HMSPollQuestion), `"text"` \| `"skippable"` \| `"type"` \| `"answer"`\>
↳ **`HMSPollQuestionCreateParams`**
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSPollQuestionOptionCreateParams.md b/docs/api-reference/javascript/v2/interfaces/HMSPollQuestionOptionCreateParams.md
index 4ff15c07f3..0874bdb5be 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSPollQuestionOptionCreateParams.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSPollQuestionOptionCreateParams.md
@@ -5,7 +5,7 @@ nav: '4.57'
## Hierarchy
-- `Pick`<[`HMSPollQuestionOption`](/api-reference/javascript/v2/interfaces/HMSPollQuestionOption), `"text"` \| `"weight"`\>
+- `Pick`\<[`HMSPollQuestionOption`](/api-reference/javascript/v2/interfaces/HMSPollQuestionOption), `"text"` \| `"weight"`\>
↳ **`HMSPollQuestionOptionCreateParams`**
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSRemoteTrackStats.md b/docs/api-reference/javascript/v2/interfaces/HMSRemoteTrackStats.md
index 5198d8bdb1..e7ccf62352 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSRemoteTrackStats.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSRemoteTrackStats.md
@@ -458,6 +458,16 @@ MissingInboundStats.totalSamplesReceived
---
+### trackIdentifier
+
+• `Optional` **trackIdentifier**: `string`
+
+#### Inherited from
+
+MissingInboundStats.trackIdentifier
+
+---
+
### transportId
• `Optional` **transportId**: `string`
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSRole.md b/docs/api-reference/javascript/v2/interfaces/HMSRole.md
index 76c81174a4..1f2a817697 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSRole.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSRole.md
@@ -17,20 +17,20 @@ nav: '4.66'
#### Type declaration
-| Name | Type |
-| :----------------- | :------------------------------------------------------------------------------------------------------------- |
-| `browserRecording` | `boolean` |
-| `changeRole` | `boolean` |
-| `endRoom` | `boolean` |
-| `hlsStreaming` | `boolean` |
-| `mute` | `boolean` |
-| `pollRead` | `boolean` |
-| `pollWrite` | `boolean` |
-| `removeOthers` | `boolean` |
-| `rtmpStreaming` | `boolean` |
-| `transcriptions?` | `Record`<[`CAPTION`](/api-reference/javascript/v2/enums/HMSTranscriptionMode#caption), `HMSPermissionType`[]\> |
-| `unmute` | `boolean` |
-| `whiteboard?` | `HMSPermissionType`[] |
+| Name | Type |
+| :----------------- | :-------------------------------------------------------------------------------------------------------------- |
+| `browserRecording` | `boolean` |
+| `changeRole` | `boolean` |
+| `endRoom` | `boolean` |
+| `hlsStreaming` | `boolean` |
+| `mute` | `boolean` |
+| `pollRead` | `boolean` |
+| `pollWrite` | `boolean` |
+| `removeOthers` | `boolean` |
+| `rtmpStreaming` | `boolean` |
+| `transcriptions?` | `Record`\<[`CAPTION`](/api-reference/javascript/v2/enums/HMSTranscriptionMode#caption), `HMSPermissionType`[]\> |
+| `unmute` | `boolean` |
+| `whiteboard?` | `HMSPermissionType`[] |
---
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSRoom.md b/docs/api-reference/javascript/v2/interfaces/HMSRoom.md
index 66b0d7fed0..b8d268b822 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSRoom.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSRoom.md
@@ -130,3 +130,11 @@ if this number is available room.peers is not guaranteed to have all the peers.
### transcriptions
• `Optional` **transcriptions**: [`HMSTranscriptionInfo`](/api-reference/javascript/v2/interfaces/HMSTranscriptionInfo)[]
+
+---
+
+### translationConfig
+
+• `Optional` **translationConfig**: `Record`\<[`CAPTION`](/api-reference/javascript/v2/enums/HMSTranscriptionMode#caption), \{ `enabled`: `boolean` ; `roleLanguages?`: `Record`\<`string`, `string`\> }\>
+
+Translation config from template policy. Presence means translation is available.
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack.md b/docs/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack.md
index 833922f285..b3cce9f1ef 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSScreenAudioTrack.md
@@ -51,6 +51,22 @@ nav: '4.70'
---
+### interrupted
+
+• `Optional` **interrupted**: `boolean`
+
+only applicable for local tracks - true while the OS or another app has taken the device, eg.
+an incoming call. Cleared once capture is back, however it came back.
+
+Backgrounding the tab on mobile is not reported here: the device is handed back on return. It
+is set on return if the device did not come back.
+
+#### Inherited from
+
+[HMSAudioTrack](/api-reference/javascript/v2/interfaces/HMSAudioTrack).[interrupted](/api-reference/javascript/v2/interfaces/HMSAudioTrack#interrupted)
+
+---
+
### isPublished
• `Optional` **isPublished**: `boolean`
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack.md b/docs/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack.md
index 41ab81fc40..426d612f44 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSScreenVideoTrack.md
@@ -5,7 +5,7 @@ nav: '4.72'
## Hierarchy
-- `Omit`<[`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack), `"facingMode"`\>
+- `Omit`\<[`HMSVideoTrack`](/api-reference/javascript/v2/interfaces/HMSVideoTrack), `"facingMode"`\>
↳ **`HMSScreenVideoTrack`**
@@ -87,6 +87,22 @@ Omit.id
---
+### interrupted
+
+• `Optional` **interrupted**: `boolean`
+
+only applicable for local tracks - true while the OS or another app has taken the device, eg.
+an incoming call. Cleared once capture is back, however it came back.
+
+Backgrounding the tab on mobile is not reported here: the device is handed back on return. It
+is set on return if the device did not come back.
+
+#### Inherited from
+
+Omit.interrupted
+
+---
+
### isPublished
• `Optional` **isPublished**: `boolean`
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSStatsStore.md b/docs/api-reference/javascript/v2/interfaces/HMSStatsStore.md
index 8fffecc7d7..056b7336bd 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSStatsStore.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSStatsStore.md
@@ -21,16 +21,16 @@ nav: '4.75'
### localTrackStats
-• **localTrackStats**: `Record`<`string`, `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)[]\>
+• **localTrackStats**: `Record`\<`string`, `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)[]\>
---
### peerStats
-• **peerStats**: `Record`<`string`, `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)\>
+• **peerStats**: `Record`\<`string`, `undefined` \| [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)\>
---
### remoteTrackStats
-• **remoteTrackStats**: `Record`<`string`, `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)\>
+• **remoteTrackStats**: `Record`\<`string`, `undefined` \| [`HMSTrackStats`](/api-reference/javascript/v2/interfaces/HMSTrackStats)\>
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSStatsStoreWrapper.md b/docs/api-reference/javascript/v2/interfaces/HMSStatsStoreWrapper.md
index 9de333af02..50532d08b6 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSStatsStoreWrapper.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSStatsStoreWrapper.md
@@ -5,7 +5,7 @@ nav: '4.76'
## Hierarchy
-- `IStoreReadOnly`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
+- `IStoreReadOnly`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
↳ **`HMSStatsStoreWrapper`**
@@ -13,7 +13,7 @@ nav: '4.76'
### getState
-• **getState**: `GetState`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
+• **getState**: `GetState`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
Get a part of store using a selector which is true at the current point of time.
@@ -27,7 +27,7 @@ IStoreReadOnly.getState
### subscribe
-• **subscribe**: `Subscribe`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
+• **subscribe**: `Subscribe`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
Subscribe to a part of store using selectors, whenever the subscribed part changes, the callback
is called with both the latest and previous value of the changed part.
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSStore.md b/docs/api-reference/javascript/v2/interfaces/HMSStore.md
index 8f18a08022..28a197f19b 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSStore.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSStore.md
@@ -5,21 +5,21 @@ nav: '4.77'
## Type parameters
-| Name | Type |
-| :--- | :------------------------------------------------------------------------------------------------------------------------------------ |
-| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = { `sessionStore`: `Record`<`string`, `any`\> } |
+| Name | Type |
+| :--- | :-------------------------------------------------------------------------------------------------------------------------------------- |
+| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = \{ `sessionStore`: `Record`\<`string`, `any`\> } |
## Properties
### appData
-• `Optional` **appData**: `Record`<`string`, `any`\>
+• `Optional` **appData**: `Record`\<`string`, `any`\>
---
### connectionQualities
-• **connectionQualities**: `Record`<`string`, `HMSConnectionQuality`\>
+• **connectionQualities**: `Record`\<`string`, `HMSConnectionQuality`\>
---
@@ -41,28 +41,28 @@ nav: '4.77'
#### Type declaration
-| Name | Type |
-| :------- | :-------------------------------------------------------------------------------------- |
-| `allIDs` | `string`[] |
-| `byID` | `Record`<`string`, [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)\> |
+| Name | Type |
+| :------- | :--------------------------------------------------------------------------------------- |
+| `allIDs` | `string`[] |
+| `byID` | `Record`\<`string`, [`HMSMessage`](/api-reference/javascript/v2/interfaces/HMSMessage)\> |
---
### peers
-• **peers**: `Record`<`string`, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
+• **peers**: `Record`\<`string`, [`HMSPeer`](/api-reference/javascript/v2/interfaces/HMSPeer)\>
---
### playlist
-• **playlist**: [`HMSPlaylist`](/api-reference/javascript/v2/interfaces/HMSPlaylist)<`any`\>
+• **playlist**: [`HMSPlaylist`](/api-reference/javascript/v2/interfaces/HMSPlaylist)\<`any`\>
---
### polls
-• **polls**: `Record`<`string`, [`HMSPoll`](/api-reference/javascript/v2/interfaces/HMSPoll)\>
+• **polls**: `Record`\<`string`, [`HMSPoll`](/api-reference/javascript/v2/interfaces/HMSPoll)\>
---
@@ -89,7 +89,7 @@ nav: '4.77'
### roles
-• **roles**: `Record`<`string`, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>
+• **roles**: `Record`\<`string`, [`HMSRole`](/api-reference/javascript/v2/interfaces/HMSRole)\>
---
@@ -123,22 +123,22 @@ use `sessionStore` instead
### speakers
-• **speakers**: `Record`<`string`, [`HMSSpeaker`](/api-reference/javascript/v2/interfaces/HMSSpeaker)\>
+• **speakers**: `Record`\<`string`, [`HMSSpeaker`](/api-reference/javascript/v2/interfaces/HMSSpeaker)\>
---
### templateAppData
-• **templateAppData**: `Record`<`string`, `string`\>
+• **templateAppData**: `Record`\<`string`, `string`\>
---
### tracks
-• **tracks**: `Record`<`string`, [`HMSTrack`](/api-reference/javascript/v2/home/content#hmstrack)\>
+• **tracks**: `Record`\<`string`, [`HMSTrack`](/api-reference/javascript/v2/home/content#hmstrack)\>
---
### whiteboards
-• **whiteboards**: `Record`<`string`, `HMSWhiteboard`\>
+• **whiteboards**: `Record`\<`string`, `HMSWhiteboard`\>
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSStoreWrapper.md b/docs/api-reference/javascript/v2/interfaces/HMSStoreWrapper.md
index ca03bfdf45..dd5a719a0e 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSStoreWrapper.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSStoreWrapper.md
@@ -16,13 +16,13 @@ Selectors are functions with HMSStore as an argument and returns a part of the s
## Type parameters
-| Name | Type |
-| :--- | :------------------------------------------------------------------------------------------------------------------------------------ |
-| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = { `sessionStore`: `Record`<`string`, `any`\> } |
+| Name | Type |
+| :--- | :-------------------------------------------------------------------------------------------------------------------------------------- |
+| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = \{ `sessionStore`: `Record`\<`string`, `any`\> } |
## Hierarchy
-- `IStoreReadOnly`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<`T`\>\>
+- `IStoreReadOnly`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<`T`\>\>
↳ **`HMSStoreWrapper`**
@@ -30,7 +30,7 @@ Selectors are functions with HMSStore as an argument and returns a part of the s
### getState
-• **getState**: `GetState`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<`T`\>\>
+• **getState**: `GetState`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<`T`\>\>
Get a part of store using a selector which is true at the current point of time.
@@ -44,7 +44,7 @@ IStoreReadOnly.getState
### subscribe
-• **subscribe**: `Subscribe`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<`T`\>\>
+• **subscribe**: `Subscribe`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<`T`\>\>
Subscribe to a part of store using selectors, whenever the subscribed part changes, the callback
is called with both the latest and previous value of the changed part.
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSTrackInterruption.md b/docs/api-reference/javascript/v2/interfaces/HMSTrackInterruption.md
new file mode 100644
index 0000000000..df872428db
--- /dev/null
+++ b/docs/api-reference/javascript/v2/interfaces/HMSTrackInterruption.md
@@ -0,0 +1,40 @@
+---
+title: HMSTrackInterruption
+nav: '4.80'
+---
+
+Emitted when a local track stops/starts producing media because the OS or another app took over
+the device - a phone call or a native voip app.
+
+Only raised for a device the user can do something about: the page is visible and the device is
+really not capturing. Backgrounding the tab on mobile stops the device too, but it is handed back
+on return, so that on its own is not reported - if it does not come back, the interruption is
+raised once the page is visible again.
+
+## Properties
+
+### reason
+
+• **reason**: `string`
+
+what triggered the interruption, eg. track-muted-natively, visibility-change
+
+---
+
+### started
+
+• **started**: `boolean`
+
+true when the interruption starts, false when it ends
+
+---
+
+### trackId
+
+• **trackId**: `string`
+
+---
+
+### type
+
+• **type**: `"audio"` \| `"video"`
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSTrackInterruptionNotification.md b/docs/api-reference/javascript/v2/interfaces/HMSTrackInterruptionNotification.md
new file mode 100644
index 0000000000..3c4dc0031c
--- /dev/null
+++ b/docs/api-reference/javascript/v2/interfaces/HMSTrackInterruptionNotification.md
@@ -0,0 +1,56 @@
+---
+title: HMSTrackInterruptionNotification
+nav: '4.81'
+---
+
+## Hierarchy
+
+- `BaseNotification`
+
+ ↳ **`HMSTrackInterruptionNotification`**
+
+## Properties
+
+### data
+
+• **data**: [`HMSTrackInterruption`](/api-reference/javascript/v2/interfaces/HMSTrackInterruption)
+
+---
+
+### id
+
+• **id**: `number`
+
+#### Inherited from
+
+BaseNotification.id
+
+---
+
+### message
+
+• **message**: `string`
+
+#### Inherited from
+
+BaseNotification.message
+
+---
+
+### severity
+
+• `Optional` **severity**: [`HMSNotificationSeverity`](/api-reference/javascript/v2/enums/HMSNotificationSeverity)
+
+#### Inherited from
+
+BaseNotification.severity
+
+---
+
+### type
+
+• **type**: [`TRACK_INTERRUPTION_START`](/api-reference/javascript/v2/enums/HMSNotificationTypes#track_interruption_start) \| [`TRACK_INTERRUPTION_END`](/api-reference/javascript/v2/enums/HMSNotificationTypes#track_interruption_end)
+
+#### Overrides
+
+BaseNotification.type
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSTrackNotification.md b/docs/api-reference/javascript/v2/interfaces/HMSTrackNotification.md
index 2ac9963298..b1552119f1 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSTrackNotification.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSTrackNotification.md
@@ -1,6 +1,6 @@
---
title: HMSTrackNotification
-nav: '4.80'
+nav: '4.82'
---
## Hierarchy
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSTrackStats.md b/docs/api-reference/javascript/v2/interfaces/HMSTrackStats.md
index dea25dfda1..32227674ba 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSTrackStats.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSTrackStats.md
@@ -1,6 +1,6 @@
---
title: HMSTrackStats
-nav: '4.81'
+nav: '4.83'
---
Extends RTCOutboundRtpStreamStats
@@ -417,7 +417,7 @@ Ref: https://www.w3.org/TR/webrtc-stats/#dom-rtcoutboundrtpstreamstats
### remote
-• `Optional` **remote**: `RTCRemoteInboundRtpStreamStats` & { `packetsLostRate?`: `number` }
+• `Optional` **remote**: `RTCRemoteInboundRtpStreamStats` & \{ `packetsLostRate?`: `number` }
Stats perceived by the server(SFU) while receiving the local track sent by the peer
Ref:
@@ -470,6 +470,78 @@ https://www.w3.org/TR/webrtc-stats/#dom-rtcremoteinboundrtpstreamstats
---
+### sourceFrameHeight
+
+• `Optional` **sourceFrameHeight**: `number`
+
+#### Inherited from
+
+[HMSLocalTrackStats](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats).[sourceFrameHeight](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats#sourceframeheight)
+
+---
+
+### sourceFrameWidth
+
+• `Optional` **sourceFrameWidth**: `number`
+
+Capture/source stats from `media-source` (camera or screen).
+
+#### Inherited from
+
+[HMSLocalTrackStats](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats).[sourceFrameWidth](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats#sourceframewidth)
+
+---
+
+### sourceFrames
+
+• `Optional` **sourceFrames**: `number`
+
+#### Inherited from
+
+[HMSLocalTrackStats](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats).[sourceFrames](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats#sourceframes)
+
+---
+
+### sourceFramesDropped
+
+• `Optional` **sourceFramesDropped**: `number`
+
+#### Inherited from
+
+[HMSLocalTrackStats](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats).[sourceFramesDropped](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats#sourceframesdropped)
+
+---
+
+### sourceFramesPerSecond
+
+• `Optional` **sourceFramesPerSecond**: `number`
+
+#### Inherited from
+
+[HMSLocalTrackStats](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats).[sourceFramesPerSecond](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats#sourceframespersecond)
+
+---
+
+### sourceStatsAvailable
+
+• `Optional` **sourceStatsAvailable**: `boolean`
+
+#### Inherited from
+
+[HMSLocalTrackStats](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats).[sourceStatsAvailable](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats#sourcestatsavailable)
+
+---
+
+### sourceTimestamp
+
+• `Optional` **sourceTimestamp**: `number`
+
+#### Inherited from
+
+[HMSLocalTrackStats](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats).[sourceTimestamp](/api-reference/javascript/v2/interfaces/HMSLocalTrackStats#sourcetimestamp)
+
+---
+
### ssrc
• **ssrc**: `number`
@@ -550,6 +622,16 @@ https://www.w3.org/TR/webrtc-stats/#dom-rtcremoteinboundrtpstreamstats
---
+### trackIdentifier
+
+• `Optional` **trackIdentifier**: `string`
+
+#### Inherited from
+
+[HMSRemoteTrackStats](/api-reference/javascript/v2/interfaces/HMSRemoteTrackStats).[trackIdentifier](/api-reference/javascript/v2/interfaces/HMSRemoteTrackStats#trackidentifier)
+
+---
+
### transportId
• `Optional` **transportId**: `string`
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSTranscriptionInfo.md b/docs/api-reference/javascript/v2/interfaces/HMSTranscriptionInfo.md
index 10e6e3d092..26eb771e40 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSTranscriptionInfo.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSTranscriptionInfo.md
@@ -1,6 +1,6 @@
---
title: HMSTranscriptionInfo
-nav: '4.82'
+nav: '4.84'
---
## Properties
@@ -17,6 +17,14 @@ nav: '4.82'
---
+### language
+
+• `Optional` **language**: `string`
+
+Transcription input language (ISO 639-1/BCP 47, e.g. "en", "hi", "auto")
+
+---
+
### mode
• `Optional` **mode**: [`CAPTION`](/api-reference/javascript/v2/enums/HMSTranscriptionMode#caption)
@@ -41,6 +49,21 @@ nav: '4.82'
---
+### translation
+
+• `Optional` **translation**: `Object`
+
+Translation state — populated when biz broadcasts translation info in room state
+
+#### Type declaration
+
+| Name | Type | Description |
+| :--------------- | :----------------------------- | :---------------------------------------------------------------------------------------------------------------- |
+| `enabled` | `boolean` | Whether translation is currently active |
+| `roleLanguages?` | `Record`\<`string`, `string`\> | Map of role → target language (ISO 639-1/BCP 47). Roles not in this map receive original (untranslated) captions. |
+
+---
+
### updated_at
• `Optional` **updated_at**: `Date`
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSTranscriptionNotification.md b/docs/api-reference/javascript/v2/interfaces/HMSTranscriptionNotification.md
index 92805c253d..e95252a006 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSTranscriptionNotification.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSTranscriptionNotification.md
@@ -1,6 +1,6 @@
---
title: HMSTranscriptionNotification
-nav: '4.83'
+nav: '4.85'
---
## Hierarchy
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSVideoPlugin.md b/docs/api-reference/javascript/v2/interfaces/HMSVideoPlugin.md
index 6bab3aadfc..e8a7fbcc5d 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSVideoPlugin.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSVideoPlugin.md
@@ -1,6 +1,6 @@
---
title: HMSVideoPlugin
-nav: '4.84'
+nav: '4.86'
---
A plugin implementing this interface can be registered with HMSLocalVideoTrack to transform, process or
@@ -62,7 +62,7 @@ HMSVideoPluginType
### init
-▸ **init**(): `Promise`<`void`\>
+▸ **init**(): `Promise`\<`void`\>
This function will be called in the beginning for initialization which may include tasks like setting up
variables, loading ML models etc. This can be used by a plugin to ensure it's prepared at the time
@@ -70,7 +70,7 @@ processVideoFrame is called.
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
@@ -88,7 +88,7 @@ processVideoFrame is called.
### processVideoFrame
-▸ **processVideoFrame**(`input`, `output?`, `skipProcessing?`): `void` \| `Promise`<`void`\>
+▸ **processVideoFrame**(`input`, `output?`, `skipProcessing?`): `void` \| `Promise`\<`void`\>
This function will be called by the SDK for every video frame which the plugin needs to process.
PluginFrameRate - the rate at which the plugin is expected to process the video frames. This is not necessarily
@@ -110,7 +110,7 @@ CPU usage in case of complex processing.
#### Returns
-`void` \| `Promise`<`void`\>
+`void` \| `Promise`\<`void`\>
---
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSVideoTrack.md b/docs/api-reference/javascript/v2/interfaces/HMSVideoTrack.md
index efe16886a1..73e10a8f5d 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSVideoTrack.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSVideoTrack.md
@@ -1,6 +1,6 @@
---
title: HMSVideoTrack
-nav: '4.85'
+nav: '4.87'
---
## Hierarchy
@@ -69,6 +69,22 @@ BaseTrack.id
---
+### interrupted
+
+• `Optional` **interrupted**: `boolean`
+
+only applicable for local tracks - true while the OS or another app has taken the device, eg.
+an incoming call. Cleared once capture is back, however it came back.
+
+Backgrounding the tab on mobile is not reported here: the device is handed back on return. It
+is set on return if the device did not come back.
+
+#### Inherited from
+
+BaseTrack.interrupted
+
+---
+
### isPublished
• `Optional` **isPublished**: `boolean`
diff --git a/docs/api-reference/javascript/v2/interfaces/HMSVideoTrackSettings.md b/docs/api-reference/javascript/v2/interfaces/HMSVideoTrackSettings.md
index 31b1494845..d66437c42f 100644
--- a/docs/api-reference/javascript/v2/interfaces/HMSVideoTrackSettings.md
+++ b/docs/api-reference/javascript/v2/interfaces/HMSVideoTrackSettings.md
@@ -1,6 +1,6 @@
---
title: HMSVideoTrackSettings
-nav: '4.86'
+nav: '4.88'
---
## Properties
diff --git a/docs/api-reference/javascript/v2/interfaces/IHMSPlaylistActions.md b/docs/api-reference/javascript/v2/interfaces/IHMSPlaylistActions.md
index 89208d6a6b..774dadf561 100644
--- a/docs/api-reference/javascript/v2/interfaces/IHMSPlaylistActions.md
+++ b/docs/api-reference/javascript/v2/interfaces/IHMSPlaylistActions.md
@@ -1,35 +1,35 @@
---
title: IHMSPlaylistActions
-nav: '4.87'
+nav: '4.89'
---
## Methods
### clearList
-▸ **clearList**(): `Promise`<`void`\>
+▸ **clearList**(): `Promise`\<`void`\>
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### pause
-▸ **pause**(): `Promise`<`void`\>
+▸ **pause**(): `Promise`\<`void`\>
Pauses current playing item
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### play
-▸ **play**(`id`): `Promise`<`void`\>
+▸ **play**(`id`): `Promise`\<`void`\>
Pass the id of the item to be played
@@ -41,37 +41,37 @@ Pass the id of the item to be played
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### playNext
-▸ **playNext**(): `Promise`<`void`\>
+▸ **playNext**(): `Promise`\<`void`\>
PlayNext
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### playPrevious
-▸ **playPrevious**(): `Promise`<`void`\>
+▸ **playPrevious**(): `Promise`\<`void`\>
PlayPrevious
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### removeItem
-▸ **removeItem**(`id`): `Promise`<`boolean`\>
+▸ **removeItem**(`id`): `Promise`\<`boolean`\>
#### Parameters
@@ -81,7 +81,7 @@ PlayPrevious
#### Returns
-`Promise`<`boolean`\>
+`Promise`\<`boolean`\>
---
@@ -141,7 +141,7 @@ set whether to autoplay next item in playlist after the current one ends
### setList
-▸ **setList**<`T`\>(`list`): `void`
+▸ **setList**\<`T`\>(`list`): `void`
pass list to set playlist
@@ -153,9 +153,9 @@ pass list to set playlist
#### Parameters
-| Name | Type | Description |
-| :----- | :----------------------------------------------------------------------------------- | :---------------- |
-| `list` | [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)<`T`\>[] | of playlist items |
+| Name | Type | Description |
+| :----- | :------------------------------------------------------------------------------------ | :---------------- |
+| `list` | [`HMSPlaylistItem`](/api-reference/javascript/v2/interfaces/HMSPlaylistItem)\<`T`\>[] | of playlist items |
#### Returns
@@ -202,10 +202,10 @@ set volume passing volume
### stop
-▸ **stop**(): `Promise`<`void`\>
+▸ **stop**(): `Promise`\<`void`\>
Stop the current playback and remove the tracks
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
diff --git a/docs/api-reference/javascript/v2/interfaces/IHMSSessionStoreActions.md b/docs/api-reference/javascript/v2/interfaces/IHMSSessionStoreActions.md
index 55a7c8a4a9..454bd3203d 100644
--- a/docs/api-reference/javascript/v2/interfaces/IHMSSessionStoreActions.md
+++ b/docs/api-reference/javascript/v2/interfaces/IHMSSessionStoreActions.md
@@ -1,6 +1,6 @@
---
title: IHMSSessionStoreActions
-nav: '4.88'
+nav: '4.90'
---
## Type parameters
@@ -13,7 +13,7 @@ nav: '4.88'
### observe
-▸ **observe**(`keys`): `Promise`<`void`\>
+▸ **observe**(`keys`): `Promise`\<`void`\>
observe a particular key or set of keys to receive updates of its latest value when its changed
@@ -25,13 +25,13 @@ observe a particular key or set of keys to receive updates of its latest value w
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### set
-▸ **set**<`K`\>(`key`, `value?`): `Promise`<`void`\>
+▸ **set**\<`K`\>(`key`, `value?`): `Promise`\<`void`\>
#### Type parameters
@@ -48,13 +48,13 @@ observe a particular key or set of keys to receive updates of its latest value w
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### unobserve
-▸ **unobserve**(`keys`): `Promise`<`void`\>
+▸ **unobserve**(`keys`): `Promise`\<`void`\>
unobserve a particular key or set of keys to stop receiving updates of its latest value
@@ -66,4 +66,4 @@ unobserve a particular key or set of keys to stop receiving updates of its lates
#### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
diff --git a/docs/api-reference/javascript/v2/interfaces/IHMSStatsStore.md b/docs/api-reference/javascript/v2/interfaces/IHMSStatsStore.md
index cba5df7564..20f8333aee 100644
--- a/docs/api-reference/javascript/v2/interfaces/IHMSStatsStore.md
+++ b/docs/api-reference/javascript/v2/interfaces/IHMSStatsStore.md
@@ -1,11 +1,11 @@
---
title: IHMSStatsStore
-nav: '4.89'
+nav: '4.91'
---
## Hierarchy
-- `IStore`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
+- `IStore`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
↳ **`IHMSStatsStore`**
@@ -23,7 +23,7 @@ IStore.destroy
### getState
-• **getState**: `GetState`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
+• **getState**: `GetState`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
Get a part of store using a selector which is true at the current point of time.
@@ -37,7 +37,7 @@ IStore.getState
### setState
-• **setState**: `SetState`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
+• **setState**: `SetState`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
#### Inherited from
@@ -47,7 +47,7 @@ IStore.setState
### subscribe
-• **subscribe**: `Subscribe`<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
+• **subscribe**: `Subscribe`\<[`HMSStatsStore`](/api-reference/javascript/v2/interfaces/HMSStatsStore)\>
Subscribe to a part of store using selectors, whenever the subscribed part changes, the callback
is called with both the latest and previous value of the changed part.
diff --git a/docs/api-reference/javascript/v2/interfaces/IHMSStore.md b/docs/api-reference/javascript/v2/interfaces/IHMSStore.md
index c550078b20..a49a764a0a 100644
--- a/docs/api-reference/javascript/v2/interfaces/IHMSStore.md
+++ b/docs/api-reference/javascript/v2/interfaces/IHMSStore.md
@@ -1,6 +1,6 @@
---
title: IHMSStore
-nav: '4.90'
+nav: '4.92'
---
HMS Reactive store can be used to subscribe to different parts of the store using selectors
@@ -8,13 +8,13 @@ and get a callback when the value changes.
## Type parameters
-| Name | Type |
-| :--- | :------------------------------------------------------------------------------------------------------------------------------------ |
-| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = { `sessionStore`: `Record`<`string`, `any`\> } |
+| Name | Type |
+| :--- | :-------------------------------------------------------------------------------------------------------------------------------------- |
+| `T` | extends [`HMSGenericTypes`](/api-reference/javascript/v2/interfaces/HMSGenericTypes) = \{ `sessionStore`: `Record`\<`string`, `any`\> } |
## Hierarchy
-- `IStore`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<`T`\>\>
+- `IStore`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<`T`\>\>
↳ **`IHMSStore`**
@@ -32,7 +32,7 @@ IStore.destroy
### getState
-• **getState**: `GetState`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<`T`\>\>
+• **getState**: `GetState`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<`T`\>\>
Get a part of store using a selector which is true at the current point of time.
@@ -46,7 +46,7 @@ IStore.getState
### setState
-• **setState**: `SetState`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<`T`\>\>
+• **setState**: `SetState`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<`T`\>\>
#### Inherited from
@@ -56,7 +56,7 @@ IStore.setState
### subscribe
-• **subscribe**: `Subscribe`<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)<`T`\>\>
+• **subscribe**: `Subscribe`\<[`HMSStore`](/api-reference/javascript/v2/interfaces/HMSStore)\<`T`\>\>
Subscribe to a part of store using selectors, whenever the subscribed part changes, the callback
is called with both the latest and previous value of the changed part.
diff --git a/docs/api-reference/javascript/v2/interfaces/MediaPermissionCheck.md b/docs/api-reference/javascript/v2/interfaces/MediaPermissionCheck.md
index 30a62af877..cf951694f6 100644
--- a/docs/api-reference/javascript/v2/interfaces/MediaPermissionCheck.md
+++ b/docs/api-reference/javascript/v2/interfaces/MediaPermissionCheck.md
@@ -1,6 +1,6 @@
---
title: MediaPermissionCheck
-nav: '4.91'
+nav: '4.93'
---
## Properties
diff --git a/docs/api-reference/javascript/v2/interfaces/MediaServerReport.md b/docs/api-reference/javascript/v2/interfaces/MediaServerReport.md
index 8bf84e0185..cb31e03578 100644
--- a/docs/api-reference/javascript/v2/interfaces/MediaServerReport.md
+++ b/docs/api-reference/javascript/v2/interfaces/MediaServerReport.md
@@ -1,6 +1,6 @@
---
title: MediaServerReport
-nav: '4.92'
+nav: '4.94'
---
## Properties
diff --git a/docs/api-reference/javascript/v2/interfaces/RTMPRecordingConfig.md b/docs/api-reference/javascript/v2/interfaces/RTMPRecordingConfig.md
index 92be667afd..9a59d2273d 100644
--- a/docs/api-reference/javascript/v2/interfaces/RTMPRecordingConfig.md
+++ b/docs/api-reference/javascript/v2/interfaces/RTMPRecordingConfig.md
@@ -1,6 +1,6 @@
---
title: RTMPRecordingConfig
-nav: '4.93'
+nav: '4.95'
---
## Properties
diff --git a/docs/api-reference/javascript/v2/interfaces/ScreenCaptureHandle.md b/docs/api-reference/javascript/v2/interfaces/ScreenCaptureHandle.md
index fc9f07b585..d5f70b83cb 100644
--- a/docs/api-reference/javascript/v2/interfaces/ScreenCaptureHandle.md
+++ b/docs/api-reference/javascript/v2/interfaces/ScreenCaptureHandle.md
@@ -1,6 +1,6 @@
---
title: ScreenCaptureHandle
-nav: '4.94'
+nav: '4.96'
---
## Properties
diff --git a/docs/api-reference/javascript/v2/interfaces/SignallingReport.md b/docs/api-reference/javascript/v2/interfaces/SignallingReport.md
index 944f1c2b89..cdc0293553 100644
--- a/docs/api-reference/javascript/v2/interfaces/SignallingReport.md
+++ b/docs/api-reference/javascript/v2/interfaces/SignallingReport.md
@@ -1,6 +1,6 @@
---
title: SignallingReport
-nav: '4.95'
+nav: '4.97'
---
## Properties
diff --git a/docs/api-reference/javascript/v2/interfaces/TokenRequest.md b/docs/api-reference/javascript/v2/interfaces/TokenRequest.md
index 80563d023f..14625d4ca5 100644
--- a/docs/api-reference/javascript/v2/interfaces/TokenRequest.md
+++ b/docs/api-reference/javascript/v2/interfaces/TokenRequest.md
@@ -1,6 +1,6 @@
---
title: TokenRequest
-nav: '4.96'
+nav: '4.98'
---
## Properties
diff --git a/docs/api-reference/javascript/v2/interfaces/TokenRequestOptions.md b/docs/api-reference/javascript/v2/interfaces/TokenRequestOptions.md
index cdbc71cd90..ef7570b31b 100644
--- a/docs/api-reference/javascript/v2/interfaces/TokenRequestOptions.md
+++ b/docs/api-reference/javascript/v2/interfaces/TokenRequestOptions.md
@@ -1,6 +1,6 @@
---
title: TokenRequestOptions
-nav: '4.97'
+nav: '4.99'
---
## Properties
diff --git a/docs/api-reference/javascript/v2/react-hooks/home/content.md b/docs/api-reference/javascript/v2/react-hooks/home/content.md
index f474e801e2..cfaf3e9371 100644
--- a/docs/api-reference/javascript/v2/react-hooks/home/content.md
+++ b/docs/api-reference/javascript/v2/react-hooks/home/content.md
@@ -82,17 +82,17 @@ only logs the error to the console, and can be overridden for any other behaviou
#### Type declaration
-| Name | Type | Description |
-| :--------- | :------------------------- | :---------------------------------------------------------------------------------- |
-| `metadata` | `Record`<`string`, `any`\> | To filter by particular by metadata. only supports `{ isHandRaised: true }` for now |
-| `role` | `HMSRoleName` | To filter by particular role |
-| `search` | `string` | To filter by name/role (partial match) |
+| Name | Type | Description |
+| :--------- | :-------------------------- | :---------------------------------------------------------------------------------- |
+| `metadata` | `Record`\<`string`, `any`\> | To filter by particular by metadata. only supports `{ isHandRaised: true }` for now |
+| `role` | `HMSRoleName` | To filter by particular role |
+| `search` | `string` | To filter by name/role (partial match) |
## Functions
### HMSRoomProvider
-▸ **HMSRoomProvider**<`T`\>(`«destructured»`): `FunctionComponentElement`<`ProviderProps`<`null` \| `HMSContextProviderProps`\>\>
+▸ **HMSRoomProvider**\<`T`\>(`«destructured»`): `FunctionComponentElement`\<`ProviderProps`\<`null` \| `HMSContextProviderProps`\>\>
top level wrapper for using react sdk hooks. This doesn't have any mandatory arguments, if you are already
initialising the sdk on your side, you can pass in the primitives from there as well to use hooks for
@@ -100,19 +100,19 @@ react part of your code.
#### Type parameters
-| Name | Type |
-| :--- | :------------------------------------------------------------------------- |
-| `T` | extends `HMSGenericTypes` = { `sessionStore`: `Record`<`string`, `any`\> } |
+| Name | Type |
+| :--- | :--------------------------------------------------------------------------- |
+| `T` | extends `HMSGenericTypes` = \{ `sessionStore`: `Record`\<`string`, `any`\> } |
#### Parameters
-| Name | Type |
-| :--------------- | :------------------------------------------------- |
-| `«destructured»` | `PropsWithChildren`<`HMSRoomProviderProps`<`T`\>\> |
+| Name | Type |
+| :--------------- | :--------------------------------------------------- |
+| `«destructured»` | `PropsWithChildren`\<`HMSRoomProviderProps`\<`T`\>\> |
#### Returns
-`FunctionComponentElement`<`ProviderProps`<`null` \| `HMSContextProviderProps`\>\>
+`FunctionComponentElement`\<`ProviderProps`\<`null` \| `HMSContextProviderProps`\>\>
---
@@ -127,7 +127,7 @@ given list of peers and all tracks in the room, get a list of tile objects to sh
| Name | Type | Default value | Description |
| :-------------------------- | :------------------------------- | :------------ | :--------------------------------------------------------------------------------------- |
| `peers` | `HMSPeer`[] | `undefined` | |
-| `tracks` | `Record`<`string`, `HMSTrack`\> | `undefined` | |
+| `tracks` | `Record`\<`string`, `HMSTrack`\> | `undefined` | |
| `includeScreenShareForPeer` | (`peer`: `HMSPeer`) => `boolean` | `undefined` | fn will be called to check whether to include screenShare for the peer in returned tiles |
| `filterNonPublishingPeers` | `boolean` | `true` | by default a peer with no tracks won't be counted towards final tiles |
@@ -186,12 +186,12 @@ An e.g. use of this hook will be to apply box-shadow on parent tile based on aud
#### Parameters
-| Name | Type |
-| :--------------- | :--------------------------------------------------- |
-| `«destructured»` | `Object` |
-| › `getStyle` | (`level`: `number`) => `Record`<`string`, `string`\> |
-| › `ref` | `RefObject`<`any`\> |
-| › `trackId?` | `string` |
+| Name | Type |
+| :--------------- | :---------------------------------------------------- |
+| `«destructured»` | `Object` |
+| › `getStyle` | (`level`: `number`) => `Record`\<`string`, `string`\> |
+| › `ref` | `RefObject`\<`any`\> |
+| › `trackId?` | `string` |
#### Returns
@@ -207,10 +207,10 @@ An e.g. use of this hook will be to apply box-shadow on parent tile based on aud
`Object`
-| Name | Type |
-| :------------------- | :----------------------- |
-| `isMusicModeEnabled` | `boolean` |
-| `toggleMusicMode` | () => `Promise`<`void`\> |
+| Name | Type |
+| :------------------- | :------------------------ |
+| `isMusicModeEnabled` | `boolean` |
+| `toggleMusicMode` | () => `Promise`\<`void`\> |
---
@@ -237,14 +237,14 @@ unblock the browser autoplay block
| Name | Type |
| :------------------ | :--------------------------------------------------------------- |
-| `requestPermission` | () => `Promise`<`void`\> |
+| `requestPermission` | () => `Promise`\<`void`\> |
| `showNotification` | (`title`: `string`, `options?`: `NotificationOptions`) => `void` |
---
### useCustomEvent
-▸ **useCustomEvent**<`T`\>(`«destructured»`): [`useCustomEventResult`](/api-reference/javascript/v2/react-hooks/interfaces/useCustomEventResult)<`T`\>
+▸ **useCustomEvent**\<`T`\>(`«destructured»`): [`useCustomEventResult`](/api-reference/javascript/v2/react-hooks/interfaces/useCustomEventResult)\<`T`\>
A generic function to implement [custom events](https://www.100ms.live/docs/javascript/v2/features/chat#custom-events) in your UI.
The data to be sent to remote is expected to be a serializable JSON. The serialization
@@ -258,13 +258,13 @@ and deserialization is taken care of by the hook.
#### Parameters
-| Name | Type |
-| :--------------- | :----------------------------------------------------------------------------------------------------- |
-| `«destructured»` | [`useCustomEventInput`](/api-reference/javascript/v2/react-hooks/interfaces/useCustomEventInput)<`T`\> |
+| Name | Type |
+| :--------------- | :------------------------------------------------------------------------------------------------------ |
+| `«destructured»` | [`useCustomEventInput`](/api-reference/javascript/v2/react-hooks/interfaces/useCustomEventInput)\<`T`\> |
#### Returns
-[`useCustomEventResult`](/api-reference/javascript/v2/react-hooks/interfaces/useCustomEventResult)<`T`\>
+[`useCustomEventResult`](/api-reference/javascript/v2/react-hooks/interfaces/useCustomEventResult)\<`T`\>
---
@@ -315,17 +315,17 @@ useEmbedShareResult
### useHMSActions
-▸ **useHMSActions**(): `IHMSActions`<{}\>
+▸ **useHMSActions**(): `IHMSActions`\<{}\>
#### Returns
-`IHMSActions`<{}\>
+`IHMSActions`\<{}\>
---
### useHMSNotifications
-▸ **useHMSNotifications**<`T`\>(`type?`): `null` \| `HMSNotificationInCallback`<`T`\>
+▸ **useHMSNotifications**\<`T`\>(`type?`): `null` \| `HMSNotificationInCallback`\<`T`\>
`useHMSNotifications` is a read only hook which gives the latest notification(HMSNotification) received.
@@ -343,13 +343,13 @@ useEmbedShareResult
#### Returns
-`null` \| `HMSNotificationInCallback`<`T`\>
+`null` \| `HMSNotificationInCallback`\<`T`\>
---
### useHMSStatsStore
-▸ **useHMSStatsStore**<`StateSlice`\>(`selector`, `equalityFn?`): `undefined` \| `StateSlice`
+▸ **useHMSStatsStore**\<`StateSlice`\>(`selector`, `equalityFn?`): `undefined` \| `StateSlice`
#### Type parameters
@@ -359,10 +359,10 @@ useEmbedShareResult
#### Parameters
-| Name | Type | Default value |
-| :----------- | :---------------------------------------------- | :------------ |
-| `selector` | `StateSelector`<`HMSStatsStore`, `StateSlice`\> | `undefined` |
-| `equalityFn` | `EqualityChecker`<`StateSlice`\> | `shallow` |
+| Name | Type | Default value |
+| :----------- | :----------------------------------------------- | :------------ |
+| `selector` | `StateSelector`\<`HMSStatsStore`, `StateSlice`\> | `undefined` |
+| `equalityFn` | `EqualityChecker`\<`StateSlice`\> | `shallow` |
#### Returns
@@ -372,7 +372,7 @@ useEmbedShareResult
### useHMSStore
-▸ **useHMSStore**<`StateSlice`\>(`selector`, `equalityFn?`): `StateSlice`
+▸ **useHMSStore**\<`StateSlice`\>(`selector`, `equalityFn?`): `StateSlice`
`useHMSStore` is a read only hook which can be passed a selector to read data.
The hook can only be used in a component if HMSRoomProvider is present in its ancestors.
@@ -385,10 +385,10 @@ The hook can only be used in a component if HMSRoomProvider is present in its an
#### Parameters
-| Name | Type | Default value |
-| :----------- | :---------------------------------------------- | :------------ |
-| `selector` | `StateSelector`<`HMSStore`<{}\>, `StateSlice`\> | `undefined` |
-| `equalityFn` | `EqualityChecker`<`StateSlice`\> | `shallow` |
+| Name | Type | Default value |
+| :----------- | :------------------------------------------------ | :------------ |
+| `selector` | `StateSelector`\<`HMSStore`\<{}\>, `StateSlice`\> | `undefined` |
+| `equalityFn` | `EqualityChecker`\<`StateSlice`\> | `shallow` |
#### Returns
@@ -408,7 +408,7 @@ The hook can only be used in a component if HMSRoomProvider is present in its an
### useHMSVanillaStore
-▸ **useHMSVanillaStore**(): `IHMSReactStore`<`HMSStore`<{}\>\>
+▸ **useHMSVanillaStore**(): `IHMSReactStore`\<`HMSStore`\<{}\>\>
`useHMSVanillaStore` is a read only hook which returns the vanilla HMSStore.
Usage:
@@ -424,7 +424,7 @@ For almost every case, `useHMSStore` would get the job done.
#### Returns
-`IHMSReactStore`<`HMSStore`<{}\>\>
+`IHMSReactStore`\<`HMSStore`\<{}\>\>
---
@@ -460,13 +460,13 @@ usePDFShareResult
`Object`
-| Name | Type |
-| :-------------- | :----------------------- |
-| `hasNext` | () => `boolean` |
-| `loadMorePeers` | () => `Promise`<`void`\> |
-| `loadPeers` | () => `Promise`<`void`\> |
-| `peers` | `HMSPeer`[] |
-| `total` | `number` |
+| Name | Type |
+| :-------------- | :------------------------ |
+| `hasNext` | () => `boolean` |
+| `loadMorePeers` | () => `Promise`\<`void`\> |
+| `loadPeers` | () => `Promise`\<`void`\> |
+| `peers` | `HMSPeer`[] |
+| `total` | `number` |
---
@@ -478,12 +478,12 @@ usePDFShareResult
`Object`
-| Name | Type |
-| :-------------------- | :------------------------------- |
-| `isConnected` | `undefined` \| `boolean` |
-| `participantsByRoles` | `Record`<`string`, `HMSPeer`[]\> |
-| `peerCount` | `number` |
-| `roles` | `string`[] |
+| Name | Type |
+| :-------------------- | :-------------------------------- |
+| `isConnected` | `undefined` \| `boolean` |
+| `participantsByRoles` | `Record`\<`string`, `HMSPeer`[]\> |
+| `peerCount` | `number` |
+| `roles` | `string`[] |
---
@@ -663,12 +663,12 @@ Please check the documentation of input and output types for more details.
`Object`
-| Name | Type |
-| :-------------- | :-------------------------------------- |
-| `endpoint` | `undefined` \| `string` |
-| `isAdmin` | `boolean` |
-| `isOwner` | `boolean` |
-| `open` | `boolean` |
-| `toggle` | `undefined` \| () => `Promise`<`void`\> |
-| `token` | `undefined` \| `string` |
-| `zoomToContent` | `any` |
+| Name | Type |
+| :-------------- | :--------------------------------------- |
+| `endpoint` | `undefined` \| `string` |
+| `isAdmin` | `boolean` |
+| `isOwner` | `boolean` |
+| `open` | `boolean` |
+| `toggle` | `undefined` \| () => `Promise`\<`void`\> |
+| `token` | `undefined` \| `string` |
+| `zoomToContent` | `any` |
diff --git a/docs/api-reference/javascript/v2/react-hooks/interfaces/useAutoplayErrorResult.md b/docs/api-reference/javascript/v2/react-hooks/interfaces/useAutoplayErrorResult.md
index 9085299288..aaed194271 100644
--- a/docs/api-reference/javascript/v2/react-hooks/interfaces/useAutoplayErrorResult.md
+++ b/docs/api-reference/javascript/v2/react-hooks/interfaces/useAutoplayErrorResult.md
@@ -29,14 +29,14 @@ Call this method to reset(hide) the UI that is rendered when there was an error
### unblockAudio
-• **unblockAudio**: () => `Promise`<`void`\>
+• **unblockAudio**: () => `Promise`\<`void`\>
#### Type declaration
-▸ (): `Promise`<`void`\>
+▸ (): `Promise`\<`void`\>
call this method on a UI element click to unblock the blocked audio autoplay.
##### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
diff --git a/docs/api-reference/javascript/v2/react-hooks/interfaces/useDevicesResult.md b/docs/api-reference/javascript/v2/react-hooks/interfaces/useDevicesResult.md
index 9286ed0b37..a34c21735f 100644
--- a/docs/api-reference/javascript/v2/react-hooks/interfaces/useDevicesResult.md
+++ b/docs/api-reference/javascript/v2/react-hooks/interfaces/useDevicesResult.md
@@ -7,7 +7,7 @@ nav: '5.2.6'
### allDevices
-• **allDevices**: `DeviceTypeAndInfo`<`MediaDeviceInfo`[]\>
+• **allDevices**: `DeviceTypeAndInfo`\<`MediaDeviceInfo`[]\>
list of all devices by type
@@ -15,7 +15,7 @@ list of all devices by type
### selectedDeviceIDs
-• **selectedDeviceIDs**: `DeviceTypeAndInfo`<`string`\>
+• **selectedDeviceIDs**: `DeviceTypeAndInfo`\<`string`\>
selected device ids for all types
@@ -23,11 +23,11 @@ selected device ids for all types
### updateDevice
-• **updateDevice**: (`__namedParameters`: { `deviceId`: `string` ; `deviceType`: `DeviceType` }) => `Promise`<`void`\>
+• **updateDevice**: (`__namedParameters`: \{ `deviceId`: `string` ; `deviceType`: `DeviceType` }) => `Promise`\<`void`\>
#### Type declaration
-▸ (`«destructured»`): `Promise`<`void`\>
+▸ (`«destructured»`): `Promise`\<`void`\>
function to call to update device
@@ -41,4 +41,4 @@ function to call to update device
##### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
diff --git a/docs/api-reference/javascript/v2/react-hooks/interfaces/useEmbedShareResult.md b/docs/api-reference/javascript/v2/react-hooks/interfaces/useEmbedShareResult.md
index 25c4121347..719c55f3c5 100644
--- a/docs/api-reference/javascript/v2/react-hooks/interfaces/useEmbedShareResult.md
+++ b/docs/api-reference/javascript/v2/react-hooks/interfaces/useEmbedShareResult.md
@@ -7,7 +7,7 @@ nav: '5.2.7'
### iframeRef
-• **iframeRef**: `RefObject`<`null` \| `HTMLIFrameElement`\>
+• **iframeRef**: `RefObject`\<`null` \| `HTMLIFrameElement`\>
Reference to attach to the iframe that is responsible for rendering the URL passed.
@@ -23,11 +23,11 @@ Flag to check if an embed is currently being shared.
### startEmbedShare
-• **startEmbedShare**: (`value`: `string`) => `Promise`<`void`\>
+• **startEmbedShare**: (`value`: `string`) => `Promise`\<`void`\>
#### Type declaration
-▸ (`value`): `Promise`<`void`\>
+▸ (`value`): `Promise`\<`void`\>
Embed and start sharing a URL.
@@ -45,20 +45,20 @@ It will throw an error in the following scenarios:
##### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### stopEmbedShare
-• **stopEmbedShare**: () => `Promise`<`void`\>
+• **stopEmbedShare**: () => `Promise`\<`void`\>
#### Type declaration
-▸ (): `Promise`<`void`\>
+▸ (): `Promise`\<`void`\>
Stop sharing the embed.
##### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
diff --git a/docs/api-reference/javascript/v2/react-hooks/interfaces/usePDFShareResult.md b/docs/api-reference/javascript/v2/react-hooks/interfaces/usePDFShareResult.md
index be8dbdbf52..ba85d18d0f 100644
--- a/docs/api-reference/javascript/v2/react-hooks/interfaces/usePDFShareResult.md
+++ b/docs/api-reference/javascript/v2/react-hooks/interfaces/usePDFShareResult.md
@@ -7,7 +7,7 @@ nav: '5.2.9'
### iframeRef
-• **iframeRef**: `RefObject`<`null` \| `HTMLIFrameElement`\>
+• **iframeRef**: `RefObject`\<`null` \| `HTMLIFrameElement`\>
Reference to attach to the iframe that is responsible for rendering the PDF.
@@ -23,11 +23,11 @@ Flag to check if PDF sharing is currently in progress.
### startPDFShare
-• **startPDFShare**: (`value`: `string` \| `File`) => `Promise`<`void`\>
+• **startPDFShare**: (`value`: `string` \| `File`) => `Promise`\<`void`\>
#### Type declaration
-▸ (`value`): `Promise`<`void`\>
+▸ (`value`): `Promise`\<`void`\>
Start sharing a PDF file or URL.
It will throw an error in the following scenarios:
@@ -44,20 +44,20 @@ It will throw an error in the following scenarios:
##### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### stopPDFShare
-• **stopPDFShare**: () => `Promise`<`void`\>
+• **stopPDFShare**: () => `Promise`\<`void`\>
#### Type declaration
-▸ (): `Promise`<`void`\>
+▸ (): `Promise`\<`void`\>
Stop sharing the PDF file or URL.
##### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
diff --git a/docs/api-reference/javascript/v2/react-hooks/interfaces/usePaginatedParticipantsResult.md b/docs/api-reference/javascript/v2/react-hooks/interfaces/usePaginatedParticipantsResult.md
index c2c3289975..e99369d491 100644
--- a/docs/api-reference/javascript/v2/react-hooks/interfaces/usePaginatedParticipantsResult.md
+++ b/docs/api-reference/javascript/v2/react-hooks/interfaces/usePaginatedParticipantsResult.md
@@ -21,7 +21,7 @@ nav: '5.2.10'
### loadMorePeers
-• **loadMorePeers**: `Promise`<`void`\>
+• **loadMorePeers**: `Promise`\<`void`\>
this function is to be called when loadPeers is called at least once. This will fetch the next batch of peers
@@ -29,7 +29,7 @@ this function is to be called when loadPeers is called at least once. This will
### loadPeers
-• **loadPeers**: `Promise`<`void`\>
+• **loadPeers**: `Promise`\<`void`\>
call this function to load initial peers and also when you want to poll the peers information
diff --git a/docs/api-reference/javascript/v2/react-hooks/interfaces/useParticipantListResult.md b/docs/api-reference/javascript/v2/react-hooks/interfaces/useParticipantListResult.md
index de94792b3d..9da9f4e8f2 100644
--- a/docs/api-reference/javascript/v2/react-hooks/interfaces/useParticipantListResult.md
+++ b/docs/api-reference/javascript/v2/react-hooks/interfaces/useParticipantListResult.md
@@ -13,7 +13,7 @@ nav: '5.2.11'
### participantsByRoles
-• **participantsByRoles**: `Record`<`string`, `HMSPeer`[]\>
+• **participantsByRoles**: `Record`\<`string`, `HMSPeer`[]\>
---
diff --git a/docs/api-reference/javascript/v2/react-hooks/interfaces/usePreviewResult.md b/docs/api-reference/javascript/v2/react-hooks/interfaces/usePreviewResult.md
index 708ace8947..86130ad40d 100644
--- a/docs/api-reference/javascript/v2/react-hooks/interfaces/usePreviewResult.md
+++ b/docs/api-reference/javascript/v2/react-hooks/interfaces/usePreviewResult.md
@@ -24,30 +24,30 @@ to decide to show between preview form and conferencing component/video tiles.
### join
-• **join**: () => `Promise`<`void`\>
+• **join**: () => `Promise`\<`void`\>
#### Type declaration
-▸ (): `Promise`<`void`\>
+▸ (): `Promise`\<`void`\>
call this function to join the room
##### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
---
### preview
-• **preview**: () => `Promise`<`void`\>
+• **preview**: () => `Promise`\<`void`\>
#### Type declaration
-▸ (): `Promise`<`void`\>
+▸ (): `Promise`\<`void`\>
call this function to join the room
##### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
diff --git a/docs/api-reference/javascript/v2/react-hooks/interfaces/useScreenShareResult.md b/docs/api-reference/javascript/v2/react-hooks/interfaces/useScreenShareResult.md
index 6672957ea8..a33317dab3 100644
--- a/docs/api-reference/javascript/v2/react-hooks/interfaces/useScreenShareResult.md
+++ b/docs/api-reference/javascript/v2/react-hooks/interfaces/useScreenShareResult.md
@@ -49,11 +49,11 @@ In case of multiple screenshares, the behavior of which one is picked is not def
### toggleScreenShare
-• `Optional` **toggleScreenShare**: (`config?`: `HMSScreenShareConfig`) => `Promise`<`void`\>
+• `Optional` **toggleScreenShare**: (`config?`: `HMSScreenShareConfig`) => `Promise`\<`void`\>
#### Type declaration
-▸ (`config?`): `Promise`<`void`\>
+▸ (`config?`): `Promise`\<`void`\>
toggle screenshare for the local user, will only be present if the user has the permission to toggle
@@ -65,4 +65,4 @@ toggle screenshare for the local user, will only be present if the user has the
##### Returns
-`Promise`<`void`\>
+`Promise`\<`void`\>
diff --git a/docs/api-reference/javascript/v2/react-hooks/interfaces/useVideoResult.md b/docs/api-reference/javascript/v2/react-hooks/interfaces/useVideoResult.md
index fd75a1dfa9..23f410aaf4 100644
--- a/docs/api-reference/javascript/v2/react-hooks/interfaces/useVideoResult.md
+++ b/docs/api-reference/javascript/v2/react-hooks/interfaces/useVideoResult.md
@@ -15,7 +15,7 @@ This returns a list of all pages with every page containing the list of all tile
### ref
-• **ref**: `MutableRefObject`<`any`\>
+• **ref**: `MutableRefObject`\<`any`\>
add the ref to the element going to render the video list, this is used to measure the available
space/dimensions in order to calculate the best fit
diff --git a/docs/flutter/v2/how-to-guides/extend-capabilities/live-captions.mdx b/docs/flutter/v2/how-to-guides/extend-capabilities/live-captions.mdx
index 5a88c14525..94ff365267 100644
--- a/docs/flutter/v2/how-to-guides/extend-capabilities/live-captions.mdx
+++ b/docs/flutter/v2/how-to-guides/extend-capabilities/live-captions.mdx
@@ -1,5 +1,5 @@
---
-title: Live Transcription for Conferencing (Closed Captions - Beta)
+title: Live Transcription for Conferencing (Closed Captions)
nav: 13.5
---
@@ -7,12 +7,12 @@ nav: 13.5
## Minimum Requirements
-- Minimum [`hmssdk_flutter`](https://pub.dev/packages/hmssdk_flutter) version required is `1.10.4`
-- Minimum [`hms_room_kit`](https://pub.dev/packages/hms_room_kit) version required is `1.1.4`
+- Minimum [`hmssdk_flutter`](https://pub.dev/packages/hmssdk_flutter) version required is `1.10.4`
+- Minimum [`hms_room_kit`](https://pub.dev/packages/hms_room_kit) version required is `1.1.4`
## How to check if captions are enabled in a room
-To check if WebRTC (not hls) captions are enabled in a room. We can look at the `transcriptions` property in the room data. If any transcriptions
+To check if WebRTC (not hls) captions are enabled in a room. We can look at the `transcriptions` property in the room data. If any transcriptions
with mode as `caption` and are in a `started` state, it means captions are enabled.
```dart
@@ -51,7 +51,7 @@ class Meeting implements HMSUpdateListener {
HMSTranscriptionState.started) {
///Captions are enabled in the room
isTranscriptionEnabled = true;
- }
+ }
else if(room.transcriptions?[index].state ==
HMSTranscriptionState.stopped){
///Captions are disabled in the room
@@ -73,7 +73,7 @@ class Meeting implements HMSUpdateListener {
## How to get transcripts
To get the transcripts, we can implement the `onTranscripts` method of `HMSTranscriptListener`. To start getting the transcripts,
-we need to call HMSTranscriptionController's `startTranscription` method.
+we need to call HMSTranscriptionController's `startTranscription` method.
@@ -158,7 +158,7 @@ class HMSTranscription {
final String? peerName;
final bool isFinal;
-}
+}
```
### Step 3: To stop getting transcriptions, remove HMSTranscriptListener
@@ -180,7 +180,7 @@ class Meeting implements HMSUpdateListener,HMSTranscriptListener {
## How to start/stop transcriptions
-Transcriptions can only be started or stopped by the peer having admin permissions. Transcription permissions can be changed from [100ms dashboard](https://dashboard.100ms.live/).
+Transcriptions can only be started or stopped by the peer having admin permissions. Transcription permissions can be changed from [100ms dashboard](https://dashboard.100ms.live/).
HMSSDK provides `HMSTranscriptionController` to control transcription.
### Start Transcription
@@ -203,7 +203,7 @@ class Meeting implements HMSUpdateListener,HMSTranscriptListener {
HMSTranscriptionState.started) {
///Captions are enabled in the room
isTranscriptionEnabled = true;
- }
+ }
else if(room.transcriptions?[index].state ==
HMSTranscriptionState.stopped){
///Captions are disabled in the room
@@ -243,8 +243,7 @@ class Meeting implements HMSUpdateListener,HMSTranscriptListener {
```
After calling `startTranscription` method, `onRoomUpdate` will be fired with `HMSRoomUpdate.transcriptionsUpdated` event.
-First update will be with `HMSTranscriptionState.initialized` and then `HMSTranscriptionState.started` state.
-
+First update will be with `HMSTranscriptionState.initialized` and then `HMSTranscriptionState.started` state.
### Stop Transcription
@@ -268,7 +267,7 @@ class Meeting implements HMSUpdateListener,HMSTranscriptListener {
HMSTranscriptionState.started) {
///Captions are enabled in the room
isTranscriptionEnabled = true;
- }
+ }
else if(room.transcriptions?[index].state ==
HMSTranscriptionState.stopped){
///Captions are disabled in the room
@@ -305,5 +304,5 @@ class Meeting implements HMSUpdateListener,HMSTranscriptListener {
}
```
-After calling `stopTranscription` method, `onRoomUpdate` will be fired with `HMSRoomUpdate.transcriptionsUpdated` event.
-Update will be fired with `HMSTranscriptionState.stopped` state.
\ No newline at end of file
+After calling `stopTranscription` method, `onRoomUpdate` will be fired with `HMSRoomUpdate.transcriptionsUpdated` event.
+Update will be fired with `HMSTranscriptionState.stopped` state.
diff --git a/docs/flutter/v2/how-to-guides/extend-capabilities/virtual-background.mdx b/docs/flutter/v2/how-to-guides/extend-capabilities/virtual-background.mdx
index 117fbf77c6..6f00a21f77 100644
--- a/docs/flutter/v2/how-to-guides/extend-capabilities/virtual-background.mdx
+++ b/docs/flutter/v2/how-to-guides/extend-capabilities/virtual-background.mdx
@@ -1,5 +1,5 @@
---
-title: Virtual Background Plugin (Beta)
+title: Virtual Background Plugin
nav: 13.4
---
@@ -16,9 +16,9 @@ Virtual Background plugin helps customise one’s background by replacing the ba
## Limitations
-- Has poor fps on older android phones
-- Minimum iOS version required to support Virtual Background plugin is `iOS 15`
-- Virtual background plugin is in beta stage and may have performance issues on iPhone X, 8, 7, 6 and other older devices. We recommend that you use this feature on a high performance device for smooth experience.
+- Has poor fps on older android phones
+- Minimum iOS version required to support Virtual Background plugin is `iOS 16`
+- Virtual background plugin may have performance issues on older iPhone devices. We recommend that you use this feature on a high performance device for smooth experience.
## Add dependency
diff --git a/docs/flutter/v2/release-notes/release-notes.mdx b/docs/flutter/v2/release-notes/release-notes.mdx
index 63771d0fdc..792bd50167 100644
--- a/docs/flutter/v2/release-notes/release-notes.mdx
+++ b/docs/flutter/v2/release-notes/release-notes.mdx
@@ -5,32 +5,110 @@ nav: 99
# Latest Versions
-| Package | Version |
-| -------------- | ------------------------------------------------------------------------------------------------------ |
-| hms_room_kit | [](https://pub.dev/packages/hms_room_kit) |
-| hmssdk_flutter | [](https://pub.dev/packages/hmssdk_flutter) |
+| Package | Version |
+| ---------------- | ---------------------------------------------------------------------------------------------------------- |
+| hms_room_kit | [](https://pub.dev/packages/hms_room_kit) |
+| hmssdk_flutter | [](https://pub.dev/packages/hmssdk_flutter) |
| hms_video_plugin | [](https://pub.dev/packages/hms_video_plugin) |
+# 1.11.1 - 2026-04-10
+
+| Package | Version |
+| ---------------- | ------- |
+| hms_room_kit | 1.2.1 |
+| hmssdk_flutter | 1.11.1 |
+| hms_video_plugin | 0.1.0 |
+
+## What's New
+
+### Bluetooth Audio Device Support on Android 12+
+
+- Fixed Bluetooth audio devices not appearing in `getAudioDevicesList()` on Android 12+.
+- Bluetooth permission is now requested alongside camera and microphone on Android 12+ devices.
+- Updated native Android SDK to 2.9.83.
+
+
+# 1.11.0 - 2025-10-29
+
+| Package | Version |
+| ---------------- | ------- |
+| hms_room_kit | 1.2.0 |
+| hmssdk_flutter | 1.11.0 |
+| hms_video_plugin | 0.1.0 |
+
+## Breaking Changes
+
+⚠️ **This release includes important breaking changes to ensure compliance with Google Play's Android 16KB page size requirement.**
+
+### Minimum Version Requirements
+
+- **Flutter:** Minimum version upgraded to 3.24.0 (Recommended: 3.27.x)
+
+ Applications must now use Flutter 3.24.0 or higher. For optimal performance and compatibility, Flutter 3.27.x is recommended.
+
+- **Android API Level:** Minimum increased from API 21 to API 24 (Android 7.0)
+
+ The minimum supported Android version is now Android 7.0 (Nougat, API level 24). Recommended target is API 35 (Android 15).
+
+- **iOS Platform:** Minimum version upgraded to iOS 16.0
+
+ Applications must now target iOS 16.0 or higher as the minimum deployment target.
+
+- **Architecture Support:** Migrated to 64-bit only architectures
+
+ Support is now limited to 64-bit architectures only:
+
+ - Android: arm64-v8a and x86_64 only (32-bit architectures removed)
+ - iOS: arm64 only
+
+### Build Tools & Dependencies Updated
+
+- **Android Gradle Plugin (AGP):** Upgraded to 8.9.0
+- **Gradle:** Updated to 8.11.1
+- **Kotlin:** Updated to 2.1.10
+- **Android NDK:** Updated to r28 (28.0.12674087)
+
+## What's New
+
+### Android 16KB Page Size Support
+
+Added full support for Android devices with 16KB memory page sizes, ensuring optimal performance on modern Android devices and maintaining Google Play Store compliance.
+
+This change ensures your application will:
+
+- Run smoothly on next-generation Android devices
+- Meet Google Play's new requirements
+- Maintain optimal performance across all supported Android versions
+
+### Documentation & Examples
+
+- Added comprehensive Android Build Requirements documentation
+- Updated all sample applications with consistent build configurations
+- Updated dependencies across all packages and examples to ensure compatibility
+
+Uses Android SDK 2.9.78 & iOS SDK 1.17.0
+
+**Full Changelog**: [1.10.6...1.11.0](https://github.com/100mslive/100ms-flutter/compare/1.10.6...1.11.0)
+
# 1.10.6 - 2024-09-17
-| Package | Version |
-| ----------------------------| ------ |
-| hms_room_kit | 1.1.6 |
-| hmssdk_flutter | 1.10.6 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.1.6 |
+| hmssdk_flutter | 1.10.6 |
### Breaking Changes in hms_room_kit
-- Removed Noise Cancellation dependency from Prebuilt on Android
+- Removed Noise Cancellation dependency from Prebuilt on Android
Noise Cancellation dependency is removed from Prebuilt on Android.
Users will have to add the dependency manually in their Android project to use Noise Cancellation.
This change is made to reduce the size of the Prebuilt package.
Refer to the [Noise Cancellation](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/noise-cancellation) documentation for more details.
-
### hmssdk_flutter
-- Added Camera Zoom Controls in `HMSCameraControls`
+- Added Camera Zoom Controls in `HMSCameraControls`
Users can now control the camera zoom using the `HMSCameraControls` class. The `setZoom` method can be used to set the zoom level of the camera.
@@ -38,17 +116,17 @@ nav: 99
### hms_room_kit
-- Added support to control Automatic Gain Control and Noise Suppresion in Prebuilt
+- Added support to control Automatic Gain Control and Noise Suppresion in Prebuilt
Prebuilt now supports toggling Automatic Gain Control (AGC) and Noise Suppresion for better audio quality. Users can enable or disable AGC and Noise Suppresion from the prebuilt interface.
-- Resolved an issue where the Prebuilt UI was not updating on performing End Session
+- Resolved an issue where the Prebuilt UI was not updating on performing End Session
-- Hand Raise sorting based on Time
+- Hand Raise sorting based on Time
Hand Raise list is now sorted based on the time of raising the hand. Refer to the [Hand Raise](https://www.100ms.live/docs/flutter/v2/how-to-guides/interact-with-room/peer/large-room) documentation for more details.
-- Added support to perform Switch Role of any user on Prebuilt
+- Added support to perform Switch Role of any user on Prebuilt
Users can now switch the role of any user, if they have necessary permissions, from the Prebuilt interface. Refer to the [Change Role](https://www.100ms.live/docs/flutter/v2/how-to-guides/interact-with-room/peer/change-role) documentation for more details.
@@ -58,16 +136,16 @@ Uses Android SDK 2.9.67 & iOS SDK 1.16.1
# 1.10.5 - 2024-07-25
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.1.5 |
-| hmssdk_flutter | 1.10.5 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.1.5 |
+| hmssdk_flutter | 1.10.5 |
### hms_room_kit
-- Noise Cancellation initial state customisation
+- Noise Cancellation initial state customisation
- Noise cancellation initial state can now be customised from the prebuilt customiser.
+ Noise cancellation initial state can now be customised from the prebuilt customiser.
Uses Android SDK 2.9.64 & iOS SDK 1.15.0
@@ -75,25 +153,25 @@ Uses Android SDK 2.9.64 & iOS SDK 1.15.0
## 1.10.4 - 2024-07-01
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.1.4 |
-| hmssdk_flutter | 1.10.4|
-| hms_video_plugin | 0.0.2 |
+| Package | Version |
+| ---------------- | ------- |
+| hms_room_kit | 1.1.4 |
+| hmssdk_flutter | 1.10.4 |
+| hms_video_plugin | 0.0.2 |
### hmssdk_flutter
-- Live Transcription in webRTC calls
+- Live Transcription in webRTC calls
- HMSSDK now provides support for transcription in webRTC calls. You can now start/stop transcription using `HMSTranscriptionController` methods. HMSSDK provides also provides callbacks for transcription start/stop events. Learn more about it [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/live-captions)
+ HMSSDK now provides support for transcription in webRTC calls. You can now start/stop transcription using `HMSTranscriptionController` methods. HMSSDK provides also provides callbacks for transcription start/stop events. Learn more about it [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/live-captions)
-- Applications no longer need to request permissions for camera, microphone etc. HMSSDK handles the permissions internally. Checkout the [permissions guide](https://www.100ms.live/docs/flutter/v2/quickstart/quickstart#add-permissions)
+- Applications no longer need to request permissions for camera, microphone etc. HMSSDK handles the permissions internally. Checkout the [permissions guide](https://www.100ms.live/docs/flutter/v2/quickstart/quickstart#add-permissions)
### hms_room_kit
-- Introducing live transcription options in prebuilt
+- Introducing live transcription options in prebuilt
- Prebuilt now supports live transcription for better accessibility. Users can enable or disable live transcription from the prebuilt interface.
+ Prebuilt now supports live transcription for better accessibility. Users can enable or disable live transcription from the prebuilt interface.
Uses Android SDK 2.9.59 & iOS SDK 1.12.0
@@ -101,25 +179,24 @@ Uses Android SDK 2.9.59 & iOS SDK 1.12.0
## 1.10.3 - 2024-06-12
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.1.3 |
-| hmssdk_flutter | 1.10.3 |
-| hms_video_plugin | 0.0.1 |
-
+| Package | Version |
+| ---------------- | ------- |
+| hms_room_kit | 1.1.3 |
+| hmssdk_flutter | 1.10.3 |
+| hms_video_plugin | 0.0.1 |
### hms_room_kit
-- Hand Raise can now be controlled from dashboard
+- Hand Raise can now be controlled from dashboard
- Hand Raise feature can now be enabled or disabled from the dashboard prebuilt customiser.
+ Hand Raise feature can now be enabled or disabled from the dashboard prebuilt customiser.
### hms_video_plugin
-- Introducing support for Virtual Background and Blur
+- Introducing support for Virtual Background and Blur
- Users can now use virtual background and blur features in their video calls using the `hms_video_plugin`.
- Learn more about the feature [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/virtual-background)
+ Users can now use virtual background and blur features in their video calls using the `hms_video_plugin`.
+ Learn more about the feature [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/virtual-background)
Uses Android SDK 2.9.59 & iOS SDK 1.12.0
@@ -127,32 +204,32 @@ Uses Android SDK 2.9.59 & iOS SDK 1.12.0
## 1.10.2 - 2024-05-15
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.1.2 |
-| hmssdk_flutter | 1.10.2 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.1.2 |
+| hmssdk_flutter | 1.10.2 |
### hmssdk_flutter
-- Introducing Whiteboard support in HMSSDK
+- Introducing Whiteboard support in HMSSDK
HMSSDK now provides support for Whiteboard. You can now start/stop a whiteboard using `HMSWhiteboardController` methods. HMSSDK provides also provides callbacks for whiteboard start/stop events. Learn more about it [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/whiteboard)
-- HLS Layer methods
+- HLS Layer methods
HLS Stream Layers can be controlled using the HMSHLSPlayerController's `getHLSLayers` and `setHLSLayer` methods. Learn more about the methods [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/record-and-live-stream/hls-player)
-- `onPeerListUpdate` event on `HMSPreviewListener`
+- `onPeerListUpdate` event on `HMSPreviewListener`
The `onPeerListUpdate` event is now available on `HMSPreviewListener` to get updates on the peer list. Learn more about it [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/set-up-video-conferencing/preview#supplementary-bytes)
### hms_room_kit
-- Whiteboard support in Prebuilt
+- Whiteboard support in Prebuilt
Prebuilt now supports whiteboard for better collaboration. Users can create, manage, and stop whiteboards directly from the prebuilt interface.
-- Introducing option to select layers in HLS Player
+- Introducing option to select layers in HLS Player
HLS Player now supports layer selection from HLS Player Settings.
@@ -162,27 +239,27 @@ Uses Android SDK 2.9.56 & iOS SDK 1.10.0
## 1.10.1 - 2024-04-26
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.1.1 |
-| hmssdk_flutter | 1.10.1 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.1.1 |
+| hmssdk_flutter | 1.10.1 |
### hmssdk_flutter
-- Support for captions in HLS Player
+- Support for captions in HLS Player
- HMSSDK now provides support for captions in HLS Player. You can now `enable` or `disable` captions in the HLS Player using the
- `HMSHLSPlayerController` methods. Moreover HMSSDK provides a new `onCues` callback to get captions. Learn more about it [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/record-and-live-stream/hls-player#how-to-enabledisable-captions)
+ HMSSDK now provides support for captions in HLS Player. You can now `enable` or `disable` captions in the HLS Player using the
+ `HMSHLSPlayerController` methods. Moreover HMSSDK provides a new `onCues` callback to get captions. Learn more about it [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/record-and-live-stream/hls-player#how-to-enabledisable-captions)
### hms_room_kit
-- Support for captions in HLS Player UI
+- Support for captions in HLS Player UI
- HLS Player now supports captions for better accessibility. This can be enabled or disabled from the player settings.
+ HLS Player now supports captions for better accessibility. This can be enabled or disabled from the player settings.
-- Introducing Landscape Mode for HLS Player
+- Introducing Landscape Mode for HLS Player
- HLS Player now supports landscape mode for better viewing experience.
+ HLS Player now supports landscape mode for better viewing experience.
Uses Android SDK 2.9.54 & iOS SDK 1.9.0
@@ -190,44 +267,44 @@ Uses Android SDK 2.9.54 & iOS SDK 1.9.0
## 1.10.0 - 2024-04-22
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.1.0 |
-| hmssdk_flutter | 1.10.0 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.1.0 |
+| hmssdk_flutter | 1.10.0 |
### hmssdk_flutter
-- Noise Cancellation Integration
+- Noise Cancellation Integration
- You can enhance your app's audio quality with the newly integrated Noise Cancellation feature in HMSSDK. With this addition, control Noise Cancellation settings through the `HMSNoiseCancellationController`
+ You can enhance your app's audio quality with the newly integrated Noise Cancellation feature in HMSSDK. With this addition, control Noise Cancellation settings through the `HMSNoiseCancellationController`
- Learn more about leveraging this capability in your app by checking the documentation [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/noise-cancellation).
-
-- [SIP](https://www.100ms.live/docs/server-side/v2/how-to-guides/Session%20Initiation%20Protocol%20(SIP)/SIP-Interconnect) Capability
+ Learn more about leveraging this capability in your app by checking the documentation [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/noise-cancellation).
- HMSSDK now offers a way to differentiate between SIP and non-SIP users in the Room. You can use the `type` property in the `HMSPeer` class to check if a peer is a SIP user.
+- [SIP]() Capability
- Learn more about SIP Capabilities [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/sip).
+ HMSSDK now offers a way to differentiate between SIP and non-SIP users in the Room. You can use the `type` property in the `HMSPeer` class to check if a peer is a SIP user.
-- `HMSHLSPlayer` now uses Hybrid Composition on Android for better performance.
+ Learn more about SIP Capabilities [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/extend-capabilities/sip).
+
+- `HMSHLSPlayer` now uses Hybrid Composition on Android for better performance.
### hms_room_kit
-- Newly designed UI for SIP Peers
-
- SIP peers will now have a newly designed UI to match the overall theme of the application.
+- Newly designed UI for SIP Peers
+
+ SIP peers will now have a newly designed UI to match the overall theme of the application.
-- Enhanced Prebuilt with Noise Cancellation
+- Enhanced Prebuilt with Noise Cancellation
- Prebuilt supports noise cancellation out of the box. Users can enable or disable noise cancellation from the prebuilt interface.
+ Prebuilt supports noise cancellation out of the box. Users can enable or disable noise cancellation from the prebuilt interface.
-- All-New HLS Player Interface
+- All-New HLS Player Interface
- HLS Player now has a new look and feel to enhance the overall user experience.
+ HLS Player now has a new look and feel to enhance the overall user experience.
-- Removed `flutter_foreground_task` dependency from prebuilt
+- Removed `flutter_foreground_task` dependency from prebuilt
- Prebuilt no longer uses `flutter_foreground_task` package. For apps that require foreground service, the package can be added on the application level.
+ Prebuilt no longer uses `flutter_foreground_task` package. For apps that require foreground service, the package can be added on the application level.
Uses Android SDK 2.9.54 & iOS SDK 1.8.0
@@ -235,14 +312,14 @@ Uses Android SDK 2.9.54 & iOS SDK 1.8.0
## 1.9.14 - 2024-04-01
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.0.17 |
-| hmssdk_flutter | 1.9.14 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.0.17 |
+| hmssdk_flutter | 1.9.14 |
### hmssdk_flutter
-- Resolved an issue on iOS where video appears stretched in landscape mode
+- Resolved an issue on iOS where video appears stretched in landscape mode
Uses Android SDK 2.9.51 & iOS SDK 1.8.0
@@ -250,22 +327,22 @@ Uses Android SDK 2.9.51 & iOS SDK 1.8.0
## 1.9.13 - 2024-03-15
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.0.16 |
-| hmssdk_flutter | 1.9.13 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.0.16 |
+| hmssdk_flutter | 1.9.13 |
### hmssdk_flutter
-- Leave Room Immediately if the app is killed(iOS only)
+- Leave Room Immediately if the app is killed(iOS only)
- HMSSDK automatically triggers the `leave` method call when the iOS application is terminated.
+ HMSSDK automatically triggers the `leave` method call when the iOS application is terminated.
### hms_room_kit
-- Ability to join rooms directly without a preview
+- Ability to join rooms directly without a preview
- Prebuilt now allows direct room joining without preview, customizable via the dashboard's `Customize Prebuilt` section.
+ Prebuilt now allows direct room joining without preview, customizable via the dashboard's `Customize Prebuilt` section.
Updated to Android SDK 2.9.51 & iOS SDK 1.6.0
@@ -273,28 +350,28 @@ Updated to Android SDK 2.9.51 & iOS SDK 1.6.0
## 1.9.12 - 2024-03-04
-| Package | Version |
-| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| hms_room_kit | 1.0.15 |
-| hmssdk_flutter | 1.9.12 |
+| Package | Version |
+| -------------- | ------- |
+| hms_room_kit | 1.0.15 |
+| hmssdk_flutter | 1.9.12 |
### hmssdk_flutter
-- Introducing methods to fetch polls, questions, leaderboards and results
+- Introducing methods to fetch polls, questions, leaderboards and results
- Users can now fetch polls based on the poll state, questions for a poll and poll results
- using the `fetchPollList`, `fetchPollQuestions` and `getPollResults` methods.
- Checkout the docs [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/interact-with-room/room/polls#fetchpolllist)
+ Users can now fetch polls based on the poll state, questions for a poll and poll results
+ using the `fetchPollList`, `fetchPollQuestions` and `getPollResults` methods.
+ Checkout the docs [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/interact-with-room/room/polls#fetchpolllist)
### hms_room_kit
-- Ability to fetch concluded and draft polls
+- Ability to fetch concluded and draft polls
- Prebuilt now fetches all the polls happened during the session. Additionally, users can now retrieve draft polls from other platforms and launch them.
+ Prebuilt now fetches all the polls happened during the session. Additionally, users can now retrieve draft polls from other platforms and launch them.
-- Ability to join Room using Auth Token
+- Ability to join Room using Auth Token
- Prebuilt now supports joining rooms using `Auth Token` along with `Room codes`
+ Prebuilt now supports joining rooms using `Auth Token` along with `Room codes`
Updated to Android SDK 2.9.4 & iOS SDK 1.6.0
@@ -312,12 +389,12 @@ Updated to Android SDK 2.9.4 & iOS SDK 1.6.0
- Introducing Leaderboard APIs
Users can now fetch Rankings and Quiz Summary using the `fetchLeaderboard` method. More information about the Leaderboard can be found [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/interact-with-room/room/polls#quiz-leaderboard)
-
+
### hms_room_kit
- Introducing Leaderboards to our Quiz experience
- Adding Leaderboard to our Quizzes with Leaderboard Summary and Rankings.
+ Adding Leaderboard to our Quizzes with Leaderboard Summary and Rankings.
Updated to Android SDK 2.9.4 & iOS SDK 1.5.1
diff --git a/docs/get-started/v2/get-started/features/recordings/recording-assets/storage-configuration.mdx b/docs/get-started/v2/get-started/features/recordings/recording-assets/storage-configuration.mdx
index d69e3183d1..a1f547dadf 100644
--- a/docs/get-started/v2/get-started/features/recordings/recording-assets/storage-configuration.mdx
+++ b/docs/get-started/v2/get-started/features/recordings/recording-assets/storage-configuration.mdx
@@ -8,6 +8,7 @@ nav: 3.6
- Amazon Simple Storage Service (AWS S3)
- Google Cloud Storage (GCP)
- Alibaba Object Storage (OSS)
+- Azure Blob Storage
By default, recordings will be stored temporarily (for 15 days) in a storage location managed by 100ms if nothing is configured. Post a successful recording, the recording assets can be accessed on the [100ms dashboard](https://dashboard.100ms.live/sessions) or [through the REST API](/server-side/v2/api-reference/recording-assets/get-asset).
@@ -59,12 +60,12 @@ You can configure storage in your template's `Recording` tab on the 100ms Dashbo
Use the [Policy API](https://www.100ms.live/docs/server-side/v2/api-reference/policy/create-template-via-api) to programmatically configure your storage location.
-You can configure the **`type`** field of recording object to `s3` for AWS, `oss` for Alibaba Object Storage Service and `gs` for Google Cloud Storage with the following details:
+You can configure the **`type`** field of recording object to `s3` for AWS, `oss` for Alibaba Object Storage Service, `gs` for Google Cloud Storage, and `azure` for Azure Blob Storage with the following details:
-- Access Key: Access Key for your OSS/GCP Bucket
-- Secret Key: Secret Key for your OSS/GCP Bucket
-- Bucket: Name of the bucket
-- Region: Name of the region where your bucket is located in
+- Access Key: Access Key for your storage bucket (for Azure, use the Storage Account Name)
+- Secret Key: Secret Key for your storage bucket (for Azure, use the Storage Account Key)
+- Bucket: Name of the bucket (for Azure, use the Container Name)
+- Region: Name of the region where your bucket is located in (for Azure, this field is not required)
- Prefix for Upload Path: Define the directory name (optional)
diff --git a/docs/ios/v2/how-to-guides/set-up-video-conferencing/captions.mdx b/docs/ios/v2/how-to-guides/set-up-video-conferencing/captions.mdx
index 6543dbdd62..91d86e6a0c 100644
--- a/docs/ios/v2/how-to-guides/set-up-video-conferencing/captions.mdx
+++ b/docs/ios/v2/how-to-guides/set-up-video-conferencing/captions.mdx
@@ -1,14 +1,14 @@
---
-title: Live Transcription for Conferencing (Closed Captions - Beta)
+title: Live Transcription for Conferencing (Closed Captions)
nav: 4.99
---
-100ms real-time transcription engine generates a live transcript (closed captions) during a conferencing session.
+100ms real-time transcription engine generates a live transcript (closed captions) during a conferencing session.
The SDK provides a callback with the transcript for each peer when they speak.
## Minimum Requirements
-- Minimum 100ms SDK version required is 1.12.0
+- Minimum 100ms SDK version required is 1.12.0
## How to check if captions are started in a room?
@@ -36,11 +36,11 @@ Here is an example implemenation:
public func on(transcripts: HMSTranscripts) {
transcripts.transcripts.forEach { transcript in
let peerModel = transcript.peer
-
+
if !(lastTranscript?.isFinal ?? false) {
_ = self.transcriptArray.popLast()
}
-
+
if peerModel == lastTranscript?.peer {
self.transcriptArray += [" " + transcript.transcript]
}
@@ -54,14 +54,16 @@ Here is an example implemenation:
self.transcriptArray += ["\n**\(peerModel.name.trimmingCharacters(in: .whitespacesAndNewlines)):** "]
self.transcriptArray += ["\(transcript.transcript)"]
}
-
+
lastTranscript = transcript
}
}
```
## How to toggle Live Transcriptions on/off
+
You can toggle live transcriptions on/off at runtime that can help save costs. Use startTranscription() method to start the transcription and stopTranscription() method to stop transcription like below:
+
```swift
// Start Real Time Transcription
sdk.startTranscription() { success, error in
@@ -81,4 +83,3 @@ You can toggle live transcriptions on/off at runtime that can help save costs. U
}
}
```
-
diff --git a/docs/ios/v2/release-notes/release-notes.mdx b/docs/ios/v2/release-notes/release-notes.mdx
index c002dbbffa..f9eefe407c 100644
--- a/docs/ios/v2/release-notes/release-notes.mdx
+++ b/docs/ios/v2/release-notes/release-notes.mdx
@@ -4,6 +4,12 @@ nav: 6.1
description: Release Notes for 100ms iOS SDK
---
+## 1.17.1 - 2025-11-17
+### Fixed
+
+- Enum conflicts with other WebRTC integrations
+
+
## 1.17.0 - 2025-01-27
### Changed
diff --git a/docs/javascript/v2/how-to-guides/extend-capabilities/plugins/krisp-noise-cancellation.mdx b/docs/javascript/v2/how-to-guides/extend-capabilities/plugins/krisp-noise-cancellation.mdx
index 95d3743599..ae454f8c0a 100644
--- a/docs/javascript/v2/how-to-guides/extend-capabilities/plugins/krisp-noise-cancellation.mdx
+++ b/docs/javascript/v2/how-to-guides/extend-capabilities/plugins/krisp-noise-cancellation.mdx
@@ -40,10 +40,28 @@ toggle(): void;
// whether the noise cancellation is currently enabled
isEnabled(): boolean | undefined;
+// Sets the noise suppression strength on the active filter node.
+// The prebuilt suppression-level slider drives values from 0 to 100.
+setNoiseSuppressionLevel(level: number): void;
+
stop(): void;
```
+### Adjusting the noise suppression level
+
+`setNoiseSuppressionLevel(level: number)` forwards the provided level to the underlying Krisp filter node. The prebuilt Suppression Level slider (in `@100mslive/roomkit-react`) drives this method with integer values from `0` to `100`. Calling it before the plugin has been added to the audio track (i.e. before a filter node exists) is a no-op; apply the level after the plugin is active.
+
+```js
+import { HMSKrispPlugin } from '@100mslive/hms-noise-cancellation';
+
+const plugin = new HMSKrispPlugin();
+await hmsActions.addPluginToAudioTrack(plugin);
+
+// Reduce suppression strength to 60% once the plugin is active
+plugin.setNoiseSuppressionLevel(60);
+```
+
Checking if noise cancellation is enabled for the room. Please reach out to us to get this enabled for you.
diff --git a/docs/javascript/v2/how-to-guides/set-up-video-conferencing/captions.mdx b/docs/javascript/v2/how-to-guides/set-up-video-conferencing/captions.mdx
index 14f5c1ec3d..7089e6442d 100644
--- a/docs/javascript/v2/how-to-guides/set-up-video-conferencing/captions.mdx
+++ b/docs/javascript/v2/how-to-guides/set-up-video-conferencing/captions.mdx
@@ -1,5 +1,5 @@
---
-title: Live Transcription for Conferencing (Closed Captions - Beta)
+title: Live Transcription for Conferencing (Closed Captions)
nav: 1.24
---
@@ -11,87 +11,310 @@ nav: 1.24
## How to implement closed captioning?
-The `useTranscript` hook is implemented with the `onTranscript` callback as shown below:
+Each transcript entry has the following structure:
```ts
- export interface HMSTranscript {
- // start time in second
- start: number;
- // end time in seconds
- end: number;
- // peer_id of the speaker
- peer_id: string;
- // transcription will continue to update the transcript until you receive final keyword
- final: boolean;
- // closed caption
- transcript: string;
- }
+interface HMSTranscript {
+ start: number; // start time in seconds
+ end: number; // end time in seconds
+ peer_id: string; // peer_id of the speaker
+ final: boolean; // true when the transcript segment is finalized
+ transcript: string; // the caption text
+}
+```
+
+The transcription engine sends interim results as the speaker talks, then a final result once the segment is complete. Interim results update the same segment in place, while final results indicate that a new segment will follow.
+
+
+
+
+
+In plain JavaScript, transcript data arrives as `NEW_MESSAGE` notifications of type `hms_transcript`. Subscribe via `hmsNotifications.onNotification`:
- export interface useHMSTranscriptInput {
- onTranscript?: (data: HMSTranscript[]) => void;
- handleError?: hooksErrHandler;
+```js
+import { HMSNotificationTypes } from '@100mslive/hms-video-store';
+
+const unsubscribe = hmsNotifications.onNotification((notification) => {
+ const msg = notification.data;
+ if (msg && msg.type === 'hms_transcript') {
+ const parsed = JSON.parse(msg.message);
+ const transcripts = parsed.results; // HMSTranscript[]
+
+ transcripts.forEach((entry) => {
+ console.log(
+ `${entry.peer_id}: ${entry.transcript} (final: ${entry.final})`
+ );
+ });
}
+}, HMSNotificationTypes.NEW_MESSAGE);
+
+// call unsubscribe() when you no longer need transcript updates
+```
+
+To resolve the `peer_id` to a display name, use the store:
- export const useTranscript = ({ onTranscript, handleError = logErrorHandler }: useHMSTranscriptInput);
+```js
+import { selectPeerNameByID } from '@100mslive/hms-video-store';
+const peerName = hmsStore.getState(selectPeerNameByID(entry.peer_id));
```
+
+
+
+
+Use the `useTranscript` hook with the `onTranscript` callback:
+
+```jsx
+import { useTranscript } from '@100mslive/react-sdk';
+
+function CaptionsViewer() {
+ useTranscript({
+ onTranscript: (transcripts) => {
+ // transcripts is HMSTranscript[]
+ transcripts.forEach((entry) => {
+ console.log(
+ `${entry.peer_id}: ${entry.transcript} (final: ${entry.final})`
+ );
+ });
+ },
+ });
+
+ return null;
+}
+```
+
+
+
## How can you check if closed captions are enabled in a room?
-```ts
+
+
+
+
+```js
+import { selectIsTranscriptionEnabled } from '@100mslive/hms-video-store';
- import { selectIsTranscriptionEnabled, useHMSStore } from '@100mslive/react-sdk';
- // use this to check if caption is enabled for your room.
- const isCaptionPresent: boolean = useHMSStore(selectIsTranscriptionEnabled);
+// read once
+const isCaptionEnabled = hmsStore.getState(selectIsTranscriptionEnabled);
+// or subscribe to changes
+hmsStore.subscribe((enabled) => {
+ console.log('Captions enabled:', enabled);
+}, selectIsTranscriptionEnabled);
```
+
+
+
+
+```jsx
+import { selectIsTranscriptionEnabled, useHMSStore } from '@100mslive/react-sdk';
+
+function CaptionStatus() {
+ const isCaptionEnabled = useHMSStore(selectIsTranscriptionEnabled);
+ return {isCaptionEnabled ? 'Captions ON' : 'Captions OFF'};
+}
+```
+
+
+
## How to toggle closed captions on or off?
Closed captions can be dynamically enabled or disabled at runtime within a given room, depending on user requirements. This capability helps minimize unnecessary usage costs by ensuring that captions are enabled only when explicitly needed by the user(s).
-```ts
+### Check permission
- // Currently 100ms supports closed captions type mode
- export declare enum HMSTranscriptionMode {
- CAPTION = "caption"
- }
+Before starting or stopping transcription, verify that the local peer has the required permission:
- export interface TranscriptionConfig {
- mode: HMSTranscriptionMode;
- }
+
- // admin/host role need to startTranscription if he had the access, here is how you will check if you had access to start transcription
- const isTranscriptionAllowed = useHMSStore(selectIsTranscriptionAllowedByMode(HMSTranscriptionMode.CAPTION));
+
+```js
+import {
+ HMSTranscriptionMode,
+ selectIsTranscriptionAllowedByMode
+} from '@100mslive/hms-video-store';
+
+const isTranscriptionAllowed = hmsStore.getState(
+ selectIsTranscriptionAllowedByMode(HMSTranscriptionMode.CAPTION)
+);
```
-Use `hmsActions.startTranscription()` method to start the closed captions.
+
+
-```ts
- async startCaption() {
- try {
- await hmsActions.startTranscription({
- mode: HMSTranscriptionMode.CAPTION,
- });
- } catch(err) {
- console.log(err);
- }
- }
+```jsx
+import {
+ HMSTranscriptionMode,
+ selectIsTranscriptionAllowedByMode,
+ useHMSStore
+} from '@100mslive/react-sdk';
+const isTranscriptionAllowed = useHMSStore(
+ selectIsTranscriptionAllowedByMode(HMSTranscriptionMode.CAPTION)
+);
```
-Use `hmsActions.stopTranscription()` method to stop closed captions.
+
-```ts
- async stopCaption() {
- try {
- await hmsActions.stopTranscription({
- mode: HMSTranscriptionMode.CAPTION,
- });
- } catch(err) {
- console.log(err);
- }
- }
-```
\ No newline at end of file
+### Start captions
+
+Use `hmsActions.startTranscription()` to enable closed captions for the room:
+
+```js
+try {
+ await hmsActions.startTranscription({
+ mode: HMSTranscriptionMode.CAPTION,
+ });
+} catch (err) {
+ console.error('Failed to start captions:', err);
+}
+```
+
+### Stop captions
+
+Use `hmsActions.stopTranscription()` to disable closed captions:
+
+```js
+try {
+ await hmsActions.stopTranscription({
+ mode: HMSTranscriptionMode.CAPTION,
+ });
+} catch (err) {
+ console.error('Failed to stop captions:', err);
+}
+```
+
+## Translation
+
+Translation enables each role to receive captions translated into their configured language. Translation must be enabled in the template policy with per-role language mappings (e.g., `host → es`, `guest → fr`).
+
+> Translation requires SDK version 0.13.3 or above and the translation feature enabled in your template's transcription destination.
+
+### Start captions with translation
+
+Pass `translation` when starting transcription to enable translation from the start:
+
+
+
+
+
+```js
+import { HMSTranscriptionMode } from '@100mslive/hms-video-store';
+
+await hmsActions.startTranscription({
+ mode: HMSTranscriptionMode.CAPTION,
+ translation: {
+ enabled: true,
+ },
+});
+```
+
+You can also override the template's role-language mapping at start time:
+
+```js
+await hmsActions.startTranscription({
+ mode: HMSTranscriptionMode.CAPTION,
+ translation: {
+ enabled: true,
+ roleLanguages: { host: 'es', guest: 'fr' },
+ },
+});
+```
+
+
+
+
+
+```jsx
+import { HMSTranscriptionMode, useHMSActions } from '@100mslive/react-sdk';
+
+function StartCaptionsWithTranslation() {
+ const hmsActions = useHMSActions();
+
+ const startWithTranslation = async () => {
+ await hmsActions.startTranscription({
+ mode: HMSTranscriptionMode.CAPTION,
+ translation: { enabled: true },
+ });
+ };
+
+ return ;
+}
+```
+
+
+
+### Toggle translation mid-session
+
+Use `hmsActions.updateTranscriptionConfig()` to enable or disable translation while captions are already running:
+
+```js
+// Enable translation mid-call
+await hmsActions.updateTranscriptionConfig({
+ translation: { enabled: true },
+});
+
+// Disable translation (captions continue in original language)
+await hmsActions.updateTranscriptionConfig({
+ translation: { enabled: false },
+});
+
+// Change the transcription input language
+await hmsActions.updateTranscriptionConfig({
+ language: 'hi',
+});
+```
+
+### Check translation state
+
+Use the `selectTranslationState` selector to read the current translation state:
+
+
+
+
+
+```js
+import { selectTranslationState } from '@100mslive/hms-video-store';
+
+const translationState = hmsStore.getState(selectTranslationState);
+// { available: true, enabled: true, roleLanguages: { host: 'es', guest: 'fr' } }
+
+// Subscribe to changes
+hmsStore.subscribe((state) => {
+ console.log('Translation enabled:', state.enabled);
+ console.log('Role languages:', state.roleLanguages);
+}, selectTranslationState);
+```
+
+
+
+
+
+```jsx
+import { selectTranslationState, useHMSStore } from '@100mslive/react-sdk';
+
+function TranslationStatus() {
+ const { available, enabled, roleLanguages } = useHMSStore(selectTranslationState);
+
+ if (!available) return Translation not configured;
+
+ return (
+
+ );
+}
+```
+
+
diff --git a/docs/javascript/v2/how-to-guides/set-up-video-conferencing/render-video/overview.mdx b/docs/javascript/v2/how-to-guides/set-up-video-conferencing/render-video/overview.mdx
index 4ddca2869c..38298e2097 100644
--- a/docs/javascript/v2/how-to-guides/set-up-video-conferencing/render-video/overview.mdx
+++ b/docs/javascript/v2/how-to-guides/set-up-video-conferencing/render-video/overview.mdx
@@ -35,37 +35,35 @@ hmsActions.detachVideo(videoTrack.id, videoElement);
## When to attach/detach videos
-Starting from this [release](https://www.100ms.live/docs/javascript/v2/changelog/release-notes#2023-03-14), sdk handles the subsequent attach/detach automatically.
-- attach needs to be called only the first time the video element is available. subsequent calls will be ignored.
+Starting from this [release](https://www.100ms.live/docs/javascript/v2/changelog/release-notes#2023-03-14), sdk handles the subsequent attach/detach automatically **for a given track**.
+- attach needs to be called once per track id. Repeat calls for the same track id are ignored, and the sdk takes care of mute/unmute, plugins, camera/device change and going in and out of view on its own. None of these change the peer's track id.
- detach needs to be called only when the element is removed from the dom while the track is still available. For the majority of cases, calling detach won't be needed.
-To disable the auto handling by sdk, pass `autoManageVideo: false` in join or preview config object. Then you will have to follow the below snippet
-to handle video rendering on your end.
+
+When a session is moved to another media server, every peer republishes and `peer.videoTrack` becomes a new track id. The sdk's auto handling is scoped to one track id, so it cannot carry your element across to the replacement track.
-We need to re-attach video when it's in view after every:
+If you attach once to `peer.videoTrack` and never subscribe to changes, the tile freezes the moment that happens and stays frozen for the rest of the call. Subscribe by peer id instead, so you always receive that peer's current track, and re-attach when the id changes.
+
-1. Unmute(when track.enable is true)
-2. Plugin is added/removed(for example, enable/disable virtual background)
-3. Camera/device change(track.deviceId is changed)
+Server migration needs no action from your app or your users, so it is the case that gets missed. The only other way `peer.videoTrack` changes is a real unpublish and republish of that peer's video — for example a role change to a role that cannot publish video, and then back to one that can.
-You can achieve all this by using the `selectVideoTrackByID` selector and the aforementioned `hmsActions.attachVideo` and `hmsActions.detachVideo` functions.
+Use the `selectVideoTrackByPeerID` selector with `hmsActions.attachVideo` and `hmsActions.detachVideo`:
```js
-// assuming you have peer object and video element
+// assuming you have a peer object and a video element
// complete code snippet below
+let attachedTrackId = null;
+
hmsStore.subscribe((track) => {
- if (!track) {
- return;
- }
- if (track?.enabled) {
- hmsActions.attachVideo(track.id, videoElement);
- } else {
- hmsActions.detachVideo(track.id, videoElement);
- }
-}, selectVideoTrackByID(peer.videoTrack));
+ const nextTrackId = track?.id ?? null;
+ if (nextTrackId === attachedTrackId) return; // same track, e.g. mute/unmute - nothing to do
+ if (attachedTrackId) hmsActions.detachVideo(attachedTrackId, videoElement);
+ if (nextTrackId) hmsActions.attachVideo(nextTrackId, videoElement);
+ attachedTrackId = nextTrackId;
+}, selectVideoTrackByPeerID(peer.id));
```
-> Note that if you're using the `useVideo` hook from `react-sdk` this is already being taken care of.
+If you are on React, the `useVideo` hook from `react-sdk` already does exactly this — pass it `peer.videoTrack` and it re-attaches for you.
## Example Snippet
@@ -92,20 +90,21 @@ function renderPeer(peer) {
videoElement.playsinline = true;
peerTileName.textContent = peer.name;
+ // Subscribe by peer id, not track id: a peer's track id changes when their session
+ // moves to another media server. Re-attach whenever it changes.
+ let attachedTrackId = null;
hmsStore.subscribe((track) => {
- if (!track) {
- return;
- }
- if (track.enabled) {
- hmsActions.attachVideo(track.id, videoElement);
- } else {
- hmsActions.detachVideo(track.id, videoElement);
- }
- }, selectVideoTrackByID(peer.videoTrack));
+ const nextTrackId = track?.id ?? null;
+ if (nextTrackId === attachedTrackId) return; // same track, e.g. mute/unmute
+ if (attachedTrackId) hmsActions.detachVideo(attachedTrackId, videoElement);
+ if (nextTrackId) hmsActions.attachVideo(nextTrackId, videoElement);
+ attachedTrackId = nextTrackId;
+ }, selectVideoTrackByPeerID(peer.id));
peerTileDiv.append(videoElement);
peerTileDiv.append(peerTileName);
+ // Tile creation stays keyed on peer id so the element is not rebuilt on every change
renderedPeerIDs.add(peer.id);
return peerTileDiv;
}
@@ -119,7 +118,7 @@ function renderPeers(peers) {
console.log(
`rendering video for peer - ${peer.name}, roleName - ${peer.roleName}, isLocal- ${peer.isLocal}`
);
- peersContainer.append(renderVideo(peer));
+ peersContainer.append(renderPeer(peer));
}
});
}
diff --git a/docs/javascript/v2/quickstart/javascript-quickstart.mdx b/docs/javascript/v2/quickstart/javascript-quickstart.mdx
index f158364d58..df14a5222e 100644
--- a/docs/javascript/v2/quickstart/javascript-quickstart.mdx
+++ b/docs/javascript/v2/quickstart/javascript-quickstart.mdx
@@ -71,7 +71,7 @@ import {
selectIsLocalVideoEnabled,
selectPeers,
selectIsConnectedToRoom,
- selectVideoTrackByID,
+ selectVideoTrackByPeerID,
} from "@100mslive/hms-video-store";
// Initialize HMS Store
@@ -132,16 +132,18 @@ function renderPeer(peer) {
videoElement.playsinline = true;
peerTileName.textContent = peer.name;
+ // A peer's video track id is not fixed for the whole call - it becomes a new id when
+ // their session is moved to another media server. Subscribe by peer id so you always
+ // get their *current* track, and re-attach when it changes. Attaching once to
+ // peer.videoTrack would leave the tile frozen from that point on.
+ let attachedTrackId = null;
hmsStore.subscribe((track) => {
- if (!track) {
- return;
- }
- if (track.enabled) {
- hmsActions.attachVideo(track.id, videoElement);
- } else {
- hmsActions.detachVideo(track.id, videoElement);
- }
- }, selectVideoTrackByID(peer.videoTrack));
+ const nextTrackId = track?.id ?? null;
+ if (nextTrackId === attachedTrackId) return; // same track, e.g. mute/unmute - nothing to do
+ if (attachedTrackId) hmsActions.detachVideo(attachedTrackId, videoElement);
+ if (nextTrackId) hmsActions.attachVideo(nextTrackId, videoElement);
+ attachedTrackId = nextTrackId;
+ }, selectVideoTrackByPeerID(peer.id));
peerTileDiv.append(videoElement);
peerTileDiv.append(peerTileName);
diff --git a/docs/javascript/v2/release-notes/release-notes.mdx b/docs/javascript/v2/release-notes/release-notes.mdx
index e166dfa4db..f2f4577b89 100644
--- a/docs/javascript/v2/release-notes/release-notes.mdx
+++ b/docs/javascript/v2/release-notes/release-notes.mdx
@@ -14,6 +14,215 @@ description: Release Notes for 100ms.live JavaScript SDK
| @100mslive/hms-noise-cancellation | [](https://badge.fury.io/js/%40100mslive%2Fhms-noise-cancellation) |
| @100mslive/hms-virtual-background | [](https://badge.fury.io/js/%40100mslive%2Fhms-virtual-background) |
+## 2026-08-26
+
+Released: `@100mslive/hms-video-store@0.15.0`, `@100mslive/react-sdk@0.13.0`, `@100mslive/hls-player@0.6.0`, `@100mslive/roomkit-react@0.6.0`, `@100mslive/hms-whiteboard@0.3.0`, `@100mslive/hms-virtual-background@1.16.0`, `@100mslive/react-icons@0.13.0`
+
+### Added:
+
+- Connection type is now available in peer stats — `publishConnectionType` and `subscribeConnectionType` tell you whether a peer is connected directly or through a TURN relay. See [`HMSPeerStats`](/api-reference/javascript/v2/interfaces/HMSPeerStats)
+- Roomkit Prebuilt: Stats for Nerds shows the publish and subscribe connection type
+
+### Fixed:
+
+- A remote peer could stay silent for the rest of the session if their audio failed to start
+- Muting a peer for yourself was undone as soon as that peer muted and unmuted their own mic
+- A peer who joined while the volume was turned all the way down was audible at full volume
+- Noise cancellation could turn back on after a reconnect even when disabled in the template
+- Screenshare appeared as a blank tile to remote peers when the sharer's camera permission was blocked
+- Video tiles scrolled out of view or closed could keep receiving video at their earlier quality
+- A peer could go silent again shortly after unmuting, and a resized tile could snap back to its previous video quality
+- Improved error reporting for subscribe and video quality requests — failures are surfaced instead of being reported as success or escaping as unhandled errors
+- `setVolume` failures in `useRemoteAVToggle`, `usePlaylistMusic` and `useScreenshareAudio` now go through the hook's error handler
+
+## 2026-08-12
+
+Released: `@100mslive/hms-video-store@0.14.7`, `@100mslive/react-sdk@0.12.7`, `@100mslive/hls-player@0.5.7`, `@100mslive/roomkit-react@0.5.7`, `@100mslive/hms-whiteboard@0.2.7`, `@100mslive/hms-virtual-background@1.15.7`, `@100mslive/react-icons@0.12.7`
+
+### Added:
+
+- Two new notifications, `TRACK_INTERRUPTION_START` and `TRACK_INTERRUPTION_END`, raised when the OS or another app takes the mic or camera and when it comes back — see [`HMSTrackInterruption`](/api-reference/javascript/v2/interfaces/HMSTrackInterruption)
+- Roomkit Prebuilt: a dialog naming the device that was interrupted
+
+### Fixed:
+
+- Improved interruption handling and recovery for the mic and camera when the OS or another app takes the device — an incoming call, a native VoIP app, or Safari being backgrounded on iOS
+
+## 2026-08-07
+
+Released: `@100mslive/hms-video-store@0.14.6`, `@100mslive/react-sdk@0.12.6`, `@100mslive/hls-player@0.5.6`, `@100mslive/roomkit-react@0.5.6`, `@100mslive/hms-whiteboard@0.2.6`, `@100mslive/hms-virtual-background@1.15.6`, `@100mslive/react-icons@0.12.6`
+
+### Fixed:
+
+- The reactive store now stays in sync after an SFU migration when `join()` is called without a preceding `preview()`, and on a rejoin after `leave()` — in those paths transport updates were dropped, so `localPeer.videoTrack` kept pointing at a track id that no longer existed once the session migrated
+- Security fixes
+
+## 2026-07-08
+
+Released: `@100mslive/hms-video-store@0.14.5`, `@100mslive/react-sdk@0.12.5`, `@100mslive/hls-player@0.5.5`, `@100mslive/roomkit-react@0.5.5`, `@100mslive/hms-whiteboard@0.2.5`, `@100mslive/hms-virtual-background@1.15.5`, `@100mslive/react-icons@0.12.5`
+
+### Fixed:
+
+- `HMSRoomProvider` with `leaveOnUnload` now leaves the room on `pagehide`, `beforeunload` and `freeze` instead of the deprecated `unload` event — `unload` is being disabled by default in Chrome through 2026 and never fired reliably on mobile or when a page entered the back/forward cache, so peers could linger in the room after the tab closed
+
+## 2026-06-24
+
+Released: `@100mslive/hms-video-store@0.14.4`, `@100mslive/react-sdk@0.12.4`, `@100mslive/hls-player@0.5.4`, `@100mslive/roomkit-react@0.5.4`, `@100mslive/hms-whiteboard@0.2.4`, `@100mslive/hms-virtual-background@1.15.4`, `@100mslive/react-icons@0.12.4`
+
+### Fixed:
+
+- Roomkit Prebuilt: Picture-in-Picture is now enabled on macOS Safari — previously the PiP button was hidden on Safari even when the browser supports it
+- Security fixes
+
+## 2026-06-17
+
+Released: `@100mslive/hms-video-store@0.14.3`, `@100mslive/react-sdk@0.12.3`, `@100mslive/hls-player@0.5.3`, `@100mslive/roomkit-react@0.5.3`, `@100mslive/hms-whiteboard@0.2.3`, `@100mslive/hms-virtual-background@1.15.3`
+
+### Added:
+
+- Roomkit Prebuilt: Incoming chat messages now surface as a transient, bottom-anchored bubble on the Picture-in-Picture canvas — it shows the sender name and a single line of text and auto-dismisses after 4s, so users don't miss chat while the tab is backgrounded
+
+### Fixed:
+
+- Resolved Dependabot security advisories and aligned all `esbuild` copies to `0.28.1`
+
+## 2026-05-20
+
+Released: `@100mslive/hms-video-store@0.14.2`, `@100mslive/react-sdk@0.12.2`, `@100mslive/hls-player@0.5.2`, `@100mslive/roomkit-react@0.5.2`, `@100mslive/hms-whiteboard@0.2.2`, `@100mslive/hms-virtual-background@1.15.2`
+
+### Fixed:
+
+- Roomkit Prebuilt: PDF screenshare now renders in gallery layout regardless of the active layout mode — previously sharing a PDF while the room was in sidebar mode left the PDF hidden behind the participant tile strip; the previous layout mode is restored when the PDF view closes
+
+## 2026-05-13
+
+Released: `@100mslive/hms-video-store@0.14.1`, `@100mslive/react-sdk@0.12.1`, `@100mslive/hls-player@0.5.1`, `@100mslive/roomkit-react@0.5.1`, `@100mslive/hms-whiteboard@0.2.1`, `@100mslive/hms-virtual-background@1.15.1`
+
+### Fixed:
+
+- `HMSRoomProvider` now calls `leave()` on unmount when it owns the store, preventing leaked rooms when the provider is conditionally mounted
+- Stability fixes for video track teardown to avoid null reference errors during view updates
+- Local video track publishing stability improvements
+- Signaling reconnection stability improvements
+- ICE reconnection improvements for publish
+- Resolved Dependabot security advisories on transitive dependencies
+
+## 2026-04-29
+
+Released: `@100mslive/hms-video-store@0.14.0`, `@100mslive/react-sdk@0.12.0`, `@100mslive/hls-player@0.5.0`, `@100mslive/roomkit-react@0.5.0`, `@100mslive/hms-whiteboard@0.2.0`, `@100mslive/hms-virtual-background@1.15.0`
+
+### Fixed:
+
+- `HMSAudioTrack.setOutputDevice` now surfaces `setSinkId` failures instead of swallowing them — the persisted output device and analytics only update when the browser actually switches sinks, so the UI no longer reports a device as selected while audio still routes to the previous one
+- Switching audio output device now recovers tracks that were auto-paused by an OS audio-session interruption (headset disconnect, incoming call, Bluetooth swap), via a new `AudioSinkManager.recoverAutoPausedTracks` path that the user-initiated change goes through
+- Roomkit Prebuilt: Noise suppression level slider in the Audio Settings dropdown now reflects the user's actual configured level on every open — previously it snapped back to 100% on remount even though Krisp retained the real level on the filter node
+
+## 2026-04-22
+
+Released: `@100mslive/hms-video-store@0.13.4`, `@100mslive/react-sdk@0.11.4`, `@100mslive/hls-player@0.4.4`, `@100mslive/roomkit-react@0.4.4`, `@100mslive/hms-noise-cancellation@0.1.0`
+
+### Added:
+
+- Added support for noise suppression level for [`HMSKrispPlugin`](/javascript/v2/how-to-guides/extend-capabilities/plugins/krisp-noise-cancellation#adjusting-the-noise-suppression-level)
+- Roomkit Prebuilt: Noise suppression level slider in the prebuilt while enabling noise cancellation — let's users tune how aggressively background noise is filtered
+
+### Fixed:
+
+- Roomkit Prebuilt: Stats for Nerds localPeer `Publish Bitrate` metric no longer counts ICE / RTCP / BWE traffic, giving a more accurate view of actual media send rate
+
+## 2026-04-15
+
+Released: `@100mslive/hms-video-store@0.13.3`, `@100mslive/react-sdk@0.11.3`, `@100mslive/hls-player@0.4.3`, `@100mslive/roomkit-react@0.4.3`
+
+### Added:
+
+- [Translation support for live transcription](/javascript/v2/how-to-guides/set-up-video-conferencing/captions#translation) — enables per-role language translation for captions
+
+### Fixed:
+
+- Updated CDN endpoint for Effects SDK assets and noise cancellation plugin
+
+## 2026-02-10
+
+Released: `@100mslive/hms-video-store@0.13.2`, `@100mslive/react-sdk@0.11.2`, `@100mslive/hls-player@0.4.2`, `@100mslive/roomkit-react@0.4.2`, `@100mslive/hms-whiteboard@0.1.2`
+
+### Added:
+
+- Enhanced track analytics capturing detailed metadata for local audio and video tracks
+- Online/Offline connection status indicators in whiteboard for better visibility
+- Debug logging for whiteboard errors to aid in troubleshooting
+
+### Fixed:
+
+- Whiteboard connection status handling improvements with better error recovery
+
+## 2026-01-20
+
+Released: `@100mslive/hms-video-store@0.13.1`, `@100mslive/react-sdk@0.11.1`, `@100mslive/hls-player@0.4.1`, `@100mslive/roomkit-react@0.4.1`
+
+### Added:
+
+- Capture CPU pressure state per sample for better performance monitoring
+- Enhanced track interruption analytics with detailed track information
+- Source stats with fallback mechanism for improved reliability
+- Upgraded Effects SDK to version 3.6.2 for better performance
+
+### Fixed:
+
+- macOS compatibility check in prebuilt binaries
+- Computation of sourceFramesDropped metric in local track stats
+
+## 2025-12-04
+
+Released: `@100mslive/hms-video-store@0.13.0`, `@100mslive/react-sdk@0.11.0`, `@100mslive/hls-player@0.4.0`, `@100mslive/roomkit-react@0.4.0`
+
+### Added:
+
+- Upgraded UA Parser JS library for improved user agent detection
+- CPU state capture in publish analytics
+- Upgraded Effects (Virtual Background) plugin with improved CPU performance
+
+### Fixed:
+
+- Audio output device selection issues on macOS Safari 26
+- Stored devices not being removed when they become unavailable, causing constraints failure error on join
+- Error handling when no device is available during device changes
+- Audio not being published when Noise Cancellation is enabled on low network conditions
+
+## 2025-08-26
+
+Released: `@100mslive/hms-video-store@0.12.38`, `@100mslive/react-sdk@0.10.38`, `@100mslive/hls-player@0.3.38`, `@100mslive/roomkit-react@0.3.38`
+
+### Fixed:
+
+- Additional Permission popup getting shown after dismissing the first one, when audio/video is enabled for first time
+- Permission popup not shown when tab is active and then becomes active if permissions are denied earlier
+
+## 2025-08-12
+
+Released: `@100mslive/hms-video-store@0.12.37`, `@100mslive/react-sdk@0.10.37`, `@100mslive/hls-player@0.3.37`, `@100mslive/roomkit-react@0.3.37`
+
+### Fixed:
+
+- `deviceId` overconstrained error when joining or toggling video/audio for first time or skip preview flows
+
+## 2025-08-08
+
+Released: `@100mslive/hms-video-store@0.12.36`, `@100mslive/react-sdk@0.10.36`, `@100mslive/hls-player@0.3.36`, `@100mslive/roomkit-react@0.3.36`
+
+### Fixed:
+
+- Use `exact` constraint for deviceId in getUserMedia calls to prevent device selection issues due to this [chromium bug](https://issues.chromium.org/issues/436065976)
+
+## 2025-05-15
+
+Released: `@100mslive/hms-video-store@0.12.35`, `@100mslive/react-sdk@0.10.35`, `@100mslive/hls-player@0.3.35`, `@100mslive/roomkit-react@0.3.35`
+
+### Fixed:
+
+- Add stop reason for `hls-stop`
+- Roomkit Prebuilt: Duplicate `hls-stop` call on end call
+
## 2024-05-15
Released: `@100mslive/hms-video-store@0.12.34`, `@100mslive/react-sdk@0.10.34`, `@100mslive/hls-player@0.3.34`, `@100mslive/roomkit-react@0.3.34`, `@100mslive/hms-whiteboard@0.0.24`, `@100mslive/hms-virtual-background@1.13.34`
diff --git a/docs/react-native/v2/how-to-guides/extend-capabilities/live-captions.mdx b/docs/react-native/v2/how-to-guides/extend-capabilities/live-captions.mdx
index 6ffd884f79..d94eb55515 100644
--- a/docs/react-native/v2/how-to-guides/extend-capabilities/live-captions.mdx
+++ b/docs/react-native/v2/how-to-guides/extend-capabilities/live-captions.mdx
@@ -1,55 +1,49 @@
---
-title: Live Transcription for Conferencing (Closed Captions - Beta)
+title: Live Transcription for Conferencing (Closed Captions)
nav: 13.4
---
100ms' real-time transcription engine generates a live transcript (closed captions) during a conferencing session. The SDK provides a callback with transcript for each peer when they speak.
-
## Minimum Requirements
- Minimum `react-native-hms` version required is `1.10.7`
- Minimum `react-native-room-kit` version required is `1.2.0`
-
## Checking if captions are enabled in a room
To check if WebRTC (not hls) captions are enabled in a room. Look for any transcriptions being in a started state in the room data.
```js
-const captionsEnabled = (
- hmsInstance.getRoom()
- ?.transcriptions
- ?.some((transcription) => {
- return transcription.state === TranscriptionState.STARTED;
- })
- ) || false; // Using `false` as default
+const captionsEnabled =
+ hmsInstance.getRoom()?.transcriptions?.some((transcription) => {
+ return transcription.state === TranscriptionState.STARTED;
+ }) || false; // Using `false` as default
```
-
## How to implement captions?
Implement `fun onTranscripts(transcripts: HmsTranscripts)` in the `HMSUpdateListener` callback.
-
## Toggling Live Transcripts
+
To save on cost, live transcriptions can be disabled for everyone at runtime and toggled on again when required.
```js
// Start Real Time Transcription
try {
- await hmsInstance.startRealTimeTranscription()
+ await hmsInstance.startRealTimeTranscription();
} catch (error) {
- // Handle error occurred while starting Transcription
+ // Handle error occurred while starting Transcription
}
```
```js
// Stop Real Time Transcription
try {
- await hmsInstance.stopRealTimeTranscription()
+ await hmsInstance.stopRealTimeTranscription();
} catch (error) {
- // Handle error occurred while starting Transcription
+ // Handle error occurred while starting Transcription
}
```
@@ -71,24 +65,23 @@ When Live Transcripts are toggled for room, you get `TRANSCRIPTIONS_UPDATED` upd
```js
hmsInstance.addEventListener(
- HMSUpdateListenerActions.ON_ROOM_UPDATE,
- (data: { room: HMSRoom; type: HMSRoomUpdate; }) => {
-
- if (data.type === HMSRoomUpdate.TRANSCRIPTIONS_UPDATED) {
- // Handle Transcriptions Update like you may update UI if transcriptions were started or stopped
-
- const captionTranscription = data.room.transcriptions?.find(
- (transcription) => transcription.mode === TranscriptionsMode.CAPTION
- );
-
- if (captionTranscription?.state === TranscriptionState.STARTED) {
- // Transcriptions Started in Room
- } else if (captionTranscription?.state === TranscriptionState.STOPPED) {
- // Transcriptions Stopped in Room
- } else if (captionTranscription?.state === TranscriptionState.FAILED) {
- // Transcriptions failed to Start or Stop
- }
+ HMSUpdateListenerActions.ON_ROOM_UPDATE,
+ (data: { room: HMSRoom, type: HMSRoomUpdate }) => {
+ if (data.type === HMSRoomUpdate.TRANSCRIPTIONS_UPDATED) {
+ // Handle Transcriptions Update like you may update UI if transcriptions were started or stopped
+
+ const captionTranscription = data.room.transcriptions?.find(
+ (transcription) => transcription.mode === TranscriptionsMode.CAPTION
+ );
+
+ if (captionTranscription?.state === TranscriptionState.STARTED) {
+ // Transcriptions Started in Room
+ } else if (captionTranscription?.state === TranscriptionState.STOPPED) {
+ // Transcriptions Stopped in Room
+ } else if (captionTranscription?.state === TranscriptionState.FAILED) {
+ // Transcriptions failed to Start or Stop
+ }
+ }
}
- }
);
```
diff --git a/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background.mdx b/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background.mdx
index 5d1e9b9318..e6a2b994e3 100644
--- a/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background.mdx
+++ b/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background.mdx
@@ -1,5 +1,5 @@
---
-title: Virtual Background Plugin (Beta)
+title: Virtual Background Plugin
nav: 13.3
---
@@ -13,19 +13,19 @@ This guide provides an overview of usage of the Virtual Background plugin of 100
## Minimum Requirements
-- Minimum `@100mslive/react-native-hms` SDK version is `^1.10.6`
-- `@100mslive/react-native-video-plugin` library is required
-
+- Minimum `@100mslive/react-native-hms` SDK version is `^1.10.6`
+- `@100mslive/react-native-video-plugin` library is required
## Limitations
### Android
-- Has poor fps on older android phones
+
+- Has poor fps on older android phones
### iOS
-- Minimum iOS version required to support Virtual Background plugin is `iOS 15`
-- Virtual background plugin is in beta stage and may have performance issues on iPhone X, 8, 7, 6 and other older devices. We recommend that you use this feature on a high performance device for smooth experience.
+- Minimum iOS version required to support Virtual Background plugin is `iOS 16`
+- Virtual background plugin may have performance issues on older iPhone devices. We recommend that you use this feature on a high performance device for smooth experience.
## Usage
diff --git a/docs/react-native/v2/release-notes/release-notes.mdx b/docs/react-native/v2/release-notes/release-notes.mdx
index 5585d527b2..555bf7e71a 100644
--- a/docs/react-native/v2/release-notes/release-notes.mdx
+++ b/docs/react-native/v2/release-notes/release-notes.mdx
@@ -5,12 +5,289 @@ nav: 4.1
## Latest Versions
-| Package | Version |
-| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
-| @100mslive/react-native-room-kit | [](https://www.npmjs.com/package/@100mslive/react-native-room-kit) |
-| @100mslive/react-native-hms | [](https://www.npmjs.com/package/@100mslive/react-native-hms) |
-| @100mslive/react-native-video-plugin | [](https://www.npmjs.com/package/@100mslive/react-native-video-plugin) |
+| Package | Version |
+| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
+| @100mslive/react-native-room-kit | [](https://www.npmjs.com/package/@100mslive/react-native-room-kit) |
+| @100mslive/react-native-hms | [](https://www.npmjs.com/package/@100mslive/react-native-hms) |
+| @100mslive/react-native-video-plugin | [](https://www.npmjs.com/package/@100mslive/react-native-video-plugin) |
+## 1.13.2 - 2026-06-22
+
+Patch release. Fixes the local peer's video appearing black/frozen to remote peers after the app is backgrounded.
+
+| Package | Version |
+| -------------------------------- | ------- |
+| @100mslive/react-native-hms | 1.12.3 |
+| @100mslive/react-native-room-kit | 1.3.2 |
+
+### react-native-hms
+
+- **Fixed: peer video goes black/frozen on the remote side after the app is backgrounded.** When the app was sent to the background while publishing video, Android revoked the camera and the local peer's video stayed frozen/black for remote peers until they manually toggled (mute/unmute) their video. The bundled native Android SDK is bumped to `2.9.84`, which automatically re-acquires the camera when the app returns to the foreground. ([#1666](https://github.com/100mslive/100ms-react-native/issues/1666))
+
+### react-native-room-kit
+
+- Bumps the `@100mslive/react-native-hms` peer dependency to `1.12.3` to pick up the camera-recovery fix above.
+
+## 2.0.0-alpha.3 - 2026-06-22
+
+Patch release for the **2.0.0-alpha** track — forward-ports the camera-recovery-after-background fix to the new-architecture line.
+
+| Package | Version |
+| ------------------------------------ | ------------- |
+| @100mslive/react-native-hms | 2.0.0-alpha.3 |
+| @100mslive/react-native-room-kit | 2.0.0-alpha.2 |
+| @100mslive/react-native-video-plugin | 2.0.0-alpha.0 |
+
+`latest` still points at the `1.x` line — existing customers are unaffected.
+
+### react-native-hms
+
+- Same camera-recovery fix as `1.12.3` (bundled native Android SDK `2.9.84`): re-acquires the camera when the app returns to the foreground after the OS revokes it while backgrounded. ([#1666](https://github.com/100mslive/100ms-react-native/issues/1666))
+
+### react-native-room-kit
+
+- Bumps the `@100mslive/react-native-hms` peer dependency to `2.0.0-alpha.3`.
+
+## 2.0.0-alpha.2 - 2026-05-21
+
+Patch release for the **2.0.0-alpha** track. Fixes an iOS build failure under `use_frameworks! :linkage => :static` — the default Podfile setting in Expo SDK 54+. Bare React Native apps and Expo SDK ≤53 were not affected by alpha.1.
+
+| Package | Version |
+| ------------------------------------ | ------------- |
+| @100mslive/react-native-hms | 2.0.0-alpha.2 |
+| @100mslive/react-native-room-kit | 2.0.0-alpha.1 |
+| @100mslive/react-native-video-plugin | 2.0.0-alpha.0 |
+
+### Install
+
+```bash
+npm install @100mslive/react-native-hms@alpha \
+ @100mslive/react-native-room-kit@alpha \
+ @100mslive/react-native-video-plugin@alpha
+```
+
+`latest` still points at the `1.x` line — existing customers are unaffected.
+
+### react-native-hms
+
+- **Fix iOS build under `use_frameworks! :linkage => :static`.** The auto-generated Swift bridging header (`react_native_hms-Swift.h`) couldn't be located, and the React types it referenced (`RCTViewManager`, `RCTEventEmitter`, `RCTDirectEventBlock`) weren't visible to consumers under framework-mode linkage. The `.mm` files now use `__has_include` to pick the working header path and explicitly import the React headers they need before including the Swift bridging header. Reported by an Expo SDK 54 / RN 0.81.5 customer.
+
+### react-native-room-kit
+
+- Peer-dep refresh only — no source changes. Bumps `@100mslive/react-native-hms` peer dependency to `2.0.0-alpha.2` so the alpha-track install pulls the iOS fix automatically.
+
+Uses Android SDK 2.9.78 & iOS SDK 1.17.0
+
+**Full Changelog**: [2.0.0-alpha.1...2.0.0-alpha.2](https://github.com/100mslive/100ms-react-native/compare/2.0.0-alpha.1...2.0.0-alpha.2)
+
+## 2.0.0-alpha - 2026-05-15
+
+| Package | Version |
+| ------------------------------------ | ------------- |
+| @100mslive/react-native-hms | 2.0.0-alpha.1 |
+| @100mslive/react-native-room-kit | 2.0.0-alpha.0 |
+| @100mslive/react-native-video-plugin | 2.0.0-alpha.0 |
+
+## Highlights
+
+First **alpha release** on React Native's **New Architecture** (TurboModules + Fabric + bridgeless mode). The SDK natively integrates with new-arch apps — no longer relying on RN's Interop Layer shim. Consumers whose apps already use `newArchEnabled=true` can adopt without forking. See the latest entry above for install instructions.
+
+### Phase 0 (1.13.1) → Phase 1 (2.0.0-alpha)
+
+`1.13.1` made the SDK *survive* under new-arch apps via React Native's **Interop Layer** — a built-in shim that translates new-arch calls back to the old module API. The SDK's internals stayed old-arch; the Interop Layer did the translation. Useful, but you pay a translation cost on every call and can't reach the new-arch performance benefits.
+
+`2.0.0-alpha` replaces the shim with **native new-arch implementation**: TurboModule entry points, Fabric component views, codegen-typed JS↔native contracts, lazy module initialization. The SDK now speaks new-arch directly.
+
+Both releases work in new-arch apps. Pick `2.0.0-alpha` if you want the actual performance benefits (synchronous view measurement, lower per-call overhead, faster cold start) — or if you use libraries that require a fully native new-arch dep tree (`react-native-reanimated` 4.x, `react-native-gesture-handler` 2.31+, etc.).
+
+### What's new
+
+- Full New Architecture support — TurboModule + Fabric component view + bridgeless event dispatch
+- Backwards compatible — the SDK still works under `newArchEnabled=false`
+- Lazy module initialization — faster cold start; modules load on first JS access instead of at app launch
+- Codegen-typed JS↔native contract — compile-time enforcement, fewer runtime "wrong-shape" bugs
+
+### Breaking changes
+
+- **iOS `setupPIP()` rejects instead of crashing.** Previously crashed with "unrecognized selector"; now returns a rejected promise with code `HMS_PLATFORM_UNSUPPORTED`. Add a `.catch()` handler if you weren't already.
+
+- **`` raw native event `onChange` renamed to `onResolutionChange`.** Only affects code that imported the raw Fabric component directly — the public `HmsView` wrapper exposes no event prop, so consumers using the documented API see no change.
+
+Uses Android SDK 2.9.78 & iOS SDK 1.17.0
+
+**Full Changelog**: [1.13.1...2.0.0-alpha.1](https://github.com/100mslive/100ms-react-native/compare/1.13.1...2.0.0-alpha.1)
+
+## 1.13.1 - 2026-05-07
+
+| Package | Version |
+| --------------------------- | ------- |
+| @100mslive/react-native-hms | 1.12.2 |
+
+### react-native-hms
+
+- **React Native New Architecture Interop Layer support.** The SDK now works in apps with `newArchEnabled=true` via RN's built-in Interop Layer. Resolves [#1428](https://github.com/100mslive/100ms-react-native/issues/1428) where `HMSSDK.build()` crashed on iOS under new-arch + Expo SDK 51 / RN 0.74+. Old-arch consumers see no change in behavior.
+
+Uses Android SDK 2.9.78 & iOS SDK 1.17.0
+
+**Full Changelog**: [1.13.0...1.13.1](https://github.com/100mslive/100ms-react-native/compare/1.13.0...1.13.1)
+
+## 1.13.0 - 2026-04-30
+
+| Package | Version |
+| -------------------------------- | ------- |
+| @100mslive/react-native-room-kit | 1.3.1 |
+| @100mslive/react-native-hms | 1.12.1 |
+
+### react-native-hms
+
+- Fixed Android build failure on React Native 0.81+ with Kotlin 2.1.x (Expo SDK 54)
+
+ `:compileDebugKotlin` was failing with `Return type mismatch: expected MutableMap, actual Map` and `Unresolved reference: currentActivity`. Aligned `ViewManager` override return types with the Java parent (`Map` instead of `MutableMap`) and routed bare `currentActivity` accesses through `reactApplicationContext.currentActivity` for compatibility with stricter Kotlin 2.x type checking and newer React Native versions.
+
+### react-native-room-kit
+
+- Bumped `@100mslive/react-native-hms` dependency to `1.12.1` so room-kit consumers automatically pick up the Android build fix above
+
+Uses Android SDK 2.9.78 & iOS SDK 1.17.0
+
+**Full Changelog**: [1.12.0...1.13.0](https://github.com/100mslive/100ms-react-native/compare/1.12.0...1.13.0)
+
+## 1.12.0 - 2025-10-28
+
+| Package | Version |
+| ------------------------------------ | ------- |
+| @100mslive/react-native-room-kit | 1.3.0 |
+| @100mslive/react-native-hms | 1.12.0 |
+| @100mslive/react-native-video-plugin | 1.1.0 |
+
+## Highlights
+
+This is a major release bringing **React Native 0.77+ support**, **Android 16KB page size compliance** for Google Play 2025 requirements, and significant modernization of the SDK build system. This release includes breaking changes - please review the migration guide below.
+
+### Key Improvements
+
+- ⚡ **React Native 0.77.3 Support** - Full compatibility with the latest React Native version with improved performance and stability
+- 📱 **Android 16KB Page Size Compliance** - Ready for Google Play's 2025 requirements for Android 15+ devices
+- 📷 **Modernized QR Code Scanner** - Migrated to react-native-vision-camera 4.7.2 with ML Kit for better performance
+- 🏗️ **Build System Modernization** - Updated to AGP 8.7.2, Gradle 8.11.1, Kotlin 2.0.21, and Java 17
+- 🚀 **Performance Improvements** - Major dependency updates across 20+ packages
+
+## react-native-hms (1.12.0)
+
+### React Native 0.77.3 Support
+
+The SDK now fully supports React Native 0.77.3 (upgraded from 0.71.19), bringing 6 major versions of improvements including:
+
+- Enhanced performance and stability
+- Latest React 18.3.1 features
+- Improved developer experience
+- Better TypeScript support
+
+### Android 16KB Page Size Compliance
+
+Full compliance with Google Play's 2025 requirements for Android 15+ devices:
+
+- NDK r27 support with 16KB page size
+- Experimental flags enabled for compatibility
+- Ready for next-generation Android devices
+- Ensures your app won't be blocked on Google Play
+
+### Architecture Updates
+
+- **64-bit Only Support**: Dropped 32-bit architectures (armeabi-v7a, x86) to support modern Android requirements
+- **Supported Architectures**: arm64-v8a, x86_64
+- Improved performance on modern devices
+
+### Native SDK Updates
+
+- **Android SDK**: Updated to **2.9.78** (from 2.9.69)
+- **iOS SDK**: Updated to **1.17.0** (from 1.16.5)
+- Includes latest bug fixes, performance improvements, and new features from native SDKs
+
+### Modernized Build System
+
+**Android:**
+
+- Android Gradle Plugin: 8.7.2
+- Gradle: 8.11.1
+- Kotlin: 2.0.21
+- Java: 17 (minimum required)
+- Target SDK: 35
+- Compile SDK: 35
+- Minimum SDK: 24 (Android 7.0)
+
+**iOS:**
+
+- Minimum iOS: 16.0 (from 13.0)
+- Updated Podfile for RN 0.77.3 compatibility
+- New Architecture explicitly disabled for stability
+
+### Technical Improvements
+
+- Fixed TypeScript event emitter and session store imports
+- Improved build performance with modern tooling
+- Better type safety and developer experience
+- Removed Flipper support (deprecated)
+- Package namespace updated: com.rnexample → live.hms.rn
+- MainApplication migrated from Java to Kotlin
+
+## react-native-room-kit (1.3.0)
+
+### Major Dependency Updates
+
+Updated core dependencies for better performance, stability, and RN 0.77.3 compatibility:
+
+| Package | Old Version | New Version |
+| ------------------------------ | ----------- | ----------- |
+| react-native-reanimated | 3.4.2 | 3.16.7 |
+| react-native-screens | 3.25.0 | 4.18.0 |
+| react-native-gesture-handler | 2.15.0 | 2.22.0 |
+| react-native-safe-area-context | 3.3.0 | 5.6.1 |
+| react-native-permissions | 3.4.0 | 4.1.5 |
+| lottie-react-native | 6.7.2 | 7.3.4 |
+| react-native-device-info | 11.1.0 | 14.0.0 |
+| @shopify/flash-list | 1.4.3 | 1.7.1 |
+| zustand | - | 5.0.8 (new) |
+
+### Technical Improvements
+
+- Fixed TypeScript AnimatedStyleProp type errors
+- Improved keyboard avoiding view type safety
+- Added 5 critical patches for RN 0.77.3 compatibility using patch-package
+- Security fixes from npm audit
+- Better performance with updated dependencies
+
+---
+
+## Breaking Changes
+
+### Minimum Requirements Updated
+
+| Requirement | Previous | New | Impact |
+| ---------------- | ------------ | ------------------------- | ----------------- |
+| **Android** | 5.0 (API 21) | **7.0 (API 24)** | ~2.6% of devices |
+| **iOS** | 13.0 | **16.0** | ~5% of devices |
+| **React Native** | 0.60+ | **0.77.3+** | Major upgrade |
+| **Node.js** | 14+ | **18+** (22+ recommended) | - |
+| **Java** | 8/11 | **17+** | Build requirement |
+
+### Architecture Changes
+
+- **32-bit Android devices no longer supported**
+ - Dropped: armeabi-v7a, x86
+ - Supported: arm64-v8a, x86_64 only
+ - Reason: Required for 16KB page size compliance and modern Android
+
+### Peer Dependencies
+
+- React Native peer dependency updated to `>=0.77.3`
+- React peer dependency updated to `>=18.2.0`
+
+## Version Details
+
+**Uses Android SDK 2.9.78 & iOS SDK 1.17.0**
+
+**Full Changelog**: [1.11.0...1.12.0](https://github.com/100mslive/100ms-react-native/compare/1.11.0...1.12.0)
## 1.11.0 - 2024-10-29
@@ -21,44 +298,43 @@ nav: 4.1
### react-native-hms
-- Added namespace in Android to support compile target 34 and above
+- Added namespace in Android to support compile target 34 and above
-- Resolved an issue in PIP on Android where screen could be stuck when switching to PIP mode fails
+- Resolved an issue in PIP on Android where screen could be stuck when switching to PIP mode fails
### react-native-room-kit
-- Disabled capturing of network quality in Preview screen by default
+- Disabled capturing of network quality in Preview screen by default
Uses Android SDK 2.9.69 & iOS SDK 1.16.5
**Full Changelog**: [1.10.9...1.11.0](https://github.com/100mslive/react-native-hms/compare/1.10.9...1.11.0)
-
## 1.10.9 - 2024-07-31
-| Package | Version |
-| -------------------------------- | ------- |
-| @100mslive/react-native-room-kit | 1.2.2 |
-| @100mslive/react-native-hms | 1.10.9 |
-| @100mslive/react-native-video-plugin | 1.0.0 |
+| Package | Version |
+| ------------------------------------ | ------- |
+| @100mslive/react-native-room-kit | 1.2.2 |
+| @100mslive/react-native-hms | 1.10.9 |
+| @100mslive/react-native-video-plugin | 1.0.0 |
### react-native-hms
-- Added support for runtime permission handling in Android
+- Added support for runtime permission handling in Android
Users can now request runtime permissions for Camera, Microphone on Android devices. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/set-up-video-conferencing/permissions).
-- Added support for running apps on Android 14
+- Added support for running apps on Android 14
-- Corrected return types of APIs to be more consistent
+- Corrected return types of APIs to be more consistent
### react-native-room-kit
-- Added support for default state of Noise Cancellation when entering a Room
+- Added support for default state of Noise Cancellation when entering a Room
Users can now set the default state of Noise Cancellation when entering a Room. This can be set in the Prebuilt Customizer.
-- Added support for Switching Role of a Peer in Prebuilt UI
+- Added support for Switching Role of a Peer in Prebuilt UI
Users can now switch the role of a Peer in the Prebuilt UI. This can be done by clicking on the Peer's name in the Participants List or on the Remote Peer Settings icon.
@@ -66,7 +342,6 @@ Uses Android SDK 2.9.64 & iOS SDK 1.15.0
**Full Changelog**: [1.10.8...1.10.9](https://github.com/100mslive/react-native-hms/compare/1.10.8...1.10.9)
-
## 1.10.8 - 2024-07-10
| Package | Version |
@@ -76,13 +351,13 @@ Uses Android SDK 2.9.64 & iOS SDK 1.15.0
### react-native-hms
-- Added support for PIP Mode in iOS
+- Added support for PIP Mode in iOS
Users can now switch to Picture-in-Picture mode on iOS devices while in a Room. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/set-up-video-conferencing/render-video/pip-mode).
### react-native-room-kit
-- Added support for PIP Mode in Prebuilt UI
+- Added support for PIP Mode in Prebuilt UI
Users can now switch to Picture-in-Picture mode in the Prebuilt UI.
@@ -90,24 +365,23 @@ Uses Android SDK 2.9.62 & iOS SDK 1.13.0
**Full Changelog**: [1.10.7...1.10.8](https://github.com/100mslive/react-native-hms/compare/1.10.7...1.10.8)
-
## 1.10.7 - 2024-07-01
-| Package | Version |
-| -------------------------------- | ------- |
-| @100mslive/react-native-room-kit | 1.2.0 |
-| @100mslive/react-native-hms | 1.10.7 |
-| @100mslive/react-native-video-plugin | 0.1.2 |
+| Package | Version |
+| ------------------------------------ | ------- |
+| @100mslive/react-native-room-kit | 1.2.0 |
+| @100mslive/react-native-hms | 1.10.7 |
+| @100mslive/react-native-video-plugin | 0.1.2 |
### react-native-hms
-- Live Transcriptions in WebRTC Calls
+- Live Transcriptions in WebRTC Calls
HMSSDK now provides support for Live Transcriptions in WebRTC calls. Users can now enable/disable Live Transcriptions during a call. The SDK provides a callback with the transcript for each peer when they speak. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/live-captions).
### react-native-room-kit
-- Introducing Live Transcriptions options in Prebuilt
+- Introducing Live Transcriptions options in Prebuilt
Prebuilt now supports live transcription for better accessibility. Users can enable or disable live transcription from the prebuilt interface.
@@ -115,46 +389,42 @@ Uses Android SDK 2.9.60 & iOS SDK 1.12.0
**Full Changelog**: [1.10.6...1.10.7](https://github.com/100mslive/react-native-hms/compare/1.10.6...1.10.7)
-
## 1.10.6 - 2024-06-10
-| Package | Version |
-| -------------------------------- | ------- |
-| @100mslive/react-native-room-kit | 1.1.9 |
-| @100mslive/react-native-hms | 1.10.6 |
-| @100mslive/react-native-video-plugin | 0.1.2 |
+| Package | Version |
+| ------------------------------------ | ------- |
+| @100mslive/react-native-room-kit | 1.1.9 |
+| @100mslive/react-native-hms | 1.10.6 |
+| @100mslive/react-native-video-plugin | 0.1.2 |
### react-native-hms
-- Introducing Virtual Background support in 100ms
+- Introducing Virtual Background support in 100ms
HMSSDK now provides support for Virtual Background using [`@100mslive/react-native-video-plugin`](https://github.com/100mslive/react-native-video-plugin).
It allows users to change their background during a call. Users can choose from a variety of backgrounds or upload their own custom background.
It also provides a feature to blur the background. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background).
-- Resolved warnings on Android & iOS when using HMSSDK in development mode
+- Resolved warnings on Android & iOS when using HMSSDK in development mode
### react-native-room-kit
-- Added support for Virtual Background in Prebuilt UI
+- Added support for Virtual Background in Prebuilt UI
By just adding [`@100mslive/react-native-video-plugin`](https://github.com/100mslive/react-native-video-plugin) package, users can now change their background during a call using the Virtual Background feature in the Prebuilt UI.
-- Added support for Hyperlinks in Chat Messages on Prebuilt UI
+- Added support for Hyperlinks in Chat Messages on Prebuilt UI
Users can now click on hyperlinks in chat messages to open them in a browser.
### react-native-video-plugin
-- The first version of the plugin is released. It provides support for Virtual Background in 100ms. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background).
-
+- The first version of the plugin is released. It provides support for Virtual Background in 100ms. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/virtual-background).
Uses Android SDK 2.9.59 & iOS SDK 1.11.0
**Full Changelog**: [1.10.5...1.10.6](https://github.com/100mslive/react-native-hms/compare/1.10.5...1.10.6)
-
-
## 1.10.5 - 2024-05-15
| Package | Version |
@@ -164,28 +434,26 @@ Uses Android SDK 2.9.59 & iOS SDK 1.11.0
### react-native-hms
-- Introducing Whiteboard support in 100ms
+- Introducing Whiteboard support in 100ms
HMSSDK now provides support for Whiteboard. You can now start/stop a Whiteboard using `startWhiteboard` & `stopWhiteboard` methods on `HMSInteractivityCenter`. HMSSDK provides also provides callbacks for whiteboard start/stop events. Learn more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/whiteboard).
-
### react-native-room-kit
-- Whiteboard
+- Whiteboard
Whiteboard is now supported in the Prebuilt UI. Users can now start/stop a Whiteboard using the Whiteboard button in the Prebuilt UI.
-- Updated PIP Mode support for HLS Player
+- Updated PIP Mode support for HLS Player
PIP Mode is now supported in the HLS Player UI. Users can now switch to PIP mode while watching a video in the HLS Player.
-- Resolved an issue where tile content was clipping from bottom in the Prebuilt UI
+- Resolved an issue where tile content was clipping from bottom in the Prebuilt UI
Uses Android SDK 2.9.56 & iOS SDK 1.10.0
**Full Changelog**: [1.10.4...1.10.5](https://github.com/100mslive/react-native-hms/compare/1.10.4...1.10.5)
-
## 1.10.4 - 2024-04-26
| Package | Version |
@@ -195,7 +463,7 @@ Uses Android SDK 2.9.56 & iOS SDK 1.10.0
### react-native-hms
-- Support for captions in HLS Player
+- Support for captions in HLS Player
HMSSDK now provides support for Closed Captions in HLS Player. You can now check the support of captions in the stream, and enable or disable captions in the HLS Player using the methods available on its `ref`
@@ -203,25 +471,22 @@ Uses Android SDK 2.9.56 & iOS SDK 1.10.0
Learn more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/record-and-live-stream/hls-player#how-to-enable-or-disable-closed-captions).
-
### react-native-room-kit
-- Support for captions in HLS Player UI
-HLS Player now supports captions for better accessibility. This can be enabled or disabled from the player settings.
+- Support for captions in HLS Player UI
+ HLS Player now supports captions for better accessibility. This can be enabled or disabled from the player settings.
-- Updated Chat message design in the new HLS Player UI
+- Updated Chat message design in the new HLS Player UI
-- Added new controls for the HLS video player
-Added controls are - "Go Live", "Seekbar", "Closed Captions", "Pause", "Resume" and "Seek forward/backwards"
-
-- Added support for "Pinch and Zoom" in the HLS Player UI
+- Added new controls for the HLS video player
+ Added controls are - "Go Live", "Seekbar", "Closed Captions", "Pause", "Resume" and "Seek forward/backwards"
+- Added support for "Pinch and Zoom" in the HLS Player UI
Uses Android SDK 2.9.54 & iOS SDK 1.9.0
**Full Changelog**: [1.10.3...1.10.4](https://github.com/100mslive/react-native-hms/compare/1.10.3...1.10.4)
-
## 1.10.3 - 2024-04-15
| Package | Version |
@@ -231,17 +496,16 @@ Uses Android SDK 2.9.54 & iOS SDK 1.9.0
### react-native-room-kit
-- Added revamped HLS Player UI in Prebuilt
+- Added revamped HLS Player UI in Prebuilt
-- Added support for both Portrait & Landscape orientations in HLS Player UI
+- Added support for both Portrait & Landscape orientations in HLS Player UI
-- More enhancements in HLS Player UI will be released soon!
+- More enhancements in HLS Player UI will be released soon!
Using Android SDK 2.9.53 & iOS SDK 1.8.0
**Full Changelog**: [1.10.2...1.10.3](https://github.com/100mslive/react-native-hms/compare/1.10.2...1.10.3)
-
## 1.10.2 - 2024-04-08
| Package | Version |
@@ -251,25 +515,24 @@ Using Android SDK 2.9.53 & iOS SDK 1.8.0
### react-native-hms
-- Added Active Noise Cancellation support in SDK. This feature can be used to reduce background noise during a call. Read more details [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/noise-cancellation).
+- Added Active Noise Cancellation support in SDK. This feature can be used to reduce background noise during a call. Read more details [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/noise-cancellation).
-- Added support for showing Session Initiation Protocol(SIP) Peers in Room. Read more about SIP [here](https://www.100ms.live/docs/server-side/v2/how-to-guides/Session%20Initiation%20Protocol%20(SIP)/SIP-Interconnect).
+- Added support for showing Session Initiation Protocol(SIP) Peers in Room. Read more about SIP [here]().
-- Added support for passing Hand Raise as a layout config in Prebuilt Customizer.
+- Added support for passing Hand Raise as a layout config in Prebuilt Customizer.
### react-native-room-kit
-- Added support for showing Noise Cancellation option in Preview & Room screens.
+- Added support for showing Noise Cancellation option in Preview & Room screens.
-- Added support for appropriately indicating [SIP](https://www.100ms.live/docs/server-side/v2/how-to-guides/Session%20Initiation%20Protocol%20(SIP)/SIP-Interconnect) Peers in the Room.
+- Added support for appropriately indicating [SIP]() Peers in the Room.
-- Using Hand Raise config to show/hide the Hand Raise button in the Prebuilt UI.
+- Using Hand Raise config to show/hide the Hand Raise button in the Prebuilt UI.
Updated to Android SDK 2.9.53 & iOS SDK 1.8.0
**Full Changelog**: [1.10.1...1.10.2](https://github.com/100mslive/react-native-hms/compare/1.10.1...1.10.2)
-
## 1.10.1 - 2024-03-15
| Package | Version |
@@ -279,15 +542,15 @@ Updated to Android SDK 2.9.53 & iOS SDK 1.8.0
### react-native-hms
-- Added support for `switchAudioOutput` on iOS. An example usage of this API can be to programmatically route the audio of the Room to Earpiece or Speaker. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/configure-your-device/speaker/audio-output-routing).
+- Added support for `switchAudioOutput` on iOS. An example usage of this API can be to programmatically route the audio of the Room to Earpiece or Speaker. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/configure-your-device/speaker/audio-output-routing).
-- Added API to keep device awake while in Room. This can be used to prevent the device from going to sleep while in a Room. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/set-up-video-conferencing/keep-awake).
+- Added API to keep device awake while in Room. This can be used to prevent the device from going to sleep while in a Room. Read more about it [here](https://www.100ms.live/docs/react-native/v2/how-to-guides/set-up-video-conferencing/keep-awake).
### react-native-room-kit
-- Added support for joining a Room in Prebuilt using only the Auth Token instead of Room Code.
+- Added support for joining a Room in Prebuilt using only the Auth Token instead of Room Code.
-- Users can now skip the Preview Screen based on a flag in the Prebuilt Customizer to directly enter a Room.
+- Users can now skip the Preview Screen based on a flag in the Prebuilt Customizer to directly enter a Room.
Updated to Android SDK 2.9.51 & iOS SDK 1.6.0
@@ -928,7 +1191,7 @@ Full Changelog: [1.0.0...1.1.0](https://github.com/100mslive/react-native-hms/co
```js
// you can now directly access local peer from HMSRoom object returned in `ON_JOIN` event listener
- const onJoinSuccess = (data: {room: HMSRoom}) => {
+ const onJoinSuccess = (data: { room: HMSRoom }) => {
console.log('local peer: ', data.room.localPeer);
};
```
diff --git a/docs/server-side/v2/api-reference/Rooms/create-via-api.mdx b/docs/server-side/v2/api-reference/Rooms/create-via-api.mdx
index b06cf8f5a6..a02c163769 100644
--- a/docs/server-side/v2/api-reference/Rooms/create-via-api.mdx
+++ b/docs/server-side/v2/api-reference/Rooms/create-via-api.mdx
@@ -72,10 +72,10 @@ curl --location --request POST 'https://api.100ms.live/v2/rooms' \
> **Note**: This object enables recording and configuring storage during room creation. But we recommend configuring it at a template level through the [Dashboard](https://dashboard.100ms.live/dashboard), where the config validator can help with validating inputs proactively.
-| Name | Type | Description | Required |
-| :---------- | :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------- |
-| enabled | `boolean` | Enable SFU recording. Disabled by default.
**Note:** This argument is only applicable to enable/disable [SFU recording](/server-side/v2/Destinations/recording). Refer to [RTMP Streaming & Browser Recording](/server-side/v2/api-reference/external-streams/overview) guide for other options. | No |
-| upload_info | `object` | Object of type `upload_info`. This object contains information on recordings storage location.
If you want to store recording with 100ms, and not use your own storage (s3/gs/oss), don't add this to the object.
Check the [upload_info object](#upload-info-arguments) below for more information. | No |
+| Name | Type | Description | Required |
+| :---------- | :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------- |
+| enabled | `boolean` | Enable SFU recording. Disabled by default.
**Note:** This argument is only applicable to enable/disable [SFU recording](/server-side/v2/Destinations/recording). Refer to [RTMP Streaming & Browser Recording](/server-side/v2/api-reference/external-streams/overview) guide for other options. | No |
+| upload_info | `object` | Object of type `upload_info`. This object contains information on recordings storage location.
If you want to store recording with 100ms, and not use your own storage (s3/gs/oss/azure), don't add this to the object.
Check the [upload_info object](#upload-info-arguments) below for more information. | No |
| polls | `array` | Array of poll ids that this room will have. | No |
@@ -88,13 +88,13 @@ To know more about recording please visit [Recording](/server-side/v2/Destinatio
### upload_info arguments
-| Name | Type | Description | Required |
-| :---------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------- | :------- |
-| type | `string` | Upload destination type. Currently, `s3` (AWS), `gs` (Google Cloud Storage), `oss` (Alibaba Cloud) are supported. | Yes |
-| location | `string` | Name of the storage bucket in which you want to store all recordings | Yes |
-| prefix | `string` | Upload prefix path | No |
-| options | `object` | Additional configurations of type `Options` to be used for uploading.
Check the options arguments below for more information. | No |
-| credentials | `object` | Object of type `credentials`. This is used to share the credentials to access the storage bucket specified. | No |
+| Name | Type | Description | Required |
+| :---------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------- | :------- |
+| type | `string` | Upload destination type. Currently, `s3` (AWS), `gs` (Google Cloud Storage), `oss` (Alibaba Cloud), `azure` (Azure Blob Storage) are supported. | Yes |
+| location | `string` | Name of the storage bucket in which you want to store all recordings | Yes |
+| prefix | `string` | Upload prefix path | No |
+| options | `object` | Additional configurations of type `Options` to be used for uploading.
Check the options arguments below for more information. | No |
+| credentials | `object` | Object of type `credentials`. This is used to share the credentials to access the storage bucket specified. | No |
#### Options arguments
diff --git a/docs/server-side/v2/api-reference/Rooms/update-a-room.mdx b/docs/server-side/v2/api-reference/Rooms/update-a-room.mdx
index bd3a324d24..5f3368f1dd 100644
--- a/docs/server-side/v2/api-reference/Rooms/update-a-room.mdx
+++ b/docs/server-side/v2/api-reference/Rooms/update-a-room.mdx
@@ -20,7 +20,7 @@ curl --location --request POST 'https://api.100ms.live/v2/rooms/' \
"recording_info": {
"enabled": true,
"upload_info": {
- "type": "",
+ "type": "",
"location": "",
"prefix": "",
"options": {
diff --git a/docs/server-side/v2/api-reference/analytics/list-webhook-events.mdx b/docs/server-side/v2/api-reference/analytics/list-webhook-events.mdx
new file mode 100644
index 0000000000..a386c2194a
--- /dev/null
+++ b/docs/server-side/v2/api-reference/analytics/list-webhook-events.mdx
@@ -0,0 +1,112 @@
+---
+title: List Webhook Events
+nav: 3.64
+---
+
+This API retrieves webhook delivery history including successful and failed webhook events. It can be used to identify failed webhook deliveries and monitor webhook health.
+
+
+
+
+```bash
+curl --location --request GET \
+ 'https://api.100ms.live/v2/analytics/webhooks?start_time=2025-12-28T00:00:00Z&status=failed&limit=20' \
+ --header 'Authorization: Bearer '
+```
+
+
+
+### Allowed Filters
+To be specified as query parameters
+
+| Name | Type | Description | Required |
+| ----------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
+| start_time | `string` | Start of time range in RFC3339 format (Default: 24 hours ago). Must be within the last 30 days. | no |
+| end_time | `string` | End of time range in RFC3339 format (Default: Now). Must be within 14 days after `start_time`. | no |
+| room_id | `string` | Unique identifier of the room you wish to fetch webhook events for | no |
+| status | `string` | Filter by delivery status: `all`, `failed`, `success` (Default: `all`) | no |
+| event_names | `string` | Filter by original event types (e.g., `session.open.success`).
Can be specified multiple times to include more than one event (for example `event_names=session.open.success&` `event_names=peer.join.success`). (Default: all events) | no |
+| limit | `int` | Items per page (Default: `50`, Min: `1`, Max: `100`) | no |
+| page | `int` | Page number (Default: `1`) | no |
+
+### Response
+
+
+
+```json
+{
+ "events": [
+ {
+ "event_id": "abc123-def456",
+ "event_name": "reporter.webhook.delivery.failed",
+ "room_id": "room-123",
+ "event_timestamp": "2025-12-29T10:30:00Z",
+ "payload": {
+ "event_data": {
+ "session_id": "63f73bf05223403c9671c5c9",
+ "peer_id": "c8e85ab4-d533-4de0-ba7c-4c58a4de6c74",
+ "user_id": "187a1a92-150f-4506-83b7-d8a1cd716fb0"
+ },
+ "webhook_url": "https://example.com/webhook",
+ "original_event_name": "session.open.success",
+ "error_reason": "timeout"
+ }
+ }
+ ],
+ "pagination": {
+ "current_page": 1,
+ "page_size": 50,
+ "total_pages": 10,
+ "total_items": 500,
+ "has_next": true,
+ "has_prev": false
+ },
+ "summary": {
+ "total_events": 500
+ }
+}
+```
+
+
+
+> **Note:** The `error_reason` field is only present for failed webhook events.
+
+### Supported Event Types
+
+You can filter webhooks by the following event types:
+
+| Event Type | Description |
+| -------------------------- | ------------------------------ |
+| `session.open.success` | Session started |
+| `session.close.success` | Session ended |
+| `peer.join.success` | Peer joined the room |
+| `peer.leave.success` | Peer left the room |
+| `recording.success` | Recording completed |
+| `recording.failed` | Recording failed |
+| `transcription.success` | Transcription completed |
+| `beam.started.success` | RTMP/HLS streaming started |
+| `beam.stopped.success` | RTMP/HLS streaming stopped |
+| `beam.recording.success` | Browser recording completed |
+| `hls.recording.success` | HLS recording completed |
+| `stream.recording.success` | Stream recording completed |
+
+### Error Responses
+
+| Error Code | Message | Description |
+|------------|----------------------------------------------|-------------------------------------------------|
+| 400 | start_time must be within the last 30 days | Invalid time range parameters |
+| 400 | end_time must be within 14 days after start_time | Invalid time range parameters |
+| 403 | insufficient permissions | Unauthorized access or invalid management token |
+| 429 | rate limit exceeded, retry after 45 seconds | Too many requests, rate limit exceeded |
+
+### Why would you use this API?
+
+- **Debug webhook issues:** Retrieve delivery history to analyze failures, identify patterns, and determine when issues occurred
+
+### Postman collection
+
+You can use our Postman collection to start exploring 100ms APIs.
+
+[](https://god.gw.postman.com/run-collection/22726679-47dcd974-29d5-4965-a35b-bf9b74a8b25a?action=collection%2Ffork&collection-url=entityId%3D22726679-47dcd974-29d5-4965-a35b-bf9b74a8b25a%26entityType%3Dcollection%26workspaceId%3Dd9145dd6-337b-4761-81d6-21a30b4147a2)
+
+Refer to the [Postman guide](/server-side/v2/introduction/postman-guide) to get started with 100ms API collection.
diff --git a/docs/server-side/v2/api-reference/analytics/overview.mdx b/docs/server-side/v2/api-reference/analytics/overview.mdx
index be6b89d8d5..8a154299a0 100644
--- a/docs/server-side/v2/api-reference/analytics/overview.mdx
+++ b/docs/server-side/v2/api-reference/analytics/overview.mdx
@@ -24,12 +24,23 @@ Analytics APIs can be utilized to retrieve events via an HTTP request. By using
- `client.disconnected`
- `client.connect.failed`
+- [List Webhook Events](/server-side/v2/api-reference/analytics/list-webhook-events)
+ - Retrieve webhook delivery history
+
+- [Replay Webhook Events](/server-side/v2/api-reference/analytics/replay-webhook-events)
+ - Replay failed or successful webhooks
+
+- [Peer Quality Stats](/server-side/v2/api-reference/analytics/peer-quality-stats)
+ - Time-series quality metrics (bitrate, packet loss, FPS, RTT) for a peer in a session
+
Event data can be queried up to **last 30 days**.
### What can I build?
- You can use track events to get a better understanding of user activity and build tools around it as explained in [use cases](/server-side/v2/api-reference/analytics/track-events#why-would-you-use-this-api)
- You can use error events to dig deeper into the issues which your users are facing.
+- You can use webhook events to monitor webhook delivery health and replay failed webhooks after recovering from downtime.
+- You can use peer quality stats to debug call quality issues, monitor network conditions, and build custom quality dashboards.
diff --git a/docs/server-side/v2/api-reference/analytics/peer-quality-stats.mdx b/docs/server-side/v2/api-reference/analytics/peer-quality-stats.mdx
new file mode 100644
index 0000000000..37552b93b3
--- /dev/null
+++ b/docs/server-side/v2/api-reference/analytics/peer-quality-stats.mdx
@@ -0,0 +1,210 @@
+---
+title: Peer Quality Stats
+nav: 3.67
+---
+
+Peer Quality Stats API provides time-series quality metrics for a specific peer in a session. Use this to analyze publishing and subscribing performance, including bitrate, packet loss, FPS, round-trip time, and more.
+
+This is useful for debugging call quality issues, monitoring network conditions, and building custom quality dashboards.
+
+This API is not real-time. Quality stats data is only available after the session has ended.
+
+
+
+
+```bash
+curl --location --request GET \
+ 'https://api.100ms.live/v2/analytics/peer-stats?peer_id=&session_id=' \
+ --header 'Authorization: Bearer '
+```
+
+
+
+## Query Parameters
+
+| Name | Type | Description | Required |
+| ---------- | -------- | ------------------------------------------------------------------ | -------- |
+| peer_id | `string` | Unique identifier of the peer/participant | yes |
+| session_id | `string` | Unique identifier of the session | yes |
+
+## Response Object
+
+| Attribute | Type | Description |
+| ----------- | -------- | -------------------------------------------------------------- |
+| peer_id | `string` | Unique identifier of the peer |
+| session_id | `string` | Unique identifier of the session |
+| room_id | `string` | Unique identifier of the room |
+| publisher | `object` | Contains `video` and `audio` arrays with publish-side metrics |
+| subscriber | `object` | Contains `video` and `audio` arrays with subscribe-side metrics|
+
+### Publisher Video Object
+
+| Attribute | Type | Description |
+| ----------- | -------- | --------------------------------------------------------------------------- |
+| track_id | `string` | UUID of the track |
+| type | `string` | Track type: `regular` or `screen` |
+| rid | `string \| null` | Simulcast layer: `h` (high), `m` (medium), `l` (low), or `null` |
+| time_series | `object` | Time-series metrics for the track |
+
+**Publisher video `time_series` fields:**
+
+| Field | Type | Description |
+| ------------------- | ---------- | --------------------------------------- |
+| timestamps | `number[]` | Unix timestamps in milliseconds |
+| bitrate | `number[]` | Bitrate in bits per second |
+| fps | `number[]` | Frames per second |
+| packet_loss_percent | `number[]` | Packet loss as a percentage |
+| rtt_ms | `number[]` | Round-trip time in milliseconds |
+
+### Publisher Audio Object
+
+| Attribute | Type | Description |
+| ----------- | -------- | --------------------------------- |
+| track_id | `string` | UUID of the track |
+| time_series | `object` | Time-series metrics for the track |
+
+**Publisher audio `time_series` fields:**
+
+| Field | Type | Description |
+| ------------------- | ---------- | --------------------------------------- |
+| timestamps | `number[]` | Unix timestamps in milliseconds |
+| bitrate | `number[]` | Bitrate in bits per second |
+| packet_loss_percent | `number[]` | Packet loss as a percentage |
+| rtt_ms | `number[]` | Round-trip time in milliseconds |
+| jitter_ms | `number[]` | Jitter in milliseconds |
+
+### Subscriber Video Object
+
+| Attribute | Type | Description |
+| ----------- | -------- | --------------------------------------- |
+| track_id | `string` | UUID of the track |
+| type | `string` | Track type: `regular` or `screen` |
+| time_series | `object` | Time-series metrics for the track |
+
+**Subscriber video `time_series` fields:**
+
+| Field | Type | Description |
+| ------------ | ---------------- | --------------------------------------- |
+| timestamps | `number[]` | Unix timestamps in milliseconds |
+| bitrate | `number\|null[]` | Bitrate in bits per second, or `null` |
+| fps | `number[]` | Frames per second |
+| freeze_count | `number[]` | Number of video freezes |
+
+### Subscriber Audio Object
+
+| Attribute | Type | Description |
+| ----------- | -------- | --------------------------------- |
+| track_id | `string` | UUID of the track |
+| time_series | `object` | Time-series metrics for the track |
+
+**Subscriber audio `time_series` fields:**
+
+| Field | Type | Description |
+| ------------------- | ---------------- | -------------------------------------------- |
+| timestamps | `number[]` | Unix timestamps in milliseconds |
+| bitrate | `number\|null[]` | Bitrate in bits per second, or `null` |
+| concealed_samples | `number[]` | Number of concealed (interpolated) samples |
+| packet_loss_percent | `number[]` | Packet loss as a percentage |
+
+
+
+```json
+{
+ "peer_id": "1169b4b7-68c2-4d39-8568-5618433958ac",
+ "session_id": "6977b3f3cdd1e423f8b2cxxx",
+ "room_id": "6977b3f3cdd1e423f8b2xxxx",
+ "publisher": {
+ "video": [
+ {
+ "track_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
+ "type": "regular",
+ "rid": "h",
+ "time_series": {
+ "timestamps": [1738843560000, 1738843570000],
+ "bitrate": [2500000, 2480000],
+ "fps": [30, 30],
+ "packet_loss_percent": [0.3, 0.2],
+ "rtt_ms": [45, 47]
+ }
+ },
+ {
+ "track_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
+ "type": "regular",
+ "rid": "m",
+ "time_series": {
+ "timestamps": [1738843560000],
+ "bitrate": [1200000],
+ "fps": [30],
+ "packet_loss_percent": [0.15],
+ "rtt_ms": [45]
+ }
+ },
+ {
+ "track_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
+ "type": "screen",
+ "rid": null,
+ "time_series": {
+ "timestamps": [1738843560000],
+ "bitrate": [800000],
+ "fps": [5],
+ "packet_loss_percent": [0.1],
+ "rtt_ms": [46]
+ }
+ }
+ ],
+ "audio": [
+ {
+ "track_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
+ "time_series": {
+ "timestamps": [1738843560000],
+ "bitrate": [64000],
+ "packet_loss_percent": [0.1],
+ "rtt_ms": [45],
+ "jitter_ms": [2.1]
+ }
+ }
+ ]
+ },
+ "subscriber": {
+ "video": [
+ {
+ "track_id": "4334da7c-1d73-4e19-9d63-4b0571f5acd4",
+ "type": "regular",
+ "time_series": {
+ "timestamps": [1738843560000],
+ "bitrate": [null],
+ "fps": [15],
+ "freeze_count": [0]
+ }
+ }
+ ],
+ "audio": [
+ {
+ "track_id": "fbc9c8f8-70ea-4d24-9699-12bf3eba94d8",
+ "time_series": {
+ "timestamps": [1738843560000],
+ "bitrate": [null],
+ "concealed_samples": [0],
+ "packet_loss_percent": [0.2]
+ }
+ }
+ ]
+ }
+}
+```
+
+
+
+## Notes
+
+- **Authentication**: Requires a management token in the `Authorization: Bearer ` header.
+- **Empty Data**: Arrays will be empty `[]` if no data is available for a given metric.
+- **Simulcast**: For publisher video tracks, the same `track_id` may appear multiple times with different `rid` values (`h`/`m`/`l`) representing different simulcast quality layers.
+
+## Postman collection
+
+You can use our Postman collection to start exploring 100ms APIs.
+
+[](https://god.gw.postman.com/run-collection/22726679-47dcd974-29d5-4965-a35b-bf9b74a8b25a?action=collection%2Ffork&collection-url=entityId%3D22726679-47dcd974-29d5-4965-a35b-bf9b74a8b25a%26entityType%3Dcollection%26workspaceId%3Dd9145dd6-337b-4761-81d6-21a30b4147a2)
+
+Refer to the [Postman guide](/server-side/v2/introduction/postman-guide) to get started with 100ms API collection.
diff --git a/docs/server-side/v2/api-reference/analytics/replay-webhook-events.mdx b/docs/server-side/v2/api-reference/analytics/replay-webhook-events.mdx
new file mode 100644
index 0000000000..7dfc13ff4f
--- /dev/null
+++ b/docs/server-side/v2/api-reference/analytics/replay-webhook-events.mdx
@@ -0,0 +1,220 @@
+---
+title: Replay Webhook Events
+nav: 3.65
+---
+
+Initiates a replay of webhooks that failed to deliver. This is particularly useful when recovering from server downtime or when you need to reprocess events with updated logic.
+
+
+
+
+```bash
+curl --location --request POST \
+ 'https://api.100ms.live/v2/analytics/webhooks/replay' \
+ --header 'Authorization: Bearer ' \
+ --header 'Content-Type: application/json' \
+ --data-raw '{
+ "start_time": "2025-12-28T00:00:00Z",
+ "end_time": "2025-12-29T00:00:00Z",
+ "event_names": ["peer.join.success"]
+ }'
+```
+
+
+
+### Allowed Filters
+To be specified as query parameters
+
+| Name | Type | Description | Required |
+| ----------- | ---------- | ------------------------------------------------------------------------------------------------------------------ | -------- |
+| start_time | `string` | Start of time range to replay in RFC3339 format (Default: 24 hours ago). Must be within the last 30 days. | no |
+| end_time | `string` | End of time range to replay in RFC3339 format (Default: Now). Must be after `start_time` but within 14 days of start time. | no |
+| room_id | `string` | Unique identifier of the room you wish to replay webhooks for | no |
+| event_names | `string[]` | Filter by original event types (e.g., `peer.join.success`) | no |
+| limit | `int` | Max webhooks to replay (Default: `50000`, Max: `50000`) | no |
+| offset | `int` | Skip first N webhooks for pagination (Default: `0`) | no |
+| status | `string` | Filter by delivery status: `all`, `failed`, `success` (Default: `failed`) | no |
+
+### Response
+
+
+
+```json
+{
+ "workflow_id": "webhook-replay-customer123-a1b2c3d4",
+ "status": "started",
+ "message": "Webhook replay has been queued for processing",
+ "filters": {
+ "start_time": "2025-12-28T00:00:00Z",
+ "end_time": "2025-12-29T00:00:00Z",
+ "room_id": "",
+ "event_types": ["peer.join.success", "peer.leave.success"]
+ }
+}
+```
+
+
+
+**Status Values:**
+
+| Status | Description |
+| ----------------- | ----------------------------------------- |
+| `started` | Workflow has been started |
+| `already_running` | Identical replay is already in progress |
+
+
+### Supported Event Types
+
+You can filter specific webhooks to replay by the following event types:
+
+| Event Type | Description |
+| -------------------------- | ------------------------------ |
+| `session.open.success` | Session started |
+| `session.close.success` | Session ended |
+| `peer.join.success` | Peer joined the room |
+| `peer.leave.success` | Peer left the room |
+| `recording.success` | Recording completed |
+| `recording.failed` | Recording failed |
+| `transcription.success` | Transcription completed |
+| `beam.started.success` | RTMP/HLS streaming started |
+| `beam.stopped.success` | RTMP/HLS streaming stopped |
+| `beam.recording.success` | Browser recording completed |
+| `hls.recording.success` | HLS recording completed |
+| `stream.recording.success` | Stream recording completed |
+
+### How Replay Works
+
+Once a replay is triggered, the system:
+
+1. Starts a workflow that fetches webhooks from the database in batches
+2. Each webhook is sent to your configured webhook URL with an `is_replay: true` flag
+3. Webhook replay events are sent at a rate of 10 events per second to your endpoint
+4. Maximum 50,000 webhooks are supported per replay request
+5. Duplicate replay requests with identical filters will automatically reuse the existing workflow
+
+> **Note:** Ensure your webhook endpoints are scaled appropriately before triggering the replay API to handle the incoming event rate.
+
+
+### Pagination for Large Replays
+
+For replays with more than 50,000 webhooks, use pagination by making multiple requests with different offsets:
+
+```bash
+# First batch (0-50,000)
+curl --location --request POST \
+ 'https://api.100ms.live/v2/analytics/webhooks/replay' \
+ --header 'Authorization: Bearer ' \
+ --header 'Content-Type: application/json' \
+ --data-raw '{
+ "start_time": "2025-12-28T00:00:00Z",
+ "limit": 50000,
+ "offset": 0
+ }'
+
+# Second batch (50,000-100,000) - Run after first completes
+curl --location --request POST \
+ 'https://api.100ms.live/v2/analytics/events/webhooks/replay' \
+ --header 'Authorization: Bearer ' \
+ --header 'Content-Type: application/json' \
+ --data-raw '{
+ "start_time": "2025-12-28T00:00:00Z",
+ "limit": 50000,
+ "offset": 50000
+ }'
+```
+
+### Error Responses
+
+| Error Code | Message | Description |
+|------------|---------------------------------------------------|-------------------------------------------------|
+| 400 | start_time must be within the last 30 days | Invalid time range parameters |
+| 400 | end_time must be within 14 days after start_time | Invalid time range parameters |
+| 403 | insufficient permissions | Unauthorized access or invalid management token |
+| 404 | workflow not found | The specified workflow ID does not exist |
+| 429 | rate limit exceeded, retry after 45 seconds | Too many requests, rate limit exceeded |
+| 503 | webhook replay service unavailable | Service is temporarily unavailable |
+
+### Why would you use this API?
+
+- **Recover from downtime:** Replay failed webhooks after your server recovers from an outage or maintenance period
+- **Reprocess events:** Replay specific event types following bug fixes, data corrections, or logic updates in your webhook handler
+
+## Check Replay Results
+
+Monitor the status and progress of a webhook replay workflow.
+
+
+
+
+```bash
+curl --location --request GET \
+ 'https://api.100ms.live/v2/analytics/webhooks/replay/webhook-replay-customer123-a1b2c3d4' \
+ --header 'Authorization: Bearer '
+```
+
+
+
+### Allowed Filters
+To be specified as query parameters
+
+| Name | Type | Description | Required |
+| ----------- | -------- | ------------------------------------------------------- | -------- |
+| workflow_id | `string` | The workflow ID returned from POST /webhooks/replay | yes |
+
+### Response
+
+
+
+```json
+{
+ "workflow_id": "webhook-replay-customer123-a1b2c3d4",
+ "status": "completed",
+ "started_at": "2025-12-29T10:00:00Z",
+ "completed_at": "2025-12-29T10:15:00Z",
+ "filters": {
+ "start_time": "2025-12-28T00:00:00Z",
+ "end_time": "2025-12-29T00:00:00Z",
+ "room_id": "",
+ "event_types": ["peer.join.success"],
+ "limit": 50000,
+ "offset": 0
+ },
+ "progress": {
+ "total": 150,
+ "completed": 148,
+ "failed": 2
+ },
+ "result": {
+ "total": 150,
+ "completed": 148,
+ "failed": 2,
+ "failed_events": ["event-id-1", "event-id-2"]
+ }
+}
+```
+
+
+
+**Status Values:**
+
+| Status | Description |
+| --------------------------- | -------------------------------------------- |
+| `Running` | Workflow is currently processing webhooks |
+| `completed` | All webhooks replayed successfully |
+| `completed_with_failures` | Replay finished but some webhooks failed |
+| `failed` | All webhooks failed to replay |
+| `Canceled` | Workflow was canceled |
+| `Terminated` | Workflow was terminated |
+
+### Why would you use this API?
+
+- **Track workflow progress:** Monitor the total number of events queued for replay, completion counts, and failure rates in real-time
+- **Analyze failure statistics:** Retrieve a detailed list of webhook events that failed to replay within the current workflow for troubleshooting
+
+### Postman collection
+
+You can use our Postman collection to start exploring 100ms APIs.
+
+[](https://god.gw.postman.com/run-collection/22726679-47dcd974-29d5-4965-a35b-bf9b74a8b25a?action=collection%2Ffork&collection-url=entityId%3D22726679-47dcd974-29d5-4965-a35b-bf9b74a8b25a%26entityType%3Dcollection%26workspaceId%3Dd9145dd6-337b-4761-81d6-21a30b4147a2)
+
+Refer to the [Postman guide](/server-side/v2/introduction/postman-guide) to get started with 100ms API collection.
diff --git a/docs/server-side/v2/api-reference/legacy-api-v1/destinations/recording.mdx b/docs/server-side/v2/api-reference/legacy-api-v1/destinations/recording.mdx
index f96e6446d8..ea8104b0e0 100644
--- a/docs/server-side/v2/api-reference/legacy-api-v1/destinations/recording.mdx
+++ b/docs/server-side/v2/api-reference/legacy-api-v1/destinations/recording.mdx
@@ -62,13 +62,13 @@ Another way to enable SFU recording for a room is to choose `Enabled` for record
By default recordings will be uploaded to 100ms storage and a pre-signed URL for the same will be provided to customers via a webhook. The pre-signed URL will expire in 12 hours.
Customers can also configure the recordings to be stored in their cloud storage. Following are the configurations for the same.
-| Name | Type | Description | Required |
-| :---------- | :------- | :---------------------------------------------------------------------------------------------------------------- | :------- |
-| type | `string` | Upload destination type. Currently, `s3` (AWS), `gs` (Google Cloud Storage), `oss` (Alibaba Cloud) are supported. | Yes |
-| location | `string` | Name of the storage bucket in which you want to store all recordings | Yes |
-| prefix | `string` | Upload prefix path | No |
-| options | `object` | Additional configurations of type `Options` to be used for uploading | No |
-| credentials | `object` | Object of type `Credentials`. This is used to share credentials to access the storage bucket specified | No |
+| Name | Type | Description | Required |
+| :---------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------- | :------- |
+| type | `string` | Upload destination type. Currently, `s3` (AWS), `gs` (Google Cloud Storage), `oss` (Alibaba Cloud), `azure` (Azure Blob Storage) are supported. | Yes |
+| location | `string` | Name of the storage bucket in which you want to store all recordings | Yes |
+| prefix | `string` | Upload prefix path | No |
+| options | `object` | Additional configurations of type `Options` to be used for uploading | No |
+| credentials | `object` | Object of type `Credentials`. This is used to share credentials to access the storage bucket specified | No |
Where `Options` is
diff --git a/docs/server-side/v2/api-reference/policy/create-template-via-api.mdx b/docs/server-side/v2/api-reference/policy/create-template-via-api.mdx
index e01a77817e..469b7139e9 100644
--- a/docs/server-side/v2/api-reference/policy/create-template-via-api.mdx
+++ b/docs/server-side/v2/api-reference/policy/create-template-via-api.mdx
@@ -160,7 +160,7 @@ curl --location --request POST 'https://api.100ms.live/v2/templates' \
"region": "in",
"recording": {
"upload": {
- "type": "",
+ "type": "",
"location": "",
"prefix": "",
"options": {
@@ -239,7 +239,7 @@ curl --location --request POST 'https://api.100ms.live/v2/templates' \
"": {
"name": "",
"role": "host",
- "modes": ["recorded", "live"],
+ "modes": ["recorded", "live", "caption"],
"outputModes": [ "txt", "srt", "json" ],
"customVocabulary": ["100ms", "WebSDK", "Flutter", "Sundar", "Pichai", "DALL-E"],
"summary": {
@@ -264,6 +264,13 @@ curl --location --request POST 'https://api.100ms.live/v2/templates' \
"format": "paragraph"
}
]
+ },
+ "translation": {
+ "enabled": true,
+ "roleLanguages": {
+ "host": "es",
+ "guest": "fr"
+ }
}
}
}
@@ -441,7 +448,7 @@ curl --location --request POST 'https://api.100ms.live/v2/templates' \
"recording": {
"upload": {
"location": "",
- "type": "",
+ "type": "",
"prefix": "",
"credentials": {
"key": "",
@@ -695,7 +702,7 @@ curl --location --request POST 'https://api.100ms.live/v2/templates' \
| Name | Type | Description | Required |
| :---------- | :------- | :---------------------------------------------------------------------------------------------------------------- | :------- |
-| type | `string` | Upload destination type. Currently, `s3` (AWS), `gs` (Google Cloud Storage), `oss` (Alibaba Cloud) are supported. | Yes |
+| type | `string` | Upload destination type. Currently, `s3` (AWS), `gs` (Google Cloud Storage), `oss` (Alibaba Cloud), `azure` (Azure Blob Storage) are supported. | Yes |
| location | `string` | Name of the storage bucket in which you want to store all recordings | Yes |
| prefix | `string` | Upload prefix path | Yes |
| options | `object` | Additional configurations of type Options to be used for uploading | No |
@@ -799,11 +806,21 @@ Minimum between `width` and `height` should be in range [144, 1080] and Maximum
| Name | Type | Description | Required |
| ---------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| name | `string` | The name you can assign to identify transcription destination. | Yes |
-| modes | `array` | Array of modes for transcription. Valid values: [ `recorded`, `live` ] (recorded: Transcribe recording post call completion, live: Closed caption for live stream viewers) | No |
+| modes | `array` | Array of modes for transcription. Valid values: [ `recorded`, `live`, `caption` ] (recorded: Transcribe recording post call completion, live: Closed caption for live stream viewers, caption: Real-time closed captions) | No |
| role | `string` | Indicates the role used to transcribe. Roles which are subscribed by the given role will be transcribed. | Yes |
| outputModes | `array` | Array of transcript output modes, valid for recorded mode. Valid values: [ txt, srt, json ] (txt: Plain text, srt: SubRip text, json: Granular timestamped words and sentences) | No |
| customVocabulary | `array` | Array of words that might be spoken during the call. This can consist of non-dictionary words like names, slang, abbreviations and domain specific words. | No |
| summary | `object` | Object of type `summary`. This can be used to enable and configure summary, valid for recorded mode. | No |
+| translation | `object` | Object of type `translation`. This can be used to enable per-role language translation for captions. Only supported in `caption` mode. | No |
+
+#### transcriptions - translation object
+
+> Translation is currently supported only in `caption` mode. It does not apply to `recorded` or `live` transcription modes.
+
+| Name | Type | Description | Required |
+| ------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
+| enabled | `boolean` | Set this to `true` to enable translation for live captions. | No |
+| roleLanguages | `object` | A map of role names to target language codes. Each role receives captions translated into its configured language. Example: `{ "host": "es", "guest": "fr" }` | No |
#### transcriptions - summary object
diff --git a/docs/server-side/v2/api-reference/policy/update-destinations.mdx b/docs/server-side/v2/api-reference/policy/update-destinations.mdx
index 61855fd9b2..05444ab524 100644
--- a/docs/server-side/v2/api-reference/policy/update-destinations.mdx
+++ b/docs/server-side/v2/api-reference/policy/update-destinations.mdx
@@ -76,7 +76,7 @@ curl --location --request POST 'https://api.100ms.live/v2/templates/
```bash
-curl --location --request POST 'https://api.100ms.live/v2//settings' \
+curl --location --request POST 'https://api.100ms.live/v2/templates//settings' \
--header 'Authorization: Bearer ' \
--header 'Content-Type: application/json' \
--data-raw '{
diff --git a/docs/server-side/v2/api-reference/recordings/get-recording.mdx b/docs/server-side/v2/api-reference/recordings/get-recording.mdx
index 8b6b8ed8be..9b4226835f 100644
--- a/docs/server-side/v2/api-reference/recordings/get-recording.mdx
+++ b/docs/server-side/v2/api-reference/recordings/get-recording.mdx
@@ -7,11 +7,11 @@ Use this request to get the recording job object, at any point after it has been
This can be used to fetch recording assets that are generated after the recording has completed.
-
+
```bash
-curl --location --request GET 'https://api.100ms.live/v2/recordings/' \
+curl --location --request GET 'https://api.100ms.live/v2/recordings/' \
--header 'Authorization: Bearer '
```
diff --git a/docs/server-side/v2/api-reference/recordings/pause-recording-for-room.mdx b/docs/server-side/v2/api-reference/recordings/pause-recording-for-room.mdx
index 35ccfe5e10..471723f2a9 100644
--- a/docs/server-side/v2/api-reference/recordings/pause-recording-for-room.mdx
+++ b/docs/server-side/v2/api-reference/recordings/pause-recording-for-room.mdx
@@ -7,11 +7,11 @@ Use this API to pause the recording that is running for a room.
The recording can be [resumed](./resume-recording-for-room) later.
-
+
```bash
-curl --location --request POST 'https://api.100ms.live/v2/recordings//pause' \
+curl --location --request POST 'https://api.100ms.live/v2/recordings/room//pause' \
--header 'Authorization: Bearer ' \
```
diff --git a/docs/server-side/v2/api-reference/recordings/resume-recording-for-room.mdx b/docs/server-side/v2/api-reference/recordings/resume-recording-for-room.mdx
index 0528b4cdab..03ab4a55d0 100644
--- a/docs/server-side/v2/api-reference/recordings/resume-recording-for-room.mdx
+++ b/docs/server-side/v2/api-reference/recordings/resume-recording-for-room.mdx
@@ -5,11 +5,11 @@ nav: 3.147
Use this API to resume the recording that is paused for a room.
-
+
```bash
-curl --location --request POST 'https://api.100ms.live/v2/recordings//resume' \
+curl --location --request POST 'https://api.100ms.live/v2/recordings/room//resume' \
--header 'Authorization: Bearer ' \
```
diff --git a/docs/server-side/v2/api-reference/recordings/stop-recording-by-id.mdx b/docs/server-side/v2/api-reference/recordings/stop-recording-by-id.mdx
index 4f320a6bfd..c73b7086d0 100644
--- a/docs/server-side/v2/api-reference/recordings/stop-recording-by-id.mdx
+++ b/docs/server-side/v2/api-reference/recordings/stop-recording-by-id.mdx
@@ -5,11 +5,11 @@ nav: 3.145
Use this to stop a specific recording by its unique identifier.
-
+
```bash
-curl --location --request POST 'https://api.100ms.live/v2/recordings//stop' \
+curl --location --request POST 'https://api.100ms.live/v2/recordings//stop' \
--header 'Authorization: Bearer ' \
```
@@ -40,3 +40,4 @@ curl --location --request POST 'https://api.100ms.live/v2/recordings/
```
+
diff --git a/docs/server-side/v2/how-to-guides/Session Initiation Protocol (SIP)/SIP-Outbound.mdx b/docs/server-side/v2/how-to-guides/Session Initiation Protocol (SIP)/SIP-Outbound.mdx
index 22b8c22171..24dece456f 100644
--- a/docs/server-side/v2/how-to-guides/Session Initiation Protocol (SIP)/SIP-Outbound.mdx
+++ b/docs/server-side/v2/how-to-guides/Session Initiation Protocol (SIP)/SIP-Outbound.mdx
@@ -88,7 +88,12 @@ Headers: `Authorization: Bearer `
"name": "Alex",
"user_id": "",
"room_code": "xxx-xxxx-xxx",
- "trunk_id": "4a3b7c9d91"
+ "trunk_id": "4a3b7c9d91",
+ "video": true,
+ "headers": {
+ "x-language-id": "5",
+ "x-mrn": "1234567"
+ }
}
```
@@ -103,7 +108,12 @@ curl --location --request POST 'https://api.100ms.live/v2/sip/outbound/call' \
"name": "Alex", // Name shown when the peer accepts the call and joins the room through SIP
"user_id": "",
"room_code": "***-abc-***",
- "trunk_id": "65c6700f340713c4f7d*****"
+ "trunk_id": "65c6700f340713c4f7d*****",
+ "video": true,
+ "headers": { // Optional custom SIP headers (see below)
+ "x-language-id": "5",
+ "x-mrn": "1234567"
+ }
}
'
@@ -118,6 +128,8 @@ curl --location --request POST 'https://api.100ms.live/v2/sip/outbound/call' \
| `user_id` | A 'user_id' is an internal identifier that you can use to map a 100ms peer object to your internal user object. It's a unique identifier for each user in your system. You can pass the 'user_id' to 100ms when you generate an auth token for a user to join a room. | No |
| `room_code` | This is a unique encrypted shortcode generated by 100ms for a given Role and Room. A Room Code represents a unique role and room_id combination. | Yes |
| `trunk_id` | ID of the trunk to be used for this outbound call. This is generated using the ‘Create an outbound trunk’ API | Yes |
+| `video` | Set to `true` to enable video support for the outbound call. | No |
+| `headers` | Optional map of custom SIP headers to attach to the outgoing SIP INVITE. Useful when the destination service needs extra context to route the call (for example, an interpreter service that selects a language). See [Passing custom SIP headers](#passing-custom-sip-headers). | No |
To get a room code, refer to the following documentation:
1. [Getting room codes from the dashboard and authentication](/prebuilt/v2/prebuilt/room-codes/room-code-auth)
@@ -140,6 +152,34 @@ To get a room code, refer to the following documentation:
| 400 | room_code is mandatory | In case of missing mandatory arguments |
| 400 | trunk_id is mandatory | In case of missing mandatory arguments |
+## Passing custom SIP headers
+
+Some SIP destinations need extra context on the call to route it correctly. A common example is a language-interpreter service that decides which interpreter to connect based on headers on the incoming SIP INVITE.
+
+You can pass this context using the optional `headers` field on the [Initiating an outbound call](#initiating-an-outbound-call) request. Each key/value pair is attached as a header on the outgoing SIP INVITE, so the destination receives it verbatim.
+
+```json
+//Request body (partial)
+{
+ ...
+ "headers": {
+ "x-language-id": "5",
+ "x-mrn": "1234567",
+ "x-provider-name": "Dr. Gregory House"
+ }
+}
+```
+
+The exact header names and expected values are defined by your SIP destination/provider — check their integration guide for the headers they support.
+
+We recommend prefixing custom headers with `X-` (the SIP convention for non-standard headers). This is not strictly required by 100ms, but it avoids collisions with reserved headers, and many SIP providers only forward `X-`-prefixed headers to their application layer.
+
+
+Reserved SIP headers that control call routing, message framing, authentication, or caller identity cannot be overridden and are ignored if supplied. This includes (but is not limited to) `To`, `From`, `Via`, `Contact`, `Call-ID`, `CSeq`, `Max-Forwards`, `Route`, `Content-Type`, `Content-Length`, `Authorization`, and caller-identity headers such as `P-Asserted-Identity`, `Remote-Party-ID`, and `Diversion` — along with their SIP compact forms.
+
+Header names must be valid SIP tokens; names or values containing line breaks are rejected. Keep the number and size of headers reasonable to avoid an oversized INVITE.
+
+
## Update an outbound trunk
This API allows you to update an existing outbound trunk in case of any changes in the SIP trunk credentials, SIP address, or phone number.
diff --git a/docs/server-side/v2/how-to-guides/configure-webhooks/secure-webhooks.mdx b/docs/server-side/v2/how-to-guides/configure-webhooks/secure-webhooks.mdx
index 8cbf1b619c..20f6e98e8f 100644
--- a/docs/server-side/v2/how-to-guides/configure-webhooks/secure-webhooks.mdx
+++ b/docs/server-side/v2/how-to-guides/configure-webhooks/secure-webhooks.mdx
@@ -74,5 +74,15 @@ For additional security or if your firewall infrastructure can block incoming re
34.93.15.238/32
34.100.194.204/32
34.148.145.130/32
+34.162.177.21/32
+34.162.64.171/32
+34.153.30.136/32
+34.162.229.129/32
+34.162.204.39/32
+34.180.1.48/32
+35.200.157.233/32
+34.180.58.213/32
+35.200.170.31/32
+34.100.250.100/32
```
diff --git a/docs/server-side/v2/how-to-guides/enable-transcription-and-summary.mdx b/docs/server-side/v2/how-to-guides/enable-transcription-and-summary.mdx
index eb8807afe0..7f2ac71570 100644
--- a/docs/server-side/v2/how-to-guides/enable-transcription-and-summary.mdx
+++ b/docs/server-side/v2/how-to-guides/enable-transcription-and-summary.mdx
@@ -322,22 +322,18 @@ You can always use 100ms’ Recording Assets API to access the transcripts and s
```jsx
import { useEffect } from "react";
import { useHMSActions } from "@100mslive/react-sdk";
- import { useIsHeadless } from "../AppData/useUISettings";
export function BeamSpeakerLabelsLogging() {
const hmsActions = useHMSActions();
- const isHeadless = useIsHeadless();
useEffect(() => {
- if (isHeadless) {
+ // to be called if you are passing custom url for beam recording, preferably before join.
hmsActions.enableBeamSpeakerLabelsLogging();
- }
- }, [hmsActions, isHeadless]);
+ }, [hmsActions]);
return null;
}
```
- - Register `` in Approutes along with import statement
- `import { BeamSpeakerLabelsLogging } from "./components/AudioLevel/BeamSpeakerLabelsLogging";`
+
diff --git a/docs/server-side/v2/how-to-guides/firewall-and-ports.mdx b/docs/server-side/v2/how-to-guides/firewall-and-ports.mdx
index 08ca47de20..b5e9c42cd3 100644
--- a/docs/server-side/v2/how-to-guides/firewall-and-ports.mdx
+++ b/docs/server-side/v2/how-to-guides/firewall-and-ports.mdx
@@ -13,6 +13,9 @@ For smooth call experience add following domains and ports to your firewall whit
## Domains
`*.100ms.live`
+`assets.100ms.live`
+`static.100ms.live`
+`effectssdk.ai`
## Ports
@@ -43,6 +46,57 @@ For smooth call experience add following domains and ports to your firewall whit
35.207.209.133/32
35.244.46.211/32
34.74.251.112/32
+34.127.169.122/32
+34.148.145.130/32
+35.231.196.143/32
+34.153.18.232/32
+34.162.40.97/32
+34.162.96.160/32
+34.162.177.21/32
+34.162.64.171/32
+34.153.30.136/32
+34.162.229.129/32
+34.162.204.39/32
+```
+
+### SIP server IP address
+
+#### IPv4
+```
+34.75.42.72/32
+104.196.206.142/32
+35.237.242.130/32
+35.231.58.23/32
+35.196.53.160/32
+34.162.82.46/32
+34.162.132.166/32
+34.153.29.156/32
+8.234.35.38/32
+34.162.18.172/32
+```
+
+#### IPv6 (us-east1)
+```
+2600:1900:4020:3dfe:0:22::/96
+2600:1900:4020:3dfe:0:2a::/96
+2600:1900:4020:3dfe:0:2f::/96
+2600:1900:4020:3dfe:0:3a::/96
+2600:1900:4020:3dfe:0:40::/96
+```
+
+### Prod-init IP address
+
+#### IPv4
+```
+34.23.87.177/32
+34.162.27.27/32
+34.14.145.111/32
+```
+
+#### IPv6
+```
+2600:1900:4020:3dfe:8000:0:0:0/96
+2600:1900:40a0:7aa:8000:1::/96
```
### NAT gateway IP address whitelisting for webhooks
diff --git a/docs/server-side/v2/how-to-guides/live-transcription-hls.mdx b/docs/server-side/v2/how-to-guides/live-transcription-hls.mdx
index 9fdb28c70e..654e9ac533 100644
--- a/docs/server-side/v2/how-to-guides/live-transcription-hls.mdx
+++ b/docs/server-side/v2/how-to-guides/live-transcription-hls.mdx
@@ -180,7 +180,7 @@ If you if you are at some event here and you shoot the light ray,
3. **Is live translation also supported?**
- Live translation is not supported right now.
+ Yes, in caption mode. You can enable per-role language translation by configuring the `translation` field in the [transcription destinations API](/server-side/v2/policy/create-template-via-api#transcriptions---translation-object). Each role can receive captions translated into their configured language.
4. **What happens if multiple languages are being spoken in the live stream?**
diff --git a/docs/server-side/v2/how-to-guides/recordings/overview.mdx b/docs/server-side/v2/how-to-guides/recordings/overview.mdx
index 797ab9a1a3..68728f2324 100644
--- a/docs/server-side/v2/how-to-guides/recordings/overview.mdx
+++ b/docs/server-side/v2/how-to-guides/recordings/overview.mdx
@@ -116,7 +116,7 @@ If you are relying on the 100ms storage bucket, we recommend downloading the ass
#### Configure your own storage
-100ms supports AWS S3, Google Cloud Storage and Alibaba OSS as storage buckets. These can be configured on [the 100ms dashboard](../../../../concepts/v2/concepts/recordings#configure-storage).
+100ms supports AWS S3, Google Cloud Storage, Alibaba OSS, and Azure Blob Storage as storage buckets. These can be configured on [the 100ms dashboard](../../../../concepts/v2/concepts/recordings#configure-storage).
#### Download assets from dashboard
diff --git a/docs/server-side/v2/release-notes/release-notes.mdx b/docs/server-side/v2/release-notes/release-notes.mdx
index cc63ae3c73..46bc601a7a 100644
--- a/docs/server-side/v2/release-notes/release-notes.mdx
+++ b/docs/server-side/v2/release-notes/release-notes.mdx
@@ -5,6 +5,26 @@ nav: 5.1
This Changelog highlights notable changes to the 100ms server-side API, such as API additions, improvements, and deprecations. Also, we've included developer experience improvements to this page to keep you on track with items that will enhance your integration journey.
+## 2026-05-29
+### Improvements
+- **WebRTC stack upgrade.** The SFU WebRTC stack has been upgraded to pion v4.
+- **Improved recording reliability.** RTCP sender-report timestamps now correctly follow the last received packet timestamp, addressing the root cause of audio timestamp gaps that could split long recordings into many small files.
+- **More stable media under congestion.** Fixes for NACK deadlock, NACK memory leak, GCC bandwidth estimator, and NACK responder handling reduce packet-loss spikes under high load.
+- **Simulcast correctness.** RTP extension headers are now cleared on forwarded packets, preventing stray header data from reaching subscribers.
+- **Security.** Updated DTLS to address CVE-2026-26014.
+
+## 2026-03-15
+### Additions
+- Added video support for outbound calls. Pass `"video": true` in the [Initiate outbound call API](/server-side/v2/how-to-guides/Session%20Initiation%20Protocol%20(SIP)/SIP-Outbound#initiating-an-outbound-call) to enable video.
+
+## 2026-01-02
+### Additions
+- Added support to [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs) - `azure`. Check recording config for [Create a room API](../Rooms/create-via-api#recording_info-arguments) and [Create a template API](../policy/create-template-via-api#recording-object) for more information.
+
+## 2025-12-30
+### Additions
+- updated reserved IP addresses for TURN servers in EU|US|IN. These IP addresses can be whitelisted in firewall configuration to solve scenarios where a user is unable to join the room due to a restricted network firewall.
+
## 2024-02-28
#### Additions
diff --git a/lib/algolia/getRecords.js b/lib/algolia/getRecords.js
index 82f0a07d78..c078a53e29 100644
--- a/lib/algolia/getRecords.js
+++ b/lib/algolia/getRecords.js
@@ -14,7 +14,7 @@ const {
async function updateIndex() {
const appId = process.env.NEXT_PUBLIC_ALGOLIA_APP_ID;
- const adminKey = process.env.NEXT_PUBLIC_ALGOLIA_ADMIN_API_KEY;
+ const adminKey = process.env.ALGOLIA_ADMIN_API_KEY;
const algoliaIndex = process.env.NEXT_PUBLIC_ALGOLIA_INDEX;
if (appId && adminKey && algoliaIndex) {
diff --git a/package.json b/package.json
index ee6172e323..43f08ef16c 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,7 @@
"id": "yarn && yarn dev"
},
"engines": {
- "node": "^18"
+ "node": "^22"
},
"files": [
"/dist",
@@ -41,7 +41,8 @@
],
"resolutions": {
"@types/react": "16.9.22",
- "@types/react-dom": "16.9.5"
+ "@types/react-dom": "16.9.5",
+ "flatted": "^3.4.2"
},
"devDependencies": {
"@fec/remark-a11y-emoji": "^3.1.0",
@@ -75,7 +76,7 @@
"gray-matter": "^4.0.2",
"marked": "^4.0.10",
"mdx-prism": "^0.3.3",
- "next": "12.3.4",
+ "next": "12.3.7",
"prettier": "^2.2.1",
"prettier-eslint": "^12.0.0",
"prettier-eslint-cli": "^5.0.0",
diff --git a/public/llms.txt b/public/llms.txt
new file mode 100644
index 0000000000..53ebc17577
--- /dev/null
+++ b/public/llms.txt
@@ -0,0 +1,296 @@
+# 100ms docs
+
+> 100ms is a platform for building real-time audio, video, and interactive live experiences. 100ms provides hosted cloud infrastructure, client SDKs, server-side APIs, and drop-in prebuilt UI components for video conferencing, live streaming, and recording.
+
+## Overview
+
+100ms is a cloud-hosted infrastructure platform for building real-time communication into web and mobile apps. It consists of these primary components:
+
+- **100ms Cloud**: Cloud-hosted infrastructure that orchestrates real-time audio and video communication via WebRTC. Managed entirely through the [100ms Dashboard](https://dashboard.100ms.live).
+- **Client SDKs**: Real-time SDKs for building custom UIs across platforms:
+ - [JavaScript/Web](https://www.100ms.live/docs/javascript/v2/quickstart/javascript-quickstart)
+ - [Android](https://www.100ms.live/docs/android/v2/quickstart/quickstart)
+ - [iOS](https://www.100ms.live/docs/ios/v2/quickstart/quickstart)
+ - [React Native](https://www.100ms.live/docs/react-native/v2/quickstart/quickstart)
+ - [Flutter](https://www.100ms.live/docs/flutter/v2/quickstart/quickstart)
+- **Prebuilt UI**: A [hosted, embeddable conferencing and live streaming UI](https://www.100ms.live/docs/prebuilt/v2/prebuilt/overview) with minimal code integration, available for Web, Android, iOS, React Native, and Flutter.
+- **Server-side APIs & SDK**: [REST APIs](https://www.100ms.live/docs/server-side/v2/how-to-guides/make-api-calls) and a [Node.js server SDK](https://www.100ms.live/docs/server-side/v2/how-to-guides/nodejs-server-side-sdk) for room management, recording control, template configuration, and peer operations.
+- **Integration services**: [HLS live streaming](https://www.100ms.live/docs/javascript/v2/how-to-guides/record-and-live-stream/hls/hls) for scaling to millions of viewers, [recording](https://www.100ms.live/docs/get-started/v2/get-started/features/recordings/overview) (SFU and browser composite), [transcription](https://www.100ms.live/docs/server-side/v2/how-to-guides/enable-transcription-and-summary) (live and post-call), [SIP interconnect](https://www.100ms.live/docs/server-side/v2/how-to-guides/Session%20Initiation%20Protocol%20(SIP)/SIP-Interconnect) for telephony, and [webhooks](https://www.100ms.live/docs/server-side/v2/how-to-guides/configure-webhooks) for event-driven workflows.
+
+For greater detail, see [Product Overview](https://www.100ms.live/docs/get-started/v2/get-started/overview).
+
+## Introduction
+
+### Get Started
+
+- [Documentation Home](https://www.100ms.live/docs): Entry point for all 100ms documentation.
+- [Product Overview](https://www.100ms.live/docs/get-started/v2/get-started/overview): High-level architecture and product capabilities.
+
+### Understanding 100ms
+
+- [Core Concepts](https://www.100ms.live/docs/get-started/v2/get-started/concepts/basics): Rooms, peers, tracks, and the mental model behind 100ms.
+- [Templates and Roles](https://www.100ms.live/docs/get-started/v2/get-started/concepts/templates-and-roles): How room behavior, permissions, and publish/subscribe rules are configured. Templates and roles are the source of truth for all room behavior.
+
+#### Authentication
+
+- [Security and Tokens](https://www.100ms.live/docs/get-started/v2/get-started/security-and-tokens): Overview of auth tokens and management tokens.
+- [Auth Token vs Room Code](https://www.100ms.live/docs/get-started/v2/get-started/authentication-token-versus-room-code): When to use auth tokens vs room codes. For production apps, use backend-generated auth tokens. Room codes are suitable for quick prototyping. Dashboard-generated temporary tokens are not production-ready.
+
+#### Compliance
+
+- [HIPAA Compliant Workspace](https://www.100ms.live/docs/get-started/v2/get-started/security-and-privacy/HIPAA%20compliance/HIPAA-workspace): Configure a HIPAA-compliant workspace for healthcare and sensitive applications.
+
+## Prebuilt (Drop-in UI)
+
+### Get Started
+
+- [Overview](https://www.100ms.live/docs/prebuilt/v2/prebuilt/overview): Hosted, embeddable conferencing and live streaming UI with minimal code.
+- [Quickstart](https://www.100ms.live/docs/prebuilt/v2/prebuilt/quickstart): Get started with Prebuilt links and embedding.
+
+### Customization
+
+- [Screens and Components](https://www.100ms.live/docs/prebuilt/v2/prebuilt/Screens-and-components): Customize Prebuilt UI via screens and components configuration.
+
+### Platform Quickstarts
+
+- [React (Web)](https://www.100ms.live/docs/javascript/v2/quickstart/prebuilt-quickstart): Embed Prebuilt in a React app.
+- [Android](https://www.100ms.live/docs/android/v2/quickstart/prebuilt-android): Embed Prebuilt UI in Android apps.
+- [React Native](https://www.100ms.live/docs/react-native/v2/quickstart/prebuilt): Prebuilt UI for React Native.
+- [React Native Expo](https://www.100ms.live/docs/react-native/v2/quickstart/expo-prebuilt): Prebuilt UI with Expo.
+- [Flutter](https://www.100ms.live/docs/flutter/v2/quickstart/prebuilt): Prebuilt UI for Flutter.
+
+Prefer Prebuilt when speed of integration matters more than deep UI customization. Prefer SDK-based integration when the app needs full control over UX and media behavior.
+
+## Client SDKs
+
+### JavaScript / Web SDK
+
+#### Get Started
+
+- [JavaScript Quickstart](https://www.100ms.live/docs/javascript/v2/quickstart/javascript-quickstart): Get started with the Web SDK.
+- [Web SDK Mental Model](https://www.100ms.live/docs/javascript/v2/quickstart/mental-model): Architecture orientation and key abstractions.
+- [Token Quickstart](https://www.100ms.live/docs/javascript/v2/quickstart/token): Obtain a room code or token during setup.
+
+#### Video Conferencing
+
+- [Chat](https://www.100ms.live/docs/javascript/v2/how-to-guides/set-up-video-conferencing/chat): Broadcast, group, and direct messaging over WebSocket.
+- [Screen Share](https://www.100ms.live/docs/javascript/v2/how-to-guides/set-up-video-conferencing/screen-share): Share screen, window, or browser tab.
+- [Simulcast / Select Video Quality](https://www.100ms.live/docs/javascript/v2/how-to-guides/set-up-video-conferencing/render-video/simulcast): Adaptive bitrate and manual quality selection.
+- [Live Captions (Closed Captions)](https://www.100ms.live/docs/javascript/v2/how-to-guides/set-up-video-conferencing/captions): Real-time speaker-labelled transcription and closed captions in WebRTC conferencing.
+
+#### Interactive Features
+
+- [Polls](https://www.100ms.live/docs/javascript/v2/how-to-guides/build-interactive-features/polls): Create and manage in-session polls.
+- [Session Store](https://www.100ms.live/docs/javascript/v2/how-to-guides/build-interactive-features/session-store): Shared real-time key-value store accessible by all participants. Used for features like pinned text and spotlight.
+
+#### Plugins & Extensions
+
+- [Whiteboard](https://www.100ms.live/docs/javascript/v2/how-to-guides/extend-capabilities/whiteboard): Real-time collaborative whiteboard.
+- [Krisp Noise Cancellation](https://www.100ms.live/docs/javascript/v2/how-to-guides/extend-capabilities/plugins/krisp-noise-cancellation): Background noise elimination plugin powered by Krisp.
+- [Virtual Background](https://www.100ms.live/docs/javascript/v2/how-to-guides/extend-capabilities/plugins/effects-virtual-background): Background blur and image replacement.
+
+#### Recording & Live Streaming
+
+- [HLS Streaming](https://www.100ms.live/docs/javascript/v2/how-to-guides/record-and-live-stream/hls/hls): Start and manage HLS live streams from the client.
+- [RTMP Streaming / Recording](https://www.100ms.live/docs/javascript/v2/how-to-guides/record-and-live-stream/rtmp-recording): Stream to external RTMP endpoints and trigger recordings.
+
+#### Reference
+
+- [Web SDK API Reference](https://www.100ms.live/docs/api-reference/javascript/v2/home/content): Full API reference for the JavaScript SDK.
+
+#### Debugging
+
+- [FAQ](https://www.100ms.live/docs/javascript/v2/how-to-guides/debugging/faq): Common questions and troubleshooting for the Web SDK.
+
+### Android SDK
+
+#### Get Started
+
+- [Android Quickstart](https://www.100ms.live/docs/android/v2/quickstart/quickstart): Get started with the Android SDK.
+- [Android Prebuilt Quickstart](https://www.100ms.live/docs/android/v2/quickstart/prebuilt-android): Embed Prebuilt UI in Android apps.
+
+#### Features
+
+- [Virtual Background](https://www.100ms.live/docs/android/v2/how-to-guides/extend-capabilities/plugins/virtual-background): Background blur and replacement on Android.
+- [Simulcast](https://www.100ms.live/docs/android/v2/how-to-guides/set-up-video-conferencing/render-video/simulcast): Adaptive bitrate on Android.
+
+### iOS SDK
+
+#### Get Started
+
+- [iOS Quickstart](https://www.100ms.live/docs/ios/v2/quickstart/quickstart): Get started with the iOS SDK.
+
+#### Features
+
+- [Screen Sharing](https://www.100ms.live/docs/ios/v2/how-to-guides/set-up-video-conferencing/screen-share): Share screen on iOS.
+- [Call Stats](https://www.100ms.live/docs/ios/v2/how-to-guides/measure-network-quality-and-performance/call-stats): Monitor call quality and network performance on iOS.
+
+### React Native SDK
+
+#### Get Started
+
+- [React Native Quickstart](https://www.100ms.live/docs/react-native/v2/quickstart/quickstart): Get started with React Native.
+- [Expo Quickstart](https://www.100ms.live/docs/react-native/v2/quickstart/expo-quickstart): React Native with Expo.
+
+#### Features
+
+- [Noise Cancellation](https://www.100ms.live/docs/react-native/v2/how-to-guides/extend-capabilities/noise-cancellation): Background noise cancellation on React Native.
+- [Polls & Quizzes](https://www.100ms.live/docs/react-native/v2/how-to-guides/interact-with-room/room/polls): Polls and quizzes on React Native.
+- [Adaptive Bitrate (Simulcast)](https://www.100ms.live/docs/react-native/v2/how-to-guides/set-up-video-conferencing/render-video/adaptive-bitrate): Simulcast on React Native.
+
+#### Debugging
+
+- [FAQ](https://www.100ms.live/docs/react-native/v2/how-to-guides/debugging/faq): Common questions for React Native SDK.
+
+### Flutter SDK
+
+#### Get Started
+
+- [Flutter Quickstart](https://www.100ms.live/docs/flutter/v2/quickstart/quickstart): Get started with Flutter.
+
+#### Features
+
+- [HLS Player](https://www.100ms.live/docs/flutter/v2/how-to-guides/record-and-live-stream/hls-player): Play HLS streams in Flutter apps.
+
+## Live Streaming (HLS)
+
+### Get Started
+
+- [HLS Streaming Overview](https://www.100ms.live/docs/javascript/v2/how-to-guides/record-and-live-stream/hls/hls): Scale to millions of viewers with HLS live streaming. A server-side bot joins the room and streams what it sees and hears as an HLS feed playable on any device.
+
+### Features
+
+- [Live Transcription in HLS](https://www.100ms.live/docs/server-side/v2/how-to-guides/live-transcription-hls): Auto-generated English captions in live streams with ~500ms–1s latency. Paid feature with 300 free minutes per month.
+- [Live Stream Recording](https://www.100ms.live/docs/get-started/v2/get-started/features/recordings/live-stream-recording): Record HLS live streams for later playback.
+- [RTMP Ingestion](https://www.100ms.live/docs/server-side/v2/how-to-guides/live-streaming-rtmp-ingestion): Start a live stream in 100ms from OBS or any external broadcasting application over RTMP.
+
+## Recording
+
+### Get Started
+
+- [Recording Overview](https://www.100ms.live/docs/get-started/v2/get-started/features/recordings/overview): All recording types and how they work. 100ms supports SFU recording (individual and composite) and browser-based composite recording.
+
+### Recording Modes
+
+- [Composite Recordings](https://www.100ms.live/docs/get-started/v2/get-started/features/recordings/recording-modes/composite-recordings): Browser-based composite recording of the room.
+- [SFU Recording](https://www.100ms.live/docs/server-side/v2/Destinations/recording): Individual and composite server-side recording. SFU recordings take approximately 1.5x the call duration to process after the call ends.
+- [Migrating from SFU Recording](https://www.100ms.live/docs/get-started/v2/get-started/features/recordings/recording-modes/migrating-from-sfu): Guide for migrating from legacy SFU recording.
+
+### Recording Content
+
+- [Chat Recording](https://www.100ms.live/docs/get-started/v2/get-started/features/recordings/chat-recording): Record chat messages sent during sessions. Broadcast and role messages are recorded; direct messages are not.
+
+### Recording Assets & Storage
+
+- [Recording Asset Types](https://www.100ms.live/docs/get-started/v2/get-started/features/recordings/recording-assets/recording-asset-types): Types of recording assets generated.
+- [Storage Configuration](https://www.100ms.live/docs/get-started/v2/get-started/features/recordings/recording-assets/storage-configuration): Configure where recordings are stored (e.g., your own S3 bucket).
+
+### Server-side Control
+
+- [Start and Stop Recording](https://www.100ms.live/docs/server-side/v2/how-to-guides/recordings/overview): Control recordings via server-side API.
+
+## Transcription & Summarization
+
+### Live Transcription
+
+- [Live Captions for Conferencing](https://www.100ms.live/docs/javascript/v2/how-to-guides/set-up-video-conferencing/captions): Real-time speaker-labelled closed captions during WebRTC conferencing. Can be enabled/disabled at runtime per room. Currently English only.
+- [Live Transcription in HLS](https://www.100ms.live/docs/server-side/v2/how-to-guides/live-transcription-hls): Auto-generated captions for HLS live streams.
+
+### Post-Call
+
+- [Post-Call Transcription and Summarization](https://www.100ms.live/docs/server-side/v2/how-to-guides/enable-transcription-and-summary): Enable automatic transcription and AI summarization of recorded sessions. Triggered via the "Transcribe Recordings" toggle in template configuration.
+
+## Quality & Network
+
+- [Adaptive Bitrate (Simulcast)](https://www.100ms.live/docs/get-started/v2/get-started/features/quality/adaptive-bitrate): Peers publish multiple quality layers; SDKs automatically upgrade or downgrade based on network conditions and subscriber preferences.
+- [Network Performance Insights](https://www.100ms.live/docs/get-started/v2/get-started/insights/network-performance): Monitor and debug network quality.
+- [Firewall and Ports](https://www.100ms.live/docs/server-side/v2/how-to-guides/firewall-and-ports): Required firewall rules and port allowlisting for enterprise networks. Consult this before assuming SDK defects for connectivity issues.
+
+## Telephony (SIP)
+
+### Get Started
+
+- [SIP Interconnect](https://www.100ms.live/docs/server-side/v2/how-to-guides/Session%20Initiation%20Protocol%20(SIP)/SIP-Interconnect): Dial in to 100ms rooms via SIP using SIP credentials and address.
+
+### Making Calls
+
+- [SIP Outbound](https://www.100ms.live/docs/server-side/v2/how-to-guides/Session%20Initiation%20Protocol%20(SIP)/SIP-Outbound): Initiate SIP calls from a 100ms room to external SIP destinations.
+
+## Server-side API
+
+### Get Started
+
+- [Making API Calls](https://www.100ms.live/docs/server-side/v2/how-to-guides/make-api-calls): Authenticate and make server-side API requests using management tokens. Use management tokens only from trusted backend environments.
+- [Node.js Server SDK](https://www.100ms.live/docs/server-side/v2/how-to-guides/nodejs-server-side-sdk): Official Node.js SDK for server-side operations.
+
+### Rooms
+
+- [Create Rooms via API](https://www.100ms.live/docs/server-side/v2/api-reference/Rooms/create-via-api): Programmatically create rooms.
+- [Create Rooms via Dashboard](https://www.100ms.live/docs/server-side/v2/api-reference/Rooms/create-via-dashboard): Create rooms from the 100ms dashboard.
+
+### Active Rooms
+
+- [List Peers](https://www.100ms.live/docs/server-side/v2/api-reference/active-rooms/list-peers): Query active room participants.
+- [Update a Peer](https://www.100ms.live/docs/server-side/v2/api-reference/active-rooms/update-a-peer): Modify peer properties in an active room.
+
+### Templates & Roles
+
+- [Create Template via API](https://www.100ms.live/docs/server-side/v2/api-reference/policy/create-template-via-api): Programmatically create room templates.
+- [Create Template via Dashboard](https://www.100ms.live/docs/server-side/v2/api-reference/policy/create-template-via-dashboard): Create templates from the dashboard.
+- [Create or Update Role](https://www.100ms.live/docs/server-side/v2/api-reference/policy/create-update-role): Manage roles and their permissions.
+
+### Room Codes
+
+- [Room Codes Overview](https://www.100ms.live/docs/server-side/v2/api-reference/room-codes/room-code-overview): Overview of room codes for generating join links.
+- [Create Room Codes](https://www.100ms.live/docs/server-side/v2/api-reference/room-codes/create-room-code-api): Create room codes for all roles or a specific role in a room.
+- [Retrieve Room Codes](https://www.100ms.live/docs/server-side/v2/api-reference/room-codes/get-room-code-api): Retrieve existing room codes.
+
+### Sessions
+
+- [Session Object](https://www.100ms.live/docs/server-side/v2/api-reference/Sessions/object): Session object structure and fields.
+- [List Sessions](https://www.100ms.live/docs/server-side/v2/api-reference/Sessions/list-sessions): Retrieve details of sessions in your account. A session is a single continuous call in a room; a single room can have multiple sessions.
+- [Retrieve a Session](https://www.100ms.live/docs/server-side/v2/api-reference/Sessions/retrieve-a-session): Get individual participants' duration, total session duration, and aggregated data.
+
+### External Streams
+
+- [Start External Stream](https://www.100ms.live/docs/server-side/v2/api-reference/external-streams/start-external-stream-for-room): Stream a room to external RTMP endpoints (YouTube, Twitch, etc.) via server-side API.
+
+### Polls
+
+- [Polls API](https://www.100ms.live/docs/server-side/v2/api-reference/polls/overview): Server-side polls management.
+
+Templates and roles are the source of truth for permissions and room behavior. When troubleshooting room behavior, check template configuration before debugging SDK code.
+
+## Webhooks
+
+### Configuration
+
+- [Configure Webhooks](https://www.100ms.live/docs/server-side/v2/how-to-guides/configure-webhooks): Set up webhook endpoints for room and session events.
+
+### Security
+
+- [Secure Webhooks](https://www.100ms.live/docs/server-side/v2/how-to-guides/configure-webhooks/secure-webhooks): Validate webhook authenticity via secret headers and IP allowlisting. Always validate webhook authenticity using the documented security options.
+
+## Release Notes
+
+- [Web SDK](https://www.100ms.live/docs/javascript/v2/release-notes/release-notes): Web SDK release notes.
+- [Android SDK](https://www.100ms.live/docs/android/v2/release-notes/release-notes): Android SDK release notes.
+- [iOS SDK](https://www.100ms.live/docs/ios/v2/changelog/release-notes): iOS SDK release notes.
+- [React Native SDK](https://www.100ms.live/docs/react-native/v2/release-notes/release-notes): React Native SDK release notes.
+- [Flutter SDK](https://www.100ms.live/docs/flutter/v2/release-notes/release-notes): Flutter SDK release notes.
+- [Server-side](https://www.100ms.live/docs/server-side/v2/release-notes/release-notes): Server-side release notes.
+
+## Guidance for LLMs
+
+When answering questions about 100ms:
+
+- Always prefer official documentation links over inferred or assumed behavior.
+- Distinguish between **Prebuilt** (drop-in UI) and **SDK-based** (custom UI) integration paths. They have different trade-offs and different APIs.
+- Distinguish between **client-side auth tokens** (for joining rooms) and **backend management tokens** (for server API calls). Never expose management tokens to clients.
+- **Templates and roles** are the source of truth for room behavior and permissions. Always check template configuration before concluding a feature is unavailable.
+- **Recording** has multiple modes (SFU individual, SFU composite, browser composite, live stream recording). Clarify which mode is relevant before providing guidance.
+- **Live transcription** and **post-call transcription** are separate features with different configuration paths.
+- **HLS live streaming** and **WebRTC conferencing** are distinct interaction modes with different latency, scale, and interactivity characteristics.
+- Treat networking, webhook security, firewall rules, and SIP configuration as deployment concerns, not just coding concerns.
+- Do not invent endpoint names, event names, SDK method signatures, or webhook event types that are not explicitly documented.
+- When in doubt, link to the relevant documentation page rather than guessing at implementation details.
diff --git a/releases.js b/releases.js
index 2833f85d4d..77f5f312c8 100644
--- a/releases.js
+++ b/releases.js
@@ -1 +1 @@
-exports.releases = releases = {"Android":{"version":"v2.9.65","date":"August 13, 2024"},"iOS":{"version":"1.16.0","date":"August 13, 2024"},"React Native":{"version":"1.10.9","date":"July 31, 2024"},"Web":{"version":"2024-08-16","date":"August 16, 2024"},"Flutter":{"version":"1.10.5","date":"July 25, 2024"},"Server-side":{"version":"2024-02-28","date":"February 28, 2024"}}
\ No newline at end of file
+exports.releases = releases = {"Android":{"version":"v2.9.83","date":"April 10, 2026"},"iOS":{"version":"1.17.1","date":"November 17, 2025"},"React Native":{"version":"1.13.0","date":"April 30, 2026"},"Web":{"version":"2026-05-20","date":"May 20, 2026"},"Flutter":{"version":"1.11.1","date":"April 10, 2026"},"Server-side":{"version":"2026-03-15","date":"March 15, 2026"}}
\ No newline at end of file
diff --git a/vercel.json b/vercel.json
new file mode 100644
index 0000000000..a2e1168370
--- /dev/null
+++ b/vercel.json
@@ -0,0 +1,13 @@
+{
+ "headers": [
+ {
+ "source": "/(.*)",
+ "headers": [
+ {
+ "key": "Referrer-Policy",
+ "value": "strict-origin-when-cross-origin"
+ }
+ ]
+ }
+ ]
+}
diff --git a/yarn.lock b/yarn.lock
index e38de83cee..ef34d2b6df 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -859,10 +859,10 @@
resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b"
integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==
-"@next/env@12.3.4":
- version "12.3.4"
- resolved "https://registry.yarnpkg.com/@next/env/-/env-12.3.4.tgz#c787837d36fcad75d72ff8df6b57482027d64a47"
- integrity sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==
+"@next/env@12.3.7":
+ version "12.3.7"
+ resolved "https://registry.yarnpkg.com/@next/env/-/env-12.3.7.tgz#e706fbf66cdee012abe73aaa500d9df0b66a2db5"
+ integrity sha512-gCw4sTeHoNr0EUO+Nk9Ll21OzF3PnmM0GlHaKgsY2AWQSqQlMgECvB0YI4k21M9iGy+tQ5RMyXQuoIMpzhtxww==
"@next/swc-android-arm-eabi@12.3.4":
version "12.3.4"
@@ -3746,15 +3746,10 @@ flat-cache@^3.0.4:
flatted "^3.1.0"
rimraf "^3.0.2"
-flatted@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
- integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
-
-flatted@^3.1.0:
- version "3.2.7"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
- integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
+flatted@^2.0.0, flatted@^3.1.0, flatted@^3.4.2:
+ version "3.4.2"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726"
+ integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==
for-each@^0.3.3:
version "0.3.3"
@@ -5590,12 +5585,12 @@ next-sitemap@^1.6.140:
"@corex/deepmerge" "^2.6.148"
minimist "^1.2.5"
-next@12.3.4:
- version "12.3.4"
- resolved "https://registry.yarnpkg.com/next/-/next-12.3.4.tgz#f2780a6ebbf367e071ce67e24bd8a6e05de2fcb1"
- integrity sha512-VcyMJUtLZBGzLKo3oMxrEF0stxh8HwuW976pAzlHhI3t8qJ4SROjCrSh1T24bhrbjw55wfZXAbXPGwPt5FLRfQ==
+next@12.3.7:
+ version "12.3.7"
+ resolved "https://registry.yarnpkg.com/next/-/next-12.3.7.tgz#4a53921cdffe08e6c56d8ef19e81ffc00a60cb1a"
+ integrity sha512-3PDn+u77s5WpbkUrslBP6SKLMeUj9cSx251LOt+yP9fgnqXV/ydny81xQsclz9R6RzCLONMCtwK2RvDdLa/mJQ==
dependencies:
- "@next/env" "12.3.4"
+ "@next/env" "12.3.7"
"@swc/helpers" "0.4.11"
caniuse-lite "^1.0.30001406"
postcss "8.4.14"