import json import boto3 from fansifter_common.utils.functional import lazy_proxy from pydantic import SecretStr, TypeAdapter from resonance_engine.config import settings _client = lazy_proxy( lambda: boto3.client( "secretsmanager", region_name=settings.aws_region_name, ), ) _SecretStrListAdapter = TypeAdapter(list[SecretStr]) def get_encryption_keys() -> list[SecretStr]: response = _client.get_secret_value(SecretId=settings.encryption_keys_secret_name) return _SecretStrListAdapter.validate_json(response["SecretString"]) def put_encryption_keys(keys: list[SecretStr]) -> None: _client.put_secret_value( SecretId=settings.encryption_keys_secret_name, SecretString=json.dumps([k.get_secret_value() for k in keys]), ) def get_secret(name: str) -> SecretStr: response = _client.get_secret_value(SecretId=name) return SecretStr(response["SecretString"]) def get_secret_or_default(secret_name: str | None, *, default: SecretStr) -> SecretStr: if secret_name: return get_secret(secret_name) return default