class OpenApiSDK::SDKHooks::Hooks

def after_error(error:, hook_ctx:, response:)

def after_error(error:, hook_ctx:, response:)
  @after_error_hooks.each do |hook|
    response = hook.after_error(error: error, hook_ctx: hook_ctx, response: response)
  end
  response
end

def after_success(hook_ctx:, response:)

def after_success(hook_ctx:, response:)
  @after_success_hooks.each do |hook|
    response = hook.after_success(hook_ctx: hook_ctx, response: response)
  end
  response
end

def before_request(hook_ctx:, request:)

def before_request(hook_ctx:, request:)
  @before_request_hooks.each do |hook|
    request = hook.before_request(hook_ctx: hook_ctx, request: request)
  end
  request
end

def initialize

def initialize
  @sdk_init_hooks = T.let([], T::Array[AbstractSDKInitHook])
  @before_request_hooks = T.let([], T::Array[AbstractBeforeRequestHook])
  @after_success_hooks = T.let([], T::Array[AbstractAfterSuccessHook])
  @after_error_hooks = T.let([], T::Array[AbstractAfterErrorHook])
  Registration.init_hooks self
end

def register_after_error_hook(hook)

def register_after_error_hook(hook)
  @after_error_hooks << hook
end

def register_after_success_hook(hook)

def register_after_success_hook(hook)
  @after_success_hooks << hook
end

def register_before_request_hook(hook)

def register_before_request_hook(hook)
  @before_request_hooks << hook
end

def register_sdk_init_hook(hook)

def register_sdk_init_hook(hook)
  @sdk_init_hooks << hook
end

def sdk_init(base_url:, client:)

def sdk_init(base_url:, client:)
  @sdk_init_hooks.each do |hook|
    base_url, client = hook.sdk_init(base_url: base_url, client: client)
  end
  return base_url, client
end