Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/graphql / src / resolvers / stream / microservices.ts
Size: Mime:
// const { sign } = require('jsonwebtoken')
import { sign } from  'jsonwebtoken'
import { getKeyToken } from '../../endpoints/microservices/requests.GET'
import { getServiceToken } from '../../endpoints/microservices/requests.POST'
import { toServiceTokenParams, formatServiceTokenParams } from '../../endpoints/microservices/defaultParams'
import { IS_TEST_ENV } from './deps/testSetup'

export default {
  Query: {
    getKeyToken: async(obj, args, context, info) => {

      const {alias, requestor} = args
      const params = {
        alias,
        requestor
      }

      const response = await context.microservices.getKeyToken(params, undefined)

      // @todo @Anto based on Params we need to get secretKey or service token in a single query
      if(true)
      {
        const secretKey = generateToken(response)
        const additionalProps = {
          secretKey
        }
        const serviceToken = await generateServiceToken(obj, args, context, info, additionalProps)
        return serviceToken
      }
      else
      {
        return response
      }
    },
    getServiceToken: async(obj, args, context, info) => {
      const response = generateServiceToken(obj, args, context, info)
      return response
    },
  },
}


function generateServiceToken(obj, args, context, info, additionalProps) {
  const { requestor } = args
  const { secretKey } = additionalProps
  const params = {
    requestor,
    secretKey,
  }
  const serviceTokenParams = getServiceTokenParams(params)
  const serviceToken = context.microservices.getServiceToken(serviceTokenParams, undefined)
  return serviceToken
}

function getServiceTokenParams(params){
  // return toServiceTokenParams(formatServiceTokenParams(secretKey))
  return toServiceTokenParams(params)
}

function toTimes() {
  // should move this to it's own function
  let timeNow = new Date().getTime();
  timeNow = Math.floor(timeNow / 1000);
  const timeThen = (60 * 60) + timeNow;

  return { then: timeThen, now: timeNow }
}
function toParams(times) {
  // remember to use eslint
  const claims = {
    'requestedServices': [
        'pim'
    ],
    'aud': 'promotionadmin',
    'exp': times.then,
    'iat': times.now,
    'iss': 'SkavaAPIAdmin'
  }

  return claims
}
function generateToken(secretKeyObj) {
    // const signingKey = '4tmLIS0LtAiEI062y/wdBw=='
    const signingKey = secretKeyObj.key || ''

    if (!signingKey) {
      console.log('generateToken sign-in key is missing', signingKey)
    }

    const times = toTimes()
    const claims = toParams(times)
    const bufferSigner = new Buffer(signingKey, 'base64');
    const token = sign(claims, bufferSigner, { algorithm: 'HS512'});

    return token
}