Firebase drivers for Motorcycle.js
This is a collection of drivers for interacting with Firebase. Currently only Firebase Authentication has been implemented, but more will be made in the future.
npm install --save @motorcycle/firebase
- Firebase Authentication Driver
- Firebase Database Driver
- Firebase Queue Driver
- Firebase Storage Driver
import { run } from '@motorcycle/core'
import { makeFirebaseAuthenticationDriver } from '@motorcycle/firebase'
import * as firebase from 'firebase';
run(main, {
authentication$: makeFirebaseAuthenticationDriver(firebase);
});
import { REDIRECT } from '@motorcycle/firebase';
function main (sources) {
const user$ = sources.authentication$.map(authentication =>
authentication.userCredential.user);
return {
authentication$: sources.DOM.select('#auth').events('click').constant(GoogleAuth)
}
}
const GoogleAuth = { method: REDIRECT, provider: new firebase.auth.GoogleProvider() }
export type Authentication = {
error: AuthenticationError | null;
userCredential: firebase.User;
};
Extends built-in error type with extra property code
which represents a
firebase error code.
Dealing with these strings for each method
is a pain, and easily
open for common typos constants are provided to help you with this. Their
imports are shown with each authentication type.
export type AuthenticationType =
AnonymousAuthentication |
EmailAndPasswordAuthentication |
PopupAuthentication |
RedirectAuthentication |
SignOutAuthentication |
CreateUserAuthentication |
GetRedirectResultAuthentication;
import { ANONYMOUSLY } from '@motorcycle/firebase';
export interface AnonymousAuthentication {
method: 'ANONYMOUSLY';
}
import { EMAIL_AND_PASSWORD } from '@motorcycle/firebase';
export interface EmailAndPasswordAuthentication {
method: 'EMAIL_AND_PASSWORD';
email: string;
password: string;
}
import { POPUP } from '@motorcycle/firebase';
export interface PopupAuthentication {
method: 'POPUP';
provider: firebase.auth.AuthProvider;
}
import { REDIRECT } from '@motorcycle/firebase';
export interface RedirectAuthentication {
method: 'REDIRECT';
provider: firebase.auth.AuthProvider;
}
import { SIGN_OUT } from '@motorcycle/firebase';
export interface SignOutAuthentication {
method: 'SIGN_OUT';
}
import { CREATE_USER } from '@motorcycle/firebase';
export interface CreateUserAuthentication {
method: 'CREATE_USER';
email: string;
password: string;
}
import { GET_REDIRECT_RESULT } from '@motorcycle/firebase';
export interface GetRedirectResultAuthentication {
method: 'GET_REDIRECT_RESULT';
}