fix(startup): prefix all bare src/ subdirectory requires with ./ in app.js and provider-dns.js
DC-005 refactored everything into src/ subdirs but left bare require() paths in app.js (managers/, security/, monitoring/, docker/, recipes/, utilities/, context/, dns/) which resolve fine in tests (jest mocks) but fail in the container where NODE_PATH=/app/src is not set. Fixed ~25 requires with relative paths.
This commit is contained in:
+40
-40
@@ -17,41 +17,41 @@ const { errorResponse, ok } = require('./utils/responses');
|
|||||||
const { asyncHandler } = require('./utils/async-handler');
|
const { asyncHandler } = require('./utils/async-handler');
|
||||||
|
|
||||||
// Managers and utilities
|
// Managers and utilities
|
||||||
const StateManager = require('managers/state-manager');
|
const StateManager = require('.//state-manager');
|
||||||
const platformPaths = require('../platform-paths');
|
const platformPaths = require('../platform-paths');
|
||||||
const { LicenseManager } = require('managers/license-manager');
|
const { LicenseManager } = require('.//license-manager');
|
||||||
const credentialManager = require('managers/credential-manager');
|
const credentialManager = require('.//credential-manager');
|
||||||
const authManager = require('managers/auth-manager');
|
const authManager = require('.//auth-manager');
|
||||||
const dockerSecurity = require('security/docker-security');
|
const dockerSecurity = require('.//docker-security');
|
||||||
const auditLogger = require('security/audit-logger');
|
const auditLogger = require('.//audit-logger');
|
||||||
const portLockManager = require('managers/port-lock-manager');
|
const portLockManager = require('.//port-lock-manager');
|
||||||
const resourceMonitor = require('managers/resource-monitor');
|
const resourceMonitor = require('.//resource-monitor');
|
||||||
const backupManager = require('utilities/backup-manager');
|
const backupManager = require('.//backup-manager');
|
||||||
const healthChecker = require('monitoring/health-checker');
|
const healthChecker = require('.//health-checker');
|
||||||
const updateManager = require('managers/update-manager');
|
const updateManager = require('.//update-manager');
|
||||||
const selfUpdater = require('docker/self-updater');
|
const selfUpdater = require('.//self-updater');
|
||||||
const configureMiddleware = require('utilities/middleware');
|
const configureMiddleware = require('.//middleware');
|
||||||
const { validateStartupConfig: _validateStartupConfig, syncHealthCheckerServices } = require('utilities/startup-validator');
|
const { validateStartupConfig: _validateStartupConfig, syncHealthCheckerServices } = require('.//startup-validator');
|
||||||
const { CSRF_HEADER_NAME } = require('security/csrf-protection');
|
const { CSRF_HEADER_NAME } = require('.//csrf-protection');
|
||||||
const { resolveServiceUrl } = require('utilities/url-resolver');
|
const { resolveServiceUrl } = require('.//url-resolver');
|
||||||
const metrics = require('monitoring/metrics');
|
const metrics = require('.//metrics');
|
||||||
const { validateURL } = require('security/input-validator');
|
const { validateURL } = require('.//input-validator');
|
||||||
|
|
||||||
// Optional modules
|
// Optional modules
|
||||||
let dockerMaintenance, logDigest;
|
let dockerMaintenance, logDigest;
|
||||||
try { dockerMaintenance = require('docker/docker-maintenance'); } catch (_) { /* optional module */ }
|
try { dockerMaintenance = require('.//docker-maintenance'); } catch (_) { /* optional module */ }
|
||||||
try { logDigest = require('security/log-digest'); } catch (_) { /* optional module */ }
|
try { logDigest = require('.//log-digest'); } catch (_) { /* optional module */ }
|
||||||
|
|
||||||
// Workflow engine (bundled workflows)
|
// Workflow engine (bundled workflows)
|
||||||
let bundledWorkflowsModule;
|
let bundledWorkflowsModule;
|
||||||
let workflowEngine = null;
|
let workflowEngine = null;
|
||||||
try {
|
try {
|
||||||
bundledWorkflowsModule = require('recipes/bundled-workflows');
|
bundledWorkflowsModule = require('.//bundled-workflows');
|
||||||
} catch (_) { /* optional module */ }
|
} catch (_) { /* optional module */ }
|
||||||
|
|
||||||
// Templates
|
// Templates
|
||||||
const { APP_TEMPLATES, TEMPLATE_CATEGORIES, DIFFICULTY_LEVELS } = require('docker/app-templates');
|
const { APP_TEMPLATES, TEMPLATE_CATEGORIES, DIFFICULTY_LEVELS } = require('.//app-templates');
|
||||||
const { RECIPE_TEMPLATES, RECIPE_CATEGORIES } = require('recipes/recipe-templates');
|
const { RECIPE_TEMPLATES, RECIPE_CATEGORIES } = require('.//recipe-templates');
|
||||||
|
|
||||||
// Route modules
|
// Route modules
|
||||||
const healthRoutes = require('../routes/health');
|
const healthRoutes = require('../routes/health');
|
||||||
@@ -81,17 +81,17 @@ const dockerResourcesRoutes = require('../routes/docker-resources');
|
|||||||
const eventsRoutes = require('../routes/events');
|
const eventsRoutes = require('../routes/events');
|
||||||
const workflowsRoutes = require('../routes/workflows');
|
const workflowsRoutes = require('../routes/workflows');
|
||||||
const dependenciesRoutes = require('../routes/dependencies');
|
const dependenciesRoutes = require('../routes/dependencies');
|
||||||
const DependencyManager = require('managers/dependency-manager');
|
const DependencyManager = require('.//dependency-manager');
|
||||||
const autoRestartRoutes = require('../routes/auto-restart');
|
const autoRestartRoutes = require('../routes/auto-restart');
|
||||||
const configDriftRoutes = require('../routes/config-drift');
|
const configDriftRoutes = require('../routes/config-drift');
|
||||||
const sslMonitorRoutes = require('../routes/ssl-monitor');
|
const sslMonitorRoutes = require('../routes/ssl-monitor');
|
||||||
const { AutoRestartManager } = require('managers/auto-restart-manager');
|
const { AutoRestartManager } = require('.//auto-restart-manager');
|
||||||
const { ConfigDriftDetector } = require('managers/config-drift-detector');
|
const { ConfigDriftDetector } = require('.//config-drift-detector');
|
||||||
const SSLMonitor = require('monitoring/ssl-monitor');
|
const SSLMonitor = require('.//ssl-monitor');
|
||||||
const DNSPropagationChecker = require('dns/dns-propagation');
|
const DNSPropagationChecker = require('./dns/dns-propagation');
|
||||||
|
|
||||||
// Constants
|
// Constants
|
||||||
const { APP } = require('utilities/constants');
|
const { APP } = require('.//constants');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create and configure the Express application
|
* Create and configure the Express application
|
||||||
@@ -233,15 +233,15 @@ async function createApp() {
|
|||||||
auditLogger,
|
auditLogger,
|
||||||
authManager,
|
authManager,
|
||||||
log,
|
log,
|
||||||
cryptoUtils: require('security/crypto-utils'),
|
cryptoUtils: require('.//crypto-utils'),
|
||||||
isValidContainerId,
|
isValidContainerId,
|
||||||
isTailscaleIP,
|
isTailscaleIP,
|
||||||
getTailscaleStatus,
|
getTailscaleStatus,
|
||||||
RATE_LIMITS: require('utilities/constants').RATE_LIMITS,
|
RATE_LIMITS: require('.//constants').RATE_LIMITS,
|
||||||
LIMITS: require('utilities/constants').LIMITS,
|
LIMITS: require('.//constants').LIMITS,
|
||||||
APP: require('utilities/constants').APP,
|
APP: require('.//constants').APP,
|
||||||
CACHE_CONFIGS: require('utilities/cache-config').CACHE_CONFIGS,
|
CACHE_CONFIGS: require('.//cache-config').CACHE_CONFIGS,
|
||||||
createCache: require('utilities/cache-config').createCache,
|
createCache: require('.//cache-config').createCache,
|
||||||
});
|
});
|
||||||
|
|
||||||
const { strictLimiter } = middlewareResult;
|
const { strictLimiter } = middlewareResult;
|
||||||
@@ -254,7 +254,7 @@ async function createApp() {
|
|||||||
|
|
||||||
// eslint-disable-next-line require-await -- may grow awaits as config loading evolves
|
// eslint-disable-next-line require-await -- may grow awaits as config loading evolves
|
||||||
async function readConfig() {
|
async function readConfig() {
|
||||||
const { readJsonFile } = require('utilities/fs-helpers');
|
const { readJsonFile } = require('.//fs-helpers');
|
||||||
return readJsonFile(config.CONFIG_FILE, {});
|
return readJsonFile(config.CONFIG_FILE, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,7 +277,7 @@ async function createApp() {
|
|||||||
|
|
||||||
async function saveTotpConfig() {
|
async function saveTotpConfig() {
|
||||||
try {
|
try {
|
||||||
const { writeJsonFile } = require('utilities/fs-helpers');
|
const { writeJsonFile } = require('.//fs-helpers');
|
||||||
await writeJsonFile(config.TOTP_CONFIG_FILE, totpConfig);
|
await writeJsonFile(config.TOTP_CONFIG_FILE, totpConfig);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log.error('config', 'Could not save TOTP config', { error: e.message });
|
log.error('config', 'Could not save TOTP config', { error: e.message });
|
||||||
@@ -776,7 +776,7 @@ async function createApp() {
|
|||||||
// Lightweight probe endpoint
|
// Lightweight probe endpoint
|
||||||
app.get('/probe/:id', boundAsyncHandler(async (req, res) => {
|
app.get('/probe/:id', boundAsyncHandler(async (req, res) => {
|
||||||
const id = req.params.id;
|
const id = req.params.id;
|
||||||
const { exists } = require('utilities/fs-helpers');
|
const { exists } = require('.//fs-helpers');
|
||||||
|
|
||||||
let service = null;
|
let service = null;
|
||||||
if (id !== 'internet' && await exists(config.SERVICES_FILE)) {
|
if (id !== 'internet' && await exists(config.SERVICES_FILE)) {
|
||||||
@@ -939,7 +939,7 @@ async function createApp() {
|
|||||||
|
|
||||||
app.get('/api/v1/docs/spec', boundAsyncHandler(async (req, res) => {
|
app.get('/api/v1/docs/spec', boundAsyncHandler(async (req, res) => {
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { exists } = require('utilities/fs-helpers');
|
const { exists } = require('.//fs-helpers');
|
||||||
const fsp = require('fs').promises;
|
const fsp = require('fs').promises;
|
||||||
|
|
||||||
const specPath = path.join(__dirname, '../openapi.yaml');
|
const specPath = path.join(__dirname, '../openapi.yaml');
|
||||||
@@ -952,7 +952,7 @@ async function createApp() {
|
|||||||
}, 'api-docs-spec'));
|
}, 'api-docs-spec'));
|
||||||
|
|
||||||
// Error handlers (MUST be last)
|
// Error handlers (MUST be last)
|
||||||
const { notFoundHandler, errorMiddleware } = require('utilities/error-handler');
|
const { notFoundHandler, errorMiddleware } = require('.//error-handler');
|
||||||
app.use('/api', notFoundHandler);
|
app.use('/api', notFoundHandler);
|
||||||
app.use(errorMiddleware);
|
app.use(errorMiddleware);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user