0.75.0 • Published 9 months ago

@dzangolab/fastify-firebase v0.75.0

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

@dzangolab/fastify-firebase

A Fastify plugin that provides an easy integration of Firebase Admin in a fastify API.

Requirements

Installation

Install with npm:

npm install @dzangolab/fastify-config @dzangolab/fastify-slonik @dzangolab/fastify-firebase

Install with pnpm:

pnpm add --filter "@scope/project" @dzangolab/fastify-config @dzangolab/fastify-slonik @dzangolab/fastify-firebase

Usage

Register Plugin

Register the fastify-firebase plugin with your Fastify instance:

import firebasePlugin 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";

const start = async () => {
  // Create fastify instance
  const fastify = Fastify({
    logger: config.logger,
  });

  // Register fastify-config plugin
  await fastify.register(configPlugin, { config });

  // Register fastify-firebase plugin
  await fastify.register(firebasePlugin);

  await fastify.listen({
    port: config.port,
    host: "0.0.0.0",
  });
}

start();

Configuration

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>
      },
    };
  }
};

Using GraphQL

This package supports integration with @dzangolab/fastify-graphql.

Schema Integration

The GraphQL schema provided by this package is located at src/graphql/schema.ts and is exported as firebaseSchema.

To load and merge this schema with your application's custom schemas, update your schema file as follows:

import { firebaseSchema } from "@dzangolab/fastify-firebase";
import { loadFilesSync } from "@graphql-tools/load-files";
import { mergeTypeDefs } from "@graphql-tools/merge";
import { makeExecutableSchema } from "@graphql-tools/schema";

const schemas: string[] = loadFilesSync("./src/**/*.gql");

const typeDefs = mergeTypeDefs([firebaseSchema, ...schemas]);
const schema = makeExecutableSchema({ typeDefs });

export default schema;

Resolver Integration

To integrate the resolvers provided by this package, import them and merge with your application's resolvers:

import { notificationResolver, userDeviceResolver } from "@dzangolab/fastify-firebase";

import type { IResolvers } from "mercurius";

const resolvers: IResolvers = {
  Mutation: {
    // ...other mutations ...
    ...userDeviceResolver.Mutation,
    ...notificationResolver.Mutation,
  },
  Query: {
    // ...other queries ...
    ...userDeviceResolver.Query,
    ...notificationResolver.Query,
  },
};

export default resolvers;
0.75.0

9 months ago

0.74.1

9 months ago

0.74.0

10 months ago

0.73.1

10 months ago

0.71.3

11 months ago

0.73.0

10 months ago

0.72.1

11 months ago

0.71.2

12 months ago

0.70.0

1 year ago

0.72.0

11 months ago

0.71.1

12 months ago

0.71.0

1 year ago

0.68.3

1 year ago

0.68.2

1 year ago

0.67.0

1 year ago

0.69.0

1 year ago

0.68.1

1 year ago

0.67.2

1 year ago

0.68.0

1 year ago

0.67.1

1 year ago

0.66.0

1 year ago

0.65.5

1 year ago

0.65.4

1 year ago

0.65.3

1 year ago

0.65.2

1 year ago

0.65.1

1 year ago

0.65.0

1 year ago

0.64.2

1 year ago

0.64.1

1 year ago

0.64.0

1 year ago

0.63.0

1 year ago

0.62.4

1 year ago

0.62.3

1 year ago

0.62.2

1 year ago

0.62.1

1 year ago

0.62.0

1 year ago

0.61.1

1 year ago

0.61.0

2 years ago

0.59.0

2 years ago

0.60.0

2 years ago

0.58.0

2 years ago

0.57.1

2 years ago

0.57.0

2 years ago

0.56.0

2 years ago

0.55.2

2 years ago

0.55.1

2 years ago

0.55.0

2 years ago

0.54.0

2 years ago