use cityssm/configurator
parent
1a28c38066
commit
3eeea38b30
|
|
@ -0,0 +1,59 @@
|
|||
import type { config as MSSQLConfig } from 'mssql';
|
||||
import type { ConfigActiveDirectory, ConfigNtfyStartup, DynamicsGPLookup } from '../types/configTypes.js';
|
||||
export declare const configDefaultValues: {
|
||||
activeDirectory: ConfigActiveDirectory;
|
||||
'application.applicationName': string;
|
||||
'application.backgroundURL': string;
|
||||
'application.logoURL': string;
|
||||
'application.httpPort': number;
|
||||
'application.userDomain': string;
|
||||
'application.useTestDatabases': boolean;
|
||||
'application.maximumProcesses': number;
|
||||
'application.ntfyStartup': ConfigNtfyStartup | undefined;
|
||||
'reverseProxy.disableCompression': boolean;
|
||||
'reverseProxy.disableEtag': boolean;
|
||||
'reverseProxy.urlPrefix': string;
|
||||
'session.cookieName': string;
|
||||
'session.secret': string;
|
||||
'session.maxAgeMillis': number;
|
||||
'session.doKeepAlive': boolean;
|
||||
'users.testing': string[];
|
||||
'users.canLogin': string[];
|
||||
'users.canUpdate': string[];
|
||||
'users.isAdmin': string[];
|
||||
'aliases.lot': string;
|
||||
'aliases.lots': string;
|
||||
'aliases.map': string;
|
||||
'aliases.maps': string;
|
||||
'aliases.occupancy': string;
|
||||
'aliases.occupancies': string;
|
||||
'aliases.occupancyStartDate': string;
|
||||
'aliases.occupant': string;
|
||||
'aliases.occupants': string;
|
||||
'aliases.externalReceiptNumber': string;
|
||||
'aliases.workOrderOpenDate': string;
|
||||
'aliases.workOrderCloseDate': string;
|
||||
'settings.map.mapCityDefault': string;
|
||||
'settings.map.mapProvinceDefault': string;
|
||||
'settings.lot.lotNamePattern': RegExp | undefined;
|
||||
'settings.lot.lotNameHelpText': string;
|
||||
'settings.lot.lotNameSortNameFunction': (lotName: string) => string;
|
||||
'settings.lotOccupancy.occupancyEndDateIsRequired': boolean;
|
||||
'settings.lotOccupancy.occupantCityDefault': string;
|
||||
'settings.lotOccupancy.occupantProvinceDefault': string;
|
||||
'settings.lotOccupancy.prints': string[];
|
||||
'settings.fees.taxPercentageDefault': number;
|
||||
'settings.workOrders.workOrderNumberLength': number;
|
||||
'settings.workOrders.workOrderMilestoneDateRecentBeforeDays': number;
|
||||
'settings.workOrders.workOrderMilestoneDateRecentAfterDays': number;
|
||||
'settings.workOrders.calendarEmailAddress': string;
|
||||
'settings.workOrders.prints': string[];
|
||||
'settings.adminCleanup.recordDeleteAgeDays': number;
|
||||
'settings.printPdf.contentDisposition': "attachment" | "inline";
|
||||
'settings.dynamicsGP.integrationIsEnabled': boolean;
|
||||
'settings.dynamicsGP.mssqlConfig': MSSQLConfig;
|
||||
'settings.dynamicsGP.lookupOrder': DynamicsGPLookup[];
|
||||
'settings.dynamicsGP.accountCodes': string[];
|
||||
'settings.dynamicsGP.itemNumbers': string[];
|
||||
'settings.dynamicsGP.trialBalanceCodes': string[];
|
||||
};
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
export const configDefaultValues = {
|
||||
'activeDirectory': undefined,
|
||||
'application.applicationName': 'Lot Occupancy System',
|
||||
'application.backgroundURL': '/images/cemetery-background.jpg',
|
||||
'application.logoURL': '/images/cemetery-logo.png',
|
||||
'application.httpPort': 7000,
|
||||
'application.userDomain': '',
|
||||
'application.useTestDatabases': false,
|
||||
'application.maximumProcesses': 4,
|
||||
'application.ntfyStartup': undefined,
|
||||
'reverseProxy.disableCompression': false,
|
||||
'reverseProxy.disableEtag': false,
|
||||
'reverseProxy.urlPrefix': '',
|
||||
'session.cookieName': 'lot-occupancy-system-user-sid',
|
||||
'session.secret': 'cityssm/lot-occupancy-system',
|
||||
'session.maxAgeMillis': 60 * 60 * 1000,
|
||||
'session.doKeepAlive': false,
|
||||
'users.testing': [],
|
||||
'users.canLogin': ['administrator'],
|
||||
'users.canUpdate': [],
|
||||
'users.isAdmin': ['administrator'],
|
||||
'aliases.lot': 'Lot',
|
||||
'aliases.lots': 'Lots',
|
||||
'aliases.map': 'Map',
|
||||
'aliases.maps': 'Maps',
|
||||
'aliases.occupancy': 'Occupancy',
|
||||
'aliases.occupancies': 'Occupancies',
|
||||
'aliases.occupancyStartDate': 'Start Date',
|
||||
'aliases.occupant': 'Occupant',
|
||||
'aliases.occupants': 'Occupants',
|
||||
'aliases.externalReceiptNumber': 'External Receipt Number',
|
||||
'aliases.workOrderOpenDate': 'Open Date',
|
||||
'aliases.workOrderCloseDate': 'Close Date',
|
||||
'settings.map.mapCityDefault': '',
|
||||
'settings.map.mapProvinceDefault': '',
|
||||
'settings.lot.lotNamePattern': undefined,
|
||||
'settings.lot.lotNameHelpText': '',
|
||||
'settings.lot.lotNameSortNameFunction': (lotName) => lotName,
|
||||
'settings.lotOccupancy.occupancyEndDateIsRequired': true,
|
||||
'settings.lotOccupancy.occupantCityDefault': '',
|
||||
'settings.lotOccupancy.occupantProvinceDefault': '',
|
||||
'settings.lotOccupancy.prints': ['screen/lotOccupancy'],
|
||||
'settings.fees.taxPercentageDefault': 0,
|
||||
'settings.workOrders.workOrderNumberLength': 6,
|
||||
'settings.workOrders.workOrderMilestoneDateRecentBeforeDays': 5,
|
||||
'settings.workOrders.workOrderMilestoneDateRecentAfterDays': 60,
|
||||
'settings.workOrders.calendarEmailAddress': 'no-reply@127.0.0.1',
|
||||
'settings.workOrders.prints': ['pdf/workOrder', 'pdf/workOrder-commentLog'],
|
||||
'settings.adminCleanup.recordDeleteAgeDays': 60,
|
||||
'settings.printPdf.contentDisposition': 'attachment',
|
||||
'settings.dynamicsGP.integrationIsEnabled': false,
|
||||
'settings.dynamicsGP.mssqlConfig': undefined,
|
||||
'settings.dynamicsGP.lookupOrder': ['invoice'],
|
||||
'settings.dynamicsGP.accountCodes': [],
|
||||
'settings.dynamicsGP.itemNumbers': [],
|
||||
'settings.dynamicsGP.trialBalanceCodes': []
|
||||
};
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
import type { config as MSSQLConfig } from 'mssql'
|
||||
|
||||
import type { ConfigActiveDirectory, ConfigNtfyStartup, DynamicsGPLookup } from '../types/configTypes.js'
|
||||
|
||||
export const configDefaultValues = {
|
||||
'activeDirectory': undefined as unknown as ConfigActiveDirectory,
|
||||
|
||||
'application.applicationName': 'Lot Occupancy System',
|
||||
'application.backgroundURL': '/images/cemetery-background.jpg',
|
||||
'application.logoURL': '/images/cemetery-logo.png',
|
||||
'application.httpPort': 7000,
|
||||
'application.userDomain': '',
|
||||
'application.useTestDatabases': false,
|
||||
'application.maximumProcesses': 4,
|
||||
|
||||
'application.ntfyStartup': undefined as ConfigNtfyStartup | undefined,
|
||||
|
||||
'reverseProxy.disableCompression': false,
|
||||
'reverseProxy.disableEtag': false,
|
||||
'reverseProxy.urlPrefix': '',
|
||||
|
||||
'session.cookieName': 'lot-occupancy-system-user-sid',
|
||||
'session.secret': 'cityssm/lot-occupancy-system',
|
||||
'session.maxAgeMillis': 60 * 60 * 1000,
|
||||
'session.doKeepAlive': false,
|
||||
|
||||
'users.testing': [] as string[],
|
||||
'users.canLogin': ['administrator'],
|
||||
'users.canUpdate': [] as string[],
|
||||
'users.isAdmin': ['administrator'],
|
||||
|
||||
'aliases.lot': 'Lot',
|
||||
'aliases.lots': 'Lots',
|
||||
'aliases.map': 'Map',
|
||||
'aliases.maps': 'Maps',
|
||||
'aliases.occupancy': 'Occupancy',
|
||||
'aliases.occupancies': 'Occupancies',
|
||||
'aliases.occupancyStartDate': 'Start Date',
|
||||
'aliases.occupant': 'Occupant',
|
||||
'aliases.occupants': 'Occupants',
|
||||
|
||||
'aliases.externalReceiptNumber': 'External Receipt Number',
|
||||
'aliases.workOrderOpenDate': 'Open Date',
|
||||
'aliases.workOrderCloseDate': 'Close Date',
|
||||
|
||||
'settings.map.mapCityDefault': '',
|
||||
'settings.map.mapProvinceDefault': '',
|
||||
|
||||
'settings.lot.lotNamePattern': undefined as RegExp | undefined,
|
||||
'settings.lot.lotNameHelpText': '',
|
||||
'settings.lot.lotNameSortNameFunction': (lotName: string) => lotName,
|
||||
// eslint-disable-next-line no-secrets/no-secrets
|
||||
'settings.lotOccupancy.occupancyEndDateIsRequired': true,
|
||||
'settings.lotOccupancy.occupantCityDefault': '',
|
||||
'settings.lotOccupancy.occupantProvinceDefault': '',
|
||||
'settings.lotOccupancy.prints': ['screen/lotOccupancy'],
|
||||
|
||||
'settings.fees.taxPercentageDefault': 0,
|
||||
|
||||
'settings.workOrders.workOrderNumberLength': 6,
|
||||
|
||||
'settings.workOrders.workOrderMilestoneDateRecentBeforeDays': 5,
|
||||
'settings.workOrders.workOrderMilestoneDateRecentAfterDays': 60,
|
||||
'settings.workOrders.calendarEmailAddress': 'no-reply@127.0.0.1',
|
||||
'settings.workOrders.prints': ['pdf/workOrder', 'pdf/workOrder-commentLog'],
|
||||
|
||||
'settings.adminCleanup.recordDeleteAgeDays': 60,
|
||||
|
||||
'settings.printPdf.contentDisposition': 'attachment' as 'attachment' | 'inline',
|
||||
|
||||
'settings.dynamicsGP.integrationIsEnabled': false,
|
||||
'settings.dynamicsGP.mssqlConfig': undefined as unknown as MSSQLConfig,
|
||||
|
||||
// eslint-disable-next-line no-secrets/no-secrets
|
||||
'settings.dynamicsGP.lookupOrder': ['invoice'] as DynamicsGPLookup[],
|
||||
|
||||
'settings.dynamicsGP.accountCodes': [] as string[],
|
||||
'settings.dynamicsGP.itemNumbers': [] as string[],
|
||||
'settings.dynamicsGP.trialBalanceCodes': [] as string[]
|
||||
}
|
||||
|
|
@ -1,14 +1,3 @@
|
|||
import type { config as MSSQLConfig } from 'mssql';
|
||||
import type { ConfigActiveDirectory, ConfigNtfyStartup, DynamicsGPLookup } from '../types/configTypes.js';
|
||||
export declare function getConfigProperty(propertyName: 'application.applicationName' | 'application.logoURL' | 'application.userDomain' | 'reverseProxy.urlPrefix' | 'session.cookieName' | 'session.secret' | 'aliases.lot' | 'aliases.lots' | 'aliases.map' | 'aliases.maps' | 'aliases.occupancy' | 'aliases.occupancies' | 'aliases.occupancyStartDate' | 'aliases.occupant' | 'aliases.occupants' | 'aliases.workOrderOpenDate' | 'aliases.workOrderCloseDate' | 'aliases.externalReceiptNumber' | 'settings.map.mapCityDefault' | 'settings.map.mapProvinceDefault' | 'settings.lot.lotNameHelpText' | 'settings.lotOccupancy.occupantCityDefault' | 'settings.lotOccupancy.occupantProvinceDefault' | 'settings.workOrders.calendarEmailAddress'): string;
|
||||
export declare function getConfigProperty(propertyName: 'application.httpPort' | 'application.maximumProcesses' | 'session.maxAgeMillis' | 'settings.fees.taxPercentageDefault' | 'settings.workOrders.workOrderNumberLength' | 'settings.workOrders.workOrderMilestoneDateRecentBeforeDays' | 'settings.workOrders.workOrderMilestoneDateRecentAfterDays' | 'settings.adminCleanup.recordDeleteAgeDays'): number;
|
||||
export declare function getConfigProperty(propertyName: 'application.useTestDatabases' | 'reverseProxy.disableCompression' | 'reverseProxy.disableEtag' | 'session.doKeepAlive' | 'settings.lotOccupancy.occupancyEndDateIsRequired' | 'settings.dynamicsGP.integrationIsEnabled'): boolean;
|
||||
export declare function getConfigProperty(propertyName: 'users.testing' | 'users.canLogin' | 'users.canUpdate' | 'users.isAdmin' | 'settings.dynamicsGP.accountCodes' | 'settings.dynamicsGP.itemNumbers' | 'settings.dynamicsGP.trialBalanceCodes' | 'settings.lotOccupancy.prints' | 'settings.workOrders.prints'): string[];
|
||||
export declare function getConfigProperty(propertyName: 'application.ntfyStartup'): ConfigNtfyStartup | undefined;
|
||||
export declare function getConfigProperty(propertyName: 'activeDirectory'): ConfigActiveDirectory;
|
||||
export declare function getConfigProperty(propertyName: 'settings.lot.lotNamePattern'): RegExp;
|
||||
export declare function getConfigProperty(propertyName: 'settings.lot.lotNameSortNameFunction'): (lotName: string) => string;
|
||||
export declare function getConfigProperty(propertyName: 'settings.printPdf.contentDisposition'): 'attachment' | 'inline';
|
||||
export declare function getConfigProperty(propertyName: 'settings.dynamicsGP.mssqlConfig'): MSSQLConfig;
|
||||
export declare function getConfigProperty(propertyName: 'settings.dynamicsGP.lookupOrder'): DynamicsGPLookup[];
|
||||
import { configDefaultValues } from '../data/config.defaultValues.js';
|
||||
export declare function getConfigProperty<K extends keyof typeof configDefaultValues>(propertyName: K, fallbackValue?: (typeof configDefaultValues)[K]): (typeof configDefaultValues)[K];
|
||||
export declare const keepAliveMillis: number;
|
||||
|
|
|
|||
|
|
@ -1,70 +1,9 @@
|
|||
import { Configurator } from '@cityssm/configurator';
|
||||
import { configDefaultValues } from '../data/config.defaultValues.js';
|
||||
import { config } from '../data/config.js';
|
||||
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) => 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', []);
|
||||
export function getConfigProperty(propertyName) {
|
||||
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;
|
||||
const configurator = new Configurator(configDefaultValues, config);
|
||||
export function getConfigProperty(propertyName, fallbackValue) {
|
||||
return configurator.getConfigProperty(propertyName, fallbackValue);
|
||||
}
|
||||
export const keepAliveMillis = getConfigProperty('session.doKeepAlive')
|
||||
? Math.max(getConfigProperty('session.maxAgeMillis') / 2, getConfigProperty('session.maxAgeMillis') - 10 * 60 * 1000)
|
||||
|
|
|
|||
|
|
@ -1,215 +1,21 @@
|
|||
import type { config as MSSQLConfig } from 'mssql'
|
||||
import { Configurator } from '@cityssm/configurator'
|
||||
|
||||
import { configDefaultValues } from '../data/config.defaultValues.js'
|
||||
import { config } from '../data/config.js'
|
||||
import type {
|
||||
ConfigActiveDirectory,
|
||||
ConfigNtfyStartup,
|
||||
DynamicsGPLookup
|
||||
} from '../types/configTypes.js'
|
||||
|
||||
/*
|
||||
* SET UP FALLBACK VALUES
|
||||
*/
|
||||
|
||||
const configFallbackValues = new Map<string, unknown>()
|
||||
|
||||
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
|
||||
const configurator = new Configurator(
|
||||
configDefaultValues,
|
||||
config as unknown as Record<string, unknown>
|
||||
)
|
||||
|
||||
configFallbackValues.set(
|
||||
// eslint-disable-next-line no-secrets/no-secrets
|
||||
'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 getConfigProperty(
|
||||
propertyName:
|
||||
| 'application.applicationName'
|
||||
| 'application.logoURL'
|
||||
| 'application.userDomain'
|
||||
| 'reverseProxy.urlPrefix'
|
||||
| 'session.cookieName'
|
||||
| 'session.secret'
|
||||
| 'aliases.lot'
|
||||
| 'aliases.lots'
|
||||
| 'aliases.map'
|
||||
| 'aliases.maps'
|
||||
| 'aliases.occupancy'
|
||||
| 'aliases.occupancies'
|
||||
| 'aliases.occupancyStartDate'
|
||||
| 'aliases.occupant'
|
||||
| 'aliases.occupants'
|
||||
| 'aliases.workOrderOpenDate'
|
||||
| 'aliases.workOrderCloseDate'
|
||||
| 'aliases.externalReceiptNumber'
|
||||
| 'settings.map.mapCityDefault'
|
||||
| 'settings.map.mapProvinceDefault'
|
||||
| 'settings.lot.lotNameHelpText'
|
||||
| 'settings.lotOccupancy.occupantCityDefault'
|
||||
| 'settings.lotOccupancy.occupantProvinceDefault'
|
||||
| 'settings.workOrders.calendarEmailAddress'
|
||||
): string
|
||||
|
||||
export function getConfigProperty(
|
||||
propertyName:
|
||||
| 'application.httpPort'
|
||||
| 'application.maximumProcesses'
|
||||
| 'session.maxAgeMillis'
|
||||
| 'settings.fees.taxPercentageDefault'
|
||||
| 'settings.workOrders.workOrderNumberLength'
|
||||
| 'settings.workOrders.workOrderMilestoneDateRecentBeforeDays'
|
||||
| 'settings.workOrders.workOrderMilestoneDateRecentAfterDays'
|
||||
| 'settings.adminCleanup.recordDeleteAgeDays'
|
||||
): number
|
||||
|
||||
export function getConfigProperty(
|
||||
propertyName:
|
||||
| 'application.useTestDatabases'
|
||||
| 'reverseProxy.disableCompression'
|
||||
| 'reverseProxy.disableEtag'
|
||||
| 'session.doKeepAlive'
|
||||
| 'settings.lotOccupancy.occupancyEndDateIsRequired'
|
||||
| 'settings.dynamicsGP.integrationIsEnabled'
|
||||
): boolean
|
||||
|
||||
export function getConfigProperty(
|
||||
propertyName:
|
||||
| 'users.testing'
|
||||
| 'users.canLogin'
|
||||
| 'users.canUpdate'
|
||||
| 'users.isAdmin'
|
||||
| 'settings.dynamicsGP.accountCodes'
|
||||
| 'settings.dynamicsGP.itemNumbers'
|
||||
| 'settings.dynamicsGP.trialBalanceCodes'
|
||||
| 'settings.lotOccupancy.prints'
|
||||
| 'settings.workOrders.prints'
|
||||
): string[]
|
||||
|
||||
export function getConfigProperty(
|
||||
propertyName: 'application.ntfyStartup'
|
||||
): ConfigNtfyStartup | undefined
|
||||
|
||||
export function getConfigProperty(
|
||||
propertyName: 'activeDirectory'
|
||||
): ConfigActiveDirectory
|
||||
|
||||
export function getConfigProperty(propertyName: 'settings.lot.lotNamePattern'): RegExp
|
||||
|
||||
export function getConfigProperty(
|
||||
propertyName: 'settings.lot.lotNameSortNameFunction'
|
||||
): (lotName: string) => string
|
||||
|
||||
export function getConfigProperty(
|
||||
propertyName: 'settings.printPdf.contentDisposition'
|
||||
): 'attachment' | 'inline'
|
||||
|
||||
export function getConfigProperty(
|
||||
propertyName: 'settings.dynamicsGP.mssqlConfig'
|
||||
): MSSQLConfig
|
||||
|
||||
export function getConfigProperty(
|
||||
propertyName: 'settings.dynamicsGP.lookupOrder'
|
||||
): DynamicsGPLookup[]
|
||||
|
||||
export function getConfigProperty(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 function getConfigProperty<K extends keyof typeof configDefaultValues>(
|
||||
propertyName: K,
|
||||
fallbackValue?: (typeof configDefaultValues)[K]
|
||||
): (typeof configDefaultValues)[K] {
|
||||
return configurator.getConfigProperty(
|
||||
propertyName,
|
||||
fallbackValue
|
||||
) as (typeof configDefaultValues)[K]
|
||||
}
|
||||
|
||||
export const keepAliveMillis = getConfigProperty('session.doKeepAlive')
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
"dependencies": {
|
||||
"@cityssm/bulma-js": "^0.5.0",
|
||||
"@cityssm/bulma-webapp-js": "^1.5.0",
|
||||
"@cityssm/configurator": "^0.1.0",
|
||||
"@cityssm/date-diff": "^2.2.3",
|
||||
"@cityssm/dynamics-gp": "^1.0.3",
|
||||
"@cityssm/expressjs-server-js": "^2.3.3",
|
||||
|
|
@ -239,9 +240,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@azure/identity": {
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.4.1.tgz",
|
||||
"integrity": "sha512-oQ/r5MBdfZTMIUcY5Ch8G7Vv9aIXDkEYyU4Dfqjim4MQN+LY2uiQ57P1JDopMLeHCsZxM4yy8lEdne3tM9Xhzg==",
|
||||
"version": "3.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.4.2.tgz",
|
||||
"integrity": "sha512-0q5DL4uyR0EZ4RXQKD8MadGH6zTIcloUoS/RVbCpNpej4pwte0xpqYxk8K97Py2RiuUvI7F4GXpoT4046VfufA==",
|
||||
"dependencies": {
|
||||
"@azure/abort-controller": "^1.0.0",
|
||||
"@azure/core-auth": "^1.5.0",
|
||||
|
|
@ -474,6 +475,14 @@
|
|||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@cityssm/configurator": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@cityssm/configurator/-/configurator-0.1.0.tgz",
|
||||
"integrity": "sha512-MGklw25IFyovef5/pYXF3XePkbLDuW0DxKoqPlD8Cwmk/ySXDBhKsDdVgKVcGVRD70k8538PhN5vA4U9cVhtQw==",
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@cityssm/date-diff": {
|
||||
"version": "2.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@cityssm/date-diff/-/date-diff-2.2.3.tgz",
|
||||
|
|
@ -2619,11 +2628,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/braces": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
||||
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
||||
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
||||
"dependencies": {
|
||||
"fill-range": "^7.0.1"
|
||||
"fill-range": "^7.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
|
|
@ -5257,9 +5266,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/fill-range": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
||||
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
||||
"dependencies": {
|
||||
"to-regex-range": "^5.0.1"
|
||||
},
|
||||
|
|
@ -7851,9 +7860,9 @@
|
|||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"node_modules/mssql": {
|
||||
"version": "10.0.2",
|
||||
"resolved": "https://registry.npmjs.org/mssql/-/mssql-10.0.2.tgz",
|
||||
"integrity": "sha512-GrQ6gzv2xA7ndOvONyZ++4RZsNkr8qDiIpvuFn2pR3TPiSk/cKdmvOrDU3jWgon7EPj7CPgmDiMh7Hgtft2xLg==",
|
||||
"version": "10.0.4",
|
||||
"resolved": "https://registry.npmjs.org/mssql/-/mssql-10.0.4.tgz",
|
||||
"integrity": "sha512-MhX5IcJ75/q+dUiOe+1ajpqjEe96ZKqMchYYPUIDU+Btqhwt4gbFeZhcGUZaRCEMV9uF+G8kLvaNSFaEzL9OXQ==",
|
||||
"dependencies": {
|
||||
"@tediousjs/connection-string": "^0.5.0",
|
||||
"commander": "^11.0.0",
|
||||
|
|
@ -10476,9 +10485,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/tedious": {
|
||||
"version": "16.6.1",
|
||||
"resolved": "https://registry.npmjs.org/tedious/-/tedious-16.6.1.tgz",
|
||||
"integrity": "sha512-KKSDB1OPrPk0WbMPug9YqRbPl44zMjdL2hFyzLEidr2IkItzpV0ZbzW8VA47QIS2oyWhCU7ifIEQY12n23IRDA==",
|
||||
"version": "16.7.1",
|
||||
"resolved": "https://registry.npmjs.org/tedious/-/tedious-16.7.1.tgz",
|
||||
"integrity": "sha512-NmedZS0NJiTv3CoYnf1FtjxIDUgVYzEmavrc8q2WHRb+lP4deI9BpQfmNnBZZaWusDbP5FVFZCcvzb3xOlNVlQ==",
|
||||
"dependencies": {
|
||||
"@azure/identity": "^3.4.1",
|
||||
"@azure/keyvault-keys": "^4.4.0",
|
||||
|
|
@ -10490,7 +10499,6 @@
|
|||
"jsbi": "^4.3.0",
|
||||
"native-duplexpair": "^1.0.0",
|
||||
"node-abort-controller": "^3.1.1",
|
||||
"punycode": "^2.3.0",
|
||||
"sprintf-js": "^1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
"dependencies": {
|
||||
"@cityssm/bulma-js": "^0.5.0",
|
||||
"@cityssm/bulma-webapp-js": "^1.5.0",
|
||||
"@cityssm/configurator": "^0.1.0",
|
||||
"@cityssm/date-diff": "^2.2.3",
|
||||
"@cityssm/dynamics-gp": "^1.0.3",
|
||||
"@cityssm/expressjs-server-js": "^2.3.3",
|
||||
|
|
|
|||
Loading…
Reference in New Issue