UNPKG

cloud-presign

Version:

A unified presigned URL generator for multiple cloud platforms

88 lines (87 loc) 3.55 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadConfig = loadConfig; const dotenv_1 = __importDefault(require("dotenv")); const types_1 = require("./types"); // Load environment variables dotenv_1.default.config(); /** * Default configuration values */ const DEFAULT_CONFIG = { provider: types_1.CloudProvider.AWS, expiration: 3600, // 1 hour in seconds }; /** * Loads and validates configuration from environment variables * @returns Validated configuration */ function loadConfig() { const provider = (process.env.CLOUD_PROVIDER || DEFAULT_CONFIG.provider); // Validate provider if (!Object.values(types_1.CloudProvider).includes(provider)) { throw new Error(`Invalid cloud provider: ${provider}. Supported providers are: ${Object.values(types_1.CloudProvider).join(', ')}`); } // Basic configuration for all providers const config = { provider, expiration: Number(process.env.PRESIGN_EXPIRATION) || DEFAULT_CONFIG.expiration, region: process.env.CLOUD_REGION || '', }; // Provider-specific configuration switch (provider) { case types_1.CloudProvider.AWS: config.aws = { accessKeyId: process.env.AWS_ACCESS_KEY_ID || '', secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || '', region: process.env.AWS_REGION || config.region, bucket: process.env.AWS_BUCKET_NAME || '', }; validateProviderConfig(config.aws, 'AWS'); break; case types_1.CloudProvider.GCP: config.gcp = { projectId: process.env.GCP_PROJECT_ID || '', keyFilename: process.env.GCP_KEY_FILENAME || '', bucket: process.env.GCP_BUCKET_NAME || '', }; validateProviderConfig(config.gcp, 'GCP'); break; case types_1.CloudProvider.AZURE: config.azure = { accountName: process.env.AZURE_STORAGE_ACCOUNT_NAME || '', accountKey: process.env.AZURE_STORAGE_ACCOUNT_KEY || '', connectionString: process.env.AZURE_STORAGE_CONNECTION_STRING || '', container: process.env.AZURE_STORAGE_CONTAINER_NAME || '', }; validateProviderConfig(config.azure, 'Azure'); break; case types_1.CloudProvider.DIGITAL_OCEAN: config.digitalOcean = { accessKeyId: process.env.DO_SPACES_ACCESS_KEY_ID || '', secretAccessKey: process.env.DO_SPACES_SECRET_ACCESS_KEY || '', region: process.env.DO_SPACES_REGION || config.region, bucket: process.env.DO_SPACES_BUCKET_NAME || '', endpoint: process.env.DO_SPACES_ENDPOINT || '', }; validateProviderConfig(config.digitalOcean, 'Digital Ocean'); break; } return config; } /** * Validates provider-specific configuration * @param config - Provider configuration * @param providerName - Provider name for error messages */ function validateProviderConfig(config, providerName) { const missingKeys = Object.entries(config) .filter(([, value]) => !value) .map(([key]) => key); if (missingKeys.length > 0) { throw new Error(`Missing ${providerName} configuration: ${missingKeys.join(', ')}`); } }