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