0.1.15 • Published 5 years ago

firepeer v0.1.15

Weekly downloads
2
License
MIT
Repository
github
Last release
5 years ago

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

0.1.15

5 years ago

0.1.14

5 years ago

0.1.13

5 years ago

0.1.12

5 years ago

0.1.11

5 years ago

0.1.10

5 years ago

0.1.6

5 years ago

0.1.5

5 years ago

0.1.4

5 years ago

0.1.3

5 years ago

0.1.1

5 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago