An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          


Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications, heavily inspired by Angular.



Package License

## 🧾 Description

This package implements the NestJS module for Firebase admin

## 👨🏻‍💻 Installation

```bash
$ npm install -E @nestjs-add-ons/firebase-admin firebase-admin
```

## ▶️ Usage

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
})
}
}
```