UNPKG

@enspirit/emb

Version:

A replacement for our Makefile-for-monorepos

76 lines (75 loc) 2.3 kB
/** * Manages secret providers and creates template sources for them. */ export class SecretManager { providers = new Map(); /** * Register a secret provider. * @param name Provider name (e.g., 'vault', 'op') * @param provider The provider instance */ register(name, provider) { if (this.providers.has(name)) { throw new Error(`Secret provider '${name}' is already registered`); } this.providers.set(name, provider); } /** * Get a registered provider by name. * @param name Provider name * @returns The provider instance or undefined if not found */ get(name) { return this.providers.get(name); } /** * Check if a provider is registered. * @param name Provider name */ has(name) { return this.providers.has(name); } /** * Get all registered provider names. */ getProviderNames() { return [...this.providers.keys()]; } /** * Connect all registered providers. */ async connectAll() { await Promise.all([...this.providers.values()].map((p) => p.connect())); } /** * Disconnect all registered providers. */ async disconnectAll() { await Promise.all([...this.providers.values()].map((p) => p.disconnect())); } /** * Parse a secret reference string into a SecretReference object. * Format: "path/to/secret#key" or "path/to/secret" * @param refString The reference string to parse */ parseReference(refString) { const [path, key] = refString.split('#'); return { path, key }; } /** * Create an async source function for use with TemplateExpander. * @param providerName The name of the provider to use * @returns An async function that resolves secrets */ createSource(providerName) { return async (key) => { const provider = this.get(providerName); if (!provider) { throw new Error(`Secret provider '${providerName}' not found. ` + `Available providers: ${this.getProviderNames().join(', ') || 'none'}`); } const ref = this.parseReference(key); return provider.get(ref); }; } }