Skip to content

hebertcisco/nestjs-firebase-admin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

810 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

nestjs-firebase-admin logo

nestjs-firebase-admin

Firebase Admin SDK module for NestJS β€” injectable services for Auth, Firestore, Realtime Database, and Cloud Messaging.

npm version npm downloads codecov Node.js build and publish package Running Code Coverage

Features

  • AdminService β€” Firebase app initialization and lifecycle management
  • AuthService β€” Create, update, delete users; verify ID tokens; manage custom claims
  • FirestoreService β€” Typed CRUD, collection queries, batch writes, transactions
  • DatabaseService β€” Realtime Database read, write, push, update, remove, and listeners
  • MessagingService β€” Send to device tokens, topics, and conditions; manage subscriptions
  • Sync (register) and async (registerAsync) module registration
  • Compatible with NestJS 7 – 11 and Firebase Admin 13+
  • TypeScript-first with full type support

Installation

npm i nestjs-firebase-admin --save
yarn / pnpm
yarn add nestjs-firebase-admin
pnpm add nestjs-firebase-admin

Quick start

Import AdminModule in your root or feature module:

import { Module } from '@nestjs/common';
import { AdminModule } from 'nestjs-firebase-admin';

@Module({
  imports: [
    AdminModule.register({
      credential: {
        projectId: 'my-project-id',
        clientEmail: 'my-client-email',
        privateKey: 'my-private-key',
      },
      databaseURL: 'https://my-project-id.firebaseio.com',
    }),
  ],
})
export class AppModule {}

Async configuration

Use registerAsync to load credentials from ConfigService or any other provider:

import { Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { AdminModule } from 'nestjs-firebase-admin';

@Module({
  imports: [
    AdminModule.registerAsync({
      inject: [ConfigService],
      useFactory: (config: ConfigService) => ({
        credential: {
          projectId: config.get('FIREBASE_PROJECT_ID'),
          clientEmail: config.get('FIREBASE_CLIENT_EMAIL'),
          privateKey: config.get('FIREBASE_PRIVATE_KEY'),
        },
        databaseURL: config.get('FIREBASE_DATABASE_URL'),
      }),
    }),
  ],
})
export class AppModule {}

Usage examples

Once AdminModule is imported, inject any service:

import { Injectable } from '@nestjs/common';
import { AuthService, FirestoreService } from 'nestjs-firebase-admin';

@Injectable()
export class UsersService {
  constructor(
    private readonly auth: AuthService,
    private readonly firestore: FirestoreService,
  ) {}

  async createUser(email: string, password: string) {
    const user = await this.auth.createUser({ email, password });
    await this.firestore.set(`users/${user.uid}`, { email, createdAt: new Date() });
    return user;
  }

  async getUser(uid: string) {
    return this.firestore.get(`users/${uid}`);
  }
}

Requirements

Dependency Version
Node.js >= 20
NestJS >= 7.0.0
firebase-admin >= 13.0.0

Documentation

Full documentation is available at hebertcisco.github.io/nestjs-firebase-admin.

Contributing

Contributions, issues, and feature requests are welcome! Check the issues page or read the contributing guide.

License

MIT