File

libs/fe-jwt/src/lib/jwt-token-managment/reducer.ts

Index

Properties

Properties

defaultToken
defaultToken: string
Type : string
Optional
initialTokenStatus
initialTokenStatus: "uninitialized" | "loaded" | "empty"
Type : "uninitialized" | "loaded" | "empty"
tokens
tokens: Tokens<C>
Type : Tokens<C>
import * as JwtTokenProviderActions from './actions';
import { ClaimMap } from './claim-map';


export type Tokens<C> = { [P in Extract<keyof C, string>]?: string };


export interface JwtTokenProviderState<C = ClaimMap>  {
  initialTokenStatus: 'uninitialized' | 'loaded' | 'empty';
  defaultToken?: string;
  tokens: Tokens<C>;
}


export const initialState: JwtTokenProviderState = {
  initialTokenStatus: 'uninitialized',
  tokens: {},
};


/**
 * @param state
 * @param action
 */
export function jwtTokenProviderReducer<C = ClaimMap>(
  state = initialState,
  action: JwtTokenProviderActions.Actions<C>,
): JwtTokenProviderState {
  switch (action.type) {
    case JwtTokenProviderActions.ActionTypes.InitialTokenExtracted: {
      if (state.initialTokenStatus !== 'uninitialized') {
        return state;
      }

      if (action.token.length === 0) {
        return {
          initialTokenStatus: 'empty',
          tokens: {},
        };
      }
      return {
        initialTokenStatus: 'loaded',
        defaultToken: action.token,
        tokens: {},
      };

    }
    case JwtTokenProviderActions.ActionTypes.StoreToken: {
      const newState: JwtTokenProviderState = {
        ...state,
        tokens: { ...state.tokens },
      };


      if (action.isDefaultToken) {
        newState.defaultToken = action.token;
        newState.tokens = {};
      }

      newState.tokens[action.tokenName] = action.token;

      return newState;
    }
    case JwtTokenProviderActions.ActionTypes.TokenExpired: {
      const newState = {
        ...state,
        tokens: { ...state.tokens },
      };

      if (state.defaultToken && state.defaultToken === action.token) {
        delete newState.defaultToken;
      }

      for (const k in state.tokens) {
        if (state.tokens[k] && state.tokens[k] === action.token) {
          delete newState.tokens[k];
        }
      }

      return newState;
    }
    default: {
      return state;
    }
  }
}

result-matching ""

    No results matching ""