39948-vm/backend/src/db/api/runtime-context.js
2026-03-26 21:19:18 +04:00

58 lines
1.4 KiB
JavaScript

/**
* Runtime Context Helpers
* For route-based environment access via X-Runtime-Environment header
*/
function getRuntimeContext(options = {}) {
return (options || {}).runtimeContext || null;
}
function getRuntimeEnvironment(options = {}) {
const runtimeContext = getRuntimeContext(options);
if (!runtimeContext) return null;
// Read from header (route-based mode)
// SECURITY: Only allow 'production' and 'stage' from header
// to prevent unauthorized access to dev data
if (runtimeContext.headerEnvironment === 'production') return 'production';
if (runtimeContext.headerEnvironment === 'stage') return 'stage';
return null;
}
function getRuntimeProjectSlug(options = {}) {
const runtimeContext = getRuntimeContext(options);
return runtimeContext?.headerProjectSlug || null;
}
function applyRuntimeEnvironment(where = {}, options = {}) {
const environment = getRuntimeEnvironment(options);
if (!environment) return where;
return {
...where,
environment,
};
}
function applyRuntimeProjectFilter(projectInclude = {}, options = {}) {
const projectSlug = getRuntimeProjectSlug(options);
if (!projectSlug) return projectInclude;
return {
...projectInclude,
required: true,
where: {
...(projectInclude.where || {}),
slug: projectSlug,
},
};
}
module.exports = {
applyRuntimeEnvironment,
applyRuntimeProjectFilter,
getRuntimeEnvironment,
getRuntimeProjectSlug,
};