Compare commits

..

27 Commits

Author SHA1 Message Date
lukasIO
12cee3ed06
Update livekit dependencies (#512) 2026-02-19 17:07:12 +01:00
renovate[bot]
2220072d47
chore(deps): update dependency node to v24 (#491)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-19 16:56:32 +01:00
renovate[bot]
392ca136de
fix(deps): update dependency @livekit/krisp-noise-filter to v0.4.1 (#505)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-19 16:54:36 +01:00
renovate[bot]
3a75f3222f
fix(deps): update livekit dependencies (non-major) (#499)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-10 16:24:35 +01:00
vercel[bot]
f80673aba8
Fix React Server Components CVE vulnerabilities (#503)
Updated dependencies to fix Next.js and React CVE vulnerabilities.

The fix-react2shell-next tool automatically updated the following packages to their secure versions:
- next
- react-server-dom-webpack
- react-server-dom-parcel  
- react-server-dom-turbopack

All package.json files have been scanned and vulnerable versions have been patched to the correct fixed versions based on the official React advisory.

Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
2025-12-26 11:35:52 +01:00
vercel[bot]
690dc1011a
Update Next.js/React Flight RCE vulnerability patches (#501)
## React Flight / Next.js RCE Advisory - Security Update

### Summary
Updated the project to address the React Flight / Next.js RCE advisory (CVE-2024-50383) by upgrading Next.js to the patched version.

### Vulnerability Assessment
 **Project is affected by the advisory:**
- Uses **Next.js 15.2.x** (vulnerable version range)
- Does NOT use React Flight packages (react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack)
- Uses React 18.3.1 (not vulnerable React 19.x versions)

### Changes Made

#### Modified Files:
1. **package.json**
   - Upgraded `next` from `15.2.4` to `15.2.6` (patched version for 15.2.x)
   - No React or React DOM changes required (Next.js manages its own patched React versions)

2. **pnpm-lock.yaml**
   - Updated lockfile to reflect `next@15.2.6` installation
   - All dependencies resolved correctly with patched versions

### Implementation Details
- This project is a Next.js 15 application without React Server Components/Flight
- The RCE vulnerability in Next.js 15.2.x is addressed by upgrading to 15.2.6
- No React Flight packages required updating since they are not used
- React versions (18.3.1) are not affected by this vulnerability

### Build Status
⚠️ **Note on Pre-existing Issue:**
The build fails due to corrupted image files in `public/background-images/` (pre-existing issue):
- `ali-kazal-tbw_KQE3Cbg-unsplash.jpg` (130 bytes - should be larger)
- `samantha-gades-BlIhVfXbi9s-unsplash.jpg` (132 bytes - should be larger)

This image corruption issue exists in the original codebase and is unrelated to the security update. The Next.js upgrade to 15.2.6 itself is successful and the patched version is correctly installed.

### Testing
- Verified dependency installation with `pnpm install`
- Confirmed lockfile contains `next@15.2.6`
- Confirmed no React Flight packages are used
- Pre-existing image corruption prevents full build, but dependency upgrade is verified

### Security Impact
 **Successfully patched against CVE-2024-50383**
- Next.js upgraded to 15.2.6 (patched version for 15.2.x)
- No vulnerable React Flight packages in use
- React versions remain compatible and secure

Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
2025-12-08 12:50:11 +01:00
renovate[bot]
6de1bc8cc6
fix(deps): update dependency livekit-server-sdk to v2.14.2 (#495)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-04 09:33:18 +00:00
renovate[bot]
563925f757
chore(deps): update actions/checkout action to v6 (#497)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-03 22:31:46 -08:00
renovate[bot]
0b62ed930e
chore(deps): update devdependencies (non-major) (#480)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-29 20:58:17 -08:00
lukasIO
baa4e787a2
Default to dual peer connection for custom tab (#496) 2025-11-20 15:55:51 +01:00
renovate[bot]
dc82cc23b9
fix(deps): update dependency livekit-client to v2.16.0 (#494)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-19 09:56:42 +01:00
renovate[bot]
e9b037bac1
fix(deps): update livekit dependencies (non-major) (#492)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-15 08:20:55 +01:00
lukasIO
49b83637dc
Enable singlePC mode for meet also on prod (#493)
* Enable singlePC mode for meet also on prod

* fix
2025-11-10 11:04:29 +01:00
renovate[bot]
aa9be8cdc0
fix(deps): update dependency livekit-client to v2.15.13 (#487)
* fix(deps): update dependency livekit-client to v2.15.12

* bump

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: lukasIO <mail@lukasseiler.de>
2025-10-21 19:25:41 +02:00
lukasIO
03aac6591a
Enable single pc connection on staging (#488)
* Enable single pc connection on staging

* fix deps

* 'security'

* vp9

* use util
2025-10-16 10:32:49 +02:00
lukasIO
83424b27d5
Revert "Use single pc (#483)" (#484)
* Revert "Update livekit client and use single pc (#483)"

This reverts commit 55adec00d31c25ef40e10f67ef7dd4880c9e81a6.

* still update livekit client
2025-10-13 17:53:27 +02:00
lukasIO
55adec00d3
Update livekit client and use single pc (#483) 2025-10-13 16:57:59 +02:00
renovate[bot]
5ff6fa32ac
chore(deps): update pnpm to v10.18.2 (#408)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-13 15:38:57 +02:00
renovate[bot]
8e66391a01
fix(deps): update livekit dependencies (non-major) (#481)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-02 17:20:43 +02:00
renovate[bot]
e9dba9861a
fix(deps): update dependency react-hot-toast to v2.6.0 (#473)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-15 13:21:40 +02:00
renovate[bot]
76234cdf93
fix(deps): update livekit dependencies (non-major) (#475)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-11 14:28:39 +02:00
Tobias Fried
0b4af83a3f
chore(ci): tag deployment versions (#478) 2025-09-09 00:48:31 -06:00
renovate[bot]
6fdf7f0b9a
fix(deps): update livekit dependencies (non-major) (#474)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-29 14:04:10 +02:00
renovate[bot]
372cdfe760
chore(deps): update dependency node to v22 (#470)
* chore(deps): update dependency node to v22

* Update test.yaml

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: lukasIO <mail@lukasseiler.de>
2025-08-15 12:37:50 +02:00
renovate[bot]
fcec3a2459
chore(deps): update devdependencies (non-major) (#451)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-15 12:36:16 +02:00
renovate[bot]
7d1d62b6c3
fix(deps): update dependency livekit-client to v2.15.5 (#472)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-15 12:35:54 +02:00
renovate[bot]
aa310ade64
fix(deps): update livekit dependencies (non-major) (#463)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-11 17:11:12 +02:00
9 changed files with 681 additions and 721 deletions

View File

@ -1,33 +1,16 @@
# .github/workflows/sync-to-production.yaml
name: Sync main to sandbox-production
on:
push:
branches:
- main
permissions:
contents: write
pull-requests: write
workflow_dispatch:
jobs:
sync:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- uses: livekit-examples/sandbox-deploy-action@v1
with:
fetch-depth: 0 # Fetch all history so we can force push
- name: Set up Git
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@livekit.io'
- name: Sync to sandbox-production
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git checkout sandbox-production || git checkout -b sandbox-production
git merge --strategy-option theirs main
git push origin sandbox-production
production_branch: 'sandbox-production'
token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -11,12 +11,12 @@ jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v4
- name: Use Node.js 20
- name: Use Node.js 22
uses: actions/setup-node@v4
with:
node-version: 20
node-version: 24
cache: 'pnpm'
- name: Install dependencies
@ -29,4 +29,4 @@ jobs:
run: pnpm format:check
- name: Run Tests
run: pnpm test
run: pnpm test

View File

@ -21,6 +21,7 @@ export function VideoConferenceClientImpl(props: {
liveKitUrl: string;
token: string;
codec: VideoCodec | undefined;
singlePeerConnection: boolean | undefined;
}) {
const keyProvider = new ExternalE2EEKeyProvider();
const { worker, e2eePassphrase } = useSetupE2EE();
@ -39,10 +40,11 @@ export function VideoConferenceClientImpl(props: {
dynacast: true,
e2ee: e2eeEnabled
? {
keyProvider,
worker,
}
keyProvider,
worker,
}
: undefined,
singlePeerConnection: props.singlePeerConnection,
};
}, [e2eeEnabled, props.codec, keyProvider, worker]);

View File

@ -7,9 +7,10 @@ export default async function CustomRoomConnection(props: {
liveKitUrl?: string;
token?: string;
codec?: string;
singlePC?: string;
}>;
}) {
const { liveKitUrl, token, codec } = await props.searchParams;
const { liveKitUrl, token, codec, singlePC } = await props.searchParams;
if (typeof liveKitUrl !== 'string') {
return <h2>Missing LiveKit URL</h2>;
}
@ -22,7 +23,12 @@ export default async function CustomRoomConnection(props: {
return (
<main data-lk-theme="default" style={{ height: '100%' }}>
<VideoConferenceClientImpl liveKitUrl={liveKitUrl} token={token} codec={codec} />
<VideoConferenceClientImpl
liveKitUrl={liveKitUrl}
token={token}
codec={codec}
singlePeerConnection={singlePC === 'true'}
/>
</main>
);
}

View File

@ -129,6 +129,7 @@ function VideoConferenceComponent(props: {
adaptiveStream: true,
dynacast: true,
e2ee: keyProvider && worker && e2eeEnabled ? { keyProvider, worker } : undefined,
singlePeerConnection: true,
};
}, [props.userChoices, props.options.hq, props.options.codec]);

View File

@ -23,3 +23,7 @@ export function randomString(length: number): string {
export function isLowPowerDevice() {
return navigator.hardwareConcurrency < 6;
}
export function isMeetStaging() {
return new URL(location.origin).host === 'meet.staging.livekit.io';
}

View File

@ -14,31 +14,31 @@
},
"dependencies": {
"@datadog/browser-logs": "^5.23.3",
"@livekit/components-react": "2.9.13",
"@livekit/components-styles": "1.1.6",
"@livekit/krisp-noise-filter": "0.3.4",
"@livekit/track-processors": "^0.5.4",
"livekit-client": "2.15.2",
"livekit-server-sdk": "2.13.1",
"next": "15.2.4",
"@livekit/components-react": "2.9.19",
"@livekit/components-styles": "1.2.0",
"@livekit/krisp-noise-filter": "0.4.1",
"@livekit/track-processors": "^0.7.0",
"livekit-client": "2.17.2",
"livekit-server-sdk": "2.15.0",
"next": "15.2.8",
"react": "18.3.1",
"react-dom": "18.3.1",
"react-hot-toast": "^2.5.2",
"tinykeys": "^3.0.0"
},
"devDependencies": {
"@types/node": "22.15.31",
"@types/react": "18.3.23",
"@types/node": "24.10.13",
"@types/react": "18.3.27",
"@types/react-dom": "18.3.7",
"eslint": "9.29.0",
"eslint-config-next": "15.3.3",
"prettier": "3.5.3",
"eslint": "9.39.1",
"eslint-config-next": "15.5.6",
"prettier": "3.7.3",
"source-map-loader": "^5.0.0",
"typescript": "5.8.3",
"typescript": "5.9.3",
"vitest": "^3.2.4"
},
"engines": {
"node": ">=18"
},
"packageManager": "pnpm@10.9.0"
"packageManager": "pnpm@10.18.2"
}

1219
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -25,13 +25,13 @@ body {
padding-inline: 2rem;
}
.header>img {
.header > img {
display: block;
margin: auto;
max-width: 100%;
}
.header>h2 {
.header > h2 {
font-family: 'TWK Everett', sans-serif;
font-style: normal;
font-weight: 400;
@ -65,92 +65,3 @@ h2 a {
h2 a {
text-decoration: none;
}
/* Override LiveKit video conference layout to fix control bar positioning */
.lk-video-conference {
position: relative;
display: flex !important;
flex-direction: column !important;
align-items: stretch;
height: 100%;
}
.lk-video-conference-content {
display: flex;
flex-direction: row;
align-items: stretch;
width: 100%;
flex: 1;
min-height: 0;
}
.lk-video-conference-inner {
display: flex;
flex-direction: column;
align-items: stretch;
width: 100%;
flex: 1;
min-height: 0;
}
.lk-grid-layout-wrapper,
.lk-focus-layout-wrapper {
position: relative;
display: flex;
justify-content: center;
width: 100%;
height: 100% !important;
flex: 1;
min-height: 0;
}
.lk-grid-layout-wrapper {
flex-direction: column;
align-items: center;
}
.lk-focus-layout-wrapper {
align-items: stretch;
}
/* Emoji Reaction Styles */
.lk-emoji-reactions {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
pointer-events: none;
z-index: 10;
}
.lk-emoji-reaction {
font-size: 3rem;
animation: emojiReaction 3s ease-out forwards;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
}
@keyframes emojiReaction {
0% {
opacity: 0;
transform: scale(0.5) translateY(20px);
}
20% {
opacity: 1;
transform: scale(1.2) translateY(0);
}
80% {
opacity: 1;
transform: scale(1) translateY(-10px);
}
100% {
opacity: 0;
transform: scale(0.8) translateY(-20px);
}
}