import type { config as MSSQLConfig } from 'mssql'; export interface Config { application: ConfigApplication; session: ConfigSession; reverseProxy: { disableCompression?: boolean; disableEtag?: boolean; urlPrefix?: string; }; activeDirectory?: ConfigActiveDirectory; users: { testing?: Array<`*${string}`>; canLogin?: string[]; canUpdate?: string[]; isAdmin?: string[]; }; aliases: { externalReceiptNumber?: string; workOrderOpenDate?: string; workOrderCloseDate?: string; }; settings: { cityDefault?: string; provinceDefault?: string; fees: { taxPercentageDefault?: number; }; burialSites: { burialSiteNameSegments?: ConfigBurialSiteNameSegments; }; contracts: { burialSiteIdIsRequired?: boolean; contractEndDateIsRequired?: boolean; deathAgePeriods?: string[]; prints?: string[]; }; workOrders: { workOrderNumberLength?: number; workOrderMilestoneDateRecentBeforeDays?: number; workOrderMilestoneDateRecentAfterDays?: number; calendarEmailAddress?: string; prints?: string[]; }; adminCleanup: { recordDeleteAgeDays?: number; }; printPdf: { contentDisposition?: 'attachment' | 'inline'; }; dynamicsGP?: { integrationIsEnabled: boolean; mssqlConfig?: MSSQLConfig; lookupOrder?: DynamicsGPLookup[]; accountCodes?: string[]; itemNumbers?: string[]; trialBalanceCodes?: string[]; }; }; } export type DynamicsGPLookup = 'diamond/cashReceipt' | 'diamond/extendedInvoice' | 'invoice'; interface ConfigApplication { applicationName?: string; backgroundURL?: string; logoURL?: string; httpPort?: number; userDomain?: string; useTestDatabases?: boolean; ntfyStartup?: ConfigNtfyStartup; maximumProcesses?: number; } export interface ConfigNtfyStartup { topic: string; server?: string; } interface ConfigSession { cookieName?: string; secret?: string; maxAgeMillis?: number; doKeepAlive?: boolean; } export interface ConfigActiveDirectory { url: string; baseDN: string; username: string; password: string; } export interface ConfigBurialSiteNameSegments { separator?: string; includeCemeteryKey?: boolean; segments: Partial>; } export {};