firepeer
TypeScript icon, indicating that this package has built-in type declarations

0.1.15 • Public • Published

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

  3. 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

Package Sidebar

Install

npm i firepeer

Weekly Downloads

14

Version

0.1.15

License

MIT

Unpacked Size

127 kB

Total Files

10

Last publish

Collaborators

  • natzcam