raims 0.1.1
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/LICENSE +21 -0
- data/README.md +130 -0
- data/lib/raims/api_list.rb +98 -0
- data/lib/raims/api_resource.rb +31 -0
- data/lib/raims/api_response.rb +45 -0
- data/lib/raims/enum_values.rb +208 -0
- data/lib/raims/errors.rb +59 -0
- data/lib/raims/generated/contract.json +6982 -0
- data/lib/raims/http_client.rb +91 -0
- data/lib/raims/models.rb +1863 -0
- data/lib/raims/raims_client.rb +276 -0
- data/lib/raims/request_options.rb +47 -0
- data/lib/raims/schema.rb +104 -0
- data/lib/raims/services.rb +506 -0
- data/lib/raims/util.rb +141 -0
- data/lib/raims/version.rb +5 -0
- data/lib/raims/webhook.rb +72 -0
- data/lib/raims.rb +16 -0
- metadata +143 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 6b8c698e580993846ff354fa3a7a2a3d69dac36cc8ca823cdf3d8a3faebad965
|
|
4
|
+
data.tar.gz: 590d6014a3faaa756080ac1f3f2fd574171583b7d58fddaa95d9bda808c3ee63
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 0df5664458e513b9a71fe88f9161578dd98bad479115b78682bfd3acdb96126d48a42add8ffdf5f6d39f83230b1c15616e1cad64e6d2744b163811915bf6be4c
|
|
7
|
+
data.tar.gz: ac7091fdbb2c8be93b61e742ac2111afff4a2aa5b663a7184a90ed4901e155edbb595d95c29af13afc6c9731be4da8b38b3175cf5ed256e70bb6f127ef0ca725
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Raims
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Raims Ruby
|
|
2
|
+
|
|
3
|
+
Official Ruby SDK for the Raims public API.
|
|
4
|
+
|
|
5
|
+
Use resource services, read-only response objects, cursor pagination, structured
|
|
6
|
+
errors, and webhook signature verification in server applications. Requires
|
|
7
|
+
Ruby 3.3 or later.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
Install the [`raims` gem](https://rubygems.org/gems/raims) from RubyGems:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
gem install raims
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
For a Bundler application, add the gem to your `Gemfile`:
|
|
18
|
+
|
|
19
|
+
```ruby
|
|
20
|
+
source 'https://rubygems.org'
|
|
21
|
+
|
|
22
|
+
gem 'raims'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Then run:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
bundle install
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Load the SDK with `require 'raims'`. Keep your application's `Gemfile.lock`
|
|
32
|
+
under version control to retain its resolved dependency versions.
|
|
33
|
+
|
|
34
|
+
The [GitHub releases](https://github.com/raimshq/raims-ruby/releases/latest)
|
|
35
|
+
also provide `raims.gem` and `SHA256SUMS`. See
|
|
36
|
+
[installation and updates](docs/installation.md) for verified GitHub downloads
|
|
37
|
+
and updating an existing installation.
|
|
38
|
+
|
|
39
|
+
## First request
|
|
40
|
+
|
|
41
|
+
```ruby
|
|
42
|
+
require 'raims'
|
|
43
|
+
|
|
44
|
+
Raims::RaimsClient.open(ENV.fetch('RAIMS_API_KEY')) do |raims|
|
|
45
|
+
customers = raims.customers.list({page_size: 20})
|
|
46
|
+
customers.each do |customer|
|
|
47
|
+
process_customer(customer.id)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`process_customer` represents your application's processing. The base URL is
|
|
53
|
+
`https://api.raims.com` for both Sandbox and Production. The key determines
|
|
54
|
+
the company, environment, and permissions. Keep it on the server, outside
|
|
55
|
+
source control and logs.
|
|
56
|
+
|
|
57
|
+
## Create a charge
|
|
58
|
+
|
|
59
|
+
Define and persist `customer_id`, `due_date`, and `order_idempotency_key` for
|
|
60
|
+
the order before sending the request. Amounts use integer cents: `15000`
|
|
61
|
+
represents BRL 150.00. The due date uses UTC Unix seconds.
|
|
62
|
+
|
|
63
|
+
```ruby
|
|
64
|
+
raims = Raims::RaimsClient.new(ENV.fetch('RAIMS_API_KEY'))
|
|
65
|
+
|
|
66
|
+
begin
|
|
67
|
+
charge = raims.charges.create(
|
|
68
|
+
{customer_id: customer_id, amount_cents: 15000, due_date: due_date,
|
|
69
|
+
title: 'Order 1234'},
|
|
70
|
+
{idempotency_key: order_idempotency_key}
|
|
71
|
+
)
|
|
72
|
+
request_id = charge.last_response.request_id
|
|
73
|
+
ensure
|
|
74
|
+
raims.close
|
|
75
|
+
end
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The SDK does not generate idempotency keys or retry writes automatically.
|
|
79
|
+
After losing a response, keep the same key and parameters and follow the
|
|
80
|
+
endpoint's recovery rules. HTTP `202` means processing is pending; retrieve
|
|
81
|
+
the resource to follow the result.
|
|
82
|
+
|
|
83
|
+
## Pagination
|
|
84
|
+
|
|
85
|
+
```ruby
|
|
86
|
+
Raims::RaimsClient.open(ENV.fetch('RAIMS_API_KEY')) do |raims|
|
|
87
|
+
raims.customers.list({page_size: 50}).auto_paging_each do |customer|
|
|
88
|
+
process_customer(customer.id)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`each` reads only the current page. `auto_paging_each` fetches further pages
|
|
94
|
+
as needed and preserves filters and request options. `next_page` and
|
|
95
|
+
`previous_page` provide explicit navigation. Use `auto_paging_to_a(limit)`
|
|
96
|
+
to collect a bounded number of items.
|
|
97
|
+
|
|
98
|
+
## Services
|
|
99
|
+
|
|
100
|
+
| Property | Resources |
|
|
101
|
+
| --- | --- |
|
|
102
|
+
| `accounts` | Account context, number, fees, and checkout settings |
|
|
103
|
+
| `balances` | Balance and forecast |
|
|
104
|
+
| `customers` | Customer creation, retrieval, updates, and deletion |
|
|
105
|
+
| `charges` | Charges, payment details, documents, and charge refunds |
|
|
106
|
+
| `payment_links` | Payment links and email delivery requests |
|
|
107
|
+
| `refunds` | Refunds and receipts |
|
|
108
|
+
| `disputes` | Disputes |
|
|
109
|
+
| `statements` | Account statements |
|
|
110
|
+
| `withdrawals` | Withdrawals, limits, summary, and automatic settings |
|
|
111
|
+
| `withdrawal_destinations` | Withdrawal destinations |
|
|
112
|
+
| `webhooks` | Registration, health, pause, test, and secret rotation |
|
|
113
|
+
| `webhook_event_types` | Available event types |
|
|
114
|
+
| `simulations.charges` | Charge simulations with a Sandbox key |
|
|
115
|
+
| `simulations.refunds` | Refund simulations with a Sandbox key |
|
|
116
|
+
|
|
117
|
+
Services expose methods such as `create`, `retrieve`, `update`, `delete`, and
|
|
118
|
+
`list` according to the public contract. See the [method reference](docs/reference.md).
|
|
119
|
+
|
|
120
|
+
## Documentation
|
|
121
|
+
|
|
122
|
+
- [Installation and updates](docs/installation.md)
|
|
123
|
+
- [Configuration, responses, and documents](docs/usage.md)
|
|
124
|
+
- [Pagination](docs/pagination.md)
|
|
125
|
+
- [Errors, idempotency, and retries](docs/errors-and-retries.md)
|
|
126
|
+
- [Receiving webhooks](docs/webhooks.md)
|
|
127
|
+
- [Contributing](CONTRIBUTING.md) and [security](SECURITY.md)
|
|
128
|
+
- [Public API](https://docs.raims.com/en/api)
|
|
129
|
+
|
|
130
|
+
Distributed under the [MIT license](LICENSE).
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'set'
|
|
4
|
+
|
|
5
|
+
module Raims
|
|
6
|
+
class ApiList < ApiResource
|
|
7
|
+
include Enumerable
|
|
8
|
+
|
|
9
|
+
def initialize(resource, client:, operation_id:, path_params:, params:, options:)
|
|
10
|
+
@client, @operation_id, @options = client, operation_id, options
|
|
11
|
+
@path_params = Util.deep_freeze(Util.json_value(path_params))
|
|
12
|
+
@params = Util.deep_freeze(Util.json_value(params))
|
|
13
|
+
super(resource.instance_variable_get(:@data), last_response: resource.last_response)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def list
|
|
17
|
+
self['list']
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def page
|
|
21
|
+
self['page']
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def each(&block)
|
|
25
|
+
return enum_for(:each) unless block
|
|
26
|
+
list.each(&block)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def next_page
|
|
30
|
+
load_page(true)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def to_h
|
|
34
|
+
ApiResource.instance_method(:to_h).bind_call(self)
|
|
35
|
+
end
|
|
36
|
+
alias to_hash to_h
|
|
37
|
+
|
|
38
|
+
def previous_page
|
|
39
|
+
load_page(false)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def auto_paging_each
|
|
43
|
+
return enum_for(:auto_paging_each) unless block_given?
|
|
44
|
+
current = self
|
|
45
|
+
seen = Set.new
|
|
46
|
+
seen.add(@params['after']) if @params['after']
|
|
47
|
+
loop do
|
|
48
|
+
current.each { |item| yield item }
|
|
49
|
+
params = current.send(:navigation, true)
|
|
50
|
+
return self unless params
|
|
51
|
+
cursor = params.fetch('after')
|
|
52
|
+
if seen.include?(cursor)
|
|
53
|
+
raise UnexpectedResponseError.new('Pagination returned a repeated cursor.', last_response: current.last_response)
|
|
54
|
+
end
|
|
55
|
+
following = current.next_page
|
|
56
|
+
seen.add(cursor)
|
|
57
|
+
current = following
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def auto_paging_to_a(limit)
|
|
62
|
+
raise ArgumentError, 'limit must be a non-negative integer.' unless limit.is_a?(Integer) && limit >= 0
|
|
63
|
+
return [] if limit.zero?
|
|
64
|
+
result = []
|
|
65
|
+
auto_paging_each do |item|
|
|
66
|
+
result << item
|
|
67
|
+
break if result.length >= limit
|
|
68
|
+
end
|
|
69
|
+
result
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def inspect
|
|
73
|
+
"#<#{self.class} items=#{list.length}>"
|
|
74
|
+
end
|
|
75
|
+
alias to_s inspect
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
def navigation(forward)
|
|
80
|
+
flag, cursor_key, key, opposite = forward ? %w[has_next next_after after before] : %w[has_previous previous_before before after]
|
|
81
|
+
return nil unless page[flag]
|
|
82
|
+
cursor = page[cursor_key]
|
|
83
|
+
unless cursor.is_a?(String) && !cursor.empty? && cursor != @params[key]
|
|
84
|
+
raise UnexpectedResponseError.new('Pagination returned a missing or repeated cursor.', last_response: last_response)
|
|
85
|
+
end
|
|
86
|
+
result = @params.dup
|
|
87
|
+
result.delete(opposite)
|
|
88
|
+
result[key] = cursor
|
|
89
|
+
result
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def load_page(forward)
|
|
93
|
+
params = navigation(forward)
|
|
94
|
+
return nil unless params
|
|
95
|
+
@client.request(@operation_id, path_params: @path_params, params: params, options: @options)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Raims
|
|
4
|
+
class ApiResource
|
|
5
|
+
attr_reader :last_response
|
|
6
|
+
|
|
7
|
+
def initialize(data = {}, last_response: nil)
|
|
8
|
+
@data = Util.deep_freeze(data.dup)
|
|
9
|
+
@last_response = last_response
|
|
10
|
+
freeze
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def [](key)
|
|
14
|
+
@data[key.to_s]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def key?(key)
|
|
18
|
+
@data.key?(key.to_s)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def to_h
|
|
22
|
+
@data.transform_values { |value| Util.plain(value) }
|
|
23
|
+
end
|
|
24
|
+
alias to_hash to_h
|
|
25
|
+
|
|
26
|
+
def inspect
|
|
27
|
+
"#<#{self.class}>"
|
|
28
|
+
end
|
|
29
|
+
alias to_s inspect
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Raims
|
|
4
|
+
class ApiResponse
|
|
5
|
+
attr_reader :status_code, :headers
|
|
6
|
+
|
|
7
|
+
def initialize(status_code, headers = {})
|
|
8
|
+
@status_code = status_code
|
|
9
|
+
@headers = Util.deep_freeze(headers.each_with_object({}) { |(key, value), result| result[key.to_s.downcase] = value.to_s.dup })
|
|
10
|
+
freeze
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def request_id
|
|
14
|
+
headers['request-id'] || headers['x-request-id']
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def retry_after
|
|
18
|
+
headers['retry-after']
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def idempotency_replayed?
|
|
22
|
+
headers.fetch('idempotency-replayed', '').casecmp?('true')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def inspect
|
|
26
|
+
"#<#{self.class} status_code=#{status_code}>"
|
|
27
|
+
end
|
|
28
|
+
alias to_s inspect
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class HttpResponse
|
|
32
|
+
attr_reader :status, :headers, :body
|
|
33
|
+
|
|
34
|
+
def initialize(status:, headers:, body:)
|
|
35
|
+
@status = status
|
|
36
|
+
@headers = headers
|
|
37
|
+
@body = body
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def inspect
|
|
41
|
+
"#<#{self.class} status=#{status}>"
|
|
42
|
+
end
|
|
43
|
+
alias to_s inspect
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Generated by scripts/generate.py. Do not edit.
|
|
3
|
+
|
|
4
|
+
module Raims
|
|
5
|
+
module EnumValues
|
|
6
|
+
ACCOUNT_CONTEXT_AMOUNT_UNIT_CENTS = 'cents'
|
|
7
|
+
ACCOUNT_CONTEXT_BUSINESS_TIMEZONE_AMERICA_SAO_PAULO = 'America/Sao_Paulo'
|
|
8
|
+
ACCOUNT_CONTEXT_COMPANY_STATUS_ACTIVE = 'active'
|
|
9
|
+
ACCOUNT_CONTEXT_COMPANY_STATUS_LIMITED = 'limited'
|
|
10
|
+
ACCOUNT_CONTEXT_COMPANY_STATUS_PENDING = 'pending'
|
|
11
|
+
ACCOUNT_CONTEXT_CURRENCY_BRL = 'BRL'
|
|
12
|
+
ACCOUNT_CONTEXT_DATA_ENVIRONMENT_PRODUCTION = 'production'
|
|
13
|
+
ACCOUNT_CONTEXT_DATA_ENVIRONMENT_SANDBOX = 'sandbox'
|
|
14
|
+
ACCOUNT_CONTEXT_TIMESTAMP_UNIT_UNIX_SECONDS = 'unix_seconds'
|
|
15
|
+
BALANCE_FORECAST_PERIOD_LAST_15_DAYS = 'last_15_days'
|
|
16
|
+
BALANCE_FORECAST_PERIOD_LAST_30_DAYS = 'last_30_days'
|
|
17
|
+
BALANCE_FORECAST_PERIOD_LAST_7_DAYS = 'last_7_days'
|
|
18
|
+
BALANCE_FORECAST_PERIOD_TODAY = 'today'
|
|
19
|
+
CHARGE_CREATED_PAYMENT_METHOD_TYPES_ITEM_BOLETO = 2
|
|
20
|
+
CHARGE_CREATED_PAYMENT_METHOD_TYPES_ITEM_PIX = 1
|
|
21
|
+
CHARGE_LIST_ITEM_PAYMENT_METHOD_TYPES_ITEM_BOLETO = 2
|
|
22
|
+
CHARGE_LIST_ITEM_PAYMENT_METHOD_TYPES_ITEM_PIX = 1
|
|
23
|
+
CHARGE_PAYMENT_INFORMATION_BOLETO_PAYMENT_STATUS_AWAITING_PAYMENT = 'awaiting_payment'
|
|
24
|
+
CHARGE_PAYMENT_INFORMATION_BOLETO_PAYMENT_STATUS_COMPENSATED = 'compensated'
|
|
25
|
+
CHARGE_PAYMENT_INFORMATION_BOLETO_PAYMENT_STATUS_SETTLED = 'settled'
|
|
26
|
+
CHARGE_PAYMENT_INFORMATION_BOLETO_STATUS_AVAILABLE = 'available'
|
|
27
|
+
CHARGE_PAYMENT_INFORMATION_BOLETO_STATUS_FAILED = 'failed'
|
|
28
|
+
CHARGE_PAYMENT_INFORMATION_BOLETO_STATUS_NOT_GENERATED = 'not_generated'
|
|
29
|
+
CHARGE_PAYMENT_INFORMATION_BOLETO_STATUS_PENDING = 'pending'
|
|
30
|
+
CHARGE_PAYMENT_INFORMATION_PIX_STATUS_AVAILABLE = 'available'
|
|
31
|
+
CHARGE_PAYMENT_INFORMATION_PIX_STATUS_FAILED = 'failed'
|
|
32
|
+
CHARGE_PAYMENT_INFORMATION_PIX_STATUS_NOT_GENERATED = 'not_generated'
|
|
33
|
+
CHARGE_PAYMENT_INFORMATION_PIX_STATUS_PENDING = 'pending'
|
|
34
|
+
CHARGE_PAYMENT_METHOD_TYPES_ITEM_BOLETO = 2
|
|
35
|
+
CHARGE_PAYMENT_METHOD_TYPES_ITEM_PIX = 1
|
|
36
|
+
CHARGE_SCENARIO_ACTION_BOLETO_ISSUANCE = 'boleto_issuance'
|
|
37
|
+
CHARGE_SCENARIO_ACTION_CANCELLATION = 'cancellation'
|
|
38
|
+
CHARGE_SCENARIO_ACTION_PIX_ISSUANCE = 'pix_issuance'
|
|
39
|
+
CHARGE_SCENARIO_OUTCOME_COMPLETED = 'completed'
|
|
40
|
+
CHARGE_SCENARIO_OUTCOME_FAILED = 'failed'
|
|
41
|
+
CHARGE_SCENARIO_OUTCOME_PENDING = 'pending'
|
|
42
|
+
CHARGE_SCENARIO_REQUEST_ACTION_BOLETO_ISSUANCE = 'boleto_issuance'
|
|
43
|
+
CHARGE_SCENARIO_REQUEST_ACTION_CANCELLATION = 'cancellation'
|
|
44
|
+
CHARGE_SCENARIO_REQUEST_ACTION_PIX_ISSUANCE = 'pix_issuance'
|
|
45
|
+
CHARGE_SCENARIO_REQUEST_OUTCOME_FAILED = 'failed'
|
|
46
|
+
CHARGE_SCENARIO_REQUEST_OUTCOME_PENDING = 'pending'
|
|
47
|
+
CHARGE_SCENARIO_STATE_COMPLETED = 'completed'
|
|
48
|
+
CHARGE_SCENARIO_STATE_CONFIGURED = 'configured'
|
|
49
|
+
CHARGE_SCENARIO_STATE_FAILED = 'failed'
|
|
50
|
+
CHARGE_SCENARIO_STATE_PENDING = 'pending'
|
|
51
|
+
CHARGE_STATISTICS_PERIOD_LAST_15_DAYS = 'last_15_days'
|
|
52
|
+
CHARGE_STATISTICS_PERIOD_LAST_30_DAYS = 'last_30_days'
|
|
53
|
+
CHARGE_STATISTICS_PERIOD_LAST_7_DAYS = 'last_7_days'
|
|
54
|
+
CHARGE_STATISTICS_PERIOD_TODAY = 'today'
|
|
55
|
+
CHECKOUT_ASSET_ERROR_CODE_CHECKOUT_ASSET_INVALID_IMAGE = 'CHECKOUT_ASSET_INVALID_IMAGE'
|
|
56
|
+
CHECKOUT_ASSET_ERROR_CODE_CHECKOUT_ASSET_PROCESSING_FAILED = 'CHECKOUT_ASSET_PROCESSING_FAILED'
|
|
57
|
+
CHECKOUT_ASSET_ERROR_CODE_CHECKOUT_ASSET_UPLOAD_NOT_FOUND = 'CHECKOUT_ASSET_UPLOAD_NOT_FOUND'
|
|
58
|
+
CHECKOUT_ASSET_STATUS_ABSENT = 'absent'
|
|
59
|
+
CHECKOUT_ASSET_STATUS_FAILED = 'failed'
|
|
60
|
+
CHECKOUT_ASSET_STATUS_PENDING = 'pending'
|
|
61
|
+
CHECKOUT_ASSET_STATUS_READY = 'ready'
|
|
62
|
+
CHECKOUT_ASSET_UPLOAD_CONTENT_TYPE_IMAGE_JPEG = 'image/jpeg'
|
|
63
|
+
CHECKOUT_ASSET_UPLOAD_CONTENT_TYPE_IMAGE_PNG = 'image/png'
|
|
64
|
+
CREATE_CHARGE_REQUEST_PAYMENT_METHOD_BOLETO = 2
|
|
65
|
+
CREATE_CHARGE_REQUEST_PAYMENT_METHOD_INDEFINIDO = 0
|
|
66
|
+
CREATE_CHARGE_REQUEST_PAYMENT_METHOD_PIX = 1
|
|
67
|
+
CREATE_CHARGE_REQUEST_PAYMENT_METHOD_TYPES_ITEM_BOLETO = 2
|
|
68
|
+
CREATE_CHARGE_REQUEST_PAYMENT_METHOD_TYPES_ITEM_PIX = 1
|
|
69
|
+
CREATE_CHECKOUT_FAVICON_UPLOAD_REQUEST_CONTENT_TYPE_IMAGE_JPEG = 'image/jpeg'
|
|
70
|
+
CREATE_CHECKOUT_FAVICON_UPLOAD_REQUEST_CONTENT_TYPE_IMAGE_PNG = 'image/png'
|
|
71
|
+
CREATE_CHECKOUT_LOGO_UPLOAD_REQUEST_CONTENT_TYPE_IMAGE_JPEG = 'image/jpeg'
|
|
72
|
+
CREATE_CHECKOUT_LOGO_UPLOAD_REQUEST_CONTENT_TYPE_IMAGE_PNG = 'image/png'
|
|
73
|
+
CREATE_PAYMENT_LINK_REQUEST_PAYMENT_METHOD_TYPES_ITEM_BOLETO = 2
|
|
74
|
+
CREATE_PAYMENT_LINK_REQUEST_PAYMENT_METHOD_TYPES_ITEM_PIX = 1
|
|
75
|
+
CREATE_WEBHOOK_REQUEST_EVENTS_ITEM_CHARGE_CANCELED = 'charge.canceled'
|
|
76
|
+
CREATE_WEBHOOK_REQUEST_EVENTS_ITEM_CHARGE_CREATED = 'charge.created'
|
|
77
|
+
CREATE_WEBHOOK_REQUEST_EVENTS_ITEM_CHARGE_FAILED = 'charge.failed'
|
|
78
|
+
CREATE_WEBHOOK_REQUEST_EVENTS_ITEM_CHARGE_PAID = 'charge.paid'
|
|
79
|
+
CREATE_WEBHOOK_REQUEST_EVENTS_ITEM_REFUND_COMPLETED = 'refund.completed'
|
|
80
|
+
CREATE_WEBHOOK_REQUEST_EVENTS_ITEM_REFUND_FAILED = 'refund.failed'
|
|
81
|
+
CREATE_WEBHOOK_REQUEST_EVENTS_ITEM_REFUND_REQUESTED = 'refund.requested'
|
|
82
|
+
CUSTOMER_CREATED_TAX_ID_TYPE_CNPJ = 'cnpj'
|
|
83
|
+
CUSTOMER_CREATED_TAX_ID_TYPE_CPF = 'cpf'
|
|
84
|
+
CUSTOMER_LIST_ITEM_TAX_ID_TYPE_CNPJ = 'cnpj'
|
|
85
|
+
CUSTOMER_LIST_ITEM_TAX_ID_TYPE_CPF = 'cpf'
|
|
86
|
+
DISPUTE_INFRACTION_RESULT_AGREED = 'agreed'
|
|
87
|
+
DISPUTE_INFRACTION_RESULT_DISAGREED = 'disagreed'
|
|
88
|
+
DISPUTE_KIND_CHARGEBACK = 'chargeback'
|
|
89
|
+
DISPUTE_KIND_MED = 'med'
|
|
90
|
+
DISPUTE_LIST_ITEM_KIND_CHARGEBACK = 'chargeback'
|
|
91
|
+
DISPUTE_LIST_ITEM_KIND_MED = 'med'
|
|
92
|
+
DISPUTE_LIST_ITEM_STAGE_CANCELLED = 'cancelled'
|
|
93
|
+
DISPUTE_LIST_ITEM_STAGE_CLOSED = 'closed'
|
|
94
|
+
DISPUTE_LIST_ITEM_STAGE_FAILED = 'failed'
|
|
95
|
+
DISPUTE_LIST_ITEM_STAGE_IN_ANALYSIS = 'in_analysis'
|
|
96
|
+
DISPUTE_LIST_ITEM_STAGE_OPEN = 'open'
|
|
97
|
+
DISPUTE_LIST_ITEM_STAGE_REFUND_IN_ANALYSIS = 'refund_in_analysis'
|
|
98
|
+
DISPUTE_LIST_ITEM_STAGE_REJECTED = 'rejected'
|
|
99
|
+
DISPUTE_REFUND_RESULT_PARTIALLY_ACCEPTED = 'partially_accepted'
|
|
100
|
+
DISPUTE_REFUND_RESULT_REJECTED = 'rejected'
|
|
101
|
+
DISPUTE_REFUND_RESULT_TOTALLY_ACCEPTED = 'totally_accepted'
|
|
102
|
+
DISPUTE_STAGE_CANCELLED = 'cancelled'
|
|
103
|
+
DISPUTE_STAGE_CLOSED = 'closed'
|
|
104
|
+
DISPUTE_STAGE_FAILED = 'failed'
|
|
105
|
+
DISPUTE_STAGE_IN_ANALYSIS = 'in_analysis'
|
|
106
|
+
DISPUTE_STAGE_OPEN = 'open'
|
|
107
|
+
DISPUTE_STAGE_REFUND_IN_ANALYSIS = 'refund_in_analysis'
|
|
108
|
+
DISPUTE_STAGE_REJECTED = 'rejected'
|
|
109
|
+
PAYMENT_LINK_DETAILS_EFFECTIVE_PAYMENT_METHOD_TYPES_ITEM_BOLETO = 2
|
|
110
|
+
PAYMENT_LINK_DETAILS_EFFECTIVE_PAYMENT_METHOD_TYPES_ITEM_PIX = 1
|
|
111
|
+
PAYMENT_LINK_DETAILS_PAYMENT_METHOD_TYPES_ITEM_BOLETO = 2
|
|
112
|
+
PAYMENT_LINK_DETAILS_PAYMENT_METHOD_TYPES_ITEM_PIX = 1
|
|
113
|
+
PAYMENT_LINK_PAYMENT_METHOD_TYPES_ITEM_BOLETO = 2
|
|
114
|
+
PAYMENT_LINK_PAYMENT_METHOD_TYPES_ITEM_PIX = 1
|
|
115
|
+
PAYMENT_LINK_UNAVAILABLE_REASON_CODE_BOLETO_AWAITING_SETTLEMENT = 'BOLETO_AWAITING_SETTLEMENT'
|
|
116
|
+
PAYMENT_LINK_UNAVAILABLE_REASON_CODE_CHARGE_EXPIRED = 'CHARGE_EXPIRED'
|
|
117
|
+
PAYMENT_LINK_UNAVAILABLE_REASON_CODE_CHARGE_NOT_OPEN = 'CHARGE_NOT_OPEN'
|
|
118
|
+
PAYMENT_LINK_UNAVAILABLE_REASON_CODE_PAYMENT_LINK_PAUSED = 'PAYMENT_LINK_PAUSED'
|
|
119
|
+
PAYMENT_LINK_UNAVAILABLE_REASON_CODE_PAYMENT_METHODS_UNAVAILABLE = 'PAYMENT_METHODS_UNAVAILABLE'
|
|
120
|
+
PAYMENT_LINK_UNAVAILABLE_REASON_CODE_PIX_CANCELLATION_PENDING = 'PIX_CANCELLATION_PENDING'
|
|
121
|
+
PAYMENT_LINK_UNAVAILABLE_REASON_CODE_PIX_CANCELLED = 'PIX_CANCELLED'
|
|
122
|
+
REFUND_FAILURE_REASON_CODE_REFUND_FAILURE_REASON_UNAVAILABLE = 'REFUND_FAILURE_REASON_UNAVAILABLE'
|
|
123
|
+
REFUND_FAILURE_REASON_CODE_REFUND_NOT_SUBMITTED = 'REFUND_NOT_SUBMITTED'
|
|
124
|
+
REFUND_FAILURE_REASON_CODE_REFUND_PROCESSING_FAILED = 'REFUND_PROCESSING_FAILED'
|
|
125
|
+
REFUND_FAILURE_REASON_CODE_REFUND_PROCESSING_UNAVAILABLE = 'REFUND_PROCESSING_UNAVAILABLE'
|
|
126
|
+
REFUND_FAILURE_REASON_CODE_REFUND_REJECTED = 'REFUND_REJECTED'
|
|
127
|
+
REFUND_STATUS_ACCEPTED = 'accepted'
|
|
128
|
+
REFUND_STATUS_COMPLETED = 'completed'
|
|
129
|
+
REFUND_STATUS_FAILED = 'failed'
|
|
130
|
+
REFUND_STATUS_RESERVED = 'reserved'
|
|
131
|
+
REFUND_STATUS_UNKNOWN = 'unknown'
|
|
132
|
+
REFUND_UNAVAILABLE_REASON_CODE_PIX_REFUND_ALREADY_COMPLETED = 'PIX_REFUND_ALREADY_COMPLETED'
|
|
133
|
+
REFUND_UNAVAILABLE_REASON_CODE_PIX_REFUND_CASHIN_NOT_FOUND = 'PIX_REFUND_CASHIN_NOT_FOUND'
|
|
134
|
+
REFUND_UNAVAILABLE_REASON_CODE_PIX_REFUND_INSUFFICIENT_BALANCE = 'PIX_REFUND_INSUFFICIENT_BALANCE'
|
|
135
|
+
REFUND_UNAVAILABLE_REASON_CODE_PIX_REFUND_IN_PROGRESS = 'PIX_REFUND_IN_PROGRESS'
|
|
136
|
+
REFUND_UNAVAILABLE_REASON_CODE_PIX_REFUND_NOT_AVAILABLE = 'PIX_REFUND_NOT_AVAILABLE'
|
|
137
|
+
REFUND_UNAVAILABLE_REASON_CODE_PIX_REFUND_PROVIDER_ACCOUNT_NOT_READY = 'PIX_REFUND_PROVIDER_ACCOUNT_NOT_READY'
|
|
138
|
+
REFUND_UNAVAILABLE_REASON_CODE_PIX_REFUND_PROVIDER_UNAVAILABLE = 'PIX_REFUND_PROVIDER_UNAVAILABLE'
|
|
139
|
+
RESOLVE_CHARGE_SCENARIO_REQUEST_ACTION_BOLETO_ISSUANCE = 'boleto_issuance'
|
|
140
|
+
RESOLVE_CHARGE_SCENARIO_REQUEST_ACTION_CANCELLATION = 'cancellation'
|
|
141
|
+
RESOLVE_CHARGE_SCENARIO_REQUEST_ACTION_PIX_ISSUANCE = 'pix_issuance'
|
|
142
|
+
RESOLVE_CHARGE_SCENARIO_REQUEST_OUTCOME_COMPLETED = 'completed'
|
|
143
|
+
RESOLVE_CHARGE_SCENARIO_REQUEST_OUTCOME_FAILED = 'failed'
|
|
144
|
+
STATEMENT_REFERENCE_TYPE_AJUSTE = 4
|
|
145
|
+
STATEMENT_REFERENCE_TYPE_COBRAN_A = 1
|
|
146
|
+
STATEMENT_REFERENCE_TYPE_CONTESTA_O = 2
|
|
147
|
+
STATEMENT_REFERENCE_TYPE_MANUAL = 5
|
|
148
|
+
STATEMENT_REFERENCE_TYPE_SAQUE = 3
|
|
149
|
+
STATEMENT_REFERENCE_TYPE_SEM_REFER_NCIA = nil
|
|
150
|
+
STATEMENT_STATEMENT_TYPE_BLOQUEIO = 9
|
|
151
|
+
STATEMENT_STATEMENT_TYPE_CR_DITO_POR_AJUSTE = 7
|
|
152
|
+
STATEMENT_STATEMENT_TYPE_DEVOLU_O = 5
|
|
153
|
+
STATEMENT_STATEMENT_TYPE_DEVOLU_O_PARCIAL = 6
|
|
154
|
+
STATEMENT_STATEMENT_TYPE_D_BITO_POR_AJUSTE = 8
|
|
155
|
+
STATEMENT_STATEMENT_TYPE_LIBERA_O = 10
|
|
156
|
+
STATEMENT_STATEMENT_TYPE_RECEBIMENTO = 1
|
|
157
|
+
STATEMENT_STATEMENT_TYPE_SAQUE = 4
|
|
158
|
+
STATEMENT_STATEMENT_TYPE_TARIFA = 2
|
|
159
|
+
STATEMENT_STATEMENT_TYPE_TARIFA_DE_SERVI_O = 3
|
|
160
|
+
UPDATE_PAYMENT_LINK_REQUEST_PAYMENT_METHOD_TYPES_ITEM_BOLETO = 2
|
|
161
|
+
UPDATE_PAYMENT_LINK_REQUEST_PAYMENT_METHOD_TYPES_ITEM_PIX = 1
|
|
162
|
+
WEBHOOK_CREATED_DISABLED_REASON_CONTINUOUS_FAILURE = 'continuous_failure'
|
|
163
|
+
WEBHOOK_CREATED_DISABLED_REASON_MANUAL = 'manual'
|
|
164
|
+
WEBHOOK_DISABLED_REASON_CONTINUOUS_FAILURE = 'continuous_failure'
|
|
165
|
+
WEBHOOK_DISABLED_REASON_MANUAL = 'manual'
|
|
166
|
+
WEBHOOK_EVENT_TYPE_CODE_CHARGE_CANCELED = 'charge.canceled'
|
|
167
|
+
WEBHOOK_EVENT_TYPE_CODE_CHARGE_CREATED = 'charge.created'
|
|
168
|
+
WEBHOOK_EVENT_TYPE_CODE_CHARGE_FAILED = 'charge.failed'
|
|
169
|
+
WEBHOOK_EVENT_TYPE_CODE_CHARGE_PAID = 'charge.paid'
|
|
170
|
+
WEBHOOK_EVENT_TYPE_CODE_REFUND_COMPLETED = 'refund.completed'
|
|
171
|
+
WEBHOOK_EVENT_TYPE_CODE_REFUND_FAILED = 'refund.failed'
|
|
172
|
+
WEBHOOK_EVENT_TYPE_CODE_REFUND_REQUESTED = 'refund.requested'
|
|
173
|
+
WEBHOOK_HEALTH_STATUS_DISABLED = 'disabled'
|
|
174
|
+
WEBHOOK_HEALTH_STATUS_FAILING = 'failing'
|
|
175
|
+
WEBHOOK_HEALTH_STATUS_HEALTHY = 'healthy'
|
|
176
|
+
WEBHOOK_HEALTH_STATUS_UNKNOWN = 'unknown'
|
|
177
|
+
WITHDRAWAL_DESTINATION_KEY_TYPE_CNPJ = 'CNPJ'
|
|
178
|
+
WITHDRAWAL_DESTINATION_KEY_TYPE_EMAIL = 'EMAIL'
|
|
179
|
+
WITHDRAWAL_DESTINATION_KEY_TYPE_EVP = 'EVP'
|
|
180
|
+
WITHDRAWAL_DESTINATION_KEY_TYPE_PHONE = 'PHONE'
|
|
181
|
+
WITHDRAWAL_FAILURE_REASON_CODE_ABOVE_MAXIMUM_WITHDRAWAL = 'ABOVE_MAXIMUM_WITHDRAWAL'
|
|
182
|
+
WITHDRAWAL_FAILURE_REASON_CODE_BANK_ACCOUNT_UNAVAILABLE = 'BANK_ACCOUNT_UNAVAILABLE'
|
|
183
|
+
WITHDRAWAL_FAILURE_REASON_CODE_BANK_PROCESSING_FAILURE = 'BANK_PROCESSING_FAILURE'
|
|
184
|
+
WITHDRAWAL_FAILURE_REASON_CODE_BANK_TIMEOUT = 'BANK_TIMEOUT'
|
|
185
|
+
WITHDRAWAL_FAILURE_REASON_CODE_BANK_UNSUPPORTED = 'BANK_UNSUPPORTED'
|
|
186
|
+
WITHDRAWAL_FAILURE_REASON_CODE_BELOW_MINIMUM_WITHDRAWAL = 'BELOW_MINIMUM_WITHDRAWAL'
|
|
187
|
+
WITHDRAWAL_FAILURE_REASON_CODE_BLOCKED_BALANCE = 'BLOCKED_BALANCE'
|
|
188
|
+
WITHDRAWAL_FAILURE_REASON_CODE_DUPLICATED_REQUEST = 'DUPLICATED_REQUEST'
|
|
189
|
+
WITHDRAWAL_FAILURE_REASON_CODE_INSUFFICIENT_BALANCE = 'INSUFFICIENT_BALANCE'
|
|
190
|
+
WITHDRAWAL_FAILURE_REASON_CODE_INTERNAL_ERROR = 'INTERNAL_ERROR'
|
|
191
|
+
WITHDRAWAL_FAILURE_REASON_CODE_INVALID_ACCOUNT_TYPE = 'INVALID_ACCOUNT_TYPE'
|
|
192
|
+
WITHDRAWAL_FAILURE_REASON_CODE_INVALID_BANK_ACCOUNT = 'INVALID_BANK_ACCOUNT'
|
|
193
|
+
WITHDRAWAL_FAILURE_REASON_CODE_RISK_POLICY_REJECTED = 'RISK_POLICY_REJECTED'
|
|
194
|
+
WITHDRAWAL_FAILURE_REASON_CODE_WITHDRAWAL_FAILURE_REASON_UNAVAILABLE = 'WITHDRAWAL_FAILURE_REASON_UNAVAILABLE'
|
|
195
|
+
WITHDRAWAL_FAILURE_REASON_CODE_WITHDRAWAL_LIMIT_REACHED = 'WITHDRAWAL_LIMIT_REACHED'
|
|
196
|
+
WITHDRAWAL_FAILURE_REASON_CODE_WITHDRAWAL_TEMPORARILY_UNAVAILABLE = 'WITHDRAWAL_TEMPORARILY_UNAVAILABLE'
|
|
197
|
+
WITHDRAWAL_PIX_DESTINATION_KEY_TYPE_CNPJ = 'CNPJ'
|
|
198
|
+
WITHDRAWAL_PIX_DESTINATION_KEY_TYPE_EMAIL = 'EMAIL'
|
|
199
|
+
WITHDRAWAL_PIX_DESTINATION_KEY_TYPE_EVP = 'EVP'
|
|
200
|
+
WITHDRAWAL_PIX_DESTINATION_KEY_TYPE_PHONE = 'PHONE'
|
|
201
|
+
WITHDRAWAL_STATUS_CANCELED = 'CANCELED'
|
|
202
|
+
WITHDRAWAL_STATUS_COMPLETED = 'COMPLETED'
|
|
203
|
+
WITHDRAWAL_STATUS_FAILED = 'FAILED'
|
|
204
|
+
WITHDRAWAL_STATUS_PENDING = 'PENDING'
|
|
205
|
+
WITHDRAWAL_STATUS_PROCESSING = 'PROCESSING'
|
|
206
|
+
WITHDRAWAL_STATUS_UNKNOWN = 'UNKNOWN'
|
|
207
|
+
end
|
|
208
|
+
end
|
data/lib/raims/errors.rb
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Raims
|
|
4
|
+
class RaimsError < StandardError
|
|
5
|
+
attr_reader :last_response, :api_error
|
|
6
|
+
|
|
7
|
+
def initialize(message, last_response: nil, api_error: nil)
|
|
8
|
+
super(message)
|
|
9
|
+
@last_response = last_response
|
|
10
|
+
@api_error = api_error && Util.deep_freeze(api_error)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def http_status
|
|
14
|
+
last_response&.status_code
|
|
15
|
+
end
|
|
16
|
+
alias status_code http_status
|
|
17
|
+
|
|
18
|
+
def request_id
|
|
19
|
+
last_response&.request_id
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def retry_after
|
|
23
|
+
last_response&.retry_after
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def code
|
|
27
|
+
value = api_error && api_error['code']
|
|
28
|
+
value if value.is_a?(String)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def param
|
|
32
|
+
api_error && api_error['param']
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def errors
|
|
36
|
+
api_error && api_error['errors']
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def details
|
|
40
|
+
value = api_error && api_error['details']
|
|
41
|
+
value if value.is_a?(Array)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def inspect
|
|
45
|
+
"#<#{self.class} http_status=#{http_status.inspect}>"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class ApiError < RaimsError; end
|
|
50
|
+
class AuthenticationError < ApiError; end
|
|
51
|
+
class PermissionError < ApiError; end
|
|
52
|
+
class NotFoundError < ApiError; end
|
|
53
|
+
class InvalidRequestError < ApiError; end
|
|
54
|
+
class ConflictError < ApiError; end
|
|
55
|
+
class RateLimitError < ApiError; end
|
|
56
|
+
class ConnectionError < RaimsError; end
|
|
57
|
+
class UnexpectedResponseError < RaimsError; end
|
|
58
|
+
class SignatureVerificationError < RaimsError; end
|
|
59
|
+
end
|