import boto3 from anydi import Module, provider from app.adapters.auth0 import Auth0Client from app.adapters.aws.secrets_manager import SecretsManager from app.config import Settings from app.handlers import RefreshM2MTokenHandler class RootModule(Module): @provider(scope="singleton") def aws_session(self, settings: Settings) -> boto3.Session: return boto3.Session(region_name=settings.aws_region_name) @provider(scope="singleton") def secrets_manager( self, session: boto3.Session, settings: Settings ) -> SecretsManager: return SecretsManager(session=session, region_name=settings.aws_region_name) @provider(scope="singleton") def auth0_client( self, settings: Settings, secrets_manager: SecretsManager ) -> Auth0Client: auth0_m2m_client_secret = secrets_manager.get_secret( secret_name=settings.auth0_m2m_client_secret_secret_name ) return Auth0Client( domain=settings.auth0_domain, audience=settings.auth0_audience, client_id=settings.auth0_m2m_client_id, client_secret=auth0_m2m_client_secret, ) @provider(scope="singleton") def refresh_m2m_token_handler( self, auth0_client: Auth0Client, secrets_manager: SecretsManager, settings: Settings, ) -> RefreshM2MTokenHandler: return RefreshM2MTokenHandler( auth0_client=auth0_client, secrets_manager=secrets_manager, m2m_token_secret_name=settings.m2m_token_secret_name, m2m_token_expiration_secret_name=settings.m2m_token_expiration_secret_name, )