< Summary - Envilder Core (TypeScript)

Information
Class: src/envilder/core/infrastructure/aws/AwsSsmSecretProvider.ts
Assembly: Default
File(s): src/envilder/core/infrastructure/aws/AwsSsmSecretProvider.ts
Tag: 151_24479375065
Line coverage
100%
Covered lines: 13
Uncovered lines: 0
Coverable lines: 13
Total lines: 53
Line coverage: 100%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

File(s)

src/envilder/core/infrastructure/aws/AwsSsmSecretProvider.ts

#LineLine coverage
 1import {
 2  GetParameterCommand,
 3  PutParameterCommand,
 4  type SSM,
 5} from '@aws-sdk/client-ssm';
 6import { injectable } from 'inversify';
 7import { EnvironmentVariable } from '../../domain/EnvironmentVariable.js';
 8import { SecretOperationError } from '../../domain/errors/DomainErrors.js';
 9import type { ISecretProvider } from '../../domain/ports/ISecretProvider.js';
 10
 911@injectable()
 912export class AwsSsmSecretProvider implements ISecretProvider {
 13  private ssm: SSM;
 14
 15  constructor(ssm: SSM) {
 3416    this.ssm = ssm;
 17  }
 18
 19  async getSecret(name: string): Promise<string | undefined> {
 620    try {
 621      const command = new GetParameterCommand({
 22        Name: name,
 23        WithDecryption: true,
 24      });
 625      const { Parameter } = await this.ssm.send(command);
 226      return Parameter?.Value;
 27    } catch (error) {
 428      if (
 29        typeof error === 'object' &&
 30        error !== null &&
 31        'name' in error &&
 32        error.name === 'ParameterNotFound'
 33      ) {
 234        return undefined;
 35      }
 36      const errorMessage =
 237        error instanceof Error ? error.message : String(error);
 438      throw new SecretOperationError(
 39        `Failed to get secret ${EnvironmentVariable.maskSecretPath(name)}: ${errorMessage}`,
 40      );
 41    }
 42  }
 43
 44  async setSecret(name: string, value: string): Promise<void> {
 445    const command = new PutParameterCommand({
 46      Name: name,
 47      Value: value,
 48      Type: 'SecureString',
 49      Overwrite: true,
 50    });
 451    await this.ssm.send(command);
 52  }
 53}