< Summary - Envilder Node.js SDK

Information
Class: src/sdks/nodejs/src/application/envilder-client.ts
Assembly: Default
File(s): src/sdks/nodejs/src/application/envilder-client.ts
Tag: 299_25910610327
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 58
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

File(s)

src/sdks/nodejs/src/application/envilder-client.ts

#LineLine coverage
 1import type { ParsedMapFile } from '../domain/parsed-map-file.js';
 2import type { ISecretProvider } from '../domain/ports/secret-provider.js';
 3
 4/**
 5 * Core client that resolves secrets from a configured provider.
 6 *
 7 * For most use cases prefer the {@link Envilder} facade.
 8 * Use this class directly when you need a custom {@link ISecretProvider}.
 9 *
 10 * @example
 11 * ```typescript
 12 * const provider = new MyCustomProvider();
 13 * const mapFile = new MapFileParser().parse(json);
 14 * const secrets = await new EnvilderClient(provider).resolveSecrets(mapFile);
 15 * ```
 16 */
 17export class EnvilderClient {
 18  private readonly secretProvider: ISecretProvider;
 19
 20  constructor(secretProvider: ISecretProvider) {
 1721    if (!secretProvider) {
 122      throw new Error('secretProvider cannot be null');
 23    }
 1624    this.secretProvider = secretProvider;
 25  }
 26
 27  /**
 28   * Resolves all mappings against the configured secret provider.
 29   * Entries whose secret does not exist are silently omitted.
 30   */
 31  async resolveSecrets(mapFile: ParsedMapFile): Promise<Map<string, string>> {
 1632    if (mapFile.mappings.size === 0) {
 133      return new Map();
 34    }
 35
 1536    const secretPaths = [...new Set(mapFile.mappings.values())];
 1537    const resolved = await this.secretProvider.getSecrets(secretPaths);
 38
 1439    const result = new Map<string, string>();
 1440    for (const [envVarName, secretPath] of mapFile.mappings) {
 2341      const value = resolved.get(secretPath);
 2342      if (value !== undefined) {
 2043        result.set(envVarName, value);
 44      }
 45    }
 46
 1447    return result;
 48  }
 49
 50  /**
 51   * Sets every key/value pair as a process-level environment variable.
 52   */
 53  static injectIntoEnvironment(secrets: Map<string, string>): void {
 454    for (const [key, value] of secrets) {
 855      process.env[key] = value;
 56    }
 57  }
 58}