UNPKG

@citrineos/base

Version:

The base module for OCPP v2.0.1 including all interfaces. This module is not intended to be used directly, but rather as a dependency for other modules.

154 lines 6.19 kB
"use strict"; // Copyright Contributors to the CitrineOS Project // // SPDX-License-Identifier: Apache 2.0 Object.defineProperty(exports, "__esModule", { value: true }); exports.bootstrapConfigSchema = void 0; exports.loadBootstrapConfig = loadBootstrapConfig; const zod_1 = require("zod"); const defineConfig_1 = require("./defineConfig"); // Bootstrap schema contains what's needed to start the application exports.bootstrapConfigSchema = zod_1.z.object({ configFileName: zod_1.z.string().default('config.json'), configDir: zod_1.z.string().optional(), // Database configuration database: zod_1.z.object({ host: zod_1.z.string().default('localhost'), port: zod_1.z.number().int().positive().default(5432), database: zod_1.z.string().default('citrine'), dialect: zod_1.z.string().default('postgres'), username: zod_1.z.string().default('citrine'), password: zod_1.z.string().default('citrine'), sync: zod_1.z.boolean().default(false), alter: zod_1.z.boolean().default(false), maxRetries: zod_1.z.number().int().positive().default(3), retryDelay: zod_1.z.number().int().positive().default(1000), }), // File access configuration fileAccess: zod_1.z .object({ type: zod_1.z.enum(['local', 's3', 'directus']), local: zod_1.z .object({ defaultFilePath: zod_1.z.string().default('data'), }) .optional(), s3: zod_1.z .object({ region: zod_1.z.string().optional(), endpoint: zod_1.z.string().optional(), defaultBucketName: zod_1.z.string().default('citrineos-s3-bucket'), s3ForcePathStyle: zod_1.z.boolean().default(true), accessKeyId: zod_1.z.string().optional(), secretAccessKey: zod_1.z.string().optional(), }) .optional(), directus: zod_1.z .object({ host: zod_1.z.string().default('localhost'), port: zod_1.z.number().int().positive().default(8055), token: zod_1.z.string().optional(), username: zod_1.z.string().optional(), password: zod_1.z.string().optional(), generateFlows: zod_1.z.boolean().default(false), }) .optional(), }) .refine((obj) => { // Ensure the selected type has corresponding config switch (obj.type) { case 'local': return !!obj.local; case 's3': return !!obj.s3; case 'directus': return !!obj.directus; default: return false; } }, { message: 'Configuration for the selected file access type must be provided', }), }); /** * Helper function to load environment variables based on prefix */ function getEnvVarValue(key) { const envKey = `${defineConfig_1.BOOSTRAP_CONFIG_ENV_VAR_PREFIX}${key}`.toUpperCase(); return process.env[envKey]; } /** * Parse a potentially JSON-formatted environment variable */ function parseEnvValue(value) { try { return JSON.parse(value); } catch (_a) { return value; } } /** * Load bootstrap configuration from environment variables */ function loadBootstrapConfig() { const config = { configFileName: getEnvVarValue('config_filename') || 'config.json', configDir: getEnvVarValue('config_dir'), // Database configuration database: { host: getEnvVarValue('database_host'), port: getEnvVarValue('database_port') && parseInt(getEnvVarValue('database_port'), 10), database: getEnvVarValue('database_name'), dialect: getEnvVarValue('database_dialect'), username: getEnvVarValue('database_username'), password: getEnvVarValue('database_password'), sync: getEnvVarValue('database_sync') && parseEnvValue(getEnvVarValue('database_sync')), alter: getEnvVarValue('database_alter') && parseEnvValue(getEnvVarValue('database_alter')), maxRetries: getEnvVarValue('database_max_retries') && parseInt(getEnvVarValue('database_max_retries'), 10), retryDelay: getEnvVarValue('database_retry_delay') && parseInt(getEnvVarValue('database_retry_delay'), 10), }, fileAccess: { type: getEnvVarValue('file_access_type') || 'local', }, }; // File access configuration switch (config.fileAccess.type) { case 'local': config.fileAccess.local = { defaultFilePath: getEnvVarValue('file_access_local_default_file_path'), }; break; case 's3': config.fileAccess.s3 = { region: getEnvVarValue('file_access_s3_region'), endpoint: getEnvVarValue('file_access_s3_endpoint'), defaultBucketName: getEnvVarValue('file_access_s3_default_bucket_name'), s3ForcePathStyle: getEnvVarValue('file_access_s3_force_path_style') && parseEnvValue(getEnvVarValue('file_access_s3_force_path_style')), accessKeyId: getEnvVarValue('file_access_s3_access_key_id'), secretAccessKey: getEnvVarValue('file_access_s3_secret_access_key'), }; break; case 'directus': config.fileAccess.directus = { host: getEnvVarValue('file_access_directus_host'), port: getEnvVarValue('file_access_directus_port') && parseInt(getEnvVarValue('file_access_directus_port'), 10), token: getEnvVarValue('file_access_directus_token'), username: getEnvVarValue('file_access_directus_username'), password: getEnvVarValue('file_access_directus_password'), }; break; } try { return exports.bootstrapConfigSchema.parse(config); } catch (error) { console.error('Bootstrap configuration validation failed:', error); throw error; } } //# sourceMappingURL=boostrap.config.js.map