"""AWS Secrets Manager client for fetching GitHub credentials.""" import boto3 class SecretsManagerClient: """Fetches GitHub credentials from AWS Secrets Manager.""" def __init__(self) -> None: """Initialize with a boto3 Secrets Manager client.""" self._client = boto3.client('secretsmanager') def get_github_token(self, secret_name: str) -> str: """Retrieve GitHub token from the given secret. :param secret_name: The name or ARN of the secret in AWS Secrets Manager. :return: The GitHub token string. :raises ValueError: If the secret contains neither SecretString nor SecretBinary. """ response = self._client.get_secret_value(SecretId=secret_name) if 'SecretString' in response: return response['SecretString'] if 'SecretBinary' in response: return response['SecretBinary'].decode('utf-8') raise ValueError( f'Secret {secret_name!r} contains neither SecretString nor SecretBinary' )