adyen-ruby-api-library 11.2.0 → 12.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.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -1
  3. data/.github/workflows/codeql.yml +4 -4
  4. data/.github/workflows/release.yml +1 -1
  5. data/.github/workflows/ruby.yml +3 -3
  6. data/.github/workflows/rubygems_release.yml +1 -1
  7. data/.github/workflows/stale.yml +1 -1
  8. data/Gemfile +2 -2
  9. data/README.md +30 -7
  10. data/VERSION +1 -1
  11. data/adyen-ruby-api-library.gemspec +1 -1
  12. data/lib/adyen/client.rb +10 -16
  13. data/lib/adyen/deprecation.rb +34 -0
  14. data/lib/adyen/services/balanceControl/balance_control_api.rb +3 -3
  15. data/lib/adyen/services/balancePlatform/account_holders_api.rb +14 -18
  16. data/lib/adyen/services/balancePlatform/authorized_card_users_api.rb +4 -12
  17. data/lib/adyen/services/balancePlatform/balance_accounts_api.rb +5 -65
  18. data/lib/adyen/services/balancePlatform/balances_api.rb +5 -15
  19. data/lib/adyen/services/balancePlatform/bank_account_validation_api.rb +1 -3
  20. data/lib/adyen/services/balancePlatform/card_orders_api.rb +2 -6
  21. data/lib/adyen/services/balancePlatform/custom_payout_schedules_sweeps_api.rb +56 -0
  22. data/lib/adyen/services/balancePlatform/direct_debit_mandates_api.rb +48 -0
  23. data/lib/adyen/services/balancePlatform/grant_accounts_api.rb +3 -3
  24. data/lib/adyen/services/balancePlatform/grant_offers_api.rb +6 -6
  25. data/lib/adyen/services/balancePlatform/manage_card_pin_api.rb +3 -9
  26. data/lib/adyen/services/balancePlatform/manage_sca_devices_api.rb +6 -18
  27. data/lib/adyen/services/balancePlatform/managed_payout_schedules_api.rb +80 -0
  28. data/lib/adyen/services/balancePlatform/network_tokens_api.rb +2 -6
  29. data/lib/adyen/services/balancePlatform/payment_instrument_groups_api.rb +3 -9
  30. data/lib/adyen/services/balancePlatform/payment_instruments_api.rb +9 -27
  31. data/lib/adyen/services/balancePlatform/platform_api.rb +3 -9
  32. data/lib/adyen/services/balancePlatform/recurring_top_ups_api.rb +48 -0
  33. data/lib/adyen/services/balancePlatform/sca_association_management_api.rb +3 -9
  34. data/lib/adyen/services/balancePlatform/sca_device_management_api.rb +11 -9
  35. data/lib/adyen/services/balancePlatform/transaction_rules_api.rb +4 -12
  36. data/lib/adyen/services/balancePlatform/transfer_limits_balance_account_level_api.rb +6 -18
  37. data/lib/adyen/services/balancePlatform/transfer_limits_balance_platform_level_api.rb +4 -12
  38. data/lib/adyen/services/balancePlatform/transfer_routes_api.rb +1 -3
  39. data/lib/adyen/services/balancePlatform.rb +20 -0
  40. data/lib/adyen/services/binLookup/bin_lookup_api.rb +2 -6
  41. data/lib/adyen/services/capital/dynamic_offers_api.rb +40 -0
  42. data/lib/adyen/services/capital/grant_accounts_api.rb +1 -3
  43. data/lib/adyen/services/capital/grant_offers_api.rb +4 -8
  44. data/lib/adyen/services/capital/grants_api.rb +6 -18
  45. data/lib/adyen/services/capital.rb +5 -0
  46. data/lib/adyen/services/checkout/donations_api.rb +2 -6
  47. data/lib/adyen/services/checkout/modifications_api.rb +6 -18
  48. data/lib/adyen/services/checkout/orders_api.rb +3 -9
  49. data/lib/adyen/services/checkout/payment_links_api.rb +3 -9
  50. data/lib/adyen/services/checkout/payments_api.rb +14 -18
  51. data/lib/adyen/services/checkout/recurring_api.rb +4 -12
  52. data/lib/adyen/services/checkout/utility_api.rb +6 -12
  53. data/lib/adyen/services/checkout.rb +1 -1
  54. data/lib/adyen/services/dataProtection/data_protection_api.rb +1 -3
  55. data/lib/adyen/services/disputes/disputes_api.rb +5 -15
  56. data/lib/adyen/services/legalEntityManagement/business_lines_api.rb +4 -12
  57. data/lib/adyen/services/legalEntityManagement/documents_api.rb +4 -12
  58. data/lib/adyen/services/legalEntityManagement/hosted_onboarding_api.rb +3 -9
  59. data/lib/adyen/services/legalEntityManagement/legal_entities_api.rb +7 -21
  60. data/lib/adyen/services/legalEntityManagement/pci_questionnaires_api.rb +5 -15
  61. data/lib/adyen/services/legalEntityManagement/tax_e_delivery_consent_api.rb +2 -6
  62. data/lib/adyen/services/legalEntityManagement/terms_of_service_api.rb +5 -15
  63. data/lib/adyen/services/legalEntityManagement/transfer_instruments_api.rb +4 -12
  64. data/lib/adyen/services/management/account_company_level_api.rb +3 -9
  65. data/lib/adyen/services/management/account_merchant_level_api.rb +4 -12
  66. data/lib/adyen/services/management/account_store_level_api.rb +8 -24
  67. data/lib/adyen/services/management/allowed_origins_company_level_api.rb +4 -12
  68. data/lib/adyen/services/management/allowed_origins_merchant_level_api.rb +4 -12
  69. data/lib/adyen/services/management/android_files_company_level_api.rb +6 -18
  70. data/lib/adyen/services/management/api_credentials_company_level_api.rb +4 -12
  71. data/lib/adyen/services/management/api_credentials_merchant_level_api.rb +4 -12
  72. data/lib/adyen/services/management/api_key_company_level_api.rb +1 -3
  73. data/lib/adyen/services/management/api_key_merchant_level_api.rb +1 -3
  74. data/lib/adyen/services/management/client_key_company_level_api.rb +1 -3
  75. data/lib/adyen/services/management/client_key_merchant_level_api.rb +1 -3
  76. data/lib/adyen/services/management/donation_campaigns_api.rb +64 -0
  77. data/lib/adyen/services/management/my_api_credential_api.rb +6 -18
  78. data/lib/adyen/services/management/payment_methods_merchant_level_api.rb +6 -18
  79. data/lib/adyen/services/management/payout_settings_merchant_level_api.rb +5 -15
  80. data/lib/adyen/services/management/split_configuration_merchant_level_api.rb +9 -27
  81. data/lib/adyen/services/management/terminal_actions_company_level_api.rb +2 -6
  82. data/lib/adyen/services/management/terminal_actions_terminal_level_api.rb +1 -3
  83. data/lib/adyen/services/management/terminal_orders_company_level_api.rb +10 -30
  84. data/lib/adyen/services/management/terminal_orders_merchant_level_api.rb +10 -30
  85. data/lib/adyen/services/management/terminal_settings_company_level_api.rb +4 -12
  86. data/lib/adyen/services/management/terminal_settings_merchant_level_api.rb +4 -12
  87. data/lib/adyen/services/management/terminal_settings_store_level_api.rb +8 -24
  88. data/lib/adyen/services/management/terminal_settings_terminal_level_api.rb +4 -12
  89. data/lib/adyen/services/management/terminals_terminal_level_api.rb +2 -6
  90. data/lib/adyen/services/management/users_company_level_api.rb +4 -12
  91. data/lib/adyen/services/management/users_merchant_level_api.rb +4 -12
  92. data/lib/adyen/services/management/webhooks_company_level_api.rb +7 -21
  93. data/lib/adyen/services/management/webhooks_merchant_level_api.rb +7 -21
  94. data/lib/adyen/services/management.rb +5 -0
  95. data/lib/adyen/services/payment/modifications_api.rb +10 -24
  96. data/lib/adyen/services/payment/payments_api.rb +5 -15
  97. data/lib/adyen/services/paymentsApp/payments_app_api.rb +5 -15
  98. data/lib/adyen/services/payout/initialization_api.rb +3 -9
  99. data/lib/adyen/services/payout/instant_payouts_api.rb +1 -3
  100. data/lib/adyen/services/payout/reviewing_api.rb +2 -6
  101. data/lib/adyen/services/posMobile/pos_mobile_api.rb +6 -3
  102. data/lib/adyen/services/posTerminalManagement.rb +10 -0
  103. data/lib/adyen/services/recurring/recurring_api.rb +10 -18
  104. data/lib/adyen/services/service.rb +12 -2
  105. data/lib/adyen/services/sessionAuthentication/session_authentication_api.rb +1 -3
  106. data/lib/adyen/services/storedValue/stored_value_api.rb +6 -18
  107. data/lib/adyen/services/transfers/capital_api.rb +9 -9
  108. data/lib/adyen/services/transfers/cash_out_api.rb +24 -0
  109. data/lib/adyen/services/transfers/transactions_api.rb +2 -6
  110. data/lib/adyen/services/transfers/transfers_api.rb +6 -18
  111. data/lib/adyen/services/transfers.rb +5 -0
  112. data/lib/adyen/utils/hmac_validator.rb +15 -18
  113. data/lib/adyen/version.rb +1 -1
  114. data/sdk-generation-log/balancecontrol.json +8 -0
  115. data/sdk-generation-log/balanceplatform.json +8 -0
  116. data/sdk-generation-log/binlookup.json +8 -0
  117. data/sdk-generation-log/capital.json +8 -0
  118. data/sdk-generation-log/checkout.json +8 -0
  119. data/sdk-generation-log/dataprotection.json +8 -0
  120. data/sdk-generation-log/disputes.json +8 -0
  121. data/sdk-generation-log/legalentitymanagement.json +8 -0
  122. data/sdk-generation-log/management.json +8 -0
  123. data/sdk-generation-log/payment.json +8 -0
  124. data/sdk-generation-log/paymentsapp.json +8 -0
  125. data/sdk-generation-log/payout.json +8 -0
  126. data/sdk-generation-log/posmobile.json +8 -0
  127. data/sdk-generation-log/recurring.json +8 -0
  128. data/sdk-generation-log/sessionauthentication.json +8 -0
  129. data/sdk-generation-log/storedvalue.json +8 -0
  130. data/sdk-generation-log/transfers.json +8 -0
  131. data/spec/balance_control_spec.rb +41 -0
  132. data/spec/balance_platform_spec.rb +609 -4
  133. data/spec/capital_spec.rb +82 -0
  134. data/spec/checkout-oauth_spec.rb +220 -10
  135. data/spec/checkout_spec.rb +245 -10
  136. data/spec/client_spec.rb +23 -5
  137. data/spec/deprecation_spec.rb +112 -0
  138. data/spec/management_spec.rb +184 -0
  139. data/spec/mocks/requests/BalancePlatform/apply_managed_schedule.json +14 -0
  140. data/spec/mocks/requests/BalancePlatform/begin_sca_device_registration.json +4 -0
  141. data/spec/mocks/requests/BalancePlatform/create_recurring_top_up.json +21 -0
  142. data/spec/mocks/requests/BalancePlatform/create_sweep.json +10 -0
  143. data/spec/mocks/requests/BalancePlatform/finish_sca_device_registration.json +3 -0
  144. data/spec/mocks/requests/BalancePlatform/submit_sca_association.json +8 -0
  145. data/spec/mocks/requests/BalancePlatform/update_balance_account_managed_schedule.json +5 -0
  146. data/spec/mocks/requests/BalancePlatform/update_mandate.json +14 -0
  147. data/spec/mocks/requests/BalancePlatform/update_recurring_top_ups.json +3 -0
  148. data/spec/mocks/requests/BalancePlatform/update_sweep.json +6 -0
  149. data/spec/mocks/requests/Checkout/amount_updates.json +1 -1
  150. data/spec/mocks/requests/Checkout/card_details.json +3 -0
  151. data/spec/mocks/requests/Checkout/create_stored_payment_method.json +10 -0
  152. data/spec/mocks/requests/Checkout/donation_campaigns.json +4 -0
  153. data/spec/mocks/requests/Checkout/donations.json +9 -0
  154. data/spec/mocks/requests/Checkout/orders.json +5 -3
  155. data/spec/mocks/requests/Checkout/payment-details.json +2 -14
  156. data/spec/mocks/requests/Checkout/payment_methods_balance.json +5 -2
  157. data/spec/mocks/requests/Checkout/payments.json +9 -10
  158. data/spec/mocks/requests/Checkout/paypal_update_order.json +5 -0
  159. data/spec/mocks/requests/Checkout/reversals.json +3 -0
  160. data/spec/mocks/requests/Checkout/update_session.json +7 -0
  161. data/spec/mocks/requests/Management/create_donation_campaign.json +7 -0
  162. data/spec/mocks/requests/Management/list_nonprofits.json +5 -0
  163. data/spec/mocks/requests/Management/update_donation_campaign.json +6 -0
  164. data/spec/mocks/requests/Transfers/initiate_cashout.json +12 -0
  165. data/spec/mocks/responses/BalancePlatform/apply_managed_schedule.json +17 -0
  166. data/spec/mocks/responses/BalancePlatform/begin_sca_device_registration.json +8 -0
  167. data/spec/mocks/responses/BalancePlatform/create_recurring_top_up.json +23 -0
  168. data/spec/mocks/responses/BalancePlatform/create_sweep.json +12 -0
  169. data/spec/mocks/responses/BalancePlatform/finish_sca_device_registration.json +7 -0
  170. data/spec/mocks/responses/BalancePlatform/get_all_sweeps_for_balance_account.json +31 -0
  171. data/spec/mocks/responses/BalancePlatform/get_balance_account_managed_schedule_by_id.json +17 -0
  172. data/spec/mocks/responses/BalancePlatform/get_balance_account_managed_schedules.json +26 -0
  173. data/spec/mocks/responses/BalancePlatform/get_balance_platform_managed_schedule_by_id.json +27 -0
  174. data/spec/mocks/responses/BalancePlatform/get_balance_platform_managed_schedules.json +31 -0
  175. data/spec/mocks/responses/BalancePlatform/get_list_of_mandates.json +19 -0
  176. data/spec/mocks/responses/BalancePlatform/get_mandate_by_id.json +14 -0
  177. data/spec/mocks/responses/BalancePlatform/get_payout_schedule_executions.json +21 -0
  178. data/spec/mocks/responses/BalancePlatform/get_recurring_top_ups.json +35 -0
  179. data/spec/mocks/responses/BalancePlatform/get_sweep.json +12 -0
  180. data/spec/mocks/responses/BalancePlatform/get_tax_form_summary.json +17 -0
  181. data/spec/mocks/responses/BalancePlatform/submit_sca_association.json +10 -0
  182. data/spec/mocks/responses/BalancePlatform/update_balance_account_managed_schedule.json +18 -0
  183. data/spec/mocks/responses/BalancePlatform/update_recurring_top_ups.json +23 -0
  184. data/spec/mocks/responses/BalancePlatform/update_sweep.json +12 -0
  185. data/spec/mocks/responses/Capital/calculate-preliminary-offer-from-dynamic-offer.json +16 -0
  186. data/spec/mocks/responses/Capital/create-static-offer-from-dynamic-offer.json +9 -0
  187. data/spec/mocks/responses/Capital/get-all-dynamic-offers.json +18 -0
  188. data/spec/mocks/responses/Checkout/amount_updates.json +1 -1
  189. data/spec/mocks/responses/Checkout/card_details.json +5 -0
  190. data/spec/mocks/responses/Checkout/create_stored_payment_method.json +5 -0
  191. data/spec/mocks/responses/Checkout/donation_campaigns.json +1 -0
  192. data/spec/mocks/responses/Checkout/donations.json +5 -0
  193. data/spec/mocks/responses/Checkout/orders.json +6 -1
  194. data/spec/mocks/responses/Checkout/orders_cancel.json +1 -1
  195. data/spec/mocks/responses/Checkout/payment-details.json +2 -13
  196. data/spec/mocks/responses/Checkout/payment_links.json +3 -0
  197. data/spec/mocks/responses/Checkout/payment_methods.json +2 -2
  198. data/spec/mocks/responses/Checkout/payment_methods_balance.json +5 -1
  199. data/spec/mocks/responses/Checkout/payments.json +4 -94
  200. data/spec/mocks/responses/Checkout/paypal_update_order.json +4 -0
  201. data/spec/mocks/responses/Checkout/reversals.json +6 -0
  202. data/spec/mocks/responses/Checkout/update_session.json +3 -0
  203. data/spec/mocks/responses/Management/donation_campaign.json +13 -0
  204. data/spec/mocks/responses/Management/list_donation_campaigns.json +19 -0
  205. data/spec/mocks/responses/Management/list_nonprofits.json +34 -0
  206. data/spec/mocks/responses/Transfers/initiate_cashout.json +31 -0
  207. data/spec/service_spec.rb +40 -0
  208. data/spec/spec_helper.rb +2 -2
  209. data/spec/transfers_spec.rb +28 -0
  210. data/spec/utils/consumer_smoke.rb +23 -0
  211. data/spec/utils/hmac_validator_spec.rb +55 -0
  212. data/templates/api-small.mustache +4 -4
  213. data/templates/api.mustache +4 -4
  214. metadata +84 -2
@@ -14,9 +14,7 @@ module Adyen
14
14
 
15
15
  # Create a session token
16
16
  def create_authentication_session(request, headers: {})
17
- endpoint = '/sessions'.gsub(/{.+?}/, '%s')
18
- endpoint = endpoint.gsub(%r{^/}, '')
19
- endpoint = format(endpoint)
17
+ endpoint = build_endpoint('/sessions')
20
18
 
21
19
  action = { method: 'post', url: endpoint }
22
20
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -14,9 +14,7 @@ module Adyen
14
14
 
15
15
  # Changes the status of the payment method.
16
16
  def change_status(request, headers: {})
17
- endpoint = '/changeStatus'.gsub(/{.+?}/, '%s')
18
- endpoint = endpoint.gsub(%r{^/}, '')
19
- endpoint = format(endpoint)
17
+ endpoint = build_endpoint('/changeStatus')
20
18
 
21
19
  action = { method: 'post', url: endpoint }
22
20
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -24,9 +22,7 @@ module Adyen
24
22
 
25
23
  # Checks the balance.
26
24
  def check_balance(request, headers: {})
27
- endpoint = '/checkBalance'.gsub(/{.+?}/, '%s')
28
- endpoint = endpoint.gsub(%r{^/}, '')
29
- endpoint = format(endpoint)
25
+ endpoint = build_endpoint('/checkBalance')
30
26
 
31
27
  action = { method: 'post', url: endpoint }
32
28
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -34,9 +30,7 @@ module Adyen
34
30
 
35
31
  # Issues a new card.
36
32
  def issue(request, headers: {})
37
- endpoint = '/issue'.gsub(/{.+?}/, '%s')
38
- endpoint = endpoint.gsub(%r{^/}, '')
39
- endpoint = format(endpoint)
33
+ endpoint = build_endpoint('/issue')
40
34
 
41
35
  action = { method: 'post', url: endpoint }
42
36
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -44,9 +38,7 @@ module Adyen
44
38
 
45
39
  # Loads the payment method.
46
40
  def load(request, headers: {})
47
- endpoint = '/load'.gsub(/{.+?}/, '%s')
48
- endpoint = endpoint.gsub(%r{^/}, '')
49
- endpoint = format(endpoint)
41
+ endpoint = build_endpoint('/load')
50
42
 
51
43
  action = { method: 'post', url: endpoint }
52
44
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -54,9 +46,7 @@ module Adyen
54
46
 
55
47
  # Merge the balance of two cards.
56
48
  def merge_balance(request, headers: {})
57
- endpoint = '/mergeBalance'.gsub(/{.+?}/, '%s')
58
- endpoint = endpoint.gsub(%r{^/}, '')
59
- endpoint = format(endpoint)
49
+ endpoint = build_endpoint('/mergeBalance')
60
50
 
61
51
  action = { method: 'post', url: endpoint }
62
52
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -64,9 +54,7 @@ module Adyen
64
54
 
65
55
  # Voids a transaction.
66
56
  def void_transaction(request, headers: {})
67
- endpoint = '/voidTransaction'.gsub(/{.+?}/, '%s')
68
- endpoint = endpoint.gsub(%r{^/}, '')
69
- endpoint = format(endpoint)
57
+ endpoint = build_endpoint('/voidTransaction')
70
58
 
71
59
  action = { method: 'post', url: endpoint }
72
60
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -16,10 +16,10 @@ module Adyen
16
16
  #
17
17
  # Deprecated since Transfers API v4
18
18
  # Use the `/grants` endpoint from the [Capital API](https://docs.adyen.com/api-explorer/capital/latest/get/grants) instead.
19
+ # @deprecated
19
20
  def get_capital_account(headers: {}, query_params: {})
20
- endpoint = '/grants'.gsub(/{.+?}/, '%s')
21
- endpoint = endpoint.gsub(%r{^/}, '')
22
- endpoint = format(endpoint)
21
+ Adyen::Deprecation.warn(:get_capital_account, since: 'Transfers API v4', message: 'Use the `/grants` endpoint from the [Capital API](https://docs.adyen.com/api-explorer/capital/latest/get/grants) instead.')
22
+ endpoint = build_endpoint('/grants')
23
23
  endpoint += create_query_string(query_params)
24
24
  action = { method: 'get', url: endpoint }
25
25
  @client.call_adyen_api(@service, action, {}, headers, @version)
@@ -29,10 +29,10 @@ module Adyen
29
29
  #
30
30
  # Deprecated since Transfers API v4
31
31
  # Use the `/grants/{grantId}` endpoint from the [Capital API](https://docs.adyen.com/api-explorer/capital/latest/get/grants/(grantId)) instead.
32
+ # @deprecated
32
33
  def get_grant_reference_details(id, headers: {})
33
- endpoint = '/grants/{id}'.gsub(/{.+?}/, '%s')
34
- endpoint = endpoint.gsub(%r{^/}, '')
35
- endpoint = format(endpoint, id)
34
+ Adyen::Deprecation.warn(:get_grant_reference_details, since: 'Transfers API v4', message: 'Use the `/grants/{grantId}` endpoint from the [Capital API](https://docs.adyen.com/api-explorer/capital/latest/get/grants/(grantId)) instead.')
35
+ endpoint = build_endpoint('/grants/{id}', id)
36
36
 
37
37
  action = { method: 'get', url: endpoint }
38
38
  @client.call_adyen_api(@service, action, {}, headers, @version)
@@ -42,10 +42,10 @@ module Adyen
42
42
  #
43
43
  # Deprecated since Transfers API v4
44
44
  # Use the `/grants` endpoint from the [Capital API](https://docs.adyen.com/api-explorer/capital/latest/post/grants) instead.
45
+ # @deprecated
45
46
  def request_grant_payout(request, headers: {})
46
- endpoint = '/grants'.gsub(/{.+?}/, '%s')
47
- endpoint = endpoint.gsub(%r{^/}, '')
48
- endpoint = format(endpoint)
47
+ Adyen::Deprecation.warn(:request_grant_payout, since: 'Transfers API v4', message: 'Use the `/grants` endpoint from the [Capital API](https://docs.adyen.com/api-explorer/capital/latest/post/grants) instead.')
48
+ endpoint = build_endpoint('/grants')
49
49
 
50
50
  action = { method: 'post', url: endpoint }
51
51
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -0,0 +1,24 @@
1
+ require_relative '../service'
2
+ module Adyen
3
+
4
+ # NOTE: This class is auto generated by OpenAPI Generator
5
+ # Ref: https://openapi-generator.tech
6
+ #
7
+ # Do not edit the class manually.
8
+ class CashOutApi < Service
9
+ attr_accessor :service, :version
10
+
11
+ def initialize(client, version = DEFAULT_VERSION)
12
+ super(client, version, 'Transfers')
13
+ end
14
+
15
+ # Initiate a cashout
16
+ def initiate_cashout(request, headers: {})
17
+ endpoint = build_endpoint('/cashouts')
18
+
19
+ action = { method: 'post', url: endpoint }
20
+ @client.call_adyen_api(@service, action, request, headers, @version)
21
+ end
22
+
23
+ end
24
+ end
@@ -14,9 +14,7 @@ module Adyen
14
14
 
15
15
  # Get all transactions
16
16
  def get_all_transactions(headers: {}, query_params: {})
17
- endpoint = '/transactions'.gsub(/{.+?}/, '%s')
18
- endpoint = endpoint.gsub(%r{^/}, '')
19
- endpoint = format(endpoint)
17
+ endpoint = build_endpoint('/transactions')
20
18
  endpoint += create_query_string(query_params)
21
19
  action = { method: 'get', url: endpoint }
22
20
  @client.call_adyen_api(@service, action, {}, headers, @version)
@@ -24,9 +22,7 @@ module Adyen
24
22
 
25
23
  # Get a transaction
26
24
  def get_transaction(id, headers: {})
27
- endpoint = '/transactions/{id}'.gsub(/{.+?}/, '%s')
28
- endpoint = endpoint.gsub(%r{^/}, '')
29
- endpoint = format(endpoint, id)
25
+ endpoint = build_endpoint('/transactions/{id}', id)
30
26
 
31
27
  action = { method: 'get', url: endpoint }
32
28
  @client.call_adyen_api(@service, action, {}, headers, @version)
@@ -14,9 +14,7 @@ module Adyen
14
14
 
15
15
  # Approve initiated transfers
16
16
  def approve_initiated_transfers(request, headers: {})
17
- endpoint = '/transfers/approve'.gsub(/{.+?}/, '%s')
18
- endpoint = endpoint.gsub(%r{^/}, '')
19
- endpoint = format(endpoint)
17
+ endpoint = build_endpoint('/transfers/approve')
20
18
 
21
19
  action = { method: 'post', url: endpoint }
22
20
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -24,9 +22,7 @@ module Adyen
24
22
 
25
23
  # Cancel initiated transfers
26
24
  def cancel_initiated_transfers(request, headers: {})
27
- endpoint = '/transfers/cancel'.gsub(/{.+?}/, '%s')
28
- endpoint = endpoint.gsub(%r{^/}, '')
29
- endpoint = format(endpoint)
25
+ endpoint = build_endpoint('/transfers/cancel')
30
26
 
31
27
  action = { method: 'post', url: endpoint }
32
28
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -34,9 +30,7 @@ module Adyen
34
30
 
35
31
  # Get all transfers
36
32
  def get_all_transfers(headers: {}, query_params: {})
37
- endpoint = '/transfers'.gsub(/{.+?}/, '%s')
38
- endpoint = endpoint.gsub(%r{^/}, '')
39
- endpoint = format(endpoint)
33
+ endpoint = build_endpoint('/transfers')
40
34
  endpoint += create_query_string(query_params)
41
35
  action = { method: 'get', url: endpoint }
42
36
  @client.call_adyen_api(@service, action, {}, headers, @version)
@@ -44,9 +38,7 @@ module Adyen
44
38
 
45
39
  # Get a transfer
46
40
  def get_transfer(id, headers: {})
47
- endpoint = '/transfers/{id}'.gsub(/{.+?}/, '%s')
48
- endpoint = endpoint.gsub(%r{^/}, '')
49
- endpoint = format(endpoint, id)
41
+ endpoint = build_endpoint('/transfers/{id}', id)
50
42
 
51
43
  action = { method: 'get', url: endpoint }
52
44
  @client.call_adyen_api(@service, action, {}, headers, @version)
@@ -54,9 +46,7 @@ module Adyen
54
46
 
55
47
  # Return a transfer
56
48
  def return_transfer(request, transfer_id, headers: {})
57
- endpoint = '/transfers/{transferId}/returns'.gsub(/{.+?}/, '%s')
58
- endpoint = endpoint.gsub(%r{^/}, '')
59
- endpoint = format(endpoint, transfer_id)
49
+ endpoint = build_endpoint('/transfers/{transferId}/returns', transfer_id)
60
50
 
61
51
  action = { method: 'post', url: endpoint }
62
52
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -64,9 +54,7 @@ module Adyen
64
54
 
65
55
  # Transfer funds
66
56
  def transfer_funds(request, headers: {})
67
- endpoint = '/transfers'.gsub(/{.+?}/, '%s')
68
- endpoint = endpoint.gsub(%r{^/}, '')
69
- endpoint = format(endpoint)
57
+ endpoint = build_endpoint('/transfers')
70
58
 
71
59
  action = { method: 'post', url: endpoint }
72
60
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -1,4 +1,5 @@
1
1
  require_relative 'transfers/capital_api'
2
+ require_relative 'transfers/cash_out_api'
2
3
  require_relative 'transfers/transactions_api'
3
4
  require_relative 'transfers/transfers_api'
4
5
 
@@ -22,6 +23,10 @@ module Adyen
22
23
  @capital_api ||= Adyen::CapitalApi.new(@client, @version)
23
24
  end
24
25
 
26
+ def cash_out_api
27
+ @cash_out_api ||= Adyen::CashOutApi.new(@client, @version)
28
+ end
29
+
25
30
  def transactions_api
26
31
  @transactions_api ||= Adyen::TransactionsApi.new(@client, @version)
27
32
  end
@@ -1,3 +1,5 @@
1
+ require 'openssl'
2
+
1
3
  module Adyen
2
4
  module Utils
3
5
  class HmacValidator
@@ -9,7 +11,9 @@ module Adyen
9
11
  ].freeze
10
12
 
11
13
  # <b>DEPRECATED:</b> Please use valid_webhook_hmac?() instead.
14
+ # @deprecated
12
15
  def valid_notification_hmac?(notification_request_item, hmac_key)
16
+ Adyen::Deprecation.warn(:valid_notification_hmac?, message: "Use valid_webhook_hmac?() instead.")
13
17
  valid_webhook_hmac?(notification_request_item, hmac_key)
14
18
  end
15
19
 
@@ -18,14 +22,14 @@ module Adyen
18
22
  #
19
23
  # @param webhook_request_item [Object] The webhook request item.
20
24
  # @param hmac_key [String] The HMAC key used to validate the payload.
21
-
22
- # @return [Boolean] Returns true if the HMAC signature is valid, otherwise false.
25
+
26
+ # @return [Boolean] Returns true if the HMAC signature is valid, otherwise false.
23
27
  def valid_webhook_hmac?(webhook_request_item, hmac_key)
24
28
  expected_sign = calculate_webhook_hmac(webhook_request_item, hmac_key)
25
29
  merchant_sign =
26
30
  webhook_request_item.dig('additionalData', 'hmacSignature')
27
31
 
28
- expected_sign == merchant_sign
32
+ merchant_sign.is_a?(String) && OpenSSL.secure_compare(expected_sign, merchant_sign)
29
33
  end
30
34
 
31
35
  # validates the HMAC signature of a payload against an expected signature. Use for webhooks that provide the
@@ -35,38 +39,31 @@ module Adyen
35
39
  # @param hmac_key [String] The HMAC key used to validate the payload.
36
40
  # @param payload [String] The webhook payload.
37
41
 
38
- # @return [Boolean] Returns true if the HMAC signature is valid, otherwise false.
42
+ # @return [Boolean] Returns true if the HMAC signature is valid, otherwise false.
39
43
  def valid_webhook_payload_hmac?(hmac_signature, hmac_key, payload)
40
44
  expected_sign = calculate_webhook_payload_hmac(payload, hmac_key)
41
- puts(expected_sign)
42
- expected_sign == hmac_signature
45
+ hmac_signature.is_a?(String) && OpenSSL.secure_compare(expected_sign, hmac_signature)
43
46
  end
44
47
 
45
48
  # <b>DEPRECATED:</b> Please use calculate_webhook_hmac() instead.
49
+ # @deprecated
46
50
  def calculate_notification_hmac(notification_request_item, hmac_key)
51
+ Adyen::Deprecation.warn(:calculate_notification_hmac, message: "Use calculate_webhook_hmac() instead.")
47
52
  calculate_webhook_hmac(notification_request_item, hmac_key)
48
53
  end
49
54
 
50
-
51
55
  def calculate_webhook_payload_hmac(data, hmac_key)
52
- Base64.strict_encode64(
53
- OpenSSL::HMAC.digest(HMAC_ALGORITHM, [hmac_key].pack('H*'), data)
54
- )
56
+ # Base64 strict encoding
57
+ [OpenSSL::HMAC.digest(HMAC_ALGORITHM, [hmac_key].pack('H*'), data)].pack('m0')
55
58
  end
56
59
 
57
60
  def calculate_webhook_hmac(webhook_request_item, hmac_key)
58
61
  data = data_to_sign(webhook_request_item)
59
62
 
60
- Base64.strict_encode64(
61
- OpenSSL::HMAC.digest(HMAC_ALGORITHM, [hmac_key].pack('H*'), data)
62
- )
63
+ # Base64 strict encoding
64
+ [OpenSSL::HMAC.digest(HMAC_ALGORITHM, [hmac_key].pack('H*'), data)].pack('m0')
63
65
  end
64
66
 
65
-
66
- # TODO: Deprecate instead of aliasing
67
- alias valid_notification_hmac? valid_webhook_hmac?
68
- alias calculate_notification_hmac calculate_webhook_hmac
69
-
70
67
  def data_to_sign(webhook_request_item)
71
68
  WEBHOOK_VALIDATION_KEYS
72
69
  .map { webhook_request_item.dig(*_1.split('.')).to_s }
data/lib/adyen/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Adyen
2
2
  NAME = 'adyen-ruby-api-library'.freeze
3
- VERSION = '11.2.0'.freeze
3
+ VERSION = '12.0.0'.freeze
4
4
  end
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "balancecontrol",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:52Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "balanceplatform",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-07-31T12:01:02Z",
5
+ "openapiCommitSha": "425d65d12163ebd4fe6fa6d2f859075817c81cba",
6
+ "automationCommitSha": "0c108bd8050cf480d2710b78b770afdfbdd89397",
7
+ "libraryCommitSha": "7f77a7b7aca2c2b22147ba4b996ada979f9decd9"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "binlookup",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:47Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "capital",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:47Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "checkout",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-08-04T08:22:34Z",
5
+ "openapiCommitSha": "f0d0bd47b721d1b4e2c86e8b3aad706ecb88423a",
6
+ "automationCommitSha": "0c108bd8050cf480d2710b78b770afdfbdd89397",
7
+ "libraryCommitSha": "2c40b0c319ba09d1dd30970a137b53af3193db76"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "dataprotection",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:47Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "disputes",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:52Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "legalentitymanagement",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:46Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "management",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-07-31T12:01:01Z",
5
+ "openapiCommitSha": "425d65d12163ebd4fe6fa6d2f859075817c81cba",
6
+ "automationCommitSha": "0c108bd8050cf480d2710b78b770afdfbdd89397",
7
+ "libraryCommitSha": "7f77a7b7aca2c2b22147ba4b996ada979f9decd9"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "payment",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:48Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "paymentsapp",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:40:00Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "payout",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:45Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "posmobile",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-07-27T10:28:53Z",
5
+ "openapiCommitSha": "2f7d0e1961772ee974be4ed268282cf2ba8f6e03",
6
+ "automationCommitSha": "0c108bd8050cf480d2710b78b770afdfbdd89397",
7
+ "libraryCommitSha": "c80f38ce8b02c80778053741d0e9175e8e530742"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "recurring",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:48Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "sessionauthentication",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:49Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "storedvalue",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:48Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "transfers",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-07-31T12:01:01Z",
5
+ "openapiCommitSha": "425d65d12163ebd4fe6fa6d2f859075817c81cba",
6
+ "automationCommitSha": "0c108bd8050cf480d2710b78b770afdfbdd89397",
7
+ "libraryCommitSha": "7f77a7b7aca2c2b22147ba4b996ada979f9decd9"
8
+ }
@@ -42,4 +42,45 @@ RSpec.describe Adyen::BalanceControl, service: 'balanceControl' do
42
42
  expect(response_hash)
43
43
  .to be_a_kind_of Hash
44
44
  end
45
+
46
+ describe 'deprecated balance_transfer' do
47
+ around do |example|
48
+ previous = Warning[:deprecated]
49
+ Warning[:deprecated] = true
50
+ example.run
51
+ ensure
52
+ Warning[:deprecated] = previous
53
+ end
54
+
55
+ it 'emits a deprecation warning and still returns a successful response' do
56
+ request_body = JSON.parse(json_from_file('mocks/requests/BalanceControl/balance_transfer.json'))
57
+
58
+ response_body = json_from_file('mocks/responses/BalanceControl/balance_transfer.json')
59
+
60
+ url = @shared_values[:client].service_url(
61
+ @shared_values[:service],
62
+ 'balanceTransfer',
63
+ @shared_values[:client].balance_control.version)
64
+ WebMock.stub_request(:post, url)
65
+ .with(
66
+ body: request_body,
67
+ headers: {
68
+ 'x-api-key' => @shared_values[:client].api_key
69
+ }
70
+ )
71
+ .to_return(
72
+ body: response_body
73
+ )
74
+
75
+ result = nil
76
+ expect do
77
+ result = @shared_values[:client].balance_control.balance_control_api.balance_transfer(request_body)
78
+ end.to output(/\[DEPRECATED\] `balance_transfer` is deprecated since Adyen Balance Control API v1\n/).to_stderr
79
+
80
+ expect(result.status)
81
+ .to eq(200)
82
+ expect(result.response)
83
+ .to eq(JSON.parse(response_body))
84
+ end
85
+ end
45
86
  end