Skip to main content
Version: 3.x

Fastify Adapter

The @zenstackhq/server/fastify module provides a quick way to install a full set of CRUD API onto Fastify apps. Combined with ZenStack's powerful access policies, you can achieve a secure data backend without manually coding it.

Installation

npm install @zenstackhq/server

Mounting the API

You can integrate ZenStack into your project with the ZenStackFastifyPlugin fastify plugin:

import fastify from 'fastify'
import { ZenStackFastifyPlugin } from '@zenstackhq/server/fastify';
import { RPCApiHandler } from '@zenstackhq/server/api';
import { getSessionUser } from '~/auth';
import { client } from '~/db';
import { schema } from '~/zenstack/schema';

const server = fastify();

server.register(ZenStackFastifyPlugin, {
apiHandler: new RPCApiHandler({ schema }),
prefix: '/api/model',
// getSessionUser extracts the current session user from the request, its
// implementation depends on your auth solution
getClient: (request) => client.$setAuth(getSessionUser(request)),
});

The Fastify adapter takes the following options to initialize:

  • prefix

    string

    Prefix for the mounted API endpoints. E.g.: /api/model.

  • getClient (required)

    (request: FastifyRequest, reply: FastifyReply) => ClientContract<Schema> | Promise<ClientContract<Schema>>

    A callback for getting a ZenStackClient instance for talking to the database. Usually you'll return a client instance with access policy enabled and user identity bound.

  • apiHandler (required)

    ApiHandler

    The API handler instance that determines the API specification.

Error Handling

Refer to the specific sections for RPC Handler and RESTful Handler.

Comments
Feel free to ask questions, give feedback, or report issues.

Don't Spam


You can edit/delete your comments by going directly to the discussion, clicking on the 'comments' link below