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

6 months ago

0.8.1

7 months ago

0.8.0

7 months ago

0.8.2

6 months ago

0.7.3

7 months ago

0.6.12

9 months ago

0.7.2

9 months ago

0.7.1

9 months ago

0.7.0

9 months ago

0.6.10

10 months ago

0.6.11

9 months ago

0.6.9

10 months ago

0.6.8

10 months ago

0.6.7

11 months ago

0.6.6

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

1 year ago

0.3.8

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