Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

firepeer

natzcam39MIT0.1.15TypeScript support: included

secure p2p signalling and authentication for simple-peer using firebase realtime database

simple-peer, signalling, node, browser, p2p, firebase, webrtc, firebase-realtime-database, peer

readme

firepeer

Secure p2p signalling and authentication for simple-peer using firebase realtime database.

Setup firebase

  1. Create a firebase project and setup the javascript client SDK.

  2. Add these security rules in the firebase console to secure the signalling data.

     {
       "rules": {
         "peers": {
           "$uid": {
             "$id": {
               ".read": "auth != null && auth.uid == $uid",
               ".write": "auth != null && auth.uid == $uid",
               "$otherUid": {
                 "$otherId": {
                   ".read": "auth != null && auth.uid == $otherUid",
                   ".write": "auth != null && auth.uid == $otherUid",
                   "sdp": {
                     ".validate": "newData.isString() && newData.val().length < 4000"
                   },
                   "type": {
                     ".validate": "newData.val() == 'offer' || newData.val() == 'answer' || newData.val() == 'error'"
                   },
                   "$other": { ".validate": false }
                 }
               }
             }
           }
         }
       }
     }

    Signaling data is exchanged in /peers/$uid/$id/$otherUid/$otherId. Security rules ensure that only the intended users can access signalling data and the signals are valid.

    Shortcut: https://console.firebase.google.com/project/<YOUR_PROJECT_ID>/database/rules

  1. Enable your prefered sign-in method in the firebase console. Firepeer requires authentication so at the very least you have to select anonymous authentication.

    Shortcut: https://console.firebase.google.com/project/<YOUR_PROJECT_ID>/authentication/providers

Install

npm install --save firepeer
<script src="https://cdn.jsdelivr.net/npm/firepeer@<FIREPEER_VERSION>/lib/firepeer.min.js"></script>

Usage

//alice side

firebase.initializeApp({
  //values from firebase console
});

const alice = new FirePeer(firebase);

console.log(alice.id) // peer id of alice

//authenticate with the sign-in method you enabled in the console
await firebase.auth().signInWith*()

console.log(alice.uid) // uid of alice

// connect
const connection = await alice.connect(BOB_UID, BOB_ID);

// send a mesage to bob
connection.send('hello')
// bob side

firebase.initializeApp({
  //values from firebase console
});

const bob = new FirePeer({
  app: firebase.app()
});

console.log(bob.id) // id

//authenticate
await firebase.auth().signInWith*()

console.log(bob.uid) // peer id of bob

// wait for connection and receive message
bob.on('connection', (connection)=>{
    connection.on('data', (data)=>{
        console.log(data) //hello
    })
})

Connections are just instances of simple-peer already connected!

Reference

Demo

changelog