moov_ruby 26.2.0 → 26.2.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.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/lib/moov/apple_pay.rb +3 -3
  3. data/lib/moov/card_issuing.rb +22 -13
  4. data/lib/moov/models/components/batchgettransfersrequest.rb +32 -0
  5. data/lib/moov/models/components/batchgettransfersrequest.rbi +13 -0
  6. data/lib/moov/models/components/instantbankfailurecode.rb +28 -0
  7. data/lib/moov/models/components/instantbankfailurecode.rbi +11 -0
  8. data/lib/moov/models/components/instantbanknetwork.rb +19 -0
  9. data/lib/moov/models/components/instantbanknetwork.rbi +11 -0
  10. data/lib/moov/models/components/instantbanktransactiondetails.rb +64 -0
  11. data/lib/moov/models/components/instantbanktransactiondetails.rbi +29 -0
  12. data/lib/moov/models/components/instantbanktransactionstatus.rb +21 -0
  13. data/lib/moov/models/components/instantbanktransactionstatus.rbi +11 -0
  14. data/lib/moov/models/components/transferdestination.rb +6 -2
  15. data/lib/moov/models/components/transferdestination.rbi +2 -0
  16. data/lib/moov/models/components/webhookbillingstatementcreated.rb +6 -2
  17. data/lib/moov/models/components/webhookbillingstatementcreated.rbi +2 -0
  18. data/lib/moov/models/components.rb +5 -0
  19. data/lib/moov/models/operations/batchgettransfers_request.rb +36 -0
  20. data/lib/moov/models/operations/batchgettransfers_request.rbi +15 -0
  21. data/lib/moov/models/operations/batchgettransfers_response.rb +48 -0
  22. data/lib/moov/models/operations/batchgettransfers_response.rbi +21 -0
  23. data/lib/moov/models/operations/updateissuedcard_response.rb +6 -2
  24. data/lib/moov/models/operations/updateissuedcard_response.rbi +2 -0
  25. data/lib/moov/models/operations.rb +2 -0
  26. data/lib/moov/sdkconfiguration.rb +3 -3
  27. data/lib/moov/transfers.rb +139 -0
  28. data/lib/moov/utils/security.rb +22 -11
  29. metadata +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c37e77a8c1009feac3964a1c91f1bcbd6c02b9e716d7804214488f9fd1dd3140
4
- data.tar.gz: 8014cf1843404b6990f7dc84e182237b6d3baa6c7fff75673c4d0aa2b720c1b8
3
+ metadata.gz: ccf0c4a6c645eda6e971a4644066cda64728a8a22a37889f5bf74eb420b0bb91
4
+ data.tar.gz: ed517f823b66dcb980bb36e1b361d5be235ba64b072f9efddf59daffea9c9ec8
5
5
  SHA512:
6
- metadata.gz: dc7d184b33a90bbaebbf7aaa2e5414e15b99e7b95f4b0fe50699d5eaea748612834978a85eaab900249e78861ed5777babb8aae58891231eb07674749023c394
7
- data.tar.gz: '081254505e2369e709a3f2cb3e552c0a52cf7db217246a71ced62885b9611c5e5bef0fe419d9a0bb11864938837b28701211f0fe5c4766208b8d89cff5cbdb48'
6
+ metadata.gz: 86af8f224ac91d0676d95bf9d96ecb4f35c32b25b7107aa6044f1cab26d0ddbbb26c2b0d57f2ee672dc7faded478f510dc7b899f9308ce090557669be2965a27
7
+ data.tar.gz: 7ce7955e37b184cd7ab65220a414c3094febb06657556743d385025b72d53bc057e3bb8cf6e1cd686fbf9cd29ef75791ec63b145bfe843fb315e04a2f2434e24
@@ -617,12 +617,12 @@ module Moov
617
617
 
618
618
  sig { params(link_apple_pay: Models::Components::LinkApplePay, account_id: ::String, timeout_ms: T.nilable(Integer), http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])).returns(Models::Operations::LinkApplePayTokenResponse) }
619
619
  def link_token(link_apple_pay:, account_id:, timeout_ms: nil, http_headers: nil)
620
- # link_token - Connect an Apple Pay token to the specified account.
620
+ # link_token - Connect an Apple Pay token to the specified account.
621
621
  #
622
- # Read our [Apple Pay tutorial](https://docs.moov.io/guides/sources/cards/apple-pay/#register-your-domains) to learn more.
622
+ # Read our [Apple Pay tutorial](https://docs.moov.io/guides/sources/cards/apple-pay/#register-your-domains) to learn more.
623
623
  # The `token` data is defined by Apple Pay and should be passed through from Apple Pay's response unmodified.
624
624
  #
625
- # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
625
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
626
626
  # you'll need to specify the `/accounts/{accountID}/cards.write` scope.
627
627
  request = Models::Operations::LinkApplePayTokenRequest.new(
628
628
  account_id: account_id,
@@ -555,19 +555,28 @@ module Moov
555
555
  end
556
556
 
557
557
  content_type = http_response.headers.fetch('Content-Type', 'application/octet-stream')
558
- if Utils.match_status_code(http_response.status, ['204'])
559
- http_response = @sdk_configuration.hooks.after_success(
560
- hook_ctx: SDKHooks::AfterSuccessHookContext.new(
561
- hook_ctx: hook_ctx
562
- ),
563
- response: http_response
564
- )
565
- return Models::Operations::UpdateIssuedCardResponse.new(
566
- status_code: http_response.status,
567
- content_type: content_type,
568
- raw_response: http_response,
569
- headers: {}
570
- )
558
+ if Utils.match_status_code(http_response.status, ['200'])
559
+ if Utils.match_content_type(content_type, 'application/json')
560
+ http_response = @sdk_configuration.hooks.after_success(
561
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
562
+ hook_ctx: hook_ctx
563
+ ),
564
+ response: http_response
565
+ )
566
+ response_data = http_response.env.response_body
567
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::IssuedCard)
568
+ response = Models::Operations::UpdateIssuedCardResponse.new(
569
+ status_code: http_response.status,
570
+ content_type: content_type,
571
+ raw_response: http_response,
572
+ headers: http_response.headers,
573
+ issued_card: T.unsafe(obj)
574
+ )
575
+
576
+ return response
577
+ else
578
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
579
+ end
571
580
  elsif Utils.match_status_code(http_response.status, ['400', '409'])
572
581
  if Utils.match_content_type(content_type, 'application/json')
573
582
  http_response = @sdk_configuration.hooks.after_success(
@@ -0,0 +1,32 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+ # Array of transfer IDs to fetch.
11
+ class BatchGetTransfersRequest
12
+ extend T::Sig
13
+ include Crystalline::MetadataFields
14
+
15
+
16
+ field :transfer_i_ds, Crystalline::Array.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('transferIDs'), required: true } }
17
+
18
+ sig { params(transfer_i_ds: T::Array[::String]).void }
19
+ def initialize(transfer_i_ds:)
20
+ @transfer_i_ds = transfer_i_ds
21
+ end
22
+
23
+ sig { params(other: T.untyped).returns(T::Boolean) }
24
+ def ==(other)
25
+ return false unless other.is_a? self.class
26
+ return false unless @transfer_i_ds == other.transfer_i_ds
27
+ true
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,13 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::BatchGetTransfersRequest
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::BatchGetTransfersRequest
11
+ def transfer_i_ds(); end
12
+ def transfer_i_ds=(str_); end
13
+ end
@@ -0,0 +1,28 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+ # InstantBankFailureCode - Status codes for instant-bank failures.
11
+ class InstantBankFailureCode < T::Enum
12
+ enums do
13
+ PROCESSING_ERROR = new('processing-error')
14
+ INVALID_ACCOUNT = new('invalid-account')
15
+ ACCOUNT_CLOSED = new('account-closed')
16
+ ACCOUNT_BLOCKED = new('account-blocked')
17
+ INVALID_FIELD = new('invalid-field')
18
+ TRANSACTION_NOT_SUPPORTED = new('transaction-not-supported')
19
+ LIMIT_EXCEEDED = new('limit-exceeded')
20
+ INVALID_AMOUNT = new('invalid-amount')
21
+ CUSTOMER_DECEASED = new('customer-deceased')
22
+ PARTICIPANT_NOT_AVAILABLE = new('participant-not-available')
23
+ OTHER = new('other')
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::InstantBankFailureCode
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::InstantBankFailureCode
11
+ end
@@ -0,0 +1,19 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+ # InstantBankNetwork - The network that the transaction was processed on.
11
+ class InstantBankNetwork < T::Enum
12
+ enums do
13
+ FEDNOW = new('fednow')
14
+ RTP = new('rtp')
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::InstantBankNetwork
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::InstantBankNetwork
11
+ end
@@ -0,0 +1,64 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+ # Instant-bank specific details about the transaction.
11
+ class InstantBankTransactionDetails
12
+ extend T::Sig
13
+ include Crystalline::MetadataFields
14
+
15
+ # The network that the transaction was processed on.
16
+ field :network, Models::Components::InstantBankNetwork, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('network'), required: true, 'decoder': ::Moov::Utils.enum_from_string(Models::Components::InstantBankNetwork, false) } }
17
+ # Status of a transaction within the instant-bank lifecycle.
18
+ field :status, Models::Components::InstantBankTransactionStatus, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('status'), required: true, 'decoder': ::Moov::Utils.enum_from_string(Models::Components::InstantBankTransactionStatus, false) } }
19
+ # Response code returned by network on failure.
20
+ field :network_response_code, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('networkResponseCode') } }
21
+ # Status codes for instant-bank failures.
22
+ field :failure_code, Crystalline::Nilable.new(Models::Components::InstantBankFailureCode), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('failureCode'), 'decoder': ::Moov::Utils.enum_from_string(Models::Components::InstantBankFailureCode, true) } }
23
+
24
+ field :end_to_end_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('endToEndID') } }
25
+
26
+ field :initiated_on, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('initiatedOn'), 'decoder': ::Moov::Utils.datetime_from_iso_format(true) } }
27
+
28
+ field :completed_on, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('completedOn'), 'decoder': ::Moov::Utils.datetime_from_iso_format(true) } }
29
+
30
+ field :failed_on, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('failedOn'), 'decoder': ::Moov::Utils.datetime_from_iso_format(true) } }
31
+
32
+ field :accepted_without_posting_on, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('acceptedWithoutPostingOn'), 'decoder': ::Moov::Utils.datetime_from_iso_format(true) } }
33
+
34
+ sig { params(network: Models::Components::InstantBankNetwork, status: Models::Components::InstantBankTransactionStatus, network_response_code: T.nilable(::String), failure_code: T.nilable(Models::Components::InstantBankFailureCode), end_to_end_id: T.nilable(::String), initiated_on: T.nilable(::DateTime), completed_on: T.nilable(::DateTime), failed_on: T.nilable(::DateTime), accepted_without_posting_on: T.nilable(::DateTime)).void }
35
+ def initialize(network:, status:, network_response_code: nil, failure_code: nil, end_to_end_id: nil, initiated_on: nil, completed_on: nil, failed_on: nil, accepted_without_posting_on: nil)
36
+ @network = network
37
+ @status = status
38
+ @network_response_code = network_response_code
39
+ @failure_code = failure_code
40
+ @end_to_end_id = end_to_end_id
41
+ @initiated_on = initiated_on
42
+ @completed_on = completed_on
43
+ @failed_on = failed_on
44
+ @accepted_without_posting_on = accepted_without_posting_on
45
+ end
46
+
47
+ sig { params(other: T.untyped).returns(T::Boolean) }
48
+ def ==(other)
49
+ return false unless other.is_a? self.class
50
+ return false unless @network == other.network
51
+ return false unless @status == other.status
52
+ return false unless @network_response_code == other.network_response_code
53
+ return false unless @failure_code == other.failure_code
54
+ return false unless @end_to_end_id == other.end_to_end_id
55
+ return false unless @initiated_on == other.initiated_on
56
+ return false unless @completed_on == other.completed_on
57
+ return false unless @failed_on == other.failed_on
58
+ return false unless @accepted_without_posting_on == other.accepted_without_posting_on
59
+ true
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,29 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::InstantBankTransactionDetails
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::InstantBankTransactionDetails
11
+ def network(); end
12
+ def network=(str_); end
13
+ def status(); end
14
+ def status=(str_); end
15
+ def network_response_code(); end
16
+ def network_response_code=(str_); end
17
+ def failure_code(); end
18
+ def failure_code=(str_); end
19
+ def end_to_end_id(); end
20
+ def end_to_end_id=(str_); end
21
+ def initiated_on(); end
22
+ def initiated_on=(str_); end
23
+ def completed_on(); end
24
+ def completed_on=(str_); end
25
+ def failed_on(); end
26
+ def failed_on=(str_); end
27
+ def accepted_without_posting_on(); end
28
+ def accepted_without_posting_on=(str_); end
29
+ end
@@ -0,0 +1,21 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+ # InstantBankTransactionStatus - Status of a transaction within the instant-bank lifecycle.
11
+ class InstantBankTransactionStatus < T::Enum
12
+ enums do
13
+ INITIATED = new('initiated')
14
+ COMPLETED = new('completed')
15
+ FAILED = new('failed')
16
+ ACCEPTED_WITHOUT_POSTING = new('accepted-without-posting')
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::InstantBankTransactionStatus
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::InstantBankTransactionStatus
11
+ end
@@ -32,9 +32,11 @@ module Moov
32
32
  field :card_details, Crystalline::Nilable.new(Models::Components::CardTransactionDetails), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('cardDetails') } }
33
33
  # @deprecated true: This will be removed in a future release, please migrate away from it as soon as possible.
34
34
  field :rtp_details, Crystalline::Nilable.new(Models::Components::RtpDetails), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('rtpDetails') } }
35
+ # Instant-bank specific details about the transaction.
36
+ field :instant_bank_details, Crystalline::Nilable.new(Models::Components::InstantBankTransactionDetails), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('instantBankDetails') } }
35
37
 
36
- sig { params(payment_method_id: ::String, payment_method_type: Models::Components::TransferPaymentMethodType, account: Models::Components::TransferAccount, bank_account: T.nilable(Models::Components::TransferPaymentMethodsBankAccount), wallet: T.nilable(Models::Components::TransferPaymentMethodsWallet), card: T.nilable(Models::Components::TransferPaymentMethodsCard), ach_details: T.nilable(Models::Components::ACHTransactionDetails), apple_pay: T.nilable(Models::Components::ApplePayResponse), card_details: T.nilable(Models::Components::CardTransactionDetails), rtp_details: T.nilable(Models::Components::RtpDetails)).void }
37
- def initialize(payment_method_id:, payment_method_type:, account:, bank_account: nil, wallet: nil, card: nil, ach_details: nil, apple_pay: nil, card_details: nil, rtp_details: nil)
38
+ sig { params(payment_method_id: ::String, payment_method_type: Models::Components::TransferPaymentMethodType, account: Models::Components::TransferAccount, bank_account: T.nilable(Models::Components::TransferPaymentMethodsBankAccount), wallet: T.nilable(Models::Components::TransferPaymentMethodsWallet), card: T.nilable(Models::Components::TransferPaymentMethodsCard), ach_details: T.nilable(Models::Components::ACHTransactionDetails), apple_pay: T.nilable(Models::Components::ApplePayResponse), card_details: T.nilable(Models::Components::CardTransactionDetails), rtp_details: T.nilable(Models::Components::RtpDetails), instant_bank_details: T.nilable(Models::Components::InstantBankTransactionDetails)).void }
39
+ def initialize(payment_method_id:, payment_method_type:, account:, bank_account: nil, wallet: nil, card: nil, ach_details: nil, apple_pay: nil, card_details: nil, rtp_details: nil, instant_bank_details: nil)
38
40
  @payment_method_id = payment_method_id
39
41
  @payment_method_type = payment_method_type
40
42
  @account = account
@@ -45,6 +47,7 @@ module Moov
45
47
  @apple_pay = apple_pay
46
48
  @card_details = card_details
47
49
  @rtp_details = rtp_details
50
+ @instant_bank_details = instant_bank_details
48
51
  end
49
52
 
50
53
  sig { params(other: T.untyped).returns(T::Boolean) }
@@ -60,6 +63,7 @@ module Moov
60
63
  return false unless @apple_pay == other.apple_pay
61
64
  return false unless @card_details == other.card_details
62
65
  return false unless @rtp_details == other.rtp_details
66
+ return false unless @instant_bank_details == other.instant_bank_details
63
67
  true
64
68
  end
65
69
  end
@@ -28,4 +28,6 @@ class Moov::Models::Components::TransferDestination
28
28
  def card_details=(str_); end
29
29
  def rtp_details(); end
30
30
  def rtp_details=(str_); end
31
+ def instant_bank_details(); end
32
+ def instant_bank_details=(str_); end
31
33
  end
@@ -13,16 +13,20 @@ module Moov
13
13
  include Crystalline::MetadataFields
14
14
 
15
15
 
16
+ field :account_id, ::String, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('accountID'), required: true } }
17
+
16
18
  field :statement_id, ::String, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('statementID'), required: true } }
17
19
 
18
- sig { params(statement_id: ::String).void }
19
- def initialize(statement_id:)
20
+ sig { params(account_id: ::String, statement_id: ::String).void }
21
+ def initialize(account_id:, statement_id:)
22
+ @account_id = account_id
20
23
  @statement_id = statement_id
21
24
  end
22
25
 
23
26
  sig { params(other: T.untyped).returns(T::Boolean) }
24
27
  def ==(other)
25
28
  return false unless other.is_a? self.class
29
+ return false unless @account_id == other.account_id
26
30
  return false unless @statement_id == other.statement_id
27
31
  true
28
32
  end
@@ -8,6 +8,8 @@ end
8
8
 
9
9
 
10
10
  class Moov::Models::Components::WebhookBillingStatementCreated
11
+ def account_id(); end
12
+ def account_id=(str_); end
11
13
  def statement_id(); end
12
14
  def statement_id=(str_); end
13
15
  end
@@ -82,6 +82,7 @@ module Moov
82
82
  autoload :BankAccountVerificationStatus, 'moov/models/components/bankaccountverificationstatus.rb'
83
83
  autoload :BankAccountWaitFor, 'moov/models/components/bankaccountwaitfor.rb'
84
84
  autoload :BasicPaymentMethod, 'moov/models/components/basicpaymentmethod.rb'
85
+ autoload :BatchGetTransfersRequest, 'moov/models/components/batchgettransfersrequest.rb'
85
86
  autoload :BillableFee, 'moov/models/components/billablefee.rb'
86
87
  autoload :BillingCountAndAmount, 'moov/models/components/billingcountandamount.rb'
87
88
  autoload :BillingInterchangeProgramFee, 'moov/models/components/billinginterchangeprogramfee.rb'
@@ -295,6 +296,10 @@ module Moov
295
296
  autoload :InstantBankCreditPaymentMethodPaymentMethodType, 'moov/models/components/instantbankcreditpaymentmethod_paymentmethodtype.rb'
296
297
  autoload :InstantBankCreditTransferPaymentMethod, 'moov/models/components/instantbankcredittransferpaymentmethod.rb'
297
298
  autoload :InstantBankCreditTransferPaymentMethodPaymentMethodType, 'moov/models/components/instantbankcredittransferpaymentmethod_paymentmethodtype.rb'
299
+ autoload :InstantBankFailureCode, 'moov/models/components/instantbankfailurecode.rb'
300
+ autoload :InstantBankNetwork, 'moov/models/components/instantbanknetwork.rb'
301
+ autoload :InstantBankTransactionDetails, 'moov/models/components/instantbanktransactiondetails.rb'
302
+ autoload :InstantBankTransactionStatus, 'moov/models/components/instantbanktransactionstatus.rb'
298
303
  autoload :InstantPaymentFees, 'moov/models/components/instantpaymentfees.rb'
299
304
  autoload :InstitutionsSearchResponse, 'moov/models/components/institutionssearchresponse.rb'
300
305
  autoload :InvoiceStatus, 'moov/models/components/invoicestatus.rb'
@@ -0,0 +1,36 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Operations
10
+
11
+ class BatchGetTransfersRequest
12
+ extend T::Sig
13
+ include Crystalline::MetadataFields
14
+
15
+
16
+ field :account_id, ::String, { 'path_param': { 'field_name': 'accountID', 'style': 'simple', 'explode': false } }
17
+
18
+ field :batch_get_transfers_request, Models::Components::BatchGetTransfersRequest, { 'request': { 'media_type': 'application/json' } }
19
+
20
+ sig { params(account_id: ::String, batch_get_transfers_request: Models::Components::BatchGetTransfersRequest).void }
21
+ def initialize(account_id:, batch_get_transfers_request:)
22
+ @account_id = account_id
23
+ @batch_get_transfers_request = batch_get_transfers_request
24
+ end
25
+
26
+ sig { params(other: T.untyped).returns(T::Boolean) }
27
+ def ==(other)
28
+ return false unless other.is_a? self.class
29
+ return false unless @account_id == other.account_id
30
+ return false unless @batch_get_transfers_request == other.batch_get_transfers_request
31
+ true
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,15 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Operations::BatchGetTransfersRequest
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Operations::BatchGetTransfersRequest
11
+ def account_id(); end
12
+ def account_id=(str_); end
13
+ def batch_get_transfers_request(); end
14
+ def batch_get_transfers_request=(str_); end
15
+ end
@@ -0,0 +1,48 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Operations
10
+
11
+ class BatchGetTransfersResponse
12
+ extend T::Sig
13
+ include Crystalline::MetadataFields
14
+
15
+ # HTTP response content type for this operation
16
+ field :content_type, ::String
17
+ # HTTP response status code for this operation
18
+ field :status_code, ::Integer
19
+ # Raw HTTP response; suitable for custom response parsing
20
+ field :raw_response, ::Faraday::Response
21
+
22
+ field :headers, Crystalline::Hash.new(Symbol, Crystalline::Array.new(::String))
23
+ # The request completed successfully.
24
+ field :object, Crystalline::Nilable.new(Crystalline::Hash.new(Symbol, Models::Components::Transfer))
25
+
26
+ sig { params(content_type: ::String, status_code: ::Integer, raw_response: ::Faraday::Response, headers: T::Hash[Symbol, T::Array[::String]], object: T.nilable(T::Hash[Symbol, Models::Components::Transfer])).void }
27
+ def initialize(content_type:, status_code:, raw_response:, headers:, object: nil)
28
+ @content_type = content_type
29
+ @status_code = status_code
30
+ @raw_response = raw_response
31
+ @headers = headers
32
+ @object = object
33
+ end
34
+
35
+ sig { params(other: T.untyped).returns(T::Boolean) }
36
+ def ==(other)
37
+ return false unless other.is_a? self.class
38
+ return false unless @content_type == other.content_type
39
+ return false unless @status_code == other.status_code
40
+ return false unless @raw_response == other.raw_response
41
+ return false unless @headers == other.headers
42
+ return false unless @object == other.object
43
+ true
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,21 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Operations::BatchGetTransfersResponse
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Operations::BatchGetTransfersResponse
11
+ def content_type(); end
12
+ def content_type=(str_); end
13
+ def status_code(); end
14
+ def status_code=(str_); end
15
+ def raw_response(); end
16
+ def raw_response=(str_); end
17
+ def headers(); end
18
+ def headers=(str_); end
19
+ def object(); end
20
+ def object=(str_); end
21
+ end
@@ -20,13 +20,16 @@ module Moov
20
20
  field :raw_response, ::Faraday::Response
21
21
 
22
22
  field :headers, Crystalline::Hash.new(Symbol, Crystalline::Array.new(::String))
23
+ # The request completed successfully.
24
+ field :issued_card, Crystalline::Nilable.new(Models::Components::IssuedCard)
23
25
 
24
- sig { params(content_type: ::String, status_code: ::Integer, raw_response: ::Faraday::Response, headers: T::Hash[Symbol, T::Array[::String]]).void }
25
- def initialize(content_type:, status_code:, raw_response:, headers:)
26
+ sig { params(content_type: ::String, status_code: ::Integer, raw_response: ::Faraday::Response, headers: T::Hash[Symbol, T::Array[::String]], issued_card: T.nilable(Models::Components::IssuedCard)).void }
27
+ def initialize(content_type:, status_code:, raw_response:, headers:, issued_card: nil)
26
28
  @content_type = content_type
27
29
  @status_code = status_code
28
30
  @raw_response = raw_response
29
31
  @headers = headers
32
+ @issued_card = issued_card
30
33
  end
31
34
 
32
35
  sig { params(other: T.untyped).returns(T::Boolean) }
@@ -36,6 +39,7 @@ module Moov
36
39
  return false unless @status_code == other.status_code
37
40
  return false unless @raw_response == other.raw_response
38
41
  return false unless @headers == other.headers
42
+ return false unless @issued_card == other.issued_card
39
43
  true
40
44
  end
41
45
  end
@@ -16,4 +16,6 @@ class Moov::Models::Operations::UpdateIssuedCardResponse
16
16
  def raw_response=(str_); end
17
17
  def headers(); end
18
18
  def headers=(str_); end
19
+ def issued_card(); end
20
+ def issued_card=(str_); end
19
21
  end
@@ -10,6 +10,8 @@ module Moov
10
10
  autoload :AcceptDisputeResponse, 'moov/models/operations/acceptdispute_response.rb'
11
11
  autoload :AssignAccountCountriesRequest, 'moov/models/operations/assignaccountcountries_request.rb'
12
12
  autoload :AssignAccountCountriesResponse, 'moov/models/operations/assignaccountcountries_response.rb'
13
+ autoload :BatchGetTransfersRequest, 'moov/models/operations/batchgettransfers_request.rb'
14
+ autoload :BatchGetTransfersResponse, 'moov/models/operations/batchgettransfers_response.rb'
13
15
  autoload :CancelScheduleRequest, 'moov/models/operations/cancelschedule_request.rb'
14
16
  autoload :CancelScheduleResponse, 'moov/models/operations/cancelschedule_response.rb'
15
17
  autoload :CompleteBankAccountVerificationRequest, 'moov/models/operations/completebankaccountverification_request.rb'
@@ -88,9 +88,9 @@ module Moov
88
88
  end
89
89
  @language = 'ruby'
90
90
  @openapi_doc_version = 'v2026.01.00'
91
- @sdk_version = '26.2.0'
92
- @gen_version = '2.869.10'
93
- @user_agent = 'speakeasy-sdk/ruby 26.2.0 2.869.10 v2026.01.00 moov_ruby'
91
+ @sdk_version = '26.2.1'
92
+ @gen_version = '2.879.13'
93
+ @user_agent = 'speakeasy-sdk/ruby 26.2.1 2.879.13 v2026.01.00 moov_ruby'
94
94
  end
95
95
 
96
96
  sig { returns([String, T::Hash[Symbol, String]]) }
@@ -582,6 +582,145 @@ module Moov
582
582
  end
583
583
 
584
584
 
585
+ sig { params(batch_get_transfers_request: Models::Components::BatchGetTransfersRequest, account_id: ::String, timeout_ms: T.nilable(Integer), http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])).returns(Models::Operations::BatchGetTransfersResponse) }
586
+ def batch_get_transfers(batch_get_transfers_request:, account_id:, timeout_ms: nil, http_headers: nil)
587
+ # batch_get_transfers - Retrieve transfer details for multiple transfers in one request. The response is a map from each
588
+ # requested transfer ID to its full transfer details when available; IDs that are not found or not
589
+ # accessible under this account are omitted from the map.
590
+ #
591
+ # Read our [transfers overview guide](https://docs.moov.io/guides/money-movement/overview/) to learn more.
592
+ #
593
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
594
+ # you'll need to specify the `/accounts/{accountID}/transfers.read` scope.
595
+ request = Models::Operations::BatchGetTransfersRequest.new(
596
+ account_id: account_id,
597
+ batch_get_transfers_request: batch_get_transfers_request
598
+ )
599
+ url, params = @sdk_configuration.get_server_details
600
+ base_url = Utils.template_url(url, params)
601
+ url = Utils.generate_url(
602
+ Models::Operations::BatchGetTransfersRequest,
603
+ base_url,
604
+ '/accounts/{accountID}/transfers/.fetch',
605
+ request
606
+ )
607
+ headers = {}
608
+ headers = T.cast(headers, T::Hash[String, String])
609
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :batch_get_transfers_request, :json)
610
+ headers['content-type'] = req_content_type
611
+ raise StandardError, 'request body is required' if data.nil? && form.nil?
612
+
613
+ if form && !form.empty?
614
+ body = Utils.encode_form(form)
615
+ elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded')
616
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
617
+ else
618
+ body = data
619
+ end
620
+ headers['Accept'] = 'application/json'
621
+ headers['user-agent'] = @sdk_configuration.user_agent
622
+
623
+ security = @sdk_configuration.security_source&.call
624
+
625
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
626
+ timeout ||= @sdk_configuration.timeout
627
+
628
+
629
+ connection = @sdk_configuration.client
630
+
631
+ hook_ctx = SDKHooks::HookContext.new(
632
+ config: @sdk_configuration,
633
+ base_url: base_url,
634
+ oauth2_scopes: nil,
635
+ operation_id: 'batchGetTransfers',
636
+ security_source: @sdk_configuration.security_source
637
+ )
638
+
639
+ error = T.let(nil, T.nilable(StandardError))
640
+ http_response = T.let(nil, T.nilable(Faraday::Response))
641
+
642
+
643
+ begin
644
+ http_response = T.must(connection).post(url) do |req|
645
+ req.body = body
646
+ req.headers.merge!(headers)
647
+ req.options.timeout = timeout unless timeout.nil?
648
+ Utils.configure_request_security(req, security)
649
+ http_headers&.each do |key, value|
650
+ req.headers[key.to_s] = value
651
+ end
652
+
653
+ @sdk_configuration.hooks.before_request(
654
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
655
+ hook_ctx: hook_ctx
656
+ ),
657
+ request: req
658
+ )
659
+ end
660
+ rescue StandardError => e
661
+ error = e
662
+ ensure
663
+ if http_response.nil? || Utils.error_status?(http_response.status)
664
+ http_response = @sdk_configuration.hooks.after_error(
665
+ error: error,
666
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
667
+ hook_ctx: hook_ctx
668
+ ),
669
+ response: http_response
670
+ )
671
+ else
672
+ http_response = @sdk_configuration.hooks.after_success(
673
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
674
+ hook_ctx: hook_ctx
675
+ ),
676
+ response: http_response
677
+ )
678
+ end
679
+
680
+ if http_response.nil?
681
+ raise error if !error.nil?
682
+ raise 'no response'
683
+ end
684
+ end
685
+
686
+ content_type = http_response.headers.fetch('Content-Type', 'application/octet-stream')
687
+ if Utils.match_status_code(http_response.status, ['200'])
688
+ if Utils.match_content_type(content_type, 'application/json')
689
+ http_response = @sdk_configuration.hooks.after_success(
690
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
691
+ hook_ctx: hook_ctx
692
+ ),
693
+ response: http_response
694
+ )
695
+ response_data = http_response.env.response_body
696
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Crystalline::Hash.new(Symbol, Models::Components::Transfer))
697
+ response = Models::Operations::BatchGetTransfersResponse.new(
698
+ status_code: http_response.status,
699
+ content_type: content_type,
700
+ raw_response: http_response,
701
+ headers: http_response.headers,
702
+ object: T.unsafe(obj)
703
+ )
704
+
705
+ return response
706
+ else
707
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
708
+ end
709
+ elsif Utils.match_status_code(http_response.status, ['401', '403', '429'])
710
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
711
+ elsif Utils.match_status_code(http_response.status, ['500', '504'])
712
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
713
+ elsif Utils.match_status_code(http_response.status, ['4XX'])
714
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
715
+ elsif Utils.match_status_code(http_response.status, ['5XX'])
716
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
717
+ else
718
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown status code received'
719
+
720
+ end
721
+ end
722
+
723
+
585
724
  sig { params(transfer_id: ::String, account_id: ::String, timeout_ms: T.nilable(Integer), http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])).returns(Models::Operations::GetTransferResponse) }
586
725
  def get(transfer_id:, account_id:, timeout_ms: nil, http_headers: nil)
587
726
  # get - Retrieve full transfer details for an individual transfer of a particular Moov account.
@@ -12,26 +12,37 @@ module Moov
12
12
  module Utils
13
13
  extend T::Sig
14
14
 
15
- sig { params(req: Faraday::Request, security: Object).void }
16
- def self.configure_request_security(req, security)
15
+ sig { params(req: Faraday::Request, security: Object, allowed_fields: T.nilable(T::Array[Symbol])).void }
16
+ def self.configure_request_security(req, security, allowed_fields = nil)
17
17
  return if security.nil?
18
- T.unsafe(security).fields.each do |sec_field|
18
+
19
+ sec_fields = if allowed_fields.nil?
20
+ T.unsafe(security).fields
21
+ else
22
+ allowed_fields.filter_map { |name| T.unsafe(security).fields.find { |f| f.name == name } }
23
+ end
24
+
25
+ sec_fields.each do |sec_field|
19
26
  value = security.send(sec_field.name)
20
27
  next if value.nil?
21
28
 
22
29
  metadata = sec_field.metadata[:security]
23
30
  next if metadata.nil?
24
31
 
25
- _parse_security_option(req, value) if metadata[:option]
32
+ if metadata[:option]
33
+ _parse_security_option(req, value)
34
+ break unless metadata[:composite]
35
+ end
36
+
37
+ next unless metadata[:scheme]
26
38
 
27
- if metadata[:scheme]
28
- # Special case for basic auth which could be a flattened struct
29
- if metadata[:sub_type] == 'basic' && !value.respond_to?(:fields)
30
- _parse_security_scheme(req, metadata, security)
31
- else
32
- _parse_security_scheme(req, metadata, value)
33
- end
39
+ # Special case for basic auth which could be a flattened struct
40
+ if metadata[:sub_type] == 'basic' && !value.respond_to?(:fields)
41
+ _parse_security_scheme(req, metadata, security)
42
+ else
43
+ _parse_security_scheme(req, metadata, value)
34
44
  end
45
+ break unless metadata[:composite]
35
46
  end
36
47
  end
37
48
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moov_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 26.2.0
4
+ version: 26.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Speakeasy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-03-24 00:00:00.000000000 Z
11
+ date: 2026-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -420,6 +420,8 @@ files:
420
420
  - lib/moov/models/components/bankaccountwaitfor.rbi
421
421
  - lib/moov/models/components/basicpaymentmethod.rb
422
422
  - lib/moov/models/components/basicpaymentmethod.rbi
423
+ - lib/moov/models/components/batchgettransfersrequest.rb
424
+ - lib/moov/models/components/batchgettransfersrequest.rbi
423
425
  - lib/moov/models/components/billablefee.rb
424
426
  - lib/moov/models/components/billablefee.rbi
425
427
  - lib/moov/models/components/billingcountandamount.rb
@@ -854,6 +856,14 @@ files:
854
856
  - lib/moov/models/components/instantbankcredittransferpaymentmethod.rbi
855
857
  - lib/moov/models/components/instantbankcredittransferpaymentmethod_paymentmethodtype.rb
856
858
  - lib/moov/models/components/instantbankcredittransferpaymentmethod_paymentmethodtype.rbi
859
+ - lib/moov/models/components/instantbankfailurecode.rb
860
+ - lib/moov/models/components/instantbankfailurecode.rbi
861
+ - lib/moov/models/components/instantbanknetwork.rb
862
+ - lib/moov/models/components/instantbanknetwork.rbi
863
+ - lib/moov/models/components/instantbanktransactiondetails.rb
864
+ - lib/moov/models/components/instantbanktransactiondetails.rbi
865
+ - lib/moov/models/components/instantbanktransactionstatus.rb
866
+ - lib/moov/models/components/instantbanktransactionstatus.rbi
857
867
  - lib/moov/models/components/instantpaymentfees.rb
858
868
  - lib/moov/models/components/instantpaymentfees.rbi
859
869
  - lib/moov/models/components/institutionssearchresponse.rb
@@ -1612,6 +1622,10 @@ files:
1612
1622
  - lib/moov/models/operations/assignaccountcountries_request.rbi
1613
1623
  - lib/moov/models/operations/assignaccountcountries_response.rb
1614
1624
  - lib/moov/models/operations/assignaccountcountries_response.rbi
1625
+ - lib/moov/models/operations/batchgettransfers_request.rb
1626
+ - lib/moov/models/operations/batchgettransfers_request.rbi
1627
+ - lib/moov/models/operations/batchgettransfers_response.rb
1628
+ - lib/moov/models/operations/batchgettransfers_response.rbi
1615
1629
  - lib/moov/models/operations/cancelschedule_request.rb
1616
1630
  - lib/moov/models/operations/cancelschedule_request.rbi
1617
1631
  - lib/moov/models/operations/cancelschedule_response.rb