Class: KapsoClientRuby::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/kapso_client_ruby/client.rb

Constant Summary collapse

DEFAULT_BASE_URL =
'https://graph.facebook.com'
DEFAULT_GRAPH_VERSION =
'v24.0'
KAPSO_PROXY_PATTERN =
/kapso\.ai/

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(access_token: nil, kapso_api_key: nil, base_url: nil, graph_version: nil, logger: nil, debug: nil, timeout: nil, open_timeout: nil, max_retries: nil, retry_delay: nil) ⇒ Client

Returns a new instance of Client.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/kapso_client_ruby/client.rb', line 17

def initialize(access_token: nil, kapso_api_key: nil, base_url: nil, 
               graph_version: nil, logger: nil, debug: nil, timeout: nil, 
               open_timeout: nil, max_retries: nil, retry_delay: nil)
  
  # Validation

  unless access_token || kapso_api_key
    raise Errors::ConfigurationError, 'Must provide either access_token or kapso_api_key'
  end

  @access_token = access_token
  @kapso_api_key = kapso_api_key
  @base_url = normalize_base_url(base_url || DEFAULT_BASE_URL)
  @graph_version = graph_version || DEFAULT_GRAPH_VERSION
  @kapso_proxy = detect_kapso_proxy(@base_url)
  
  # Configuration with defaults

  config = KapsoClientRuby.configuration
  @logger = logger || KapsoClientRuby.logger
  @debug = debug.nil? ? config.debug : debug
  @timeout = timeout || config.timeout
  @open_timeout = open_timeout || config.open_timeout
  @max_retries = max_retries || config.max_retries
  @retry_delay = retry_delay || config.retry_delay

  # Initialize HTTP client

  @http_client = build_http_client

  # Initialize resource endpoints

  @messages = nil
  @media = nil
  @templates = nil
  @phone_numbers = nil
  @calls = nil
  @conversations = nil
  @contacts = nil
  @flows = nil
end

Instance Attribute Details

#access_tokenObject (readonly)

Returns the value of attribute access_token.



14
15
16
# File 'lib/kapso_client_ruby/client.rb', line 14

def access_token
  @access_token
end

#base_urlObject (readonly)

Returns the value of attribute base_url.



14
15
16
# File 'lib/kapso_client_ruby/client.rb', line 14

def base_url
  @base_url
end

#debugObject (readonly)

Returns the value of attribute debug.



14
15
16
# File 'lib/kapso_client_ruby/client.rb', line 14

def debug
  @debug
end

#graph_versionObject (readonly)

Returns the value of attribute graph_version.



14
15
16
# File 'lib/kapso_client_ruby/client.rb', line 14

def graph_version
  @graph_version
end

#kapso_api_keyObject (readonly)

Returns the value of attribute kapso_api_key.



14
15
16
# File 'lib/kapso_client_ruby/client.rb', line 14

def kapso_api_key
  @kapso_api_key
end

#loggerObject (readonly)

Returns the value of attribute logger.



14
15
16
# File 'lib/kapso_client_ruby/client.rb', line 14

def logger
  @logger
end

#max_retriesObject (readonly)

Returns the value of attribute max_retries.



14
15
16
# File 'lib/kapso_client_ruby/client.rb', line 14

def max_retries
  @max_retries
end

#open_timeoutObject (readonly)

Returns the value of attribute open_timeout.



14
15
16
# File 'lib/kapso_client_ruby/client.rb', line 14

def open_timeout
  @open_timeout
end

#retry_delayObject (readonly)

Returns the value of attribute retry_delay.



14
15
16
# File 'lib/kapso_client_ruby/client.rb', line 14

def retry_delay
  @retry_delay
end

#timeoutObject (readonly)

Returns the value of attribute timeout.



14
15
16
# File 'lib/kapso_client_ruby/client.rb', line 14

def timeout
  @timeout
end

Instance Method Details

#callsObject



72
73
74
# File 'lib/kapso_client_ruby/client.rb', line 72

def calls
  @calls ||= Resources::Calls.new(self)
end

#contactsObject



80
81
82
# File 'lib/kapso_client_ruby/client.rb', line 80

def contacts
  @contacts ||= Resources::Contacts.new(self)
end

#conversationsObject



76
77
78
# File 'lib/kapso_client_ruby/client.rb', line 76

def conversations
  @conversations ||= Resources::Conversations.new(self)
end

#fetch(url, options = {}) ⇒ Object

Fetch with automatic auth headers (for absolute URLs)



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/kapso_client_ruby/client.rb', line 144

def fetch(url, options = {})
  headers = build_headers(options[:headers] || {})
  method = options[:method] || 'GET'
  
  log_request(method, url, headers, options[:body]) if debug
  
  response = @http_client.run_request(method.downcase.to_sym, url, options[:body], headers)
  
  log_response(response) if debug
  
  if response.success?
    response
  else
    handle_error_response(response)
  end
end

#flowsObject



84
85
86
# File 'lib/kapso_client_ruby/client.rb', line 84

def flows
  @flows ||= Resources::Flows.new(self)
end

#kapso_proxy?Boolean

Returns:



88
89
90
# File 'lib/kapso_client_ruby/client.rb', line 88

def kapso_proxy?
  @kapso_proxy
end

#mediaObject



60
61
62
# File 'lib/kapso_client_ruby/client.rb', line 60

def media
  @media ||= Resources::Media.new(self)
end

#messagesObject

Resource accessors with lazy initialization



56
57
58
# File 'lib/kapso_client_ruby/client.rb', line 56

def messages
  @messages ||= Resources::Messages.new(self)
end

#phone_numbersObject



68
69
70
# File 'lib/kapso_client_ruby/client.rb', line 68

def phone_numbers
  @phone_numbers ||= Resources::PhoneNumbers.new(self)
end

#raw_request(method, url, options = {}) ⇒ Object

Raw HTTP method without automatic error handling (for media downloads, etc.)



131
132
133
134
135
136
137
138
139
140
141
# File 'lib/kapso_client_ruby/client.rb', line 131

def raw_request(method, url, options = {})
  headers = build_headers(options[:headers] || {})
  
  log_request(method, url, headers, options[:body]) if debug
  
  response = @http_client.run_request(method.to_sym, url, options[:body], headers)
  
  log_response(response) if debug
  
  response
end

#request(method, path, options = {}) ⇒ Object

Main request method with retry logic and error handling



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/kapso_client_ruby/client.rb', line 93

def request(method, path, options = {})
  method = method.to_s.upcase
  body = options[:body]
  query = options[:query]
  custom_headers = options[:headers] || {}
  response_type = options[:response_type] || :auto

  url = build_url(path, query)
  headers = build_headers(custom_headers)
  
  # Log request if debugging

  log_request(method, url, headers, body) if debug

  retries = 0
  begin
    response = @http_client.run_request(method.downcase.to_sym, url, body, headers)
    
    # Log response if debugging

    log_response(response) if debug

    # Handle response based on type requested

    handle_response(response, response_type)
  rescue Faraday::Error => e
    retries += 1
    if retries <= max_retries && retryable_error?(e)
      sleep(retry_delay * retries)
      retry
    else
      raise Errors::GraphApiError.new(
        message: "Network error: #{e.message}",
        http_status: 0,
        category: :server
      )
    end
  end
end

#templatesObject



64
65
66
# File 'lib/kapso_client_ruby/client.rb', line 64

def templates
  @templates ||= Resources::Templates.new(self)
end