https://github.com/fjodor-rybakov/nestjs-firebase-admin
📑NestJS firebase admin module
https://github.com/fjodor-rybakov/nestjs-firebase-admin
admin decorator fcm firebase firebase-admin module nest nestjs nestjs-firebase-admin typescript
Last synced: 4 months ago
JSON representation
📑NestJS firebase admin module
- Host: GitHub
- URL: https://github.com/fjodor-rybakov/nestjs-firebase-admin
- Owner: fjodor-rybakov
- Created: 2024-12-18T14:41:30.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-01-20T09:35:50.000Z (over 1 year ago)
- Last Synced: 2025-11-23T11:08:28.668Z (7 months ago)
- Topics: admin, decorator, fcm, firebase, firebase-admin, module, nest, nestjs, nestjs-firebase-admin, typescript
- Language: TypeScript
- Homepage:
- Size: 115 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
A progressive Node.js framework for building efficient and scalable server-side applications, heavily inspired by Angular.
## 🧾 Description
This package implements the NestJS module for Firebase admin
```bash
$ npm install -E @nestjs-add-ons/firebase-admin firebase-admin
```
Enable shutdown hooks in bootstrap function to take care of resource release
```typescript
async function bootstrap(): Promise {
const app = await NestFactory.create(AppModule);
app.enableShutdownHooks();
}
bootstrap();
```
Just create module in import
```typescript
/* app.module.ts */
import { Module } from '@nestjs/common';
import { FirebaseAdminCoreModule } from '@nestjs-add-ons/firebase-admin';
import { MyService } from './my-service';
@Module({
imports: [
FirebaseAdminCoreModule.forRootAsync({
useFactory: () => ({
// ...setup options
}),
}),
],
providers: [MyService]
})
export class AppModule {}
```
In order for providers to be available, you need to inject them via `FirebaseAdminCoreModule.forFeature()` function or
set `isGlobal: true` in dynamic module options
```typescript
/* my-test.module.ts */
import { Module } from '@nestjs/common';
import { FirebaseAdminCoreModule } from '@nestjs-add-ons/firebase-admin';
import { MyService } from './my-service';
@Module({
imports: [
FirebaseAdminCoreModule.forFeature(),
// or FirebaseAdminCoreModule.forFeature(['app_1', 'app_2']) if firebase app is presented
],
providers: [MyService]
})
export class MyTestModule {}
```
In the service, you can inject firebase application via the `InjectFirebaseAdminApp` decorator
```typescript
/* my-service.ts */
import { Injectable } from '@nestjs/common';
import { App } from 'firebase-admin/app';
import { InjectFirebaseAdminApp } from '@nestjs-add-ons/firebase-admin';
@Injectable()
export class MyService {
constructor(
@InjectFirebaseAdminApp()
private readonly firebaseApp: App
) {
}
public async sendPushNotification(): Promise {
await getMessaging(this.firebaseApp).send({
// notification data
})
}
}
```
You can also create multiply firebase applications
```typescript
/* app.module.ts */
import { Module } from '@nestjs/common';
import { FirebaseAdminCoreModule } from '@nestjs-add-ons/firebase-admin';
import { MyServiceForApp1 } from './my-service-for-app1';
import { MyServiceForApp2 } from './my-service-for-app2';
@Module({
imports: [
FirebaseAdminCoreModule.forRootAsync({
appName: 'app1',
useFactory: () => ({
// ...setup options
}),
}),
FirebaseAdminCoreModule.forRootAsync({
appName: 'app2',
useFactory: () => ({
// ...setup options
}),
}),
],
providers: [MyServiceForApp1, MyServiceForApp2]
})
export class AppModule {}
```
```typescript
/* my-service-for-app1.ts */
import { Injectable } from '@nestjs/common';
import { App } from 'firebase-admin/app';
import { InjectFirebaseAdminApp } from '@nestjs-add-ons/firebase-admin';
@Injectable()
export class MyServiceForApp1 {
constructor(
@InjectFirebaseAdminApp('app1')
private readonly firebaseApp: App
) {
}
public async sendPushNotification(): Promise {
await getMessaging(this.firebaseApp).send({
// notification data
})
}
}
```
```typescript
/* my-service-for-app2.ts */
import { Injectable } from '@nestjs/common';
import { App } from 'firebase-admin/app';
import { InjectFirebaseAdminApp } from '@nestjs-add-ons/firebase-admin';
@Injectable()
export class MyServiceForApp2 {
constructor(
@InjectFirebaseAdminApp('app2')
private readonly firebaseApp: App
) {
}
public async sendPushNotification(): Promise {
await getMessaging(this.firebaseApp).send({
// notification data
})
}
}
```