All files / src/helpers/createAccessToken index.ts

97.14% Statements 34/35
80% Branches 16/20
100% Functions 4/4
96.67% Lines 29/30

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 651x     1x 1x   1x 7x                     7x 7x   7x 2x     5x     7x 7x   7x 1x     6x 2x     6x 2x   2x 2x       2x       2x     10x 7x 7x 7x 7x   7x     1x  
import SdkAuth, { TokenProvider } from '@commercetools/sdk-auth';
import { Token, ApiConfig } from '../../types/setup';
import { FlowOptions } from '../../types/Api';
import { getSettings } from './../../index';
import { isTokenActive, isTokenUserSession } from './../token';
 
const createAuthClient = (config: ApiConfig): SdkAuth =>
  new SdkAuth({
    host: config.authHost,
    projectKey: config.projectKey,
    disableRefreshToken: false,
    credentials: {
      clientId: config.clientId,
      clientSecret: config.clientSecret
    },
    scopes: config.scopes
  });
 
const getCurrentToken = (Ioptions: FlowOptions = {}) => {
  const { currentToken } = getSettings();
 
  if (currentToken) {
    return currentToken;
  }
 
  return options.currentToken;
};
 
const getTokenFlow = async (sdkAuth: SdkAuth, Ioptions: FlowOptions = {}) => {
  const currentToken = getCurrentToken(options);
 
  if (options.customerCredentials) {
    return sdkAuth.customerPasswordFlow(options.customerCredentials);
  }
 
  if (options.requireUserSession && !isTokenUserSession(currentToken)) {
    return sdkAuth.anonymousFlow();
  }
 
  if (currentToken) {
    const tokenActive = await isTokenActive(sdkAuth, currentToken);
 
    Eif (tokenActive) {
      return Promise.resolve(currentToken);
    }
  }
 
  Iif (options.requireUserSession) {
    return sdkAuth.anonymousFlow();
  }
 
  return sdkAuth.clientCredentialsFlow();
};
 
const createAccessToken = async (options: FlowOptions = {}): Promise<Token> => {
  const { api } = getSettings();
  const sdkAuth = createAuthClient(api);
  const tokenInfo = await getTokenFlow(sdkAuth, options);
  const tokenProvider = new TokenProvider({ sdkAuth }, tokenInfo);
 
  return tokenProvider.getTokenInfo();
};
 
export default createAccessToken;