9.1.0 • Published 1 year ago

firebase-subscriber v9.1.0

Weekly downloads
22
License
MIT
Repository
-
Last release
1 year ago

Firebase Subscriber

Build Status npm

FirebaseSubscriber is an abstract layer on top of Firebase official SDK. The main purpose of FirebaseSubscriber is to:

  • Abstract logic token expiring/re-auth from application logic
  • Abstract event unsubscribing by an additional Channel layer

Installation

This lib does not include firebase, so you'll need to install it as well

$ yarn add firebase-subscriber firebase

Usage

const FirebaseSubscriber = require('firebase-subscriber');

const getAuthToken = function() {
  // request application api here to get fresh firebase auth token
  // return a promise
  // this function would be invoked whenever the firebase auth token is expired
}

const subscribe = FirebaseSubscriber.subscriber({
  appName: "default",
  apiKey: "AIza....",                             // Auth / General Use
  authDomain: "YOUR_APP.firebaseapp.com",         // Auth with popup/redirect
  databaseURL: "https://YOUR_APP.firebaseio.com", // Realtime Database
  storageBucket: "YOUR_APP.appspot.com",          // Storage
  messagingSenderId: "123456789"                  // Cloud Messaging
}, {
  getAuthToken
});

subscribe('/my-test-path').then((channel) => {
  channel.on('child_added', function(val) {
    // `val` here is the result of snapshot.val()
    console.log('on child added', val);
  })
  channel.on('value', function(val) {
    console.log('on value', val);
  })

  channel.off(); //=> unsubscribe ALL event handlers bound on the channel
});

API

.subscriber()

The .subscriber() method takes two arguments, firebaseConfig and options for Connection, and returns a Promise for subscribing certain path of a database.

Please refer to the Connection section for the details of options.

Channel

A Channel instance is returned by subscribe function.

channel.on(eventName, handler):

Wrap Firebase.on(), invoke handler with snapshot.val()

channel.off():

Unregister ALL event handlers on the channel

channel.onDisconnect(callback):

Invoke callback with disconnected ref, for example:

channel.onDisconnect(function(presenceRef) {
  presenceRef.set('offline')
})

Setter Methods

Channel instances are equipped with some setter methods simply delegate to its underlying firebase ref:

  • channel.set()
  • channel.push()
  • channel.remove()
  • channel.update()

Connection

Connection is a configurable factory, which

  • takes two arguments: firebaseConfig and options
  • returns singleton connection, which would auto re-auth when expired

options:

OptionDescription
getAuthTokenA function which fetches firebase auth token from your application server and returns a promise
needAuthA flag to determine if user need to auth or not, default: true
isAnonymousA flag to determine if auth anonymously, default: false

Usage

import { Connection } from 'firebase-subscriber';

const getConnection = Connection(firebaseConfig, { getAuthToken });
const connection1 = getConnection();
const connection2 = getConnection();

expect(connection1).to.equal(connection2);
Auth Anonymously
// specify `isAnonymous: true` in the options to create an anonymous connection
// returns singleton connection with auto re-auth as well
const getConnection = Connection(firebaseConfig, { isAnonymous: true });
const connection = getConnection()

Testing

$ npm test

LICENCE

MIT

9.1.0-beta.7

1 year ago

9.1.0-beta.6

1 year ago

9.1.0-beta.4

1 year ago

9.1.0-beta.2

1 year ago

9.1.0

1 year ago

6.0.0-beta.3

2 years ago

6.0.0-beta.4

2 years ago

6.0.0-beta.5

2 years ago

6.0.0-beta.6

2 years ago

6.0.0-beta.2

2 years ago

9.0.0

2 years ago

6.0.0

4 years ago

5.0.1-beta.3

4 years ago

5.0.1-beta.2

4 years ago

5.0.1-beta.1

4 years ago

5.0.1-beta.0

4 years ago

5.0.1

5 years ago

5.0.0

6 years ago

4.0.0-beta.3

6 years ago

4.0.0-beta.2

6 years ago

4.0.0-beta.1

6 years ago

4.0.0-beta.0

6 years ago

4.0.0

6 years ago

3.0.1-beta.2

6 years ago

3.0.1-beta.1

6 years ago

3.0.1-beta.0

6 years ago

3.0.1

6 years ago

3.0.0-beta.0

6 years ago

2.0.1

6 years ago

2.0.0

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

7 years ago

1.0.0

7 years ago

0.0.1

8 years ago