A Fastify plugin that provides an easy integration of Firebase Admin in a fastify API.
- @dzangolab/fastify-config
- @dzangolab/fastify-slonik
- @dzangolab/fastify-mercurius
In a simple repo:
npm install @dzangolab/fastify-firebase
If using in a monorepo with pnpm:
pnpm add --filter "myrepo" @dzangolab/fastify-firebase
Register the file fastify-firebase package with your Fastify instance:
import firebasePlugin, { initializeFirebase } from "@dzangolab/fastify-firebase";
import configPlugin from "@dzangolab/fastify-config";
import fastify from "fastify";
import config from "./config";
import type { ApiConfig } from "@dzangolab/fastify-config";
import type { FastifyInstance } from "fastify";
// Create fastify instance
const fastify = Fastify({
logger: config.logger,
});
// Register fastify-config plugin
fastify.register(configPlugin, { config });
// Register fastify-user route
fastify.register(firebasePlugin);
await fastify.listen({
port: config.port,
host: "0.0.0.0",
});
Add resolver in your apps resolver collection
import { userDeviceResolver } from "@dzangolab/fastify-firebase";
import type { IResolvers } from "mercurius";
const resolvers: IResolvers = {
Mutation: {
...userDeviceResolver.Mutation,
},
Query: {
...userDeviceResolver.Query,
},
};
export default resolvers;
Add firebase configuration
const config: ApiConfig = {
// ...
firebase: {
credentials: {
clientEmail: "...",
privateKey: "...",
projectId: "...",
}
table: {
userDevices: {
name: "user-devices";
}
}
notification: {
test: {
enabled: true,
path: '/send-notification'
}
};
handlers: {
userDevice?: {
addUserDevice: (request: SessionRequest, reply: FastifyReply) => Promise<void>
},
notification: {
sendNotification: (request: SessionRequest, reply: FastifyReply) => Promise<void>
},
};
}
};