monitor/core/boot/getZapVars.ts
2025-04-16 22:30:27 +07:00

74 lines
2.8 KiB
TypeScript

import fs from 'node:fs';
//Keeping the typo mostly so I can remember the old usage types
type ZapConfigVars = {
providerName: string;
forceInterface: string | undefined;
forceFXServerPort: number | undefined;
txAdminPort: number | undefined;
loginPageLogo: string | undefined;
defaultMasterAccount?: {
name: string,
password_hash: string
};
deployerDefaults: {
license?: string,
maxClients?: number,
mysqlHost?: string,
mysqlPort?: string,
mysqlUser?: string,
mysqlPassword?: string,
mysqlDatabase?: string,
};
}
const allowType = (type: 'string' | 'number', value: any) => typeof value === type ? value : undefined;
/**
* Gets & parses the txAdminZapConfig.json variables
*/
export const getZapVars = (zapCfgFilePath: string): ZapConfigVars | undefined => {
if (!fs.existsSync(zapCfgFilePath)) return;
console.warn(`WARNING: The 'txAdminZapConfig.json' file has been deprecated and this feature will be removed in the next update.`);
console.warn(` Please use the 'TXHOST_' environment variables instead.`);
console.warn(` For more information: https://aka.cfx.re/txadmin-env-config.`);
const cfgFileData = JSON.parse(fs.readFileSync(zapCfgFilePath, 'utf8'));
const zapVars: ZapConfigVars = {
providerName: 'ZAP-Hosting',
forceInterface: allowType('string', cfgFileData.interface),
forceFXServerPort: allowType('number', cfgFileData.fxServerPort),
txAdminPort: allowType('number', cfgFileData.txAdminPort),
loginPageLogo: allowType('string', cfgFileData.loginPageLogo),
deployerDefaults: {
license: allowType('string', cfgFileData.defaults.license),
maxClients: allowType('number', cfgFileData.defaults.maxClients),
mysqlHost: allowType('string', cfgFileData.defaults.mysqlHost),
mysqlUser: allowType('string', cfgFileData.defaults.mysqlUser),
mysqlPassword: allowType('string', cfgFileData.defaults.mysqlPassword),
mysqlDatabase: allowType('string', cfgFileData.defaults.mysqlDatabase),
},
}
//Port is a special case because the cfg is likely int, but we want string
if(typeof cfgFileData.defaults.mysqlPort === 'string') {
zapVars.deployerDefaults.mysqlPort = cfgFileData.defaults.mysqlPort;
} else if (typeof cfgFileData.defaults.mysqlPort === 'number') {
zapVars.deployerDefaults.mysqlPort = String(cfgFileData.defaults.mysqlPort);
}
//Validation is done in the globalData file
if (cfgFileData.customer) {
zapVars.defaultMasterAccount = {
name: allowType('string', cfgFileData.customer.name),
password_hash: allowType('string', cfgFileData.customer.password_hash),
};
}
return zapVars;
}