0.75.0 • Published 9 months ago

@dzangolab/fastify-user v0.75.0

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

@dzangolab/fastify-user

A Fastify plugin that provides an easy integration of user model (service, controller, resolver) in a fastify API.

Requirements

Installation

Install with npm:

npm install @dzangolab/fastify-config @dzangolab/fastify-mailer @dzangolab/fastify-slonik @dzangolab/fastify-user slonik supertokens-node

Install with pnpm:

pnpm add --filter "@scope/project" @dzangolab/fastify-config @dzangolab/fastify-mailer @dzangolab/fastify-slonik @dzangolab/fastify-user slonik supertokens-node

Usage

Register the user plugin with your Fastify instance:

import configPlugin from "@dzangolab/fastify-config";
import mailerPlugin from "@dzangolab/fastify-mailer";
import slonikPlugin, { migrationPlugin } from "@dzangolab/fastify-slonik";
import userPlugin from "@dzangolab/fastify-user";
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 database plugin
  await fastify.register(slonikPlugin, config.slonik);

  // Register mailer plugin
  await fastify.register(mailerPlugin, config.mailer);
  
  // Register fastify-user plugin
  await fastify.register(userPlugin);

  // Run app database migrations
  await fastify.register(migrationPlugin, config.slonik);
  
  await fastify.listen({
    port: config.port,
    host: "0.0.0.0",
  });
};

start();

Configuration

To add custom email and password validations:

const config: ApiConfig = {
  // ...
  user: {
    //...
    email: {
      host_whitelist: ["..."]
    },
    password: {
      minLength: 8,
      minLowercase: 1,
      minUppercase: 0,
      minNumbers: 1,
      minSymbols: 0,
    }
  }
};

To overwrite ThirdPartyEmailPassword recipes from config:

const config: ApiConfig = {
  // ...
  user: {
    //...
    recipes: {
      thirdPartyEmailPassword: {
        override: {
          apis: {
            appleRedirectHandlerPOST,
            authorisationUrlGET,
            emailPasswordEmailExistsGET,
            emailPasswordSignInPOST,
            emailPasswordSignUpPOST,
            generatePasswordResetTokenPOST,
            passwordResetPOST,
            thirdPartySignInUpPOST,
          },
          functions: {
            createResetPasswordToken,
            emailPasswordSignIn,
            emailPasswordSignUp,
            getUserById,
            getUserByThirdPartyInfo,
            getUsersByEmail,
            resetPasswordUsingToken,
            thirdPartySignInUp,
            updateEmailOrPassword,
          },
        sendEmail,
        signUpFeature: {
          formFields: [
            {
              id: "password",
              validate: async (password) => {
                // if password invalid return invalid message
              },
            },
            //...
          ],
        },
      },
    },
  },
};

NOTE: Each above overridden elements is a wrapper function. For example to override emailPasswordSignUpPOST see emailPasswordSignUpPOST.

Using GraphQL

This package supports integration with @dzangolab/fastify-graphql. Additionally, you will need to install mercurius-auth for authentication.

Configuration

Add the required context for the fastify-user package by including userPlugin in your GraphQL configuration as shown below:

import userPlugin from "@dzangolab/fastify-user";
import type { ApiConfig } from "@dzangolab/fastify-config";

const config: ApiConfig = {
  // ...other configurations...
  graphql: {
    // ...other graphql configurations...
    plugins: [userPlugin],
  },
  // ...other configurations...
};

Schema Integration

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

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

import { userSchema } from "@dzangolab/fastify-user";
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([userSchema, ...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 { usersResolver } from "@dzangolab/fastify-user";

import type { IResolvers } from "mercurius";

const resolvers: IResolvers = {
  Mutation: {
    ...usersResolver.Mutation,
  },
  Query: {
    ...userResolver.Query,
  },
};

export default resolvers;
0.75.0

9 months ago

0.74.1

9 months ago

0.74.0

9 months ago

0.70.0

11 months ago

0.67.0

1 year ago

0.67.2

1 year ago

0.67.1

1 year ago

0.71.3

11 months ago

0.71.2

11 months ago

0.71.1

11 months ago

0.71.0

11 months ago

0.68.3

1 year ago

0.68.2

1 year ago

0.68.1

1 year ago

0.68.0

1 year ago

0.72.1

10 months ago

0.72.0

10 months ago

0.69.0

1 year ago

0.73.1

10 months ago

0.73.0

10 months 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

1 year ago

0.60.0

1 year ago

0.59.0

1 year ago

0.58.0

1 year 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

0.53.4

2 years ago

0.53.3

2 years ago

0.43.0

2 years ago

0.41.0

2 years ago

0.38.0

2 years ago

0.36.2

2 years ago

0.36.1

2 years ago

0.36.0

2 years ago

0.53.2

2 years ago

0.34.0

2 years ago

0.53.0

2 years ago

0.53.1

2 years ago

0.51.0

2 years ago

0.51.1

2 years ago

0.48.0

2 years ago

0.48.1

2 years ago

0.46.0

2 years ago

0.44.0

2 years ago

0.42.0

2 years ago

0.40.2

2 years ago

0.40.0

2 years ago

0.40.1

2 years ago

0.39.1

2 years ago

0.39.0

2 years ago

0.37.1

2 years ago

0.37.0

2 years ago

0.35.0

2 years ago

0.52.1

2 years ago

0.50.1

2 years ago

0.52.0

2 years ago

0.50.0

2 years ago

0.49.0

2 years ago

0.47.0

2 years ago

0.45.0

2 years ago

0.33.0

2 years ago

0.32.10

2 years ago

0.32.9

2 years ago

0.32.8

2 years ago

0.32.7

2 years ago

0.32.6

2 years ago

0.32.5

2 years ago

0.32.4

2 years ago

0.32.3

2 years ago

0.32.2

2 years ago

0.32.1

2 years ago

0.32.0

2 years ago

0.31.3

2 years ago

0.31.2

2 years ago

0.31.1

2 years ago

0.31.0

2 years ago

0.30.0

2 years ago

0.29.0

2 years ago

0.28.0

2 years ago

0.27.1

2 years ago

0.27.0

2 years ago

0.26.3

2 years ago

0.26.2

2 years ago

0.26.1

2 years ago

0.26.0

2 years ago

0.25.3

2 years ago

0.25.2

2 years ago

0.25.1

2 years ago

0.25.0

2 years ago

0.24.0

2 years ago

0.23.0

2 years ago

0.22.1

2 years ago

0.22.0

2 years ago

0.21.0

2 years ago

0.20.0

2 years ago

0.19.0

2 years ago

0.18.3

2 years ago

0.18.2

2 years ago

0.18.1

2 years ago

0.18.0

2 years ago