1.0.5 • Published 3 years ago

type-gql-server-2 v1.0.5

Weekly downloads
-
License
-
Repository
github
Last release
3 years ago

GQL-Server

GQL-Server is a small wrapper around the Type GraphQl server. It allows to easily use JWTs and handle authentication and authorization.

how to use

install package

npm install dotenv --save
npm install type-gql-server --save

create .env

Port=4000
AccessTokenSecret=youraccesstokensecret
AccessTokenExpire=1d
RefreshTokenSecret=youraccesstokensecret
RefreshTokenExpire=14d
Playground=enabled

implement authorization service

import {Response} from "express";
export default class MyAuthorizationService implements AuthorisationService
{
    authorized(res: Response, requiredRole: string): boolean
    {
        const {roles} = res.locals.userData;
        
        return roles === "my_role";
    }
}

or use default service

const authorizeService: AuthorisationService = new DefaultAuthorizationService();

use in code

import "reflect-metadata"; // always execute at the beginning
require('dotenv').config();

/**
 * load the token settings from env and create the token service
 */
function loadTokenSettings(): TokenService
{
    // access token
    const accessTokenSecret: string = process.env.AccessTokenSecret || "access token secret";
    const accessTokenExpires: string = process.env.AccessTokenExpire || "15m";
    const accessTokenProps: TokenProps = {secret: accessTokenSecret, expireTime: accessTokenExpires};

    // refresh token
    const refreshTokenSecret: string = process.env.RefreshTokenSecret || "refresh token secret";
    const refreshTokenExpires: string = process.env.RefreshTokenExpire || "7d";
    const refreshTokenProps: TokenProps = {secret: refreshTokenSecret, expireTime: refreshTokenExpires};

    return new TokenService(accessTokenProps, refreshTokenProps, new CredentialService());
}


// load server settings
const port: number = Number.parseInt(process.env.Port || "4000");
const enablePlayground: boolean = (process.env.Playground || "false") === "enabled";
const resolvers: any = [HelloResolver];

// services
const authService: AuthenticationService = new AuthenticationService(loadTokenSettings());
const authorizeService: AuthorisationService = new MyAuthorizationService();

// start + create server
const server: GQLServer = new GQLServer(port, enablePlayground, authService, authorizeService, resolvers);
server.start();