Class: LcpSdk::Client
- Inherits:
-
Object
- Object
- LcpSdk::Client
- Defined in:
- lib/lcp_sdk.rb
Instance Method Summary collapse
- #get_capabilities ⇒ Object
-
#initialize(endpoint, sender_id: nil, api_key: nil, hmac_secret: nil, max_retries: 2) ⇒ Client
constructor
A new instance of Client.
- #list_offers(vertical = nil) ⇒ Object
- #query_lead_status(id) ⇒ Object
- #request(method, path, payload: nil, test: false) ⇒ Object
- #submit_bid(envelope, test: false) ⇒ Object
- #submit_call(envelope, test: false) ⇒ Object
- #submit_lead(envelope, test: false) ⇒ Object
Constructor Details
#initialize(endpoint, sender_id: nil, api_key: nil, hmac_secret: nil, max_retries: 2) ⇒ Client
Returns a new instance of Client.
66 67 68 |
# File 'lib/lcp_sdk.rb', line 66 def initialize(endpoint, sender_id: nil, api_key: nil, hmac_secret: nil, max_retries: 2) @endpoint = endpoint.delete_suffix("/"); @sender_id = sender_id; @api_key = api_key; @hmac_secret = hmac_secret; @max_retries = max_retries end |
Instance Method Details
#get_capabilities ⇒ Object
91 |
# File 'lib/lcp_sdk.rb', line 91 def get_capabilities; request("GET", "/v1/lcp/capabilities"); end |
#list_offers(vertical = nil) ⇒ Object
92 |
# File 'lib/lcp_sdk.rb', line 92 def list_offers(vertical = nil); request("GET", "/v1/lcp/offers#{vertical ? "?vertical=#{URI.encode_www_form_component(vertical)}" : ""}"); end |
#query_lead_status(id) ⇒ Object
90 |
# File 'lib/lcp_sdk.rb', line 90 def query_lead_status(id); request("GET", "/v1/lcp/leads/#{URI.encode_www_form_component(id)}"); end |
#request(method, path, payload: nil, test: false) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/lcp_sdk.rb', line 70 def request(method, path, payload: nil, test: false) body = payload.nil? ? "" : JSON.generate(payload) key = payload&.dig("lcp", "message", "idempotency_key") (0..@max_retries).each do |attempt| uri = URI.join("#{@endpoint}/", path.delete_prefix("/")); request = Net::HTTP.const_get(method.capitalize).new(uri) request["Content-Type"] = "application/json"; request["Accept"] = "application/json"; request["X-LCP-Sender-Id"] = @sender_id if @sender_id; request["Authorization"] = "Bearer #{@api_key}" if @api_key; request["X-LCP-Idempotency-Key"] = key if key; request["X-LCP-Test"] = "true" if test if @hmac_secret; = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ"); request["X-LCP-Timestamp"] = ; request["X-LCP-Signature"] = Signing.sign(@hmac_secret, , key, body); end request.body = body unless body.empty? response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") { |http| http.request(request) } data = response.body.nil? || response.body.empty? ? {} : JSON.parse(response.body) return data if response.is_a?(Net::HTTPSuccess) raise "LCP HTTP #{response.code}: #{data}" unless [429, 500, 502, 503, 504].include?(response.code.to_i) && attempt < @max_retries sleep(2**attempt) end raise "LCP request failed" end |
#submit_bid(envelope, test: false) ⇒ Object
89 |
# File 'lib/lcp_sdk.rb', line 89 def submit_bid(envelope, test: false); LcpSdk.validate_envelope(envelope); request("POST", "/v1/lcp/bids", payload: envelope, test: test); end |
#submit_call(envelope, test: false) ⇒ Object
88 |
# File 'lib/lcp_sdk.rb', line 88 def submit_call(envelope, test: false); LcpSdk.validate_envelope(envelope); request("POST", "/v1/lcp/calls", payload: envelope, test: test); end |
#submit_lead(envelope, test: false) ⇒ Object
87 |
# File 'lib/lcp_sdk.rb', line 87 def submit_lead(envelope, test: false); LcpSdk.validate_envelope(envelope); request("POST", "/v1/lcp/leads", payload: envelope, test: test); end |