class RubyLLM::Providers::Bedrock::Signing::SignerInitializer

Handles initialization of Signer dependencies

def self.create_components(options = {})

def self.create_components(options = {})
  service, region, credentials_provider = extract_core_components(options)
  unsigned_headers = SignerOptionExtractor.initialize_unsigned_headers(options)
  config_options = extract_config_options(options)
  components = {
    service: service,
    region: region,
    credentials_provider: credentials_provider,
    unsigned_headers: unsigned_headers
  }.merge(config_options)
  create_service_components(components)
end

def self.create_header_builder(components)

def self.create_header_builder(components)
  HeaderBuilder.new(
    signing_algorithm: components[:signing_algorithm],
    apply_checksum_header: components[:apply_checksum_header],
    omit_session_token: components[:omit_session_token],
    region: components[:region]
  )
end

def self.create_service_components(components)

def self.create_service_components(components)
  signature_generator = create_signature_generator(components)
  header_builder = create_header_builder(components)
  credential_manager = CredentialManager.new(components[:credentials_provider])
  components.merge(
    signature_generator: signature_generator,
    header_builder: header_builder,
    credential_manager: credential_manager
  )
end

def self.create_signature_generator(components)

def self.create_signature_generator(components)
  SignatureGenerator.new(
    signing_algorithm: components[:signing_algorithm],
    uri_escape_path: components[:uri_escape_path],
    unsigned_headers: components[:unsigned_headers],
    service: components[:service],
    region: components[:region]
  )
end

def self.extract_config_options(options)

def self.extract_config_options(options)
  {
    uri_escape_path: options.fetch(:uri_escape_path, true),
    apply_checksum_header: options.fetch(:apply_checksum_header, true),
    normalize_path: options.fetch(:normalize_path, true),
    omit_session_token: options.fetch(:omit_session_token, false)
  }
end

def self.extract_core_components(options)

def self.extract_core_components(options)
  service = SignerOptionExtractor.extract_service(options)
  region = SignerOptionExtractor.extract_region(options)
  credentials_provider = SignerOptionExtractor.extract_credentials_provider(options)
  [service, region, credentials_provider]
end