cloud-presign
Version:
A unified presigned URL generator for multiple cloud platforms
88 lines (87 loc) • 3.55 kB
JavaScript
;
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(', ')}`);
}
}