inttegro 4.3.1 → 5.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.
@@ -48,7 +48,6 @@ module Inttegro
48
48
  "/orders/send_receipt" => Inttegro::OrderDocumentDeliveryResult,
49
49
  "/orders/page" => Inttegro::PageOrdersEnvelope,
50
50
  "/refunds/create" => Inttegro::RefundResponse,
51
- "/orders/refund" => Inttegro::RefundResponse,
52
51
  "/refunds/cancel" => Inttegro::RefundResponse,
53
52
  "/refunds/lookup" => Inttegro::RefundResponse,
54
53
  "/refunds/page" => Inttegro::RefundPageResponse,
@@ -72,7 +71,7 @@ module Inttegro
72
71
  "/financial_accounts/reconnect" => Inttegro::ReconnectFinancialAccountResponse,
73
72
  "/financial_accounts/enable_pull" => Inttegro::EnableFinancialAccountPullResponse,
74
73
  "/financial_accounts/disable_pull" => Inttegro::DisableFinancialAccountPullResponse,
75
- "/balances" => Inttegro::BalanceSnapshot,
74
+ "/balances" => Inttegro::BalanceSnapshotResponse,
76
75
  "/balance_transactions/lookup" => Inttegro::BalanceTransactionResponse,
77
76
  "/balance_transactions/page" => Inttegro::BalanceTransactionPageResponse,
78
77
  "/payouts/schedule" => Inttegro::SchedulePayoutResponse,
@@ -171,7 +170,6 @@ module Inttegro
171
170
  "/orders/send_receipt" => "Inttegro::OrderDocumentDeliveryRequest",
172
171
  "/orders/page" => "Inttegro::PageOrdersRequest",
173
172
  "/refunds/create" => "Inttegro::CreateRefundRequest",
174
- "/orders/refund" => "Inttegro::CreateRefundRequest",
175
173
  "/refunds/cancel" => "Inttegro::CancelRefundRequest",
176
174
  "/refunds/lookup" => "Inttegro::LookupRefundRequest",
177
175
  "/refunds/page" => "Inttegro::PageRefundsRequest",
@@ -292,7 +290,6 @@ module Inttegro
292
290
  "/orders/send_receipt" => "sendOrderReceipt",
293
291
  "/orders/page" => "pageOrders",
294
292
  "/refunds/create" => "createRefund",
295
- "/orders/refund" => "createRefundAlias",
296
293
  "/refunds/cancel" => "cancelRefund",
297
294
  "/refunds/lookup" => "lookupRefund",
298
295
  "/refunds/page" => "pageRefunds",
@@ -4,6 +4,7 @@
4
4
  require "json"
5
5
  require "net/http"
6
6
  require "securerandom"
7
+ require "time"
7
8
  require "uri"
8
9
 
9
10
  require_relative "errors"
@@ -626,8 +627,6 @@ module Inttegro
626
627
 
627
628
  sig { params(path: String).returns(T.nilable(T::Class[T::Struct])) }
628
629
  def response_model_for(path)
629
- return T.cast(Inttegro.const_get(:OrderEnvelope), T::Class[T::Struct]) if path == "/orders/new"
630
-
631
630
  Inttegro::Operations::RESPONSE_MODELS[path]
632
631
  end
633
632
 
@@ -654,11 +653,11 @@ module Inttegro
654
653
  require_keys(body, %w[product_id price_id], path)
655
654
  when "/products/lookup", "/products/update", "/products/publish", "/products/unpublish", "/products/archive"
656
655
  require_keys(body, %w[product_id], path)
657
- when "/orders/create", "/orders/new"
656
+ when "/orders/create"
658
657
  require_any(body, %w[customer_data customer_id], path)
659
658
  require_keys(body, %w[line_items], path)
660
659
  when "/orders/lookup", "/orders/update", "/orders/request_confirmation", "/orders/finalize",
661
- "/orders/cancel", "/orders/refund", "/orders/complete"
660
+ "/orders/cancel", "/orders/complete"
662
661
  require_keys(body, %w[order_id], path)
663
662
  when "/orders/confirm_payment"
664
663
  require_keys(body, %w[order_id token], path)
@@ -727,6 +726,8 @@ module Inttegro
727
726
  normalize_payload(value.serialize)
728
727
  when T::Enum
729
728
  value.serialize
729
+ when Time
730
+ value.iso8601(9)
730
731
  when Hash
731
732
  normalize_payload(value)
732
733
  when Array
@@ -2,6 +2,8 @@
2
2
  # typed: strict
3
3
 
4
4
  require "sorbet-runtime"
5
+ require "set"
6
+ require "time"
5
7
 
6
8
  require_relative "generated/models"
7
9
  require_relative "types"
@@ -9,6 +11,21 @@ require_relative "types"
9
11
  module Inttegro
10
12
  extend T::Sig
11
13
 
14
+ TEMPORAL_FIELDS = T.let(%w[
15
+ after archived_at as_of at attempted_at available_at canceled_at checked_at
16
+ claimed_at completed_at created_after created_at created_before deleted_at
17
+ delivered_at disconnected_at due_at enabled_at execute_after executed_at
18
+ expected_at expired_at expires_at expires_on failed_at fulfilled_at inactive_at
19
+ includes_transactions_before initialized_at initiated_at issued_at last_accessed_at
20
+ last_attempted_at last_email_event_at last_used_at occurred_at paid_at payment_due_at
21
+ processing_at published_at queued_at reviewed_at revoked_at scheduled_at sealed_at
22
+ send_after sent_at succeeded_at supplied_at suppressed_at token_sent_at updated_at
23
+ uploading_at valid_until verified_at
24
+ ].to_set.freeze, T::Set[String])
25
+ OPAQUE_TIMESTAMP_CONTAINERS = T.let(%w[
26
+ custom_data details headers json_ld mandate metadata variables
27
+ ].to_set.freeze, T::Set[String])
28
+
12
29
  # Amount primitives live under Money so the namespace can grow to include
13
30
  # currency conversion and formatting helpers without treating money as a
14
31
  # single value type.
@@ -100,31 +117,42 @@ module Inttegro
100
117
 
101
118
  sig { returns(T::Boolean) }
102
119
  def valid?
103
- !id.empty? && !order_id.empty? && !created_at.empty? && valid_source?
120
+ !id.empty? && !order_id.empty? && valid_source?
104
121
  end
105
122
  end
106
123
 
107
124
  sig { params(value: Object, klass: T::Class[T::Struct]).returns(T::Struct) }
108
125
  def self.deserialize(value, klass)
109
- data = stringify_json_keys(value)
126
+ data = stringify_json_keys(value, decode_timestamps: true)
110
127
  raise TypeError, "expected an object for #{klass}, got #{data.class}" unless data.is_a?(Hash)
111
128
 
112
129
  T.cast(klass, T.class_of(T::Struct)).from_hash(data)
113
130
  end
114
131
 
115
- sig { params(value: Object).returns(Object) }
116
- def self.stringify_json_keys(value)
132
+ sig { params(value: Object, decode_timestamps: T::Boolean).returns(Object) }
133
+ def self.stringify_json_keys(value, decode_timestamps: false)
117
134
  case value
118
135
  when T::Struct
119
- stringify_json_keys(value.serialize)
136
+ stringify_json_keys(value.serialize, decode_timestamps: decode_timestamps)
120
137
  when T::Enum
121
138
  value.serialize
122
139
  when Hash
123
140
  value.each_with_object({}) do |(key, item), output|
124
- output[key.to_s] = stringify_json_keys(item)
141
+ field = key.to_s
142
+ child_decode = decode_timestamps && !OPAQUE_TIMESTAMP_CONTAINERS.include?(field)
143
+ output[field] = if child_decode && TEMPORAL_FIELDS.include?(field) && item.is_a?(String)
144
+ unless item.match?(/(?:Z|[+-]\d{2}:\d{2})\z/)
145
+ raise ArgumentError, "timestamp #{field} must include a UTC offset"
146
+ end
147
+ Time.iso8601(item)
148
+ else
149
+ stringify_json_keys(item, decode_timestamps: child_decode)
150
+ end
125
151
  end
126
152
  when Array
127
- value.map { |item| stringify_json_keys(item) }
153
+ value.map { |item| stringify_json_keys(item, decode_timestamps: decode_timestamps) }
154
+ when Time
155
+ value.iso8601(9)
128
156
  else
129
157
  value
130
158
  end
@@ -9,7 +9,7 @@ module Inttegro
9
9
  end
10
10
 
11
11
  def get
12
- @http.post_model("/balances", Inttegro::BalanceSnapshot, {})
12
+ @http.post_resource("/balances", Inttegro::BalanceSnapshot, :balances, {})
13
13
  end
14
14
  end
15
15
  end
@@ -103,10 +103,6 @@ module Inttegro
103
103
  @http.post_resource("/orders/create", Inttegro::Order, :order, payload)
104
104
  end
105
105
 
106
- def new(payload)
107
- @http.post_resource("/orders/new", Inttegro::Order, :order, payload)
108
- end
109
-
110
106
  # Retrieve an existing order by its ID.
111
107
  #
112
108
  # Returns full order details including customer, line items, payment state, and invoice information.
@@ -358,32 +354,6 @@ module Inttegro
358
354
  )
359
355
  end
360
356
 
361
- # Create a refund through the /orders/refund compatibility alias.
362
- #
363
- # This accepts the same line-item payload as client.refunds.create and returns
364
- # the created Refund directly. New integrations should use that canonical method.
365
- #
366
- # @param payload [Hash] Create-refund payload containing order_id, reason, and line_items
367
- #
368
- # @return [Inttegro::Refund] Created refund
369
- #
370
- # @example Refund an order
371
- # refund = client.orders.refund(
372
- # order_id: 'or_0123456789abcdefghijklmnopqrstuvwxyzABCD',
373
- # reason: 'requested_by_customer',
374
- # line_items: [{
375
- # order_line_item_id: 'oli_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN',
376
- # refund_amount: { currency: 'ghs', value: 2500 }
377
- # }]
378
- # )
379
- #
380
- # puts "Refund created: #{refund.id}"
381
- #
382
- # @see https://studio.inttegro.com/refunds
383
- def refund(payload)
384
- @http.post_resource("/orders/refund", Inttegro::Refund, :refund, payload)
385
- end
386
-
387
357
  # Retrieve a paginated list of orders.
388
358
  #
389
359
  # Returns orders in reverse chronological order (most recent first).
@@ -144,8 +144,8 @@ module Inttegro
144
144
  # @option payload [Integer] :page Page number to retrieve (minimum 1, default: 1)
145
145
  # @option payload [Integer] :per_page Number of results per page (minimum 1, maximum 100, default: 10)
146
146
  # @option payload [String] :status Filter by payout status (e.g., 'pending', 'paid', 'failed')
147
- # @option payload [String] :created_after Filter payouts created after this timestamp (ISO 8601)
148
- # @option payload [String] :created_before Filter payouts created before this timestamp (ISO 8601)
147
+ # @option payload [Time] :created_after Filter payouts created after this timestamp
148
+ # @option payload [Time] :created_before Filter payouts created before this timestamp
149
149
  #
150
150
  # @return [Inttegro::PayoutPage] Paginated list of payouts
151
151
  #
@@ -2,5 +2,5 @@
2
2
  # typed: strict
3
3
 
4
4
  module Inttegro
5
- VERSION = "4.3.1"
5
+ VERSION = "5.0.0"
6
6
  end
@@ -256,18 +256,12 @@ module Inttegro
256
256
  sig { params(order_id: String, options: Inttegro::Types::Payload).returns(Inttegro::Order) }
257
257
  def lookup(order_id:, **options); end
258
258
 
259
- sig { params(payload: T.any(T.any(Inttegro::CreateOrderNewCustomer, Inttegro::CreateOrderExistingCustomer), Inttegro::Types::Payload)).returns(Inttegro::Order) }
260
- def new(payload); end
261
-
262
259
  sig { params(payload: T.nilable(T.any(Inttegro::PageOrdersRequest, Inttegro::Types::Payload))).returns(Inttegro::OrderPage) }
263
260
  def page(payload = nil); end
264
261
 
265
262
  sig { params(payload: T.any(Inttegro::PayOrderRequest, Inttegro::Types::Payload)).returns(Inttegro::Order) }
266
263
  def pay(payload); end
267
264
 
268
- sig { params(payload: T.any(Inttegro::CreateRefundRequest, Inttegro::Types::Payload)).returns(Inttegro::Refund) }
269
- def refund(payload); end
270
-
271
265
  sig { params(order_id: String, request_meta: T.nilable(Inttegro::Types::Payload)).returns(Inttegro::Order) }
272
266
  def request_confirmation(order_id:, request_meta: nil); end
273
267
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inttegro
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.1
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Inttegro Engineering
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-09-08 00:00:00.000000000 Z
11
+ date: 2026-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sorbet-runtime