llmverify
Version:
AI Output Verification Toolkit — Local-first LLM safety, hallucination detection, PII redaction, prompt injection defense, and runtime monitoring. Zero telemetry. OWASP LLM Top 10 aligned.
117 lines • 9.73 kB
JavaScript
;
/**
* Configuration Management
*
* Loads configuration from files and environment variables
*
* @module config
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadConfigFromEnv = loadConfigFromEnv;
exports.loadConfigFile = loadConfigFile;
exports.mergeConfigs = mergeConfigs;
exports.loadConfig = loadConfig;
exports.createDefaultConfigFile = createDefaultConfigFile;
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const config_1 = require("../types/config");
const ENV_PREFIX = 'LLMVERIFY_';
/**
* Load config from environment variables
*/
function loadConfigFromEnv() {
const config = {};
if (process.env[`${ENV_PREFIX}TIER`]) {
config.tier = process.env[`${ENV_PREFIX}TIER`];
}
if (process.env[`${ENV_PREFIX}API_KEY`]) {
config.privacy = { ...config.privacy, apiKey: process.env[`${ENV_PREFIX}API_KEY`] };
}
return config;
}
/**
* Load config from file
*/
function loadConfigFile(searchPath) {
const startPath = searchPath || process.cwd();
const configPath = path.join(startPath, 'llmverify.config.json');
if (fs.existsSync(configPath)) {
try {
return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
}
catch (error) {
console.warn('Failed to load config:', error);
}
}
return null;
}
/**
* Merge configs with priority: runtime > env > file > defaults
*/
function mergeConfigs(fileConfig, envConfig, runtimeConfig) {
return {
...config_1.DEFAULT_CONFIG,
...(fileConfig || {}),
...envConfig,
...(runtimeConfig || {})
};
}
/**
* Load complete configuration
*/
function loadConfig(runtimeConfig) {
const fileConfig = loadConfigFile();
const envConfig = loadConfigFromEnv();
return mergeConfigs(fileConfig, envConfig, runtimeConfig);
}
/**
* Create default config file
*/
function createDefaultConfigFile(targetPath) {
const configPath = path.join(targetPath || process.cwd(), 'llmverify.config.json');
const defaultConfig = {
tier: 'free',
engines: {
hallucination: { enabled: true },
consistency: { enabled: true },
jsonValidator: { enabled: true },
csm6: { enabled: true, profile: 'baseline' }
}
};
fs.writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2));
return configPath;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0gsOENBWUM7QUFLRCx3Q0FhQztBQUtELG9DQVdDO0FBS0QsZ0NBSUM7QUFLRCwwREFlQztBQXBGRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLDRDQUF5RDtBQUV6RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFFaEM7O0dBRUc7QUFDSCxTQUFnQixpQkFBaUI7SUFDL0IsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO0lBRXZCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDeEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsU0FBUyxDQUFDLEVBQUUsQ0FBQztJQUN0RixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLFVBQW1CO0lBQ2hELE1BQU0sU0FBUyxHQUFHLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDOUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUVqRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FDMUIsVUFBa0MsRUFDbEMsU0FBMEIsRUFDMUIsYUFBK0I7SUFFL0IsT0FBTztRQUNMLEdBQUcsdUJBQWM7UUFDakIsR0FBRyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDckIsR0FBRyxTQUFTO1FBQ1osR0FBRyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7S0FDZixDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLGFBQStCO0lBQ3hELE1BQU0sVUFBVSxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixFQUFFLENBQUM7SUFDdEMsT0FBTyxZQUFZLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQix1QkFBdUIsQ0FBQyxVQUFtQjtJQUN6RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUVuRixNQUFNLGFBQWEsR0FBRztRQUNwQixJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRTtZQUNQLGFBQWEsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7WUFDaEMsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtZQUM5QixhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQ2hDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRTtTQUM3QztLQUNGLENBQUM7SUFFRixFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnRcbiAqIFxuICogTG9hZHMgY29uZmlndXJhdGlvbiBmcm9tIGZpbGVzIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqIFxuICogQG1vZHVsZSBjb25maWdcbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ29uZmlnLCBERUZBVUxUX0NPTkZJRyB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZyc7XG5cbmNvbnN0IEVOVl9QUkVGSVggPSAnTExNVkVSSUZZXyc7XG5cbi8qKlxuICogTG9hZCBjb25maWcgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb25maWdGcm9tRW52KCk6IFBhcnRpYWw8Q29uZmlnPiB7XG4gIGNvbnN0IGNvbmZpZzogYW55ID0ge307XG4gIFxuICBpZiAocHJvY2Vzcy5lbnZbYCR7RU5WX1BSRUZJWH1USUVSYF0pIHtcbiAgICBjb25maWcudGllciA9IHByb2Nlc3MuZW52W2Ake0VOVl9QUkVGSVh9VElFUmBdO1xuICB9XG4gIFxuICBpZiAocHJvY2Vzcy5lbnZbYCR7RU5WX1BSRUZJWH1BUElfS0VZYF0pIHtcbiAgICBjb25maWcucHJpdmFjeSA9IHsgLi4uY29uZmlnLnByaXZhY3ksIGFwaUtleTogcHJvY2Vzcy5lbnZbYCR7RU5WX1BSRUZJWH1BUElfS0VZYF0gfTtcbiAgfVxuICBcbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBMb2FkIGNvbmZpZyBmcm9tIGZpbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb25maWdGaWxlKHNlYXJjaFBhdGg/OiBzdHJpbmcpOiBQYXJ0aWFsPENvbmZpZz4gfCBudWxsIHtcbiAgY29uc3Qgc3RhcnRQYXRoID0gc2VhcmNoUGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKHN0YXJ0UGF0aCwgJ2xsbXZlcmlmeS5jb25maWcuanNvbicpO1xuICBcbiAgaWYgKGZzLmV4aXN0c1N5bmMoY29uZmlnUGF0aCkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGNvbmZpZ1BhdGgsICd1dGYtOCcpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCBjb25maWc6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTWVyZ2UgY29uZmlncyB3aXRoIHByaW9yaXR5OiBydW50aW1lID4gZW52ID4gZmlsZSA+IGRlZmF1bHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNvbmZpZ3MoXG4gIGZpbGVDb25maWc6IFBhcnRpYWw8Q29uZmlnPiB8IG51bGwsXG4gIGVudkNvbmZpZzogUGFydGlhbDxDb25maWc+LFxuICBydW50aW1lQ29uZmlnPzogUGFydGlhbDxDb25maWc+XG4pOiBDb25maWcge1xuICByZXR1cm4ge1xuICAgIC4uLkRFRkFVTFRfQ09ORklHLFxuICAgIC4uLihmaWxlQ29uZmlnIHx8IHt9KSxcbiAgICAuLi5lbnZDb25maWcsXG4gICAgLi4uKHJ1bnRpbWVDb25maWcgfHwge30pXG4gIH0gYXMgQ29uZmlnO1xufVxuXG4vKipcbiAqIExvYWQgY29tcGxldGUgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbmZpZyhydW50aW1lQ29uZmlnPzogUGFydGlhbDxDb25maWc+KTogQ29uZmlnIHtcbiAgY29uc3QgZmlsZUNvbmZpZyA9IGxvYWRDb25maWdGaWxlKCk7XG4gIGNvbnN0IGVudkNvbmZpZyA9IGxvYWRDb25maWdGcm9tRW52KCk7XG4gIHJldHVybiBtZXJnZUNvbmZpZ3MoZmlsZUNvbmZpZywgZW52Q29uZmlnLCBydW50aW1lQ29uZmlnKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgZGVmYXVsdCBjb25maWcgZmlsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdENvbmZpZ0ZpbGUodGFyZ2V0UGF0aD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4odGFyZ2V0UGF0aCB8fCBwcm9jZXNzLmN3ZCgpLCAnbGxtdmVyaWZ5LmNvbmZpZy5qc29uJyk7XG4gIFxuICBjb25zdCBkZWZhdWx0Q29uZmlnID0ge1xuICAgIHRpZXI6ICdmcmVlJyxcbiAgICBlbmdpbmVzOiB7XG4gICAgICBoYWxsdWNpbmF0aW9uOiB7IGVuYWJsZWQ6IHRydWUgfSxcbiAgICAgIGNvbnNpc3RlbmN5OiB7IGVuYWJsZWQ6IHRydWUgfSxcbiAgICAgIGpzb25WYWxpZGF0b3I6IHsgZW5hYmxlZDogdHJ1ZSB9LFxuICAgICAgY3NtNjogeyBlbmFibGVkOiB0cnVlLCBwcm9maWxlOiAnYmFzZWxpbmUnIH1cbiAgICB9XG4gIH07XG4gIFxuICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1BhdGgsIEpTT04uc3RyaW5naWZ5KGRlZmF1bHRDb25maWcsIG51bGwsIDIpKTtcbiAgcmV0dXJuIGNvbmZpZ1BhdGg7XG59XG4iXX0=