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 423x         48x 359x       16x     164x 164x 1x   163x     16x 16x 16x     83x 83x     16x 16x 16x     88x 88x     16x 16x 16x     88x       173x     16x   215x 215x 5x   210x       210x       9x 9x 1x   8x       206x 206x 4x     202x 9x     9x     193x    
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
}