Coder Social home page Coder Social logo

videosdk-live / videosdk-rtc-react-sdk-example Goto Github PK

View Code? Open in Web Editor NEW
102.0 2.0 64.0 8.02 MB

WebRTC based video conferencing SDK for React JS

Home Page: https://docs.videosdk.live/react/guide/video-and-audio-calling-api-sdk/getting-started

HTML 0.23% CSS 1.44% JavaScript 98.33%
webrtc video-sdk react reactjs live-streaming video-conferencing video-streaming realtime javascript video

videosdk-rtc-react-sdk-example's Introduction

Video SDK for React JS

Documentation Discord Register

At Video SDK, we’re building tools to help companies create world-class collaborative products with capabilities of live audio/videos, compose cloud recordings/rtmp/hls and interaction APIs

Demo App

Check out demo here

Meeting Features

  • Real-time video and audio conferencing
  • Enable/disable camera
  • Mute/unmute mic
  • Chat
  • Raise hand
  • Screen share
  • Recording

Setup Guide

  • Sign up on VideoSDK and visit API Keys section to get your API key and Secret key.

  • Get familiarized with Token


Prerequisites

Run the Sample App

Step 1: Clone the sample project

Clone the repository to your local environment.

git clone https://github.com/videosdk-live/videosdk-rtc-react-sdk-example.git

Step 2: Copy the .env.example file to .env file.

Open your favorite code editor and copy .env.example to .env file.

cp.env.example.env;

Step 3: Modify .env file

Generate temporary token from Video SDK Account.

REACT_APP_VIDEOSDK_TOKEN = "TEMPORARY-TOKEN";

Step 4: Install the dependecies

Install all the dependecies to run the project.

npm install

Step 5: Run the Sample App

Bingo, it's time to push the launch button.

npm run start

  • Meeting - A Meeting represents Real time audio and video communication.

    Note : Don't confuse with Room and Meeting keyword, both are same thing 😃

  • Sessions - A particular duration you spend in a given meeting is a referred as session, you can have multiple session of a particular meetingId.

  • Participant - Participant represents someone who is attending the meeting's session, local partcipant represents self (You), for this self, other participants are remote participants.

  • Stream - Stream means video or audio media content that is either published by local participant or remote participants.


Token Generation

Token is used to create and validate a meeting using API and also initialise a meeting.

🛠️ Development Environment:

  • You may use a temporary token for development. To create a temporary token, go to VideoSDK dashboard .

🌐 Production Environment:

  • You must set up an authentication server to authorise users for production. To set up an authentication server, refer to our official example repositories. videosdk-rtc-api-server-examples

API: Create and Validate meeting

  • create meeting - Please refer this documentation to create meeting.
  • validate meeting- Please refer this documentation to validate the meetingId.

  • You can initialize the meeting using MeetingProvider. Meeting Provider simplifies configuration of meeting with by wrapping up core logic with react-context.
<MeetingProvider
  config={{
    meetingId: "meeting-id",
    micEnabled: true,
    webcamEnabled: true,
    name: "Participant Name",
    participantId: "xyz",
    // For Interactive Live Streaming we can provide mode, `CONFERENCE` for Host and  `VIEWER` for remote participant.
    mode: "CONFERENCE", // "CONFERENCE" || "VIEWER"
  }}
  token={"token"}
  joinWithoutUserInteraction // Boolean
></MeetingProvider>

const onPress = () => {
  // Enable Webcam in Meeting
  meeting?.enableWebcam();

  // Disable Webcam in Meeting
  meeting?.disableWebcam();
};

const onPress = () => {
const webcams = await meeting?.getWebcams(); // returns all webcams

const { deviceId, label } = webcams[0];

meeting?.changeWebcam(deviceId);
}

const onPress = () => {
  // Enable Mic in Meeting
  meeting?.unmuteMic();

  // Disable Mic in Meeting
  meeting?.muteMic();
};

const onPress = () => {
const mics = await meeting?.getMics(); // returns all mics

const { deviceId, label } = mics[0];

meeting?.changeMic(deviceId);
}

  • The chat feature allows participants to send and receive messages about specific topics to which they have subscribed.
// importing usePubSub hook from react-sdk
import { usePubSub } from "@videosdk.live/react-sdk";

// CHAT Topic
const { publish, messages } = usePubSub("CHAT");

// publish message
const sendMessage = () => {
  const message = "Hello People!";
  publish(message, { persist: true });
};

// get latest messages
console.log("Messages : ", messages);

  • This feature allows participants to raise hand during the meeting.
// importing usePubSub hook from react-sdk
import { usePubSub } from "@videosdk.live/react-sdk";

// RAISE_HAND Topic
const { publish } = usePubSub("RAISE_HAND");

// Publish Message
const RaiseHand = () => {
  publish("Raise Hand");
};

  • This featute allows participant to share either the complete screen, a specific window or, a browser tab.
const onPress = () => {
  // Enabling ScreenShare
  meeting?.enableScreenShare();

  // Disabling ScreenShare
  meeting?.disableScreenShare();
};

  • Record meeting allows participants to record video & audio during the meeting. The recording files are available in developer dashboard. Any participant can start / stop recording any time during the meeting.
const onPress = () => {
  // Start Recording
  meeting?.startRecording(webhookUrl, awsDirPath);

  // Stop Recording
  meeting?.stopRecording();
};

  • Interactive Live Streaming allows participants to to broadcast live streaming to other participants. Host can start / stop HLS any time during the meeting.
const onPress = () => {
  // Start HLS
  const layout = {
    type: "SPOTLIGHT",
    priority: "PIN",
    gridSize: 9,
  },

  meeting?.startHls({ layout, theme: "DARK" });

  // Stop HLS
  meeting?.stopHls();
};

const onPress = () => {
  // Only one participant will leave/exit the meeting; the rest of the participants will remain.
  meeting?.leave();

  // The meeting will come to an end for each and every participant. So, use this function in accordance with your requirements.
  meeting?.end();
};

By registering callback handlers, VideoSDK sends callbacks to the client app whenever there is a change or update in the meeting after a user joins.

function onMeetingJoined() {
  // This event will be emitted when a localParticipant(you) successfully joined the meeting.
  console.log("onMeetingJoined");
}
function onMeetingLeft() {
  // This event will be emitted when a localParticipant(you) left the meeting.
  console.log("onMeetingLeft");
}
function onParticipantJoined(participant) {
  // This event will be emitted when a new participant joined the meeting.
  // [participant]: new participant who joined the meeting
  console.log(" onParticipantJoined", participant);
}
function onParticipantLeft(participant) {
  // This event will be emitted when a joined participant left the meeting.
  // [participantId]: id of participant who left the meeting
  console.log(" onParticipantLeft", participant);
}
const onSpeakerChanged = (activeSpeakerId) => {
  // This event will be emitted when any participant starts or stops screen sharing.
  // [activeSpeakerId]: Id of participant who shares the screen.
  console.log(" onSpeakerChanged", activeSpeakerId);
};
function onPresenterChanged(presenterId) {
  // This event will be emitted when a active speaker changed.
  // [presenterId] : Id of active speaker
  console.log(" onPresenterChanged", presenterId);
}
function onRecordingStarted() {
  // This event will be emitted when recording of the meeting is started.
  console.log(" onRecordingStarted");
}
function onRecordingStopped() {
  // This event will be emitted when recording of the meeting is stopped.
  console.log(" onRecordingStopped");
}

const { meetingId, meeting, localParticipant } = useMeeting({
  onMeetingJoined,
  onMeetingLeft,
  onParticipantJoined,
  onParticipantLeft,
  onSpeakerChanged,
  onPresenterChanged,
  onRecordingStarted,
  onRecordingStopped,
});

By registering callback handlers, VideoSDK sends callbacks to the client app whenever a participant's video, audio, or screen share stream is enabled or disabled.

  function onStreamEnabled(stream) {
    // This event will be triggered whenever a participant's video, audio or screen share stream is enabled.
    console.log(" onStreamEnabled", stream);
  }
  function onStreamDisabled(stream) {
    // This event will be triggered whenever a participant's video, audio or screen share stream is disabled.
    console.log(" onStreamDisabled", stream);
  }
  function onMediaStatusChanged(data) {
    // This event will be triggered whenever a participant's video or audio is disabled or enabled.
    const { kind, newStatus} = data;

    console.log("onMediaStatusChanged", kind,newStatus)

  }

  const {
    displayName
    ...
  } = useParticipant(participantId,{
    onStreamEnabled,
    onStreamDisabled,
    onMediaStatusChanged,
  });

If you want to learn more about the SDK, read the Complete Documentation of React VideoSDK


Project Description


Note :

  • main branch: Meeting and Interactive live streaming with better UI includes basic features.
  • design/v1 branch: Simple UI with all features and methods.

Use case type

  • Meeting - In Meeting you can enable mic and webcam, record the meeting, raise hand, chat, share your screen.

Project Structure

There are 1 folder :

  1. meeting - This folder includes components or file related to meeting.

Common components

1. Create or join Meeting

  • components/screens/JoiningScreen.js : It shows the user with the option to meeting type and create or join a meeting and to initiate webcam and mic status.

  • api.js : It includes all the API calls for create and validate meeting.

  • If you select Meeting type and click Create Meeting, it will show following:

    • MeetingId - You can copy this meetingId and share it with other participants that wants to join the meeting.
    • TextField for ParticipantName - This text field will contain name of the participant.
    • Start Meeting Button - This button will call api to create meeting with meetingId that participant want to join.

  • If you select Meeting type and click Join Meeting, it will show following:

    • TextField for MeetingId - This text field will contain the meeting Id that you want to join.
    • TextField for ParticipantName - This text field will contain name of the participant.
    • Join Meeting Button - This button will call api to validate meeting with meetingId that participant want to join.

  • If you select Interactive Live Streaming type and click Join as a Host, it will show following:

    • Studio code - You can copy this studio code and share with other participants that wants to join the meeting.
    • TextField for ParticipantName - This text field will contain name of the participant.
    • Join Studio Button - This button will call api to create meeting with studio code that participant want to join.

  • If you select Interactive Live Streaming type and click Join as a Viewer, it will show following:

    • TextField for StudioCode - This text field will contain the studio code that you want to join.
    • TextField for ParticipantName - This text field will contain name of the participant.
    • Join Streaming Room Button - This button will call api to validate meeting with studio code that viewer want to join.

2. PresenterView

components/PresenterView.js - It contains the view when participant share their screen.

3. ParticipantView

components/ParticipantView.js - It contains single participant video and corner display name.

4. ParticipantGrid

components/ParticipantGrid.js - It contains the grid of participant that are displayed in the main screen.

5. ParticipantList

sidebar/ParticipantPanel.js - This file is used to show the list of participants present in the meeting.

6. Chat

sidebar/ChatPanel.js - It contains the chat side panel with chat input and chat messages list.

7. Waiting Screen

components/screens/WaitingToJoin.js - It contains the lottie animation with messages. Untill you receive isMeetingJoined true from meeting that you intialize using useMeeting() from @videosdk.live/react-sdk, this screen will be displayed.

8. Leave Screen

components/screens/LeaveScreen.js - This file contains the leave screen.

9. SidebarContainer


Meeting Project Structure

1. MeetingContainer : It contains the PresenterView , ParticipantView, SidebarContainer and BottomBar.

2. Meeting Bottom Bar

  • meeting/components/BottomBar.js: It contains the buttons that are displayed in bottom of the screen.

    • Starting from left it shows meetingId with copy icon button.

    • In middle, it shows recording indicator, raise hand icon button, mic icon button with available mics list, webcam icon button with available webcam list, screen share and leave meeting icon button.

    • In right most corner, it shows chat icon button and partcipants icon with participant count.

    • When screen resolution change to mobile, tab or lg screen, the order of bottom bar elements changes to leave meeting button, recording button, mic & webcam button and more actions button.

    • On click of more actions button it opens a drawer that contains other remaining buttons.

3. ParticipantView


Examples

Examples for Conference

Examples for Live Streaming

Documentation

Read the documentation to start using Video SDK.

Community

  • Discord - To get involved with the Video SDK community, ask questions and share tips.
  • Twitter - To receive updates, announcements, blog posts, and general Video SDK tips.

videosdk-rtc-react-sdk-example's People

Contributors

ahmedbhesaniya97 avatar ajpaw avatar arjun-kava avatar bhumisalat avatar chintanrajpara avatar dependabot[bot] avatar divyesh1511 avatar halima1802 avatar ishabodiwala avatar mrsurana avatar rajansurani avatar sumitvideosdk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

videosdk-rtc-react-sdk-example's Issues

Quit Spamming

Hi, could I request you stop spamming other communities with messages directing people to your website?

Multiple customers have reported it to us and find it very annoying.

Mozilla Firefox Camera support

I have tried running this example in Mozilla Firefox browser (version 93.0 (64-bit)) and camera is not starting up. I can use my microphone and I can see feeds from other participants. Google chrome and Edge browsers are working fine. Do I need to add some additional configuration code for Firefox?

I have noticed that property webcamOn (coming from useParticipant hook) is always false:

const {    
    webcamStream,    
    micStream,    
    webcamOn, //this one is always false for Firefox
    micOn,
    isLocal,
    isActiveSpeaker,
    participant

  } = useParticipant(participantId, {
    onStreamEnabled,
    onStreamDisabled,
  })

Devices other than the host device cannot use camera or microphone

I am running the example React project with the example NodeJS server. I have set my API_KEY and SECRET_KEY in the server env file, and set the server's IP address (localhost, but using the ports so other devices can connect) in the React env file.

When I start both, the computer I am hosting the server and client on can operate normally; I can enable/disabled webcam and mic. Other devices on the same network can connect to the running application and join the meeting hosted by the computer hosting the app, but cannot enable webcam/mic. Here is a screenshot of the error I am receiving. What am I missing?

image

changeWebcam not working on Android Chrome and Firefox

Latest versions of browsers Mozilla Firefox and Google Chrome (not sure about others, only these were tested) on device Google pixel 3a do not work when switching to another video device using changeWebcam method specified on https://docs.videosdk.live/docs/realtime-communication/sdk-reference/react-sdk/use-meeting

changeWebcam(deviceId: string)function

I have tried using this method (returned from useMeeting hook) but with no luck. As a parameter I am passing correct device ID of the back mobile camera. Instead of new video feed from second camera, current feed goes blank and it is no longer available in the meeting session.

ReferenceError: self is not defined in @videosdk.live/react-sdk

in the next js, when I build the app. I get error ReferenceError: self is not defined in @videosdk.live/react-sdk

at Module._compile (node:internal/modules/cjs/loader:1376:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1435:10) {

type: 'ReferenceError'

Microphone remains active

When the user is in the meeting room, the microphone remains active even if it has been toggled off, the browser utilizes it consistently

npm install: could not resolve

PS D:\Projects\Telemedicine\src> git clone https://github.com/videosdk-live/videosdk-rtc-react-sdk-example.git
Cloning into 'videosdk-rtc-react-sdk-example'...
remote: Enumerating objects: 1466, done.
remote: Counting objects: 100% (342/342), done.
remote: Compressing objects: 100% (138/138), done.
remote: Total 1466 (delta 232), reused 251 (delta 201), pack-reused 1124
Receiving objects: 100% (1466/1466), 7.89 MiB | 978.00 KiB/s, done.

Resolving deltas: 100% (880/880), done.

PS D:\Projects\Telemedicine\src> cd videosdk-rtc-react-sdk-example

PS D:\Projects\Telemedicine\src\videosdk-rtc-react-sdk-example> dir

目录: D:\Projects\Telemedicine\src\videosdk-rtc-react-sdk-example

Mode LastWriteTime Length Name


d----- 2023/9/4 16:38 .github
d----- 2023/9/4 16:38 public
d----- 2023/9/4 16:38 src
-a---- 2023/9/4 16:38 317 .env.example
-a---- 2023/9/4 16:38 350 .gitignore
-a---- 2023/9/4 16:38 699405 package-lock.json
-a---- 2023/9/4 16:38 1340 package.json
-a---- 2023/9/4 16:38 145 postcss.config.js
-a---- 2023/9/4 16:38 21358 README.md
-a---- 2023/9/4 16:38 2652 tailwind.config.js

PS D:\Projects\Telemedicine\src\videosdk-rtc-react-sdk-example> npm install
npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
npm ERR!
npm ERR! While resolving: @tailwindcss/[email protected]
npm ERR! Found: [email protected]
npm ERR! node_modules/tailwindcss
npm ERR! dev tailwindcss@"^2.2.4" from the root project
npm ERR! peer tailwindcss@">=2.0.0" from @tailwindcss/[email protected]
npm ERR! node_modules/@tailwindcss/forms
npm ERR! @tailwindcss/forms@"^0.3.2" from @windmill/[email protected]
npm ERR! node_modules/@windmill/react-ui
npm ERR! @windmill/react-ui@"^0.6.0" from the root project
npm ERR! 1 more (@windmill/react-ui)
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer tailwindcss@">=3.0.0 || >= 3.0.0-alpha.1" from @tailwindcss/[email protected]
npm ERR! node_modules/@tailwindcss/typography
npm ERR! dev @tailwindcss/typography@"0.5.0-alpha.2" from the root project
npm ERR!
npm ERR! Conflicting peer dependency: [email protected]
npm ERR! node_modules/tailwindcss
npm ERR! peer tailwindcss@">=3.0.0 || >= 3.0.0-alpha.1" from @tailwindcss/[email protected]
npm ERR! node_modules/@tailwindcss/typography
npm ERR! dev @tailwindcss/typography@"0.5.0-alpha.2" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR!
npm ERR! See C:\Users\Steven\AppData\Local\npm-cache\eresolve-report.txt for a full report.

npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Steven\AppData\Local\npm-cache_logs\2023-09-04T08_40_31_864Z-debug-0.log

0 verbose cli E:\Program Files\nodejs\node.exe E:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js
1 info using [email protected]
2 info using [email protected]
3 timing npm:load:whichnode Completed in 1ms
4 timing config:load:defaults Completed in 1ms
5 timing config:load:file:E:\Program Files\nodejs\node_modules\npm\npmrc Completed in 4ms
6 timing config:load:builtin Completed in 4ms
7 timing config:load:cli Completed in 2ms
8 timing config:load:env Completed in 1ms
9 timing config:load:file:D:\Projects\Telemedicine\src\videosdk-rtc-react-sdk-example.npmrc Completed in 0ms
10 timing config:load:project Completed in 7ms
11 timing config:load:file:C:\Users\Steven.npmrc Completed in 0ms
12 timing config:load:user Completed in 0ms
13 timing config:load:file:C:\Users\Steven\AppData\Roaming\npm\etc\npmrc Completed in 0ms
14 timing config:load:global Completed in 1ms
15 timing config:load:validate Completed in 0ms
16 timing config:load:credentials Completed in 1ms
17 timing config:load:setEnvs Completed in 1ms
18 timing config:load Completed in 18ms
19 timing npm:load:configload Completed in 18ms
20 timing npm:load:mkdirpcache Completed in 2ms
21 timing npm:load:mkdirplogs Completed in 1ms
22 verbose title npm install
23 verbose argv "install"
24 timing npm:load:setTitle Completed in 1ms
25 timing config:load:flatten Completed in 3ms
26 timing npm:load:display Completed in 5ms
27 verbose logfile logs-max:10 dir:C:\Users\Steven\AppData\Local\npm-cache_logs
28 verbose logfile C:\Users\Steven\AppData\Local\npm-cache_logs\2023-09-04T08_40_31_864Z-debug-0.log
29 timing npm:load:logFile Completed in 13ms
30 timing npm:load:timers Completed in 1ms
31 timing npm:load:configScope Completed in 0ms
32 timing npm:load Completed in 42ms
33 timing arborist:ctor Completed in 0ms
34 silly logfile start cleaning logs, removing 2 files
35 silly logfile done cleaning log files
36 timing idealTree:init Completed in 1055ms
37 timing idealTree:userRequests Completed in 0ms
38 silly idealTree buildDeps
39 silly fetch manifest @videosdk.live/react-sdk@^0.1.74
40 http fetch GET 200 https://registry.npmjs.org/@videosdk.live%2freact-sdk 1616ms (cache miss)
41 silly fetch manifest react@^18.2.0
42 http fetch GET 200 https://registry.npmjs.org/react 3782ms (cache miss)
43 silly placeDep ROOT @videosdk.live/[email protected] REPLACE for: [email protected] want: ^0.1.74
44 silly fetch manifest @videosdk.live/[email protected]
45 http fetch GET 200 https://registry.npmjs.org/@videosdk.live%2fjs-sdk 552ms (cache miss)
46 timing idealTree:#root Completed in 5983ms
47 silly fetch manifest tailwindcss@>=3.0.0 || >= 3.0.0-alpha.1
48 http fetch GET 200 https://registry.npmjs.org/tailwindcss 7784ms (cache miss)
49 timing idealTree Completed in 14867ms
50 timing command:install Completed in 14882ms
51 verbose stack Error: could not resolve
51 verbose stack at PlaceDep.failPeerConflict (E:\Program Files\nodejs\node_modules\npm\node_modules@npmcli\arborist\lib\place-dep.js:549:25)
51 verbose stack at PlaceDep.place (E:\Program Files\nodejs\node_modules\npm\node_modules@npmcli\arborist\lib\place-dep.js:199:21)
51 verbose stack at new PlaceDep (E:\Program Files\nodejs\node_modules\npm\node_modules@npmcli\arborist\lib\place-dep.js:73:10)
51 verbose stack at E:\Program Files\nodejs\node_modules\npm\node_modules@npmcli\arborist\lib\arborist\build-ideal-tree.js:944:31
51 verbose stack at Array.map ()
51 verbose stack at Arborist.[buildDepStep] (E:\Program Files\nodejs\node_modules\npm\node_modules@npmcli\arborist\lib\arborist\build-ideal-tree.js:944:8)
51 verbose stack at async Arborist.buildIdealTree (E:\Program Files\nodejs\node_modules\npm\node_modules@npmcli\arborist\lib\arborist\build-ideal-tree.js:211:7)
51 verbose stack at async Promise.all (index 1)
51 verbose stack at async Arborist.reify (E:\Program Files\nodejs\node_modules\npm\node_modules@npmcli\arborist\lib\arborist\reify.js:154:5)
51 verbose stack at async Install.exec (E:\Program Files\nodejs\node_modules\npm\lib\commands\install.js:145:5)
52 verbose cwd D:\Projects\Telemedicine\src\videosdk-rtc-react-sdk-example
53 verbose Windows_NT 10.0.19044
54 verbose node v16.20.0
55 verbose npm v8.19.4
56 error code ERESOLVE
57 error ERESOLVE could not resolve
58 error
59 error While resolving: �[1m@tailwindcss/typography�[22m@�[1m0.5.0-alpha.2�[22m
59 error Found: �[1mtailwindcss�[22m@�[1m2.2.19�[22m�[2m�[22m
59 error �[2mnode_modules/tailwindcss�[22m
59 error �[33mdev�[39m �[1mtailwindcss�[22m@"�[1m^2.2.4�[22m" from the root project
59 error �[35mpeer�[39m �[1mtailwindcss�[22m@"�[1m>=2.0.0�[22m" from �[1m@tailwindcss/forms�[22m@�[1m0.3.4�[22m�[2m�[22m
59 error �[2mnode_modules/@tailwindcss/forms�[22m
59 error �[1m@tailwindcss/forms�[22m@"�[1m^0.3.2�[22m" from �[1m@windmill/react-ui�[22m@�[1m0.6.0�[22m�[2m�[22m
59 error �[2mnode_modules/@windmill/react-ui�[22m
59 error �[1m@windmill/react-ui�[22m@"�[1m^0.6.0�[22m" from the root project
59 error 1 more (@windmill/react-ui)
59 error
59 error Could not resolve dependency:
59 error �[35mpeer�[39m �[1mtailwindcss�[22m@"�[1m>=3.0.0 || >= 3.0.0-alpha.1�[22m" from �[1m@tailwindcss/typography�[22m@�[1m0.5.0-alpha.2�[22m�[2m�[22m
59 error �[2mnode_modules/@tailwindcss/typography�[22m
59 error �[33mdev�[39m �[1m@tailwindcss/typography�[22m@"�[1m0.5.0-alpha.2�[22m" from the root project
59 error
59 error Conflicting peer dependency: �[1mtailwindcss�[22m@�[1m3.3.3�[22m�[2m�[22m
59 error �[2mnode_modules/tailwindcss�[22m
59 error �[35mpeer�[39m �[1mtailwindcss�[22m@"�[1m>=3.0.0 || >= 3.0.0-alpha.1�[22m" from �[1m@tailwindcss/typography�[22m@�[1m0.5.0-alpha.2�[22m�[2m�[22m
59 error �[2mnode_modules/@tailwindcss/typography�[22m
59 error �[33mdev�[39m �[1m@tailwindcss/typography�[22m@"�[1m0.5.0-alpha.2�[22m" from the root project
59 error
59 error Fix the upstream dependency conflict, or retry
59 error this command with --force, or --legacy-peer-deps
59 error to accept an incorrect (and potentially broken) dependency resolution.
59 error
59 error See C:\Users\Steven\AppData\Local\npm-cache\eresolve-report.txt for a full report.
60 verbose exit 1
61 timing npm Completed in 15430ms
62 verbose unfinished npm timer reify 1693816832354
63 verbose unfinished npm timer reify:loadTrees 1693816832366
64 verbose unfinished npm timer idealTree:buildDeps 1693816833424
65 verbose unfinished npm timer idealTree:node_modules/@tailwindcss/typography 1693816839409
66 verbose code 1
67 error A complete log of this run can be found in:
67 error C:\Users\Steven\AppData\Local\npm-cache_logs\2023-09-04T08_40_31_864Z-debug-0.log

Unable to connect with cloudflare when adblockers are active

I'm trying to get the example site running, and am facing this error.

NetworkStats.js:20
POST https://aim.cloudflare.com/__log net::ERR_BLOCKED_BY_CLIENT

Here's a screenshot of the error message as well.

Screenshot 2024-06-20 at 9 42 14 AM

After tinkering around for some time, I realized the problem is that uBlock (the adblocker) is blocking this request on the client side itself. Disabling the extension fixes the problem, but that's not a permanent solution.

Is this intentional, or is there something that could be done to fix this issue? Doesn't seem to be a problem with other rtc conferencing solutions.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.