src/app/lib/utilities/getEnvConfig/index.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import { Environments } from '#app/models/types/global';
import onClient from '../onClient';

export type EnvConfig = ReturnType<typeof getProcessEnvAppVariables>;

// Any environment variables added here will be available to the client and server
export const getProcessEnvAppVariables = () => ({
  SIMORGH_APP_ENV: process.env.SIMORGH_APP_ENV as Environments,
  SIMORGH_ATI_BASE_URL: process.env.SIMORGH_ATI_BASE_URL,
  SIMORGH_BASE_URL: process.env.SIMORGH_BASE_URL,
  SIMORGH_CONFIG_CACHE_ITEMS: process.env.SIMORGH_CONFIG_CACHE_ITEMS,
  SIMORGH_CONFIG_CACHE_MAX_AGE_SECONDS:
    process.env.SIMORGH_CONFIG_CACHE_MAX_AGE_SECONDS,
  SIMORGH_CONFIG_TIMEOUT_SECONDS: process.env.SIMORGH_CONFIG_TIMEOUT_SECONDS,
  SIMORGH_CONFIG_URL: process.env.SIMORGH_CONFIG_URL,
  SIMORGH_CSP_REPORTING_ENDPOINT: process.env.SIMORGH_CSP_REPORTING_ENDPOINT,
  SIMORGH_ICHEF_BASE_URL: process.env.SIMORGH_ICHEF_BASE_URL,
  SIMORGH_INCLUDES_BASE_URL: process.env.SIMORGH_INCLUDES_BASE_URL,
  SIMORGH_INCLUDES_BASE_AMP_URL: process.env.SIMORGH_INCLUDES_BASE_AMP_URL,
  SIMORGH_MOST_READ_CDN_URL: process.env.SIMORGH_MOST_READ_CDN_URL,
  SIMORGH_OPTIMIZELY_SDK_KEY: process.env.SIMORGH_OPTIMIZELY_SDK_KEY,
  SIMORGH_PUBLIC_STATIC_ASSETS_ORIGIN:
    process.env.SIMORGH_PUBLIC_STATIC_ASSETS_ORIGIN,
  SIMORGH_PUBLIC_STATIC_ASSETS_PATH:
    process.env.SIMORGH_PUBLIC_STATIC_ASSETS_PATH,
  SIMORGH_WEBVITALS_REPORTING_ENDPOINT:
    process.env.SIMORGH_WEBVITALS_REPORTING_ENDPOINT,
  SIMORGH_WEBVITALS_DEFAULT_SAMPLING_RATE:
    process.env.SIMORGH_WEBVITALS_DEFAULT_SAMPLING_RATE,
});

export function getEnvConfig(): EnvConfig {
  // Return window object on client and when window.SIMORGH_ENV_VARS is set
  if (onClient() && window?.SIMORGH_ENV_VARS) {
    return window.SIMORGH_ENV_VARS;
  }

  // Return server side environment variables
  return getProcessEnvAppVariables();
}

declare global {
  interface Window {
    SIMORGH_ENV_VARS: EnvConfig;
  }
}