0.8.6 • Published 4 months ago

@ttoss/graphql-api-server v0.8.6

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

@ttoss/graphql-api-server

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

Installation

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

Getting Started

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

Handling Other Routes

If you want to handle other routes than /graphql, you can use the Router class from koa and add it to the server.

Serving a SPA

import { createServer } from '@ttoss/graphql-api-server';
import { schemaComposer } from './schemaComposer';
import mount from 'koa-mount';
import * as path from 'path';

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

const APP_DIR = path.resolve(__dirname, '../../app/dist');

server.use(mount('/', serve(APP_DIR)));

/**
 * Serve a SPA—redirect all requests to index.html
 * https://dejanvasic.wordpress.com/2020/08/22/serving-react-spa-in-koa/
 */
server.use(async (ctx, next) => {
  return await serve(APP_DIR)(Object.assign(ctx, { path: 'index.html' }), next);
});

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

Serving Another Endpoint

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

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

const router = new Router();

router.get('/health', (ctx: any) => {
  ctx.body = 'OK';
});

server.use(router.routes()).use(router.allowedMethods());

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

CORS

You can enable CORS by setting the cors option. You can check the available options on @koa/cors package.

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

const server = createServer({
  schemaComposer,
  cors: {
    origin: '*',
    allowMethods: ['GET', 'POST'],
  },
});
0.8.6

4 months ago

0.8.5

6 months ago

0.8.4

6 months ago

0.8.3

7 months ago

0.8.1

7 months ago

0.8.0

7 months ago

0.8.2

7 months ago

0.7.3

8 months ago

0.6.12

10 months ago

0.7.2

9 months ago

0.7.1

10 months ago

0.7.0

10 months ago

0.6.10

11 months ago

0.6.11

10 months ago

0.6.9

11 months ago

0.6.8

11 months ago

0.6.7

11 months ago

0.6.6

1 year ago

0.6.5

1 year ago

0.6.4

1 year ago

0.6.3

1 year ago

0.6.2

1 year ago

0.6.1

1 year ago

0.6.0

1 year ago

0.5.7

1 year ago

0.5.6

1 year ago

0.5.5

1 year ago

0.5.4

1 year ago

0.5.3

1 year ago

0.5.2

1 year ago

0.5.1

1 year ago

0.5.0

1 year ago

0.4.0

2 years ago

0.3.8

2 years ago

0.3.7

2 years ago

0.3.6

2 years ago

0.3.5

2 years ago

0.2.6

2 years ago

0.3.2

2 years ago

0.3.1

2 years ago

0.3.4

2 years ago

0.2.5

2 years ago

0.3.3

2 years ago

0.2.3

2 years ago

0.2.4

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.0

2 years ago