voltaria_sdk 2.34.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rubocop.yml +69 -0
- data/README.md +202 -0
- data/Rakefile +20 -0
- data/custom.gemspec.rb +16 -0
- data/lib/voltaria/accounts/client.rb +168 -0
- data/lib/voltaria/accounts/types/get_client_account_request.rb +12 -0
- data/lib/voltaria/accounts/types/list_client_account_fields_request.rb +11 -0
- data/lib/voltaria/accounts/types/list_client_accounts_request.rb +14 -0
- data/lib/voltaria/accounts/types/partner_client_account_create_request.rb +23 -0
- data/lib/voltaria/accounts/types/partner_client_account_create_request_status.rb +14 -0
- data/lib/voltaria/client.rb +74 -0
- data/lib/voltaria/clients/client.rb +557 -0
- data/lib/voltaria/clients/types/approve_onboarding_request.rb +11 -0
- data/lib/voltaria/clients/types/client_create_payload.rb +16 -0
- data/lib/voltaria/clients/types/client_data_create_payload.rb +12 -0
- data/lib/voltaria/clients/types/client_user_invite_request.rb +16 -0
- data/lib/voltaria/clients/types/delete_client_request.rb +11 -0
- data/lib/voltaria/clients/types/get_client_by_id_request.rb +11 -0
- data/lib/voltaria/clients/types/get_limit_request_request.rb +11 -0
- data/lib/voltaria/clients/types/limit_request_create_payload.rb +14 -0
- data/lib/voltaria/clients/types/limit_request_create_payload_requested_limit.rb +15 -0
- data/lib/voltaria/clients/types/list_client_checklist_summaries_request.rb +13 -0
- data/lib/voltaria/clients/types/list_client_waivers_request.rb +15 -0
- data/lib/voltaria/clients/types/list_clients_request.rb +14 -0
- data/lib/voltaria/clients/types/list_limit_requests_request.rb +15 -0
- data/lib/voltaria/clients/types/list_onboarding_clients_request.rb +12 -0
- data/lib/voltaria/clients/types/reject_onboarding_request.rb +11 -0
- data/lib/voltaria/documents/client.rb +221 -0
- data/lib/voltaria/documents/types/delete_document_request.rb +11 -0
- data/lib/voltaria/documents/types/document_create_payload.rb +14 -0
- data/lib/voltaria/documents/types/get_document_by_id_request.rb +11 -0
- data/lib/voltaria/documents/types/list_documents_request.rb +18 -0
- data/lib/voltaria/drawdowns/client.rb +141 -0
- data/lib/voltaria/drawdowns/types/drawdown_create_payload.rb +12 -0
- data/lib/voltaria/drawdowns/types/drawdown_create_payload_amount.rb +15 -0
- data/lib/voltaria/drawdowns/types/list_drawdown_checklists_request.rb +15 -0
- data/lib/voltaria/drawdowns/types/list_drawdowns_request.rb +14 -0
- data/lib/voltaria/environment.rb +8 -0
- data/lib/voltaria/errors/api_error.rb +8 -0
- data/lib/voltaria/errors/client_error.rb +17 -0
- data/lib/voltaria/errors/redirect_error.rb +8 -0
- data/lib/voltaria/errors/response_error.rb +42 -0
- data/lib/voltaria/errors/server_error.rb +11 -0
- data/lib/voltaria/errors/timeout_error.rb +8 -0
- data/lib/voltaria/installments/client.rb +292 -0
- data/lib/voltaria/installments/types/delete_installment_request.rb +11 -0
- data/lib/voltaria/installments/types/get_installment_by_id_request.rb +11 -0
- data/lib/voltaria/installments/types/installment_create_payload.rb +12 -0
- data/lib/voltaria/installments/types/installment_edit_payload.rb +13 -0
- data/lib/voltaria/installments/types/installment_edit_payload_amount.rb +15 -0
- data/lib/voltaria/installments/types/list_installments_request.rb +16 -0
- data/lib/voltaria/installments/types/list_payment_promises_request.rb +16 -0
- data/lib/voltaria/installments/types/payment_promise_create_payload.rb +14 -0
- data/lib/voltaria/installments/types/payment_promise_create_payload_amount.rb +15 -0
- data/lib/voltaria/internal/errors/constraint_error.rb +10 -0
- data/lib/voltaria/internal/errors/type_error.rb +10 -0
- data/lib/voltaria/internal/http/base_request.rb +51 -0
- data/lib/voltaria/internal/http/raw_client.rb +214 -0
- data/lib/voltaria/internal/iterators/cursor_item_iterator.rb +28 -0
- data/lib/voltaria/internal/iterators/cursor_page_iterator.rb +51 -0
- data/lib/voltaria/internal/iterators/item_iterator.rb +59 -0
- data/lib/voltaria/internal/iterators/offset_item_iterator.rb +30 -0
- data/lib/voltaria/internal/iterators/offset_page_iterator.rb +83 -0
- data/lib/voltaria/internal/json/request.rb +41 -0
- data/lib/voltaria/internal/json/serializable.rb +25 -0
- data/lib/voltaria/internal/multipart/multipart_encoder.rb +141 -0
- data/lib/voltaria/internal/multipart/multipart_form_data.rb +78 -0
- data/lib/voltaria/internal/multipart/multipart_form_data_part.rb +51 -0
- data/lib/voltaria/internal/multipart/multipart_request.rb +40 -0
- data/lib/voltaria/internal/types/array.rb +47 -0
- data/lib/voltaria/internal/types/boolean.rb +34 -0
- data/lib/voltaria/internal/types/enum.rb +56 -0
- data/lib/voltaria/internal/types/hash.rb +36 -0
- data/lib/voltaria/internal/types/model/field.rb +38 -0
- data/lib/voltaria/internal/types/model.rb +208 -0
- data/lib/voltaria/internal/types/type.rb +35 -0
- data/lib/voltaria/internal/types/union.rb +161 -0
- data/lib/voltaria/internal/types/unknown.rb +15 -0
- data/lib/voltaria/internal/types/utils.rb +116 -0
- data/lib/voltaria/investors/client.rb +312 -0
- data/lib/voltaria/investors/types/investor_get_client_request.rb +11 -0
- data/lib/voltaria/investors/types/investor_get_installment_request.rb +11 -0
- data/lib/voltaria/investors/types/investor_get_loan_request.rb +11 -0
- data/lib/voltaria/investors/types/investor_list_clients_request.rb +14 -0
- data/lib/voltaria/investors/types/investor_list_installments_request.rb +16 -0
- data/lib/voltaria/investors/types/investor_list_loans_request.rb +15 -0
- data/lib/voltaria/investors/types/investor_list_repayments_request.rb +17 -0
- data/lib/voltaria/loans/client.rb +271 -0
- data/lib/voltaria/loans/types/bulk_loan_create_payload.rb +11 -0
- data/lib/voltaria/loans/types/delete_loan_request.rb +11 -0
- data/lib/voltaria/loans/types/get_bulk_loan_status_request.rb +11 -0
- data/lib/voltaria/loans/types/get_loan_by_id_request.rb +11 -0
- data/lib/voltaria/loans/types/list_loans_request.rb +15 -0
- data/lib/voltaria/loans/types/loan_create_payload.rb +17 -0
- data/lib/voltaria/loans/types/loan_create_payload_amount.rb +15 -0
- data/lib/voltaria/loans/types/loan_default_payload.rb +13 -0
- data/lib/voltaria/loans/types/loan_default_payload_sold_amount.rb +15 -0
- data/lib/voltaria/partners/client.rb +129 -0
- data/lib/voltaria/partners/types/list_partner_waterfalls_request.rb +14 -0
- data/lib/voltaria/partners/types/partner_data_create_payload.rb +11 -0
- data/lib/voltaria/prefix_routing.rb +80 -0
- data/lib/voltaria/repayments/client.rb +183 -0
- data/lib/voltaria/repayments/types/bulk_repayment_create_payload.rb +11 -0
- data/lib/voltaria/repayments/types/get_bulk_repayment_status_request.rb +11 -0
- data/lib/voltaria/repayments/types/list_repayment_logs_request.rb +17 -0
- data/lib/voltaria/repayments/types/repayment_create_payload.rb +17 -0
- data/lib/voltaria/repayments/types/repayment_create_payload_amount.rb +15 -0
- data/lib/voltaria/sandbox/client.rb +124 -0
- data/lib/voltaria/sandbox/types/client_update_sandbox.rb +13 -0
- data/lib/voltaria/sandbox/types/client_update_sandbox_limit.rb +15 -0
- data/lib/voltaria/sandbox/types/loan_update_sandbox.rb +12 -0
- data/lib/voltaria/sandbox/types/webhook_test_sandbox.rb +12 -0
- data/lib/voltaria/types/account_address.rb +14 -0
- data/lib/voltaria/types/account_holder_type_enum.rb +12 -0
- data/lib/voltaria/types/account_status_enum.rb +13 -0
- data/lib/voltaria/types/available_document_categories_response.rb +9 -0
- data/lib/voltaria/types/available_funding.rb +15 -0
- data/lib/voltaria/types/bulk_loan_item_payload.rb +15 -0
- data/lib/voltaria/types/bulk_loan_item_payload_amount.rb +13 -0
- data/lib/voltaria/types/bulk_loan_item_result.rb +15 -0
- data/lib/voltaria/types/bulk_loan_result.rb +13 -0
- data/lib/voltaria/types/bulk_loan_task_response.rb +11 -0
- data/lib/voltaria/types/bulk_loan_task_status.rb +14 -0
- data/lib/voltaria/types/bulk_repayment_item_payload.rb +15 -0
- data/lib/voltaria/types/bulk_repayment_item_payload_amount.rb +13 -0
- data/lib/voltaria/types/bulk_repayment_item_result.rb +15 -0
- data/lib/voltaria/types/bulk_repayment_result.rb +13 -0
- data/lib/voltaria/types/bulk_repayment_task_response.rb +11 -0
- data/lib/voltaria/types/bulk_repayment_task_status.rb +14 -0
- data/lib/voltaria/types/checklist_summary_partner_response.rb +14 -0
- data/lib/voltaria/types/checklist_type_enum.rb +12 -0
- data/lib/voltaria/types/client_account_response.rb +21 -0
- data/lib/voltaria/types/client_base_info.rb +13 -0
- data/lib/voltaria/types/client_data_response.rb +12 -0
- data/lib/voltaria/types/client_investor_response.rb +17 -0
- data/lib/voltaria/types/client_limit_response.rb +16 -0
- data/lib/voltaria/types/client_response.rb +19 -0
- data/lib/voltaria/types/client_status_enum.rb +18 -0
- data/lib/voltaria/types/client_type_enum.rb +12 -0
- data/lib/voltaria/types/client_user_response.rb +24 -0
- data/lib/voltaria/types/client_user_status_enum.rb +13 -0
- data/lib/voltaria/types/currency_enum.rb +16 -0
- data/lib/voltaria/types/currency_field_spec.rb +10 -0
- data/lib/voltaria/types/document_response.rb +20 -0
- data/lib/voltaria/types/drawdown_checklist_response.rb +16 -0
- data/lib/voltaria/types/drawdown_response.rb +15 -0
- data/lib/voltaria/types/drawdown_status_enum.rb +13 -0
- data/lib/voltaria/types/http_validation_error.rb +9 -0
- data/lib/voltaria/types/installment_response.rb +24 -0
- data/lib/voltaria/types/installment_response_with_client_info.rb +25 -0
- data/lib/voltaria/types/installment_status_enum.rb +19 -0
- data/lib/voltaria/types/jurisdiction_enum.rb +13 -0
- data/lib/voltaria/types/kyc_status_enum.rb +14 -0
- data/lib/voltaria/types/limit_request_response.rb +16 -0
- data/lib/voltaria/types/limit_request_status_enum.rb +13 -0
- data/lib/voltaria/types/loan_installment_create_payload.rb +10 -0
- data/lib/voltaria/types/loan_installment_create_payload_amount.rb +13 -0
- data/lib/voltaria/types/loan_installment_response.rb +15 -0
- data/lib/voltaria/types/loan_investor_response.rb +27 -0
- data/lib/voltaria/types/loan_payment_status_enum.rb +12 -0
- data/lib/voltaria/types/loan_response_with_client_info.rb +26 -0
- data/lib/voltaria/types/loan_response_with_installments.rb +26 -0
- data/lib/voltaria/types/loan_status_enum.rb +21 -0
- data/lib/voltaria/types/paginated_response_checklist_summary_partner_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_client_account_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_client_investor_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_client_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_document_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_drawdown_checklist_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_drawdown_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_installment_response_with_client_info.rb +16 -0
- data/lib/voltaria/types/paginated_response_limit_request_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_loan_investor_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_loan_response_with_client_info.rb +16 -0
- data/lib/voltaria/types/paginated_response_payment_promise_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_repayment_response_with_client_info.rb +16 -0
- data/lib/voltaria/types/paginated_response_waiver_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_waterfall_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_webhook_log_response.rb +16 -0
- data/lib/voltaria/types/paginated_response_webhook_subscription_response.rb +16 -0
- data/lib/voltaria/types/partner_data_response.rb +11 -0
- data/lib/voltaria/types/payment_promise_response.rb +19 -0
- data/lib/voltaria/types/payment_promise_status_enum.rb +14 -0
- data/lib/voltaria/types/repayment_response.rb +21 -0
- data/lib/voltaria/types/repayment_response_with_client_info.rb +22 -0
- data/lib/voltaria/types/role_response.rb +11 -0
- data/lib/voltaria/types/validation_error.rb +13 -0
- data/lib/voltaria/types/validation_error_loc_item.rb +12 -0
- data/lib/voltaria/types/waiver_response.rb +18 -0
- data/lib/voltaria/types/waiver_status_enum.rb +14 -0
- data/lib/voltaria/types/waterfall_response.rb +19 -0
- data/lib/voltaria/types/waterfall_status_enum.rb +12 -0
- data/lib/voltaria/types/webhook_event_type_enum.rb +15 -0
- data/lib/voltaria/types/webhook_log_response.rb +19 -0
- data/lib/voltaria/types/webhook_log_response_request_body.rb +13 -0
- data/lib/voltaria/types/webhook_status_enum.rb +13 -0
- data/lib/voltaria/types/webhook_subscription_response.rb +17 -0
- data/lib/voltaria/version.rb +5 -0
- data/lib/voltaria/webhooks/client.rb +241 -0
- data/lib/voltaria/webhooks/types/delete_webhook_subscription_request.rb +11 -0
- data/lib/voltaria/webhooks/types/get_webhook_subscription_request.rb +11 -0
- data/lib/voltaria/webhooks/types/list_webhook_logs_request.rb +13 -0
- data/lib/voltaria/webhooks/types/list_webhook_subscriptions_request.rb +13 -0
- data/lib/voltaria/webhooks/types/webhook_create_payload.rb +16 -0
- data/lib/voltaria/webhooks/types/webhook_update_payload.rb +17 -0
- data/lib/voltaria.rb +205 -0
- data/reference.md +5135 -0
- metadata +250 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Investors
|
|
5
|
+
module Types
|
|
6
|
+
class InvestorListRepaymentsRequest < Internal::Types::Model
|
|
7
|
+
field :client_id, -> { String }, optional: true, nullable: false
|
|
8
|
+
field :loan_id, -> { String }, optional: true, nullable: false
|
|
9
|
+
field :installment_id, -> { String }, optional: true, nullable: false
|
|
10
|
+
field :page, -> { Integer }, optional: true, nullable: false
|
|
11
|
+
field :page_size, -> { Integer }, optional: true, nullable: false
|
|
12
|
+
field :order_by, -> { String }, optional: true, nullable: false
|
|
13
|
+
field :q, -> { String }, optional: true, nullable: false
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Loans
|
|
5
|
+
class Client
|
|
6
|
+
# @param client [Voltaria::Internal::Http::RawClient]
|
|
7
|
+
#
|
|
8
|
+
# @return [void]
|
|
9
|
+
def initialize(client:)
|
|
10
|
+
@client = client
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Retrieve all loans associated with your partner account. Supports optional filtering by client ID.
|
|
14
|
+
#
|
|
15
|
+
# @param request_options [Hash]
|
|
16
|
+
# @param params [Hash]
|
|
17
|
+
# @option request_options [String] :base_url
|
|
18
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
19
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
20
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
21
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
22
|
+
# @option params [Integer, nil] :page
|
|
23
|
+
# @option params [Integer, nil] :page_size
|
|
24
|
+
# @option params [String, nil] :client_id
|
|
25
|
+
# @option params [String, nil] :order_by
|
|
26
|
+
# @option params [String, nil] :q
|
|
27
|
+
#
|
|
28
|
+
# @return [Voltaria::Types::PaginatedResponseLoanResponseWithClientInfo]
|
|
29
|
+
def list_loans(request_options: {}, **params)
|
|
30
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
31
|
+
query_param_names = %i[page page_size client_id order_by q]
|
|
32
|
+
query_params = {}
|
|
33
|
+
query_params["page"] = params[:page] if params.key?(:page)
|
|
34
|
+
query_params["page_size"] = params[:page_size] if params.key?(:page_size)
|
|
35
|
+
query_params["client_id"] = params[:client_id] if params.key?(:client_id)
|
|
36
|
+
query_params["order_by"] = params[:order_by] if params.key?(:order_by)
|
|
37
|
+
query_params["q"] = params[:q] if params.key?(:q)
|
|
38
|
+
params.except(*query_param_names)
|
|
39
|
+
|
|
40
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
41
|
+
base_url: request_options[:base_url],
|
|
42
|
+
method: "GET",
|
|
43
|
+
path: "v2/loans",
|
|
44
|
+
query: query_params,
|
|
45
|
+
request_options: request_options
|
|
46
|
+
)
|
|
47
|
+
begin
|
|
48
|
+
response = @client.send(request)
|
|
49
|
+
rescue Net::HTTPRequestTimeout
|
|
50
|
+
raise Voltaria::Errors::TimeoutError
|
|
51
|
+
end
|
|
52
|
+
code = response.code.to_i
|
|
53
|
+
if code.between?(200, 299)
|
|
54
|
+
Voltaria::Types::PaginatedResponseLoanResponseWithClientInfo.load(response.body)
|
|
55
|
+
else
|
|
56
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
57
|
+
raise error_class.new(response.body, code: code)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Create a new loan for an approved client with an active credit limit.
|
|
62
|
+
#
|
|
63
|
+
# @param request_options [Hash]
|
|
64
|
+
# @param params [Voltaria::Loans::Types::LoanCreatePayload]
|
|
65
|
+
# @option request_options [String] :base_url
|
|
66
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
67
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
68
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
69
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
70
|
+
#
|
|
71
|
+
# @return [Voltaria::Types::LoanResponseWithInstallments]
|
|
72
|
+
def create_loan(request_options: {}, **params)
|
|
73
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
74
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
75
|
+
base_url: request_options[:base_url],
|
|
76
|
+
method: "POST",
|
|
77
|
+
path: "v2/loans",
|
|
78
|
+
body: Voltaria::Loans::Types::LoanCreatePayload.new(params).to_h,
|
|
79
|
+
request_options: request_options
|
|
80
|
+
)
|
|
81
|
+
begin
|
|
82
|
+
response = @client.send(request)
|
|
83
|
+
rescue Net::HTTPRequestTimeout
|
|
84
|
+
raise Voltaria::Errors::TimeoutError
|
|
85
|
+
end
|
|
86
|
+
code = response.code.to_i
|
|
87
|
+
if code.between?(200, 299)
|
|
88
|
+
Voltaria::Types::LoanResponseWithInstallments.load(response.body)
|
|
89
|
+
else
|
|
90
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
91
|
+
raise error_class.new(response.body, code: code)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Retrieve detailed information about a specific loan by its loan ID.
|
|
96
|
+
#
|
|
97
|
+
# @param request_options [Hash]
|
|
98
|
+
# @param params [Hash]
|
|
99
|
+
# @option request_options [String] :base_url
|
|
100
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
101
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
102
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
103
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
104
|
+
# @option params [String] :loan_id
|
|
105
|
+
#
|
|
106
|
+
# @return [Voltaria::Types::LoanResponseWithInstallments]
|
|
107
|
+
def get_loan_by_id(request_options: {}, **params)
|
|
108
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
109
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
110
|
+
base_url: request_options[:base_url],
|
|
111
|
+
method: "GET",
|
|
112
|
+
path: "v2/loans/#{URI.encode_uri_component(params[:loan_id].to_s)}",
|
|
113
|
+
request_options: request_options
|
|
114
|
+
)
|
|
115
|
+
begin
|
|
116
|
+
response = @client.send(request)
|
|
117
|
+
rescue Net::HTTPRequestTimeout
|
|
118
|
+
raise Voltaria::Errors::TimeoutError
|
|
119
|
+
end
|
|
120
|
+
code = response.code.to_i
|
|
121
|
+
if code.between?(200, 299)
|
|
122
|
+
Voltaria::Types::LoanResponseWithInstallments.load(response.body)
|
|
123
|
+
else
|
|
124
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
125
|
+
raise error_class.new(response.body, code: code)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Delete a loan by ID. Only loans with 'pending' status can be deleted.
|
|
130
|
+
#
|
|
131
|
+
# @param request_options [Hash]
|
|
132
|
+
# @param params [Hash]
|
|
133
|
+
# @option request_options [String] :base_url
|
|
134
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
135
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
136
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
137
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
138
|
+
# @option params [String] :loan_id
|
|
139
|
+
#
|
|
140
|
+
# @return [Hash[String, Object], nil]
|
|
141
|
+
def delete_loan(request_options: {}, **params)
|
|
142
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
143
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
144
|
+
base_url: request_options[:base_url],
|
|
145
|
+
method: "DELETE",
|
|
146
|
+
path: "v2/loans/#{URI.encode_uri_component(params[:loan_id].to_s)}",
|
|
147
|
+
request_options: request_options
|
|
148
|
+
)
|
|
149
|
+
begin
|
|
150
|
+
response = @client.send(request)
|
|
151
|
+
rescue Net::HTTPRequestTimeout
|
|
152
|
+
raise Voltaria::Errors::TimeoutError
|
|
153
|
+
end
|
|
154
|
+
code = response.code.to_i
|
|
155
|
+
return if code.between?(200, 299)
|
|
156
|
+
|
|
157
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
158
|
+
raise error_class.new(response.body, code: code)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# Create multiple loans in a single request. Processing happens asynchronously. Returns a task ID for tracking
|
|
162
|
+
# progress.
|
|
163
|
+
#
|
|
164
|
+
# @param request_options [Hash]
|
|
165
|
+
# @param params [Voltaria::Loans::Types::BulkLoanCreatePayload]
|
|
166
|
+
# @option request_options [String] :base_url
|
|
167
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
168
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
169
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
170
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
171
|
+
#
|
|
172
|
+
# @return [Voltaria::Types::BulkLoanTaskResponse]
|
|
173
|
+
def create_bulk_loans(request_options: {}, **params)
|
|
174
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
175
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
176
|
+
base_url: request_options[:base_url],
|
|
177
|
+
method: "POST",
|
|
178
|
+
path: "v2/loans/bulk",
|
|
179
|
+
body: Voltaria::Loans::Types::BulkLoanCreatePayload.new(params).to_h,
|
|
180
|
+
request_options: request_options
|
|
181
|
+
)
|
|
182
|
+
begin
|
|
183
|
+
response = @client.send(request)
|
|
184
|
+
rescue Net::HTTPRequestTimeout
|
|
185
|
+
raise Voltaria::Errors::TimeoutError
|
|
186
|
+
end
|
|
187
|
+
code = response.code.to_i
|
|
188
|
+
if code.between?(200, 299)
|
|
189
|
+
Voltaria::Types::BulkLoanTaskResponse.load(response.body)
|
|
190
|
+
else
|
|
191
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
192
|
+
raise error_class.new(response.body, code: code)
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# Check the status of a bulk loan creation task and retrieve results when completed.
|
|
197
|
+
#
|
|
198
|
+
# @param request_options [Hash]
|
|
199
|
+
# @param params [Hash]
|
|
200
|
+
# @option request_options [String] :base_url
|
|
201
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
202
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
203
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
204
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
205
|
+
# @option params [String] :task_id
|
|
206
|
+
#
|
|
207
|
+
# @return [Voltaria::Types::BulkLoanTaskStatus]
|
|
208
|
+
def get_bulk_loan_status(request_options: {}, **params)
|
|
209
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
210
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
211
|
+
base_url: request_options[:base_url],
|
|
212
|
+
method: "GET",
|
|
213
|
+
path: "v2/loans/bulk/#{URI.encode_uri_component(params[:task_id].to_s)}",
|
|
214
|
+
request_options: request_options
|
|
215
|
+
)
|
|
216
|
+
begin
|
|
217
|
+
response = @client.send(request)
|
|
218
|
+
rescue Net::HTTPRequestTimeout
|
|
219
|
+
raise Voltaria::Errors::TimeoutError
|
|
220
|
+
end
|
|
221
|
+
code = response.code.to_i
|
|
222
|
+
if code.between?(200, 299)
|
|
223
|
+
Voltaria::Types::BulkLoanTaskStatus.load(response.body)
|
|
224
|
+
else
|
|
225
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
226
|
+
raise error_class.new(response.body, code: code)
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# Mark a loan as defaulted, recording the default date and the amount recovered from selling it. Defaults the
|
|
231
|
+
# loan's active and overdue installments and updates the loan status accordingly.
|
|
232
|
+
#
|
|
233
|
+
# @param request_options [Hash]
|
|
234
|
+
# @param params [Voltaria::Loans::Types::LoanDefaultPayload]
|
|
235
|
+
# @option request_options [String] :base_url
|
|
236
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
237
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
238
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
239
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
240
|
+
# @option params [String] :loan_id
|
|
241
|
+
#
|
|
242
|
+
# @return [Voltaria::Types::LoanResponseWithInstallments]
|
|
243
|
+
def set_loan_default(request_options: {}, **params)
|
|
244
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
245
|
+
request_data = Voltaria::Loans::Types::LoanDefaultPayload.new(params).to_h
|
|
246
|
+
non_body_param_names = ["loan_id"]
|
|
247
|
+
body = request_data.except(*non_body_param_names)
|
|
248
|
+
|
|
249
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
250
|
+
base_url: request_options[:base_url],
|
|
251
|
+
method: "POST",
|
|
252
|
+
path: "v2/loans/#{URI.encode_uri_component(params[:loan_id].to_s)}/set-default",
|
|
253
|
+
body: body,
|
|
254
|
+
request_options: request_options
|
|
255
|
+
)
|
|
256
|
+
begin
|
|
257
|
+
response = @client.send(request)
|
|
258
|
+
rescue Net::HTTPRequestTimeout
|
|
259
|
+
raise Voltaria::Errors::TimeoutError
|
|
260
|
+
end
|
|
261
|
+
code = response.code.to_i
|
|
262
|
+
if code.between?(200, 299)
|
|
263
|
+
Voltaria::Types::LoanResponseWithInstallments.load(response.body)
|
|
264
|
+
else
|
|
265
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
266
|
+
raise error_class.new(response.body, code: code)
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Loans
|
|
5
|
+
module Types
|
|
6
|
+
class BulkLoanCreatePayload < Internal::Types::Model
|
|
7
|
+
field :loans, -> { Internal::Types::Array[Voltaria::Types::BulkLoanItemPayload] }, optional: false, nullable: false
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Loans
|
|
5
|
+
module Types
|
|
6
|
+
class ListLoansRequest < Internal::Types::Model
|
|
7
|
+
field :page, -> { Integer }, optional: true, nullable: false
|
|
8
|
+
field :page_size, -> { Integer }, optional: true, nullable: false
|
|
9
|
+
field :client_id, -> { String }, optional: true, nullable: false
|
|
10
|
+
field :order_by, -> { String }, optional: true, nullable: false
|
|
11
|
+
field :q, -> { String }, optional: true, nullable: false
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Loans
|
|
5
|
+
module Types
|
|
6
|
+
class LoanCreatePayload < Internal::Types::Model
|
|
7
|
+
field :client_id, -> { String }, optional: false, nullable: false
|
|
8
|
+
field :currency, -> { Voltaria::Types::CurrencyEnum }, optional: false, nullable: false
|
|
9
|
+
field :amount, -> { Voltaria::Loans::Types::LoanCreatePayloadAmount }, optional: false, nullable: false
|
|
10
|
+
field :correlation_id, -> { String }, optional: true, nullable: false
|
|
11
|
+
field :loan_date, -> { String }, optional: true, nullable: false
|
|
12
|
+
field :installments, -> { Internal::Types::Array[Voltaria::Types::LoanInstallmentCreatePayload] }, optional: false, nullable: false
|
|
13
|
+
field :data, -> { Internal::Types::Hash[String, Object] }, optional: true, nullable: false
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Loans
|
|
5
|
+
module Types
|
|
6
|
+
# The amount of the loan
|
|
7
|
+
class LoanCreatePayloadAmount < Internal::Types::Model
|
|
8
|
+
extend Voltaria::Internal::Types::Union
|
|
9
|
+
|
|
10
|
+
member -> { Integer }
|
|
11
|
+
member -> { String }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Loans
|
|
5
|
+
module Types
|
|
6
|
+
class LoanDefaultPayload < Internal::Types::Model
|
|
7
|
+
field :loan_id, -> { String }, optional: false, nullable: false
|
|
8
|
+
field :default_date, -> { String }, optional: false, nullable: false
|
|
9
|
+
field :sold_amount, -> { Voltaria::Loans::Types::LoanDefaultPayloadSoldAmount }, optional: false, nullable: false
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Loans
|
|
5
|
+
module Types
|
|
6
|
+
# Amount recovered when the defaulted loan is sold.
|
|
7
|
+
class LoanDefaultPayloadSoldAmount < Internal::Types::Model
|
|
8
|
+
extend Voltaria::Internal::Types::Union
|
|
9
|
+
|
|
10
|
+
member -> { Integer }
|
|
11
|
+
member -> { String }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Partners
|
|
5
|
+
class Client
|
|
6
|
+
# @param client [Voltaria::Internal::Http::RawClient]
|
|
7
|
+
#
|
|
8
|
+
# @return [void]
|
|
9
|
+
def initialize(client:)
|
|
10
|
+
@client = client
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Use this endpoint to check the available funding capacity in your dedicated lending account before initiating a
|
|
14
|
+
# new loan or submitting a drawdown request.
|
|
15
|
+
#
|
|
16
|
+
# @param request_options [Hash]
|
|
17
|
+
# @param params [Hash]
|
|
18
|
+
# @option request_options [String] :base_url
|
|
19
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
20
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
21
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
22
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
23
|
+
#
|
|
24
|
+
# @return [Array[Voltaria::Types::AvailableFunding]]
|
|
25
|
+
def get_available_funding(request_options: {}, **params)
|
|
26
|
+
Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
27
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
28
|
+
base_url: request_options[:base_url],
|
|
29
|
+
method: "GET",
|
|
30
|
+
path: "v2/partners/available-funding",
|
|
31
|
+
request_options: request_options
|
|
32
|
+
)
|
|
33
|
+
begin
|
|
34
|
+
response = @client.send(request)
|
|
35
|
+
rescue Net::HTTPRequestTimeout
|
|
36
|
+
raise Voltaria::Errors::TimeoutError
|
|
37
|
+
end
|
|
38
|
+
code = response.code.to_i
|
|
39
|
+
if code.between?(200, 299)
|
|
40
|
+
::JSON.parse(response.body).map { |item| Voltaria::Types::AvailableFunding.load(::JSON.generate(item)) }
|
|
41
|
+
else
|
|
42
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
43
|
+
raise error_class.new(response.body, code: code)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Upload supplementary partner information, such as bank account balance, accounting figures, or other relevant
|
|
48
|
+
# details.
|
|
49
|
+
#
|
|
50
|
+
# @param request_options [Hash]
|
|
51
|
+
# @param params [Voltaria::Partners::Types::PartnerDataCreatePayload]
|
|
52
|
+
# @option request_options [String] :base_url
|
|
53
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
54
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
55
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
56
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
57
|
+
#
|
|
58
|
+
# @return [Voltaria::Types::PartnerDataResponse]
|
|
59
|
+
def create_partner_data(request_options: {}, **params)
|
|
60
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
61
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
62
|
+
base_url: request_options[:base_url],
|
|
63
|
+
method: "POST",
|
|
64
|
+
path: "v2/partners/data",
|
|
65
|
+
body: Voltaria::Partners::Types::PartnerDataCreatePayload.new(params).to_h,
|
|
66
|
+
request_options: request_options
|
|
67
|
+
)
|
|
68
|
+
begin
|
|
69
|
+
response = @client.send(request)
|
|
70
|
+
rescue Net::HTTPRequestTimeout
|
|
71
|
+
raise Voltaria::Errors::TimeoutError
|
|
72
|
+
end
|
|
73
|
+
code = response.code.to_i
|
|
74
|
+
if code.between?(200, 299)
|
|
75
|
+
Voltaria::Types::PartnerDataResponse.load(response.body)
|
|
76
|
+
else
|
|
77
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
78
|
+
raise error_class.new(response.body, code: code)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Use this endpoint to get the list of waterfalls for your dedicated lending account.
|
|
83
|
+
#
|
|
84
|
+
# @param request_options [Hash]
|
|
85
|
+
# @param params [Hash]
|
|
86
|
+
# @option request_options [String] :base_url
|
|
87
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
88
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
89
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
90
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
91
|
+
# @option params [Integer, nil] :page
|
|
92
|
+
# @option params [Integer, nil] :page_size
|
|
93
|
+
# @option params [String, nil] :order_by
|
|
94
|
+
# @option params [String, nil] :q
|
|
95
|
+
#
|
|
96
|
+
# @return [Voltaria::Types::PaginatedResponseWaterfallResponse]
|
|
97
|
+
def list_partner_waterfalls(request_options: {}, **params)
|
|
98
|
+
params = Voltaria::Internal::Types::Utils.normalize_keys(params)
|
|
99
|
+
query_param_names = %i[page page_size order_by q]
|
|
100
|
+
query_params = {}
|
|
101
|
+
query_params["page"] = params[:page] if params.key?(:page)
|
|
102
|
+
query_params["page_size"] = params[:page_size] if params.key?(:page_size)
|
|
103
|
+
query_params["order_by"] = params[:order_by] if params.key?(:order_by)
|
|
104
|
+
query_params["q"] = params[:q] if params.key?(:q)
|
|
105
|
+
params.except(*query_param_names)
|
|
106
|
+
|
|
107
|
+
request = Voltaria::Internal::JSON::Request.new(
|
|
108
|
+
base_url: request_options[:base_url],
|
|
109
|
+
method: "GET",
|
|
110
|
+
path: "v2/partners/waterfalls",
|
|
111
|
+
query: query_params,
|
|
112
|
+
request_options: request_options
|
|
113
|
+
)
|
|
114
|
+
begin
|
|
115
|
+
response = @client.send(request)
|
|
116
|
+
rescue Net::HTTPRequestTimeout
|
|
117
|
+
raise Voltaria::Errors::TimeoutError
|
|
118
|
+
end
|
|
119
|
+
code = response.code.to_i
|
|
120
|
+
if code.between?(200, 299)
|
|
121
|
+
Voltaria::Types::PaginatedResponseWaterfallResponse.load(response.body)
|
|
122
|
+
else
|
|
123
|
+
error_class = Voltaria::Errors::ResponseError.subclass_for_code(code)
|
|
124
|
+
raise error_class.new(response.body, code: code)
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Partners
|
|
5
|
+
module Types
|
|
6
|
+
class ListPartnerWaterfallsRequest < Internal::Types::Model
|
|
7
|
+
field :page, -> { Integer }, optional: true, nullable: false
|
|
8
|
+
field :page_size, -> { Integer }, optional: true, nullable: false
|
|
9
|
+
field :order_by, -> { String }, optional: true, nullable: false
|
|
10
|
+
field :q, -> { String }, optional: true, nullable: false
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Voltaria
|
|
4
|
+
module Partners
|
|
5
|
+
module Types
|
|
6
|
+
class PartnerDataCreatePayload < Internal::Types::Model
|
|
7
|
+
field :data, -> { Internal::Types::Hash[String, Object] }, optional: false, nullable: false
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Hand-written prefix-routing wrapper around the Fern-generated SDK.
|
|
4
|
+
#
|
|
5
|
+
# The generated client is `Voltaria::Client.new(token:, base_url:)`. This file
|
|
6
|
+
# re-opens the `Voltaria` module to add a convenience factory that derives the
|
|
7
|
+
# base URL from the API key prefix:
|
|
8
|
+
#
|
|
9
|
+
# "live_" -> Voltaria::Environment::PRODUCTION
|
|
10
|
+
# "sandbox_" -> Voltaria::Environment::SANDBOX
|
|
11
|
+
# unknown / empty -> raises Voltaria::InvalidApiKeyError
|
|
12
|
+
#
|
|
13
|
+
# An explicitly supplied :environment or :base_url ALWAYS overrides prefix
|
|
14
|
+
# routing.
|
|
15
|
+
#
|
|
16
|
+
# This file is hand-written and must be listed in .fernignore so the generator
|
|
17
|
+
# does not overwrite it.
|
|
18
|
+
#
|
|
19
|
+
# Consumers can opt in with a single require, which also loads the generated SDK:
|
|
20
|
+
#
|
|
21
|
+
# require "voltaria/prefix_routing"
|
|
22
|
+
# client = Voltaria.new("live_abc123")
|
|
23
|
+
|
|
24
|
+
require_relative "../voltaria"
|
|
25
|
+
|
|
26
|
+
module Voltaria
|
|
27
|
+
# Raised when the API key prefix cannot be mapped to a known environment and
|
|
28
|
+
# no explicit environment / base_url was provided.
|
|
29
|
+
class InvalidApiKeyError < StandardError
|
|
30
|
+
def initialize(message = "API key must start with 'live_' or 'sandbox_', " \
|
|
31
|
+
"or an explicit :environment / :base_url must be supplied")
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Prefix -> environment base URL mapping.
|
|
37
|
+
API_KEY_ENVIRONMENTS = {
|
|
38
|
+
"live_" => Voltaria::Environment::PRODUCTION,
|
|
39
|
+
"sandbox_" => Voltaria::Environment::SANDBOX
|
|
40
|
+
}.freeze
|
|
41
|
+
|
|
42
|
+
class << self
|
|
43
|
+
# Construct a Voltaria::Client, resolving the base URL from the API key
|
|
44
|
+
# prefix unless an explicit environment / base_url is given.
|
|
45
|
+
#
|
|
46
|
+
# @param api_key [String] the API key (e.g. "live_abc", "sandbox_abc")
|
|
47
|
+
# @param environment [String, nil] explicit base URL; overrides prefix routing
|
|
48
|
+
# @param base_url [String, nil] explicit base URL; overrides prefix routing
|
|
49
|
+
# @param options [Hash] forwarded to Voltaria::Client.new
|
|
50
|
+
#
|
|
51
|
+
# @return [Voltaria::Client]
|
|
52
|
+
def new(api_key, environment: nil, base_url: nil, **)
|
|
53
|
+
resolved = resolve_environment(api_key, environment: environment, base_url: base_url)
|
|
54
|
+
Voltaria::Client.new(token: api_key, base_url: base_url || resolved, **)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Resolve the base URL to use.
|
|
58
|
+
#
|
|
59
|
+
# Mirrors the reference behavior exactly:
|
|
60
|
+
# - explicit environment wins
|
|
61
|
+
# - explicit base_url defers resolution to the caller (returns nil here)
|
|
62
|
+
# - otherwise derive from the api_key prefix
|
|
63
|
+
# - unknown / empty prefix raises InvalidApiKeyError
|
|
64
|
+
#
|
|
65
|
+
# @param api_key [String]
|
|
66
|
+
# @param environment [String, nil]
|
|
67
|
+
# @param base_url [String, nil]
|
|
68
|
+
#
|
|
69
|
+
# @return [String, nil]
|
|
70
|
+
def resolve_environment(api_key, environment: nil, base_url: nil)
|
|
71
|
+
return environment if environment
|
|
72
|
+
return nil if base_url
|
|
73
|
+
|
|
74
|
+
prefix = API_KEY_ENVIRONMENTS.keys.find { |p| api_key.to_s.start_with?(p) }
|
|
75
|
+
raise InvalidApiKeyError unless prefix
|
|
76
|
+
|
|
77
|
+
API_KEY_ENVIRONMENTS.fetch(prefix)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|