All files / src env.ts

100% Statements 42/42
100% Branches 20/20
100% Functions 13/13
100% Lines 42/42

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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110                    16x                       64x 435x         48x 371x       16x     170x 170x 1x   169x     16x 16x 16x     86x 86x     16x 16x 16x     91x 91x     16x 16x 16x     88x       179x     16x   221x 221x 5x   216x       216x       9x 9x 1x   8x       212x 212x 4x     208x 9x     9x     199x    
import { config } from './config'
 
export type WorkerEnv = {
  AGENT_SCRIPT_DOWNLOAD_PATH: string | null
  GET_RESULT_PATH: string | null
  PROXY_SECRET: string | null
  FPJS_INGRESS_BASE_HOST: string | null
  INTEGRATION_PATH_DEPTH: number | string | null
}
 
export const Defaults = {
  AGENT_SCRIPT_DOWNLOAD_PATH: null,
  GET_RESULT_PATH: null,
  PROXY_SECRET: null,
  FPJS_INGRESS_BASE_HOST: config.ingressApi,
  INTEGRATION_PATH_DEPTH: 1,
} satisfies WorkerEnv
 
function getVarOrDefault<K extends keyof WorkerEnv>(
  variable: K,
  defaults: WorkerEnv
): (env: WorkerEnv) => WorkerEnv[K] {
  return function (env: WorkerEnv): WorkerEnv[K] {
    return env[variable] || defaults[variable]
  }
}
 
function isVarSet(variable: keyof WorkerEnv): (env: WorkerEnv) => boolean {
  return function (env: WorkerEnv): boolean {
    return Boolean(env[variable])
  }
}
 
const getIngressBaseHostVar = getVarOrDefault('FPJS_INGRESS_BASE_HOST', Defaults)
 
export function getIngressBaseHost(env: WorkerEnv): string {
  const ingressBaseHost = getIngressBaseHostVar(env)
  if (ingressBaseHost === null) {
    throw new Error('FPJS_INGRESS_BASE_HOST is not set and no default is available')
  }
  return ingressBaseHost
}
 
export const agentScriptDownloadPathVarName = 'AGENT_SCRIPT_DOWNLOAD_PATH'
const getAgentPathVar = getVarOrDefault(agentScriptDownloadPathVarName, Defaults)
export const isScriptDownloadPathSet = isVarSet(agentScriptDownloadPathVarName)
 
export function getScriptDownloadPath(env: WorkerEnv): string {
  const agentPathVar = getAgentPathVar(env)
  return `/${agentPathVar}`
}
 
export const getResultPathVarName = 'GET_RESULT_PATH'
const getGetResultPathVar = getVarOrDefault(getResultPathVarName, Defaults)
export const isGetResultPathSet = isVarSet(getResultPathVarName)
 
export function getGetResultPath(env: WorkerEnv): string {
  const getResultPathVar = getGetResultPathVar(env)
  return `/${getResultPathVar}`
}
 
export const proxySecretVarName = 'PROXY_SECRET'
const getProxySecretVar = getVarOrDefault(proxySecretVarName, Defaults)
export const isProxySecretSet = isVarSet(proxySecretVarName)
 
export function getProxySecret(env: WorkerEnv): string | null {
  return getProxySecretVar(env)
}
 
export function getStatusPagePath(): string {
  return `/status`
}
 
export const integrationPathDepthVarName = 'INTEGRATION_PATH_DEPTH'
function normalizeIntegrationPathDepth(env: WorkerEnv): number | null {
  const integrationPathDepth = env[integrationPathDepthVarName]
  if (integrationPathDepth === null || integrationPathDepth === undefined || integrationPathDepth === '') {
    return null
  }
  return typeof integrationPathDepth === 'string' ? Number(integrationPathDepth) : integrationPathDepth
}
 
function isNonNegativeInteger(value: number): boolean {
  return Number.isInteger(value) && value >= 0 && !Object.is(value, -0)
}
 
export function envHasValidIntegrationPathDepth(env: WorkerEnv) {
  const integrationPathDepth = normalizeIntegrationPathDepth(env)
  if (integrationPathDepth === null) {
    return true
  }
  return isNonNegativeInteger(integrationPathDepth)
}
 
export function getIntegrationPathDepth(env: WorkerEnv): number {
  const integrationPathDepth = normalizeIntegrationPathDepth(env)
  if (integrationPathDepth === null) {
    return Defaults.INTEGRATION_PATH_DEPTH
  }
 
  if (!isNonNegativeInteger(integrationPathDepth)) {
    console.warn(
      `INTEGRATION_PATH_DEPTH must be an integer greater than or equal to 0, defaulting to ${Defaults.INTEGRATION_PATH_DEPTH}`
    )
    return Defaults.INTEGRATION_PATH_DEPTH
  }
 
  return integrationPathDepth
}