UNPKG

spaps

Version:

Sweet Potato Authentication & Payment Service CLI - Docker Compose orchestrator for local Python/FastAPI SPAPS server with built-in admin middleware

122 lines (103 loc) 2.58 kB
const fs = require('node:fs'); const path = require('node:path'); const API_KEY_ENV_VARS = [ 'SPAPS_API_KEY', 'NEXT_PUBLIC_SPAPS_PUBLISHABLE_KEY', 'VITE_SPAPS_PUBLISHABLE_KEY', 'NEXT_PUBLIC_SPAPS_API_KEY', 'VITE_SPAPS_API_KEY', ]; const API_KEY_ENV_FILES = ['.env.local', '.env']; function stripWrappingQuotes(value) { if (value.length >= 2) { const first = value[0]; const last = value[value.length - 1]; if ((first === '"' && last === '"') || (first === '\'' && last === '\'')) { return value.slice(1, -1); } } return value; } function parseEnvAssignments(content) { const values = {}; for (const rawLine of String(content || '').split(/\r?\n/)) { const line = rawLine.trim(); if (!line || line.startsWith('#')) { continue; } const separator = line.indexOf('='); if (separator <= 0) { continue; } const key = line.slice(0, separator).trim(); const value = stripWrappingQuotes(line.slice(separator + 1).trim()); values[key] = value; } return values; } function readApiKeyFromFile(filePath) { if (!fs.existsSync(filePath)) { return null; } try { const values = parseEnvAssignments(fs.readFileSync(filePath, 'utf8')); for (const envVar of API_KEY_ENV_VARS) { if (typeof values[envVar] === 'string' && values[envVar].trim()) { return { apiKey: values[envVar].trim(), envVar, path: filePath, source: path.basename(filePath), }; } } } catch { return null; } return null; } function findUpApiKey(startDir = process.cwd()) { let current = path.resolve(startDir); while (true) { for (const envFile of API_KEY_ENV_FILES) { const hit = readApiKeyFromFile(path.join(current, envFile)); if (hit) { return hit; } } const parent = path.dirname(current); if (parent === current) { return null; } current = parent; } } function resolveAuthApiKey({ cwd = process.cwd(), env = process.env } = {}) { for (const envVar of API_KEY_ENV_VARS) { if (typeof env[envVar] === 'string' && env[envVar].trim()) { return { apiKey: env[envVar].trim(), envVar, path: null, source: envVar, }; } } const fileHit = findUpApiKey(cwd); if (fileHit) { return fileHit; } return { apiKey: null, envVar: null, path: null, source: null, }; } module.exports = { API_KEY_ENV_FILES, API_KEY_ENV_VARS, findUpApiKey, parseEnvAssignments, resolveAuthApiKey, };