Class: SimpleConnect::MessagesClient

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_connect/messages_client.rb

Overview

Entry point for the account Message API. Assembles the Bearer-auth transport once, then exposes a single resource object:

MSG = SimpleConnect::MessagesClient.new(base_url:, api_key:)
MSG.messages.deliver(template_name:, recipients:, ...)

Distinct from SimpleConnect::Client (which signs Events over HMAC): a caller holding only an account api_key — with no integration — uses this. See docs/adr/0001-messages-use-separate-bearer-client.md.

Constant Summary collapse

DEFAULT_TIMEOUT =
10

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_url:, api_key:, timeout: DEFAULT_TIMEOUT, logger: nil, max_attempts: nil, retryable: nil, user_agent: nil) ⇒ MessagesClient

Returns a new instance of MessagesClient.

Parameters:

  • base_url (String)

    the app host, e.g. “app.simplewaconnect.com”. The fixed message path is appended by the resource.

  • api_key (String)

    account API key (‘sk_live_…`) sent as a Bearer token.

  • timeout (Integer) (defaults to: DEFAULT_TIMEOUT)

    HTTP read/open timeout in seconds.

  • logger (#info, #warn, nil) (defaults to: nil)

    optional logger for transport events.

  • max_attempts (Integer) (defaults to: nil)

    total HTTP attempts (including the first). Default 3. Pass ‘1` to disable library retries. Mutually exclusive with `retryable:`.

  • retryable (SimpleConnect::Retryable, nil) (defaults to: nil)

    custom retry policy. Mutually exclusive with ‘max_attempts:`.

  • user_agent (String, nil) (defaults to: nil)

    override the default User-Agent header.

Raises:



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/simple_connect/messages_client.rb', line 31

def initialize(base_url:, api_key:,
               timeout: DEFAULT_TIMEOUT, logger: nil,
               max_attempts: nil, retryable: nil, user_agent: nil)
  raise ConfigurationError, "base_url is required" if base_url.to_s.strip.empty?
  raise ConfigurationError, "api_key is required"  if api_key.to_s.strip.empty?

  if max_attempts && retryable
    raise ConfigurationError,
          "pass either `max_attempts:` or `retryable:`, not both"
  end

  base_uri = URI.parse(base_url)
  request = Request.new(
    headers: BearerHeaders.new(api_key: api_key, user_agent: user_agent),
    timeout: timeout,
    logger: logger,
    retryable: retryable || Retryable.new(max_attempts: max_attempts || Retryable::DEFAULT_MAX_ATTEMPTS)
  )
  @messages = Api::Messages.new(request: request, base_uri: base_uri)
end

Instance Attribute Details

#messagesObject (readonly)

Returns the value of attribute messages.



16
17
18
# File 'lib/simple_connect/messages_client.rb', line 16

def messages
  @messages
end