@nest-firebase/pubsub v2.2.1
@nest-firebase/pubsub
Description
This module provides @OnMessage()
decorator to handle messages based on attributes
Motivation
At @skore-io we're building an event-driven architecture using firebase functions, which means that we're heavily using pubsub to emmit and receive events.
Unfortunately we can't filter messages before it arrives at service, so we've to do this work
on each message that invokes a function. The steps we do always is: create nest instance,
check message.attributes.type
or message.attributes.action
.
To facilitate this steps, we developed this library.
Usage
Install
npm install @nest-firebase/pubsub
Import
Import and add NestFirebaseModule
to the imports
section of the module you wish to implement.
import { PubsubModule } from '@nest-firebase/pubsub';
import { Module } from '@nestjs/common';
@Module({
imports: [PubsubModule]
})
export class AppModule { }
Filtering messages
The PubsubModule
exposes @OnMessage()
decorator to filter your messages
To filter messages from topic events
with type io.skore.events.user
and action created
:
import { Injectable } from '@nestjs/common'
import { OnMessage } from '@nest-firebase/pubsub';
import { Message } from 'firebase-functions/lib/providers/pubsub'
@Injectable()
export class UserCreatedListener {
@OnMessage({
topic: 'events',
type: 'io.skore.events.user',
action: 'created'
})
async onUserCreatedMessage(message: Message): void {}
}
type
and action
accept regular expressions, let's suppose you want to listen for
all type
which contains io.skore
and action
which is created
or updated
, so do the following:
import { Injectable } from '@nestjs/common'
import { OnMessage } from '@nest-firebase/pubsub';
import { Message } from 'firebase-functions/lib/providers/pubsub'
@Injectable()
export class UserCreatedListener {
@OnMessage({
topic: 'events',
type: 'io.skore.*',
action: 'created|updated'
})
async onUserCreatedMessage(message: Message): void {}
}
Exporting firebase function
To use firebase functions you must export your functions in an index.ts
file, so do the following:
import { Pubsub } from '@nest-firebase/pubsub';
export const onEvent = Pubsub.topic('events', AppModule)
Where events
is your pubsub topic and AppModule
is your nest module which imports PubsubModule