lib/ittybit.rb



# frozen_string_literal: true

require_relative "environment"
require_relative "types_export"
require_relative "requests"
require_relative "ittybit/automations/client"
require_relative "ittybit/files/client"
require_relative "ittybit/media/client"
require_relative "ittybit/tasks/client"
require_relative "ittybit/signatures/client"

module Ittybit
  class Client
    # @return [Ittybit::AutomationsClient]
    attr_reader :automations
    # @return [Ittybit::FilesClient]
    attr_reader :files
    # @return [Ittybit::MediaClient]
    attr_reader :media
    # @return [Ittybit::TasksClient]
    attr_reader :tasks
    # @return [Ittybit::SignaturesClient]
    attr_reader :signatures

    # @param base_url [String]
    # @param environment [Ittybit::Environment]
    # @param max_retries [Long] The number of times to retry a failed request, defaults to 2.
    # @param timeout_in_seconds [Long]
    # @param token [String]
    # @param version [String]
    # @return [Ittybit::Client]
    def initialize(token:, base_url: nil, environment: Ittybit::Environment::DEFAULT, max_retries: nil,
                   timeout_in_seconds: nil, version: nil)
      @request_client = Ittybit::RequestClient.new(
        base_url: base_url,
        environment: environment,
        max_retries: max_retries,
        timeout_in_seconds: timeout_in_seconds,
        token: token,
        version: version
      )
      @automations = Ittybit::AutomationsClient.new(request_client: @request_client)
      @files = Ittybit::FilesClient.new(request_client: @request_client)
      @media = Ittybit::MediaClient.new(request_client: @request_client)
      @tasks = Ittybit::TasksClient.new(request_client: @request_client)
      @signatures = Ittybit::SignaturesClient.new(request_client: @request_client)
    end
  end

  class AsyncClient
    # @return [Ittybit::AsyncAutomationsClient]
    attr_reader :automations
    # @return [Ittybit::AsyncFilesClient]
    attr_reader :files
    # @return [Ittybit::AsyncMediaClient]
    attr_reader :media
    # @return [Ittybit::AsyncTasksClient]
    attr_reader :tasks
    # @return [Ittybit::AsyncSignaturesClient]
    attr_reader :signatures

    # @param base_url [String]
    # @param environment [Ittybit::Environment]
    # @param max_retries [Long] The number of times to retry a failed request, defaults to 2.
    # @param timeout_in_seconds [Long]
    # @param token [String]
    # @param version [String]
    # @return [Ittybit::AsyncClient]
    def initialize(token:, base_url: nil, environment: Ittybit::Environment::DEFAULT, max_retries: nil,
                   timeout_in_seconds: nil, version: nil)
      @async_request_client = Ittybit::AsyncRequestClient.new(
        base_url: base_url,
        environment: environment,
        max_retries: max_retries,
        timeout_in_seconds: timeout_in_seconds,
        token: token,
        version: version
      )
      @automations = Ittybit::AsyncAutomationsClient.new(request_client: @async_request_client)
      @files = Ittybit::AsyncFilesClient.new(request_client: @async_request_client)
      @media = Ittybit::AsyncMediaClient.new(request_client: @async_request_client)
      @tasks = Ittybit::AsyncTasksClient.new(request_client: @async_request_client)
      @signatures = Ittybit::AsyncSignaturesClient.new(request_client: @async_request_client)
    end
  end
end