inttegro 1.0.0
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/.dockerignore +9 -0
- data/CHANGELOG.md +17 -0
- data/Dockerfile +23 -0
- data/LICENSE +21 -0
- data/README.md +104 -0
- data/Rakefile +50 -0
- data/lib/inttegro/client.rb +159 -0
- data/lib/inttegro/enums.rb +6 -0
- data/lib/inttegro/errors.rb +128 -0
- data/lib/inttegro/file_download.rb +29 -0
- data/lib/inttegro/generated/enums.rb +693 -0
- data/lib/inttegro/generated/models.rb +3840 -0
- data/lib/inttegro/generated/operations.rb +369 -0
- data/lib/inttegro/http_client.rb +639 -0
- data/lib/inttegro/models.rb +132 -0
- data/lib/inttegro/resources/apps.rb +24 -0
- data/lib/inttegro/resources/balance_transactions.rb +28 -0
- data/lib/inttegro/resources/balances.rb +16 -0
- data/lib/inttegro/resources/broadcasts.rb +28 -0
- data/lib/inttegro/resources/chimes.rb +32 -0
- data/lib/inttegro/resources/customers.rb +28 -0
- data/lib/inttegro/resources/file_links.rb +50 -0
- data/lib/inttegro/resources/file_references.rb +20 -0
- data/lib/inttegro/resources/files.rb +39 -0
- data/lib/inttegro/resources/financial_accounts.rb +104 -0
- data/lib/inttegro/resources/keys.rb +60 -0
- data/lib/inttegro/resources/message_templates.rb +78 -0
- data/lib/inttegro/resources/orders.rb +422 -0
- data/lib/inttegro/resources/otp.rb +30 -0
- data/lib/inttegro/resources/payment_methods.rb +250 -0
- data/lib/inttegro/resources/payouts.rb +200 -0
- data/lib/inttegro/resources/prices.rb +40 -0
- data/lib/inttegro/resources/products.rb +48 -0
- data/lib/inttegro/resources/purchase_intents.rb +44 -0
- data/lib/inttegro/resources/refunds.rb +36 -0
- data/lib/inttegro/resources/schedules.rb +28 -0
- data/lib/inttegro/resources/spec.rb +16 -0
- data/lib/inttegro/resources/upload_requests.rb +66 -0
- data/lib/inttegro/response_object.rb +86 -0
- data/lib/inttegro/transport_response.rb +65 -0
- data/lib/inttegro/types.rb +32 -0
- data/lib/inttegro/version.rb +6 -0
- data/lib/inttegro.rb +14 -0
- data/rbi/inttegro/generated.rbi +529 -0
- metadata +107 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: strict
|
|
3
|
+
|
|
4
|
+
module Inttegro
|
|
5
|
+
module Resources
|
|
6
|
+
class UploadRequests
|
|
7
|
+
def initialize(http)
|
|
8
|
+
@http = T.let(http, Inttegro::HTTPClient)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def create(payload, idempotency_key: nil)
|
|
12
|
+
@http.post_model(
|
|
13
|
+
"/upload_requests/create",
|
|
14
|
+
Inttegro::Models::UploadRequestResponse,
|
|
15
|
+
payload,
|
|
16
|
+
headers: headers(idempotency_key)
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def lookup(id:)
|
|
21
|
+
@http.post_model(
|
|
22
|
+
"/upload_requests/lookup",
|
|
23
|
+
Inttegro::Models::UploadRequestWithAttemptResponse,
|
|
24
|
+
{ id: id }
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def page(payload = {})
|
|
29
|
+
@http.post_model("/upload_requests/page", Inttegro::Models::UploadRequestPageResponse, payload || {})
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def cancel(payload, idempotency_key: nil)
|
|
33
|
+
@http.post_model(
|
|
34
|
+
"/upload_requests/cancel",
|
|
35
|
+
Inttegro::Models::UploadRequestResponse,
|
|
36
|
+
payload,
|
|
37
|
+
headers: headers(idempotency_key)
|
|
38
|
+
)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def review(payload, idempotency_key: nil)
|
|
42
|
+
@http.post_model(
|
|
43
|
+
"/upload_requests/review",
|
|
44
|
+
Inttegro::Models::UploadRequestWithAttemptResponse,
|
|
45
|
+
payload,
|
|
46
|
+
headers: headers(idempotency_key)
|
|
47
|
+
)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def fulfill(upload_url:, file:)
|
|
51
|
+
@http.post_multipart_model(
|
|
52
|
+
upload_url,
|
|
53
|
+
Inttegro::Models::FulfillUploadRequestResponse,
|
|
54
|
+
files: { file: file },
|
|
55
|
+
authenticated: false
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
private
|
|
60
|
+
|
|
61
|
+
def headers(idempotency_key)
|
|
62
|
+
idempotency_key ? { "Idempotency-Key" => idempotency_key } : {}
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: strict
|
|
3
|
+
|
|
4
|
+
require "sorbet-runtime"
|
|
5
|
+
|
|
6
|
+
require_relative "models"
|
|
7
|
+
require_relative "types"
|
|
8
|
+
|
|
9
|
+
module Inttegro
|
|
10
|
+
# Lightweight wrapper for API responses that allows both hash-style and
|
|
11
|
+
# method-style access while keeping values serializable.
|
|
12
|
+
class ResponseObject
|
|
13
|
+
extend T::Sig
|
|
14
|
+
|
|
15
|
+
sig { params(data: Types::Payload).void }
|
|
16
|
+
def initialize(data = {})
|
|
17
|
+
@data = T.let({}, T::Hash[String, Object])
|
|
18
|
+
set_data(data)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
sig { params(key: Types::Key).returns(Object) }
|
|
22
|
+
def [](key)
|
|
23
|
+
@data[key.to_s]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
sig { returns(T::Hash[String, Object]) }
|
|
27
|
+
def to_h
|
|
28
|
+
@data.transform_values { |value| deep_unwrap(value) }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
sig { params(klass: T::Class[T::Struct]).returns(T::Struct) }
|
|
32
|
+
def deserialize(klass)
|
|
33
|
+
Inttegro::Models.deserialize(to_h, klass)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
sig { params(name: Symbol, include_private: T::Boolean).returns(T::Boolean) }
|
|
37
|
+
def respond_to_missing?(name, include_private = false)
|
|
38
|
+
@data.key?(name.to_s) || super
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
sig { params(data: Types::Payload).void }
|
|
44
|
+
def set_data(data)
|
|
45
|
+
data.each do |key, value|
|
|
46
|
+
@data[key.to_s] = wrap(value)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
sig { params(value: Object).returns(Object) }
|
|
51
|
+
def wrap(value)
|
|
52
|
+
case value
|
|
53
|
+
when Hash
|
|
54
|
+
self.class.new(value)
|
|
55
|
+
when Array
|
|
56
|
+
value.map { |item| wrap(item) }
|
|
57
|
+
else
|
|
58
|
+
value
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
sig { params(value: Object).returns(Object) }
|
|
63
|
+
def deep_unwrap(value)
|
|
64
|
+
case value
|
|
65
|
+
when ResponseObject
|
|
66
|
+
value.to_h
|
|
67
|
+
when Hash
|
|
68
|
+
value.transform_values { |v| deep_unwrap(v) }
|
|
69
|
+
when Array
|
|
70
|
+
value.map { |v| deep_unwrap(v) }
|
|
71
|
+
else
|
|
72
|
+
value
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
sig do
|
|
77
|
+
params(name: Symbol, args: Object, block: T.nilable(Proc)).returns(Object)
|
|
78
|
+
end
|
|
79
|
+
def method_missing(name, *args, &block)
|
|
80
|
+
key = name.to_s
|
|
81
|
+
return @data[key] if @data.key?(key)
|
|
82
|
+
|
|
83
|
+
super
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: strict
|
|
3
|
+
|
|
4
|
+
require "sorbet-runtime"
|
|
5
|
+
|
|
6
|
+
require_relative "types"
|
|
7
|
+
|
|
8
|
+
module Inttegro
|
|
9
|
+
# Normalizes Net::HTTP and custom adapter responses at the SDK boundary.
|
|
10
|
+
# Adapter objects are deliberately accepted as Object and validated here so
|
|
11
|
+
# unknown values cannot flow unchecked through the rest of the SDK.
|
|
12
|
+
class TransportResponse
|
|
13
|
+
extend T::Sig
|
|
14
|
+
|
|
15
|
+
sig { returns(String) }
|
|
16
|
+
attr_reader :code, :body, :message
|
|
17
|
+
|
|
18
|
+
sig { returns(Types::ResponseHeaders) }
|
|
19
|
+
attr_reader :headers
|
|
20
|
+
|
|
21
|
+
sig { params(response: Object).void }
|
|
22
|
+
def initialize(response)
|
|
23
|
+
@code = T.let(read_string(response, :code), String)
|
|
24
|
+
@body = T.let(read_string(response, :body), String)
|
|
25
|
+
@message = T.let(read_string(response, :message), String)
|
|
26
|
+
@headers = T.let(normalize_headers(read_headers(response)), Types::ResponseHeaders)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
sig { params(name: String).returns(T.nilable(String)) }
|
|
30
|
+
def [](name)
|
|
31
|
+
pair = @headers.find { |key, _values| key.casecmp?(name) }
|
|
32
|
+
pair&.last&.first
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
sig { params(response: Object, name: Symbol).returns(String) }
|
|
38
|
+
def read_string(response, name)
|
|
39
|
+
unless response.respond_to?(name)
|
|
40
|
+
raise TypeError, "HTTP adapter response must respond to ##{name}"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
value = response.public_send(name)
|
|
44
|
+
value.nil? ? "" : value.to_s
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
sig { params(response: Object).returns(Object) }
|
|
48
|
+
def read_headers(response)
|
|
49
|
+
return response.public_send(:headers) if response.respond_to?(:headers)
|
|
50
|
+
return response.public_send(:to_hash) if response.respond_to?(:to_hash)
|
|
51
|
+
|
|
52
|
+
{}
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
sig { params(value: Object).returns(Types::ResponseHeaders) }
|
|
56
|
+
def normalize_headers(value)
|
|
57
|
+
return {} unless value.is_a?(Hash)
|
|
58
|
+
|
|
59
|
+
value.each_with_object({}) do |(key, header_value), output|
|
|
60
|
+
values = header_value.is_a?(Array) ? header_value.map(&:to_s) : [header_value.to_s]
|
|
61
|
+
output[key.to_s] = values
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: strict
|
|
3
|
+
|
|
4
|
+
require "sorbet-runtime"
|
|
5
|
+
require "net/http"
|
|
6
|
+
require "uri"
|
|
7
|
+
|
|
8
|
+
module Inttegro
|
|
9
|
+
# Shared public types used by the SDK's Sorbet signatures.
|
|
10
|
+
module Types
|
|
11
|
+
Scalar = T.type_alias { T.any(String, Integer, Float, TrueClass, FalseClass, NilClass) }
|
|
12
|
+
Key = T.type_alias { T.any(String, Symbol) }
|
|
13
|
+
|
|
14
|
+
# Ruby's type system cannot express recursive JSON containers without an
|
|
15
|
+
# escape hatch. Object is deliberate here: callers must narrow an unknown
|
|
16
|
+
# wire value before using it, instead of silently disabling checks.
|
|
17
|
+
Payload = T.type_alias { T::Hash[Key, Object] }
|
|
18
|
+
Headers = T.type_alias { T::Hash[String, String] }
|
|
19
|
+
ResponseHeaders = T.type_alias { T::Hash[String, T::Array[String]] }
|
|
20
|
+
QueryValue = T.type_alias do
|
|
21
|
+
T.any(Scalar, T::Array[String], T::Array[Integer], T::Array[Float])
|
|
22
|
+
end
|
|
23
|
+
Query = T.type_alias { T::Hash[Key, QueryValue] }
|
|
24
|
+
RequestBody = T.type_alias { T.any(Payload, T::Struct) }
|
|
25
|
+
WireValue = T.type_alias do
|
|
26
|
+
T.any(Scalar, T::Enum, T::Struct, Payload, T::Array[Object])
|
|
27
|
+
end
|
|
28
|
+
Adapter = T.type_alias do
|
|
29
|
+
T.proc.params(uri: URI::Generic, request: Net::HTTPRequest).returns(Object)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
data/lib/inttegro.rb
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: strict
|
|
3
|
+
|
|
4
|
+
require "sorbet-runtime"
|
|
5
|
+
|
|
6
|
+
require_relative "inttegro/types"
|
|
7
|
+
require_relative "inttegro/client"
|
|
8
|
+
require_relative "inttegro/errors"
|
|
9
|
+
require_relative "inttegro/enums"
|
|
10
|
+
require_relative "inttegro/models"
|
|
11
|
+
require_relative "inttegro/version"
|
|
12
|
+
|
|
13
|
+
module Inttegro
|
|
14
|
+
end
|