/* eslint-disable @typescript-eslint/indent, node/no-unpublished-import */ import { config } from '../data/config.js' import type * as configTypes from '../types/configTypes' // eslint-disable-next-line node/no-extraneous-import import type { config as MSSQLConfig } from 'mssql' /* * SET UP FALLBACK VALUES */ const configFallbackValues = new Map() configFallbackValues.set('application.applicationName', 'Lot Occupancy System') configFallbackValues.set( 'application.backgroundURL', '/images/cemetery-background.jpg' ) configFallbackValues.set('application.logoURL', '/images/cemetery-logo.png') configFallbackValues.set('application.httpPort', 7000) configFallbackValues.set('application.useTestDatabases', false) configFallbackValues.set('application.maximumProcesses', 4) configFallbackValues.set('reverseProxy.disableCompression', false) configFallbackValues.set('reverseProxy.disableEtag', false) configFallbackValues.set('reverseProxy.urlPrefix', '') configFallbackValues.set('session.cookieName', 'lot-occupancy-system-user-sid') configFallbackValues.set('session.secret', 'cityssm/lot-occupancy-system') configFallbackValues.set('session.maxAgeMillis', 60 * 60 * 1000) configFallbackValues.set('session.doKeepAlive', false) configFallbackValues.set('users.testing', []) configFallbackValues.set('users.canLogin', ['administrator']) configFallbackValues.set('users.canUpdate', []) configFallbackValues.set('users.isAdmin', ['administrator']) configFallbackValues.set('aliases.lot', 'Lot') configFallbackValues.set('aliases.lots', 'Lots') configFallbackValues.set('aliases.map', 'Map') configFallbackValues.set('aliases.maps', 'Maps') configFallbackValues.set('aliases.occupancy', 'Occupancy') configFallbackValues.set('aliases.occupancies', 'Occupancies') configFallbackValues.set('aliases.occupancyStartDate', 'Start Date') configFallbackValues.set('aliases.occupant', 'Occupant') configFallbackValues.set('aliases.occupants', 'Occupants') configFallbackValues.set( 'aliases.externalReceiptNumber', 'External Receipt Number' ) configFallbackValues.set('aliases.workOrderOpenDate', 'Open Date') configFallbackValues.set('aliases.workOrderCloseDate', 'Close Date') configFallbackValues.set('settings.map.mapCityDefault', '') configFallbackValues.set('settings.map.mapProvinceDefault', '') configFallbackValues.set( 'settings.lot.lotNameSortNameFunction', (lotName: string) => lotName ) configFallbackValues.set( 'settings.lotOccupancy.occupancyEndDateIsRequired', true ) configFallbackValues.set('settings.lotOccupancy.occupantCityDefault', '') configFallbackValues.set('settings.lotOccupancy.occupantProvinceDefault', '') configFallbackValues.set('settings.lotOccupancy.prints', [ 'screen/lotOccupancy' ]) configFallbackValues.set('settings.fees.taxPercentageDefault', 0) configFallbackValues.set('settings.workOrders.workOrderNumberLength', 6) configFallbackValues.set( 'settings.workOrders.workOrderMilestoneDateRecentBeforeDays', 5 ) configFallbackValues.set( 'settings.workOrders.workOrderMilestoneDateRecentAfterDays', 60 ) configFallbackValues.set( 'settings.workOrders.calendarEmailAddress', 'no-reply@127.0.0.1' ) configFallbackValues.set('settings.workOrders.prints', [ 'pdf/workOrder', 'pdf/workOrder-commentLog' ]) configFallbackValues.set('settings.adminCleanup.recordDeleteAgeDays', 60) configFallbackValues.set('settings.printPdf.contentDisposition', 'attachment') configFallbackValues.set('settings.dynamicsGP.integrationIsEnabled', false) configFallbackValues.set('settings.dynamicsGP.lookupOrder', ['invoice']) configFallbackValues.set('settings.dynamicsGP.accountCodes', []) configFallbackValues.set('settings.dynamicsGP.itemNumbers', []) configFallbackValues.set('settings.dynamicsGP.trialBalanceCodes', []) /* * Set up function overloads */ export function getProperty(propertyName: 'application.applicationName'): string export function getProperty(propertyName: 'application.logoURL'): string export function getProperty(propertyName: 'application.httpPort'): number export function getProperty(propertyName: 'application.userDomain'): string export function getProperty( propertyName: 'application.useTestDatabases' ): boolean export function getProperty( propertyName: 'application.ntfyStartup' ): configTypes.ConfigNtfyStartup | undefined export function getProperty( propertyName: 'activeDirectory' ): configTypes.ConfigActiveDirectory export function getProperty( propertyName: 'application.maximumProcesses' ): number export function getProperty(propertyName: 'users.testing'): string[] export function getProperty(propertyName: 'users.canLogin'): string[] export function getProperty(propertyName: 'users.canUpdate'): string[] export function getProperty(propertyName: 'users.isAdmin'): string[] export function getProperty( propertyName: 'reverseProxy.disableCompression' ): boolean export function getProperty(propertyName: 'reverseProxy.disableEtag'): boolean export function getProperty(propertyName: 'reverseProxy.urlPrefix'): string export function getProperty(propertyName: 'session.cookieName'): string export function getProperty(propertyName: 'session.doKeepAlive'): boolean export function getProperty(propertyName: 'session.maxAgeMillis'): number export function getProperty(propertyName: 'session.secret'): string export function getProperty(propertyName: 'aliases.lot'): string export function getProperty(propertyName: 'aliases.lots'): string export function getProperty(propertyName: 'aliases.map'): string export function getProperty(propertyName: 'aliases.maps'): string export function getProperty(propertyName: 'aliases.occupancy'): string export function getProperty(propertyName: 'aliases.occupancies'): string export function getProperty(propertyName: 'aliases.occupancyStartDate'): string export function getProperty(propertyName: 'aliases.occupant'): string export function getProperty(propertyName: 'aliases.occupants'): string export function getProperty(propertyName: 'aliases.workOrderOpenDate'): string export function getProperty(propertyName: 'aliases.workOrderCloseDate'): string export function getProperty( propertyName: 'aliases.externalReceiptNumber' ): string export function getProperty(propertyName: 'settings.map.mapCityDefault'): string export function getProperty( propertyName: 'settings.map.mapProvinceDefault' ): string export function getProperty(propertyName: 'settings.lot.lotNamePattern'): RegExp export function getProperty( propertyName: 'settings.lot.lotNameHelpText' ): string export function getProperty( propertyName: 'settings.lot.lotNameSortNameFunction' ): (lotName: string) => string export function getProperty( propertyName: 'settings.lotOccupancy.occupancyEndDateIsRequired' ): boolean export function getProperty( propertyName: 'settings.lotOccupancy.occupantCityDefault' ): string export function getProperty( propertyName: 'settings.lotOccupancy.occupantProvinceDefault' ): string export function getProperty( propertyName: 'settings.lotOccupancy.prints' ): string[] export function getProperty( propertyName: 'settings.fees.taxPercentageDefault' ): number export function getProperty( propertyName: 'settings.workOrders.workOrderNumberLength' ): number export function getProperty( propertyName: 'settings.workOrders.workOrderMilestoneDateRecentBeforeDays' ): number export function getProperty( propertyName: 'settings.workOrders.workOrderMilestoneDateRecentAfterDays' ): number export function getProperty( propertyName: 'settings.workOrders.calendarEmailAddress' ): string export function getProperty( propertyName: 'settings.workOrders.prints' ): string[] export function getProperty( propertyName: 'settings.adminCleanup.recordDeleteAgeDays' ): number export function getProperty( propertyName: 'settings.printPdf.contentDisposition' ): 'attachment' | 'inline' export function getProperty( propertyName: 'settings.dynamicsGP.integrationIsEnabled' ): boolean export function getProperty( propertyName: 'settings.dynamicsGP.mssqlConfig' ): MSSQLConfig export function getProperty( propertyName: 'settings.dynamicsGP.lookupOrder' ): configTypes.DynamicsGPLookup[] export function getProperty( propertyName: 'settings.dynamicsGP.accountCodes' ): string[] export function getProperty( propertyName: 'settings.dynamicsGP.itemNumbers' ): string[] export function getProperty( propertyName: 'settings.dynamicsGP.trialBalanceCodes' ): string[] export function getProperty(propertyName: string): unknown { const propertyNameSplit = propertyName.split('.') let currentObject = config for (const propertyNamePiece of propertyNameSplit) { if (Object.hasOwn(currentObject, propertyNamePiece)) { currentObject = currentObject[propertyNamePiece] continue } return configFallbackValues.get(propertyName) } return currentObject } export const keepAliveMillis = getProperty('session.doKeepAlive') ? Math.max( getProperty('session.maxAgeMillis') / 2, getProperty('session.maxAgeMillis') - 10 * 60 * 1000 ) : 0