JSPM

  • Created
  • Published
  • Downloads 177
  • Score
    100M100P100Q106514F

GraphQL API Server

Package Exports

  • @ttoss/graphql-api-server
  • @ttoss/graphql-api-server/dist/esm/index.js
  • @ttoss/graphql-api-server/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@ttoss/graphql-api-server) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@ttoss/graphql-api-server

This package provides a Koa server to run your @ttoss/graphql-api API.

Installation

yarn add @ttoss/graphql-api-server @ttoss/graphql-api graphql

Quickstart

You can use the createServer method to create your server.

import { createServer } from '@ttoss/graphql-api-server';
import { schemaComposer } from './schemaComposer';

const server = createServer({
  schemaComposer,
  graphiql: true,
});

server.listen(3000, () => {
  console.log('Server listening on port 3000');
});

Authentication Types

The server supports the following authentication types:

No authentication

You can disable authentication by not setting the authenticationType option.

AWS_COGNITO_USER_POOLS

You need to set Cognito user pool ID token or access token to the Authorization header.

import { createServer } from '@ttoss/graphql-api-server';
import { schemaComposer } from './schemaComposer';

const server = createServer({
  schemaComposer,
  authenticationType: 'AWS_COGNITO_USER_POOLS',
  userPoolConfig: {
    userPoolId: process.env.USER_POOL_ID,
    tokenUse: 'access' // or 'id'. Default is 'access'.
    clientId: process.env.CLIENT_ID,
  },
});

server.listen(3000, () => {
  console.log('Server listening on port 3000');
});

Middlewares

You can add middlewares compatible with graphql-middleware to the server using the middlewares option.

import { createServer } from '@ttoss/graphql-api-server';
import { schemaComposer } from './schemaComposer';
import { allow, deny, shield } from 'graphql-shield';

const NotAuthorizedError = new Error('Not authorized!');
/**
 * The error name is the same value `errorType` on GraphQL errors response.
 */
NotAuthorizedError.name = 'NotAuthorizedError';

const permissions = shield(
  {
    Query: {
      '*': deny,
      author: allow,
    },
    Author: {
      id: allow,
      name: allow,
    },
  },
  {
    fallbackRule: deny,
    fallbackError: NotAuthorizedError,
  }
);

const server = createServer({
  schemaComposer,
  middlewares: [permissions],
});