module OAuth2
module Strategy
class Base
def initialize: (OAuth2::Client) -> void
end

class AuthCode < Base
  def authorize_params: (?Hash[untyped, untyped]) -> Hash[untyped, untyped]
  def authorize_url: (?Hash[untyped, untyped]) -> String
  def get_token: (String, ?Hash[untyped, untyped], ?Hash[Symbol, untyped]) -> OAuth2::AccessToken
end

class Implicit < Base
  def authorize_params: (?Hash[untyped, untyped]) -> Hash[untyped, untyped]
  def authorize_url: (?Hash[untyped, untyped]) -> String
  def get_token: (*untyped) -> void
end

class Password < Base
  def authorize_url: () -> void
  def get_token: (String, String, ?Hash[untyped, untyped], ?Hash[Symbol, untyped]) -> OAuth2::AccessToken
end

class ClientCredentials < Base
  def authorize_url: () -> void
  def get_token: (?Hash[untyped, untyped], ?Hash[Symbol, untyped]) -> OAuth2::AccessToken
end

class Assertion < Base
  def authorize_url: () -> void
  def get_token: (Hash[untyped, untyped], Hash[Symbol, untyped], ?Hash[Symbol, untyped], ?Hash[Symbol, untyped]) -> OAuth2::AccessToken
end   end end