From 99853a7badf26911367d4735b4f0f43ba747d700 Mon Sep 17 00:00:00 2001 From: Carlos Santos <4a.santos@gmail.com> Date: Tue, 17 Oct 2023 16:41:17 +0200 Subject: [PATCH] Updated openvidu-js tutorial --- openvidu-js/web/app.js | 32 +++++++++++++++++++++++++++----- openvidu-js/web/index.html | 2 +- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/openvidu-js/web/app.js b/openvidu-js/web/app.js index 8e29ee9b..79e0159d 100644 --- a/openvidu-js/web/app.js +++ b/openvidu-js/web/app.js @@ -1,10 +1,7 @@ -// docker run --rm -p 7880:7880 -p 7881:7881 -p 7882:7882/udp -e LIVEKIT_KEYS="devkey: secret" livekit/livekit-server:latest var LivekitClient = window.LivekitClient; -var livekitUrl = 'ws://localhost:7880/'; var room; - /* OPENVIDU METHODS */ function joinRoom() { @@ -42,6 +39,7 @@ function joinRoom() { // Get a token from the application backend getToken(myRoomName, myUserName).then(token => { + const livekitUrl = getLivekitUrlFromMetadata(token); // First param is the LiveKit server URL. Second param is the access token room.connect(livekitUrl, token) @@ -165,15 +163,39 @@ function getToken(roomName, participantName) { return new Promise((resolve, reject) => { $.ajax({ type: 'POST', - url: APPLICATION_SERVER_URL + 'getToken', + url: APPLICATION_SERVER_URL + 'token', data: JSON.stringify({ roomName, participantName, permissions: {} }), headers: { "Content-Type": "application/json" }, - success: (response) => resolve(response), // The token + success: (token) => resolve(token), error: (error) => reject(error) }); }); +} + +function getLivekitUrlFromMetadata(token) { + if (!token) throw new Error('Trying to get metadata from an empty token'); + try { + const base64Url = token.split('.')[1]; + const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); + const jsonPayload = decodeURIComponent( + window + .atob(base64) + .split('') + .map((c) => { + return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); + }) + .join('') + ); + + const payload = JSON.parse(jsonPayload); + if (!payload?.metadata) throw new Error('Token does not contain metadata'); + const metadata = JSON.parse(payload.metadata); + return metadata.livekitUrl; + } catch (error) { + throw new Error('Error decoding and parsing token: ' + error); + } } \ No newline at end of file diff --git a/openvidu-js/web/index.html b/openvidu-js/web/index.html index 0df1e596..8e730d84 100644 --- a/openvidu-js/web/index.html +++ b/openvidu-js/web/index.html @@ -14,7 +14,7 @@ - +