stripe 12.7.0.pre.beta.2 → 13.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (255) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +725 -1359
  3. data/OPENAPI_VERSION +1 -1
  4. data/README.md +4 -3
  5. data/VERSION +1 -1
  6. data/examples/README.md +16 -0
  7. data/examples/example_template.rb +36 -0
  8. data/examples/meter_event_stream.rb +57 -0
  9. data/examples/thinevent_webhook_handler.rb +39 -0
  10. data/lib/stripe/api_operations/nested_resource.rb +1 -21
  11. data/lib/stripe/api_operations/request.rb +19 -70
  12. data/lib/stripe/api_operations/save.rb +4 -3
  13. data/lib/stripe/api_operations/singleton_save.rb +5 -2
  14. data/lib/stripe/api_requestor.rb +1131 -0
  15. data/lib/stripe/api_resource.rb +22 -14
  16. data/lib/stripe/api_version.rb +1 -2
  17. data/lib/stripe/connection_manager.rb +1 -1
  18. data/lib/stripe/errors.rb +8 -2
  19. data/lib/stripe/event_types.rb +14 -0
  20. data/lib/stripe/events/v1_billing_meter_error_report_triggered_event.rb +23 -0
  21. data/lib/stripe/events/v1_billing_meter_no_meter_found_event.rb +13 -0
  22. data/lib/stripe/list_object.rb +2 -3
  23. data/lib/stripe/oauth.rb +8 -15
  24. data/lib/stripe/object_types.rb +16 -20
  25. data/lib/stripe/request_options.rb +128 -0
  26. data/lib/stripe/resources/billing/credit_balance_summary.rb +14 -0
  27. data/lib/stripe/resources/billing/credit_balance_transaction.rb +26 -0
  28. data/lib/stripe/resources/billing/credit_grant.rb +88 -0
  29. data/lib/stripe/resources/customer.rb +2 -3
  30. data/lib/stripe/resources/file.rb +7 -5
  31. data/lib/stripe/resources/financial_connections/account.rb +0 -3
  32. data/lib/stripe/resources/invoice.rb +0 -81
  33. data/lib/stripe/resources/payment_intent.rb +0 -50
  34. data/lib/stripe/resources/quote.rb +4 -108
  35. data/lib/stripe/resources/source.rb +3 -2
  36. data/lib/stripe/resources/subscription.rb +6 -6
  37. data/lib/stripe/resources/subscription_schedule.rb +0 -20
  38. data/lib/stripe/resources/terminal/reader.rb +0 -60
  39. data/lib/stripe/resources/v2/billing/meter_event.rb +16 -0
  40. data/lib/stripe/resources/v2/billing/meter_event_adjustment.rb +15 -0
  41. data/lib/stripe/resources/v2/billing/meter_event_session.rb +15 -0
  42. data/lib/stripe/resources/v2/event.rb +13 -0
  43. data/lib/stripe/resources.rb +9 -18
  44. data/lib/stripe/search_result_object.rb +1 -1
  45. data/lib/stripe/services/account_capability_service.rb +39 -0
  46. data/lib/stripe/services/account_external_account_service.rb +68 -0
  47. data/lib/stripe/services/account_link_service.rb +17 -0
  48. data/lib/stripe/services/account_login_link_service.rb +19 -0
  49. data/lib/stripe/services/account_person_service.rb +61 -0
  50. data/lib/stripe/services/account_service.rb +100 -0
  51. data/lib/stripe/services/account_session_service.rb +17 -0
  52. data/lib/stripe/services/apple_pay_domain_service.rb +50 -0
  53. data/lib/stripe/services/application_fee_refund_service.rb +60 -0
  54. data/lib/stripe/services/application_fee_service.rb +35 -0
  55. data/lib/stripe/services/apps/secret_service.rb +52 -0
  56. data/lib/stripe/services/apps_service.rb +13 -0
  57. data/lib/stripe/services/balance_service.rb +12 -0
  58. data/lib/stripe/services/balance_transaction_service.rb +32 -0
  59. data/lib/stripe/services/billing/alert_service.rb +74 -0
  60. data/lib/stripe/services/billing/credit_balance_summary_service.rb +19 -0
  61. data/lib/stripe/services/billing/credit_balance_transaction_service.rb +30 -0
  62. data/lib/stripe/services/billing/credit_grant_service.rb +74 -0
  63. data/lib/stripe/services/billing/meter_event_adjustment_service.rb +19 -0
  64. data/lib/stripe/services/billing/meter_event_service.rb +19 -0
  65. data/lib/stripe/services/billing/meter_event_summary_service.rb +19 -0
  66. data/lib/stripe/services/billing/meter_service.rb +81 -0
  67. data/lib/stripe/services/billing_portal/configuration_service.rb +52 -0
  68. data/lib/stripe/services/billing_portal/session_service.rb +19 -0
  69. data/lib/stripe/services/billing_portal_service.rb +14 -0
  70. data/lib/stripe/services/billing_service.rb +20 -0
  71. data/lib/stripe/services/charge_service.rb +69 -0
  72. data/lib/stripe/services/checkout/session_line_item_service.rb +19 -0
  73. data/lib/stripe/services/checkout/session_service.rb +72 -0
  74. data/lib/stripe/services/checkout_service.rb +13 -0
  75. data/lib/stripe/services/climate/order_service.rb +68 -0
  76. data/lib/stripe/services/climate/product_service.rb +30 -0
  77. data/lib/stripe/services/climate/supplier_service.rb +30 -0
  78. data/lib/stripe/services/climate_service.rb +15 -0
  79. data/lib/stripe/services/confirmation_token_service.rb +17 -0
  80. data/lib/stripe/services/country_spec_service.rb +28 -0
  81. data/lib/stripe/services/coupon_service.rb +51 -0
  82. data/lib/stripe/services/credit_note_line_item_service.rb +17 -0
  83. data/lib/stripe/services/credit_note_preview_lines_service.rb +17 -0
  84. data/lib/stripe/services/credit_note_service.rb +93 -0
  85. data/lib/stripe/services/customer_balance_transaction_service.rb +50 -0
  86. data/lib/stripe/services/customer_cash_balance_service.rb +28 -0
  87. data/lib/stripe/services/customer_cash_balance_transaction_service.rb +28 -0
  88. data/lib/stripe/services/customer_funding_instructions_service.rb +19 -0
  89. data/lib/stripe/services/customer_payment_method_service.rb +28 -0
  90. data/lib/stripe/services/customer_payment_source_service.rb +76 -0
  91. data/lib/stripe/services/customer_service.rb +89 -0
  92. data/lib/stripe/services/customer_session_service.rb +17 -0
  93. data/lib/stripe/services/customer_tax_id_service.rb +50 -0
  94. data/lib/stripe/services/dispute_service.rb +48 -0
  95. data/lib/stripe/services/entitlements/active_entitlement_service.rb +30 -0
  96. data/lib/stripe/services/entitlements/feature_service.rb +52 -0
  97. data/lib/stripe/services/entitlements_service.rb +14 -0
  98. data/lib/stripe/services/ephemeral_key_service.rb +28 -0
  99. data/lib/stripe/services/event_service.rb +22 -0
  100. data/lib/stripe/services/exchange_rate_service.rb +28 -0
  101. data/lib/stripe/services/file_link_service.rb +38 -0
  102. data/lib/stripe/services/file_service.rb +35 -0
  103. data/lib/stripe/services/financial_connections/account_owner_service.rb +19 -0
  104. data/lib/stripe/services/financial_connections/account_service.rb +81 -0
  105. data/lib/stripe/services/financial_connections/session_service.rb +30 -0
  106. data/lib/stripe/services/financial_connections/transaction_service.rb +30 -0
  107. data/lib/stripe/services/financial_connections_service.rb +15 -0
  108. data/lib/stripe/services/forwarding/request_service.rb +41 -0
  109. data/lib/stripe/services/forwarding_service.rb +13 -0
  110. data/lib/stripe/services/identity/verification_report_service.rb +30 -0
  111. data/lib/stripe/services/identity/verification_session_service.rb +106 -0
  112. data/lib/stripe/services/identity_service.rb +14 -0
  113. data/lib/stripe/services/invoice_item_service.rb +61 -0
  114. data/lib/stripe/services/invoice_line_item_service.rb +31 -0
  115. data/lib/stripe/services/invoice_rendering_template_service.rb +50 -0
  116. data/lib/stripe/services/invoice_service.rb +202 -0
  117. data/lib/stripe/services/invoice_upcoming_lines_service.rb +17 -0
  118. data/lib/stripe/services/issuing/authorization_service.rb +65 -0
  119. data/lib/stripe/services/issuing/card_service.rb +52 -0
  120. data/lib/stripe/services/issuing/cardholder_service.rb +52 -0
  121. data/lib/stripe/services/issuing/dispute_service.rb +63 -0
  122. data/lib/stripe/services/issuing/personalization_design_service.rb +52 -0
  123. data/lib/stripe/services/issuing/physical_bundle_service.rb +30 -0
  124. data/lib/stripe/services/issuing/token_service.rb +41 -0
  125. data/lib/stripe/services/issuing/transaction_service.rb +41 -0
  126. data/lib/stripe/services/issuing_service.rb +20 -0
  127. data/lib/stripe/services/mandate_service.rb +17 -0
  128. data/lib/stripe/services/oauth_service.rb +63 -0
  129. data/lib/stripe/services/payment_intent_service.rb +204 -0
  130. data/lib/stripe/services/payment_link_line_item_service.rb +17 -0
  131. data/lib/stripe/services/payment_link_service.rb +57 -0
  132. data/lib/stripe/services/payment_method_configuration_service.rb +50 -0
  133. data/lib/stripe/services/payment_method_domain_service.rb +66 -0
  134. data/lib/stripe/services/payment_method_service.rb +86 -0
  135. data/lib/stripe/services/payout_service.rb +66 -0
  136. data/lib/stripe/services/plan_service.rb +49 -0
  137. data/lib/stripe/services/price_service.rb +52 -0
  138. data/lib/stripe/services/product_feature_service.rb +50 -0
  139. data/lib/stripe/services/product_service.rb +70 -0
  140. data/lib/stripe/services/promotion_code_service.rb +50 -0
  141. data/lib/stripe/services/quote_computed_upfront_line_items_service.rb +17 -0
  142. data/lib/stripe/services/quote_line_item_service.rb +17 -0
  143. data/lib/stripe/services/quote_service.rb +92 -0
  144. data/lib/stripe/services/radar/early_fraud_warning_service.rb +32 -0
  145. data/lib/stripe/services/radar/value_list_item_service.rb +52 -0
  146. data/lib/stripe/services/radar/value_list_service.rb +63 -0
  147. data/lib/stripe/services/radar_service.rb +15 -0
  148. data/lib/stripe/services/refund_service.rb +63 -0
  149. data/lib/stripe/services/reporting/report_run_service.rb +41 -0
  150. data/lib/stripe/services/reporting/report_type_service.rb +30 -0
  151. data/lib/stripe/services/reporting_service.rb +14 -0
  152. data/lib/stripe/services/review_service.rb +33 -0
  153. data/lib/stripe/services/setup_attempt_service.rb +17 -0
  154. data/lib/stripe/services/setup_intent_service.rb +105 -0
  155. data/lib/stripe/services/shipping_rate_service.rb +50 -0
  156. data/lib/stripe/services/sigma/scheduled_query_run_service.rb +30 -0
  157. data/lib/stripe/services/sigma_service.rb +13 -0
  158. data/lib/stripe/services/source_service.rb +64 -0
  159. data/lib/stripe/services/source_transaction_service.rb +17 -0
  160. data/lib/stripe/services/subscription_item_service.rb +69 -0
  161. data/lib/stripe/services/subscription_item_usage_record_service.rb +23 -0
  162. data/lib/stripe/services/subscription_item_usage_record_summary_service.rb +19 -0
  163. data/lib/stripe/services/subscription_schedule_service.rb +72 -0
  164. data/lib/stripe/services/subscription_service.rb +127 -0
  165. data/lib/stripe/services/tax/calculation_line_item_service.rb +19 -0
  166. data/lib/stripe/services/tax/calculation_service.rb +37 -0
  167. data/lib/stripe/services/tax/registration_service.rb +54 -0
  168. data/lib/stripe/services/tax/settings_service.rb +30 -0
  169. data/lib/stripe/services/tax/transaction_line_item_service.rb +19 -0
  170. data/lib/stripe/services/tax/transaction_service.rb +48 -0
  171. data/lib/stripe/services/tax_code_service.rb +22 -0
  172. data/lib/stripe/services/tax_id_service.rb +38 -0
  173. data/lib/stripe/services/tax_rate_service.rb +38 -0
  174. data/lib/stripe/services/tax_service.rb +16 -0
  175. data/lib/stripe/services/terminal/configuration_service.rb +63 -0
  176. data/lib/stripe/services/terminal/connection_token_service.rb +19 -0
  177. data/lib/stripe/services/terminal/location_service.rb +64 -0
  178. data/lib/stripe/services/terminal/reader_service.rb +118 -0
  179. data/lib/stripe/services/terminal_service.rb +16 -0
  180. data/lib/stripe/services/test_helpers/confirmation_token_service.rb +19 -0
  181. data/lib/stripe/services/test_helpers/customer_service.rb +19 -0
  182. data/lib/stripe/services/test_helpers/issuing/authorization_service.rb +76 -0
  183. data/lib/stripe/services/test_helpers/issuing/card_service.rb +54 -0
  184. data/lib/stripe/services/test_helpers/issuing/personalization_design_service.rb +43 -0
  185. data/lib/stripe/services/test_helpers/issuing/transaction_service.rb +43 -0
  186. data/lib/stripe/services/test_helpers/issuing_service.rb +19 -0
  187. data/lib/stripe/services/test_helpers/refund_service.rb +19 -0
  188. data/lib/stripe/services/test_helpers/terminal/reader_service.rb +21 -0
  189. data/lib/stripe/services/test_helpers/terminal_service.rb +15 -0
  190. data/lib/stripe/services/test_helpers/test_clock_service.rb +63 -0
  191. data/lib/stripe/services/test_helpers/treasury/inbound_transfer_service.rb +43 -0
  192. data/lib/stripe/services/test_helpers/treasury/outbound_payment_service.rb +54 -0
  193. data/lib/stripe/services/test_helpers/treasury/outbound_transfer_service.rb +54 -0
  194. data/lib/stripe/services/test_helpers/treasury/received_credit_service.rb +21 -0
  195. data/lib/stripe/services/test_helpers/treasury/received_debit_service.rb +21 -0
  196. data/lib/stripe/services/test_helpers/treasury_service.rb +19 -0
  197. data/lib/stripe/services/test_helpers_service.rb +19 -0
  198. data/lib/stripe/services/token_service.rb +23 -0
  199. data/lib/stripe/services/topup_service.rb +49 -0
  200. data/lib/stripe/services/transfer_reversal_service.rb +56 -0
  201. data/lib/stripe/services/transfer_service.rb +47 -0
  202. data/lib/stripe/services/treasury/credit_reversal_service.rb +41 -0
  203. data/lib/stripe/services/treasury/debit_reversal_service.rb +41 -0
  204. data/lib/stripe/services/treasury/financial_account_features_service.rb +30 -0
  205. data/lib/stripe/services/treasury/financial_account_service.rb +59 -0
  206. data/lib/stripe/services/treasury/inbound_transfer_service.rb +52 -0
  207. data/lib/stripe/services/treasury/outbound_payment_service.rb +52 -0
  208. data/lib/stripe/services/treasury/outbound_transfer_service.rb +52 -0
  209. data/lib/stripe/services/treasury/received_credit_service.rb +30 -0
  210. data/lib/stripe/services/treasury/received_debit_service.rb +30 -0
  211. data/lib/stripe/services/treasury/transaction_entry_service.rb +30 -0
  212. data/lib/stripe/services/treasury/transaction_service.rb +30 -0
  213. data/lib/stripe/services/treasury_service.rb +22 -0
  214. data/lib/stripe/services/v1_services.rb +89 -0
  215. data/lib/stripe/services/v2/billing/meter_event_adjustment_service.rb +21 -0
  216. data/lib/stripe/services/v2/billing/meter_event_service.rb +21 -0
  217. data/lib/stripe/services/v2/billing/meter_event_session_service.rb +21 -0
  218. data/lib/stripe/services/v2/billing/meter_event_stream_service.rb +23 -0
  219. data/lib/stripe/services/v2/billing_service.rb +18 -0
  220. data/lib/stripe/services/v2/core/event_service.rb +32 -0
  221. data/lib/stripe/services/v2/core_service.rb +15 -0
  222. data/lib/stripe/services/v2_services.rb +14 -0
  223. data/lib/stripe/services/webhook_endpoint_service.rb +61 -0
  224. data/lib/stripe/services.rb +181 -0
  225. data/lib/stripe/singleton_api_resource.rb +1 -18
  226. data/lib/stripe/stripe_client.rb +51 -1067
  227. data/lib/stripe/stripe_configuration.rb +32 -20
  228. data/lib/stripe/stripe_object.rb +37 -18
  229. data/lib/stripe/stripe_service.rb +32 -0
  230. data/lib/stripe/thin_event.rb +17 -0
  231. data/lib/stripe/util.rb +69 -46
  232. data/lib/stripe/v2_list_object.rb +84 -0
  233. data/lib/stripe/version.rb +1 -1
  234. data/lib/stripe/webhook.rb +1 -1
  235. data/lib/stripe.rb +15 -54
  236. metadata +203 -23
  237. data/lib/stripe/request_signing_authenticator.rb +0 -79
  238. data/lib/stripe/resources/account_notice.rb +0 -32
  239. data/lib/stripe/resources/capital/financing_offer.rb +0 -49
  240. data/lib/stripe/resources/capital/financing_summary.rb +0 -15
  241. data/lib/stripe/resources/capital/financing_transaction.rb +0 -27
  242. data/lib/stripe/resources/financial_connections/account_inferred_balance.rb +0 -14
  243. data/lib/stripe/resources/financial_connections/institution.rb +0 -26
  244. data/lib/stripe/resources/gift_cards/card.rb +0 -59
  245. data/lib/stripe/resources/gift_cards/transaction.rb +0 -93
  246. data/lib/stripe/resources/invoice_payment.rb +0 -12
  247. data/lib/stripe/resources/issuing/credit_underwriting_record.rb +0 -88
  248. data/lib/stripe/resources/issuing/dispute_settlement_detail.rb +0 -26
  249. data/lib/stripe/resources/margin.rb +0 -37
  250. data/lib/stripe/resources/order.rb +0 -120
  251. data/lib/stripe/resources/quote_preview_invoice.rb +0 -43
  252. data/lib/stripe/resources/quote_preview_subscription_schedule.rb +0 -11
  253. data/lib/stripe/resources/tax/association.rb +0 -24
  254. data/lib/stripe/resources/tax/form.rb +0 -49
  255. data/lib/stripe/resources/terminal/reader_collected_data.rb +0 -14
data/OPENAPI_VERSION CHANGED
@@ -1 +1 @@
1
- v1267
1
+ v1268
data/README.md CHANGED
@@ -346,13 +346,14 @@ If you:
346
346
  - prefer to bypass the method definitions in the library and specify your request details directly,
347
347
  - used the method `Stripe::APIResource.request(...)` to specify your own requests, which will soon be broken
348
348
 
349
- you can now use the `raw_request` method on `Stripe`.
349
+ you can now use the `raw_request` method on `StripeClient`.
350
350
 
351
351
  ```ruby
352
- resp = Stripe.raw_request(:post, "/v1/beta_endpoint", {param: 123}, {stripe_version: "2022-11-15; feature_beta=v3"})
352
+ client = Stripe::StripeClient.new(...)
353
+ resp = client.raw_request(:post, "/v1/beta_endpoint", {param: 123}, {stripe_version: "2022-11-15; feature_beta=v3"})
353
354
 
354
355
  # (Optional) resp is a StripeResponse. You can use `Stripe.deserialize` to get a StripeObject.
355
- deserialized_resp = Stripe.deserialize(resp.http_body)
356
+ deserialized_resp = client.deserialize(resp.http_body)
356
357
  ```
357
358
 
358
359
  ## Support
data/VERSION CHANGED
@@ -1 +1 @@
1
- 12.7.0-beta.2
1
+ 13.0.1
@@ -0,0 +1,16 @@
1
+ ## Running an example
2
+
3
+ From the examples folder, run:
4
+ `RUBYLIB=../lib ruby your_example.rb`
5
+
6
+ e.g.
7
+
8
+ `RUBYLIB=../lib ruby thinevent_webhook_handler.rb`
9
+
10
+ ## Adding a new example
11
+
12
+ 1. Clone new_example.rb
13
+ 2. Implement your example
14
+ 3. Fill out the file comment. Include a description and key steps that are being demonstrated.
15
+ 4. Run it (as per above)
16
+ 5. 👍
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ # example_template.py - This is a template for defining new examples. It is not intended to be used directly.
4
+ #
5
+ # <describe what this example does>
6
+ #
7
+ # In this example, we:
8
+ # - <key step 1>
9
+ # - <key step 2
10
+ # - ...
11
+ #
12
+ # <describe assumptions about the user's stripe account, environment, or configuration;
13
+ # or things to watch out for when running>
14
+
15
+ require "stripe"
16
+ require "date"
17
+
18
+ class ExampleTemplate
19
+ attr_accessor :api_key
20
+
21
+ def initialize(api_key)
22
+ @api_key = api_key
23
+ end
24
+
25
+ def do_something_great
26
+ puts "Hello World"
27
+ # client = Stripe::StripeClient.new(api_key)
28
+ # client.v1
29
+ end
30
+ end
31
+
32
+ # Send meter events
33
+ api_key = "{{API_KEY}}"
34
+
35
+ example = ExampleTemplate.new(api_key)
36
+ example.do_something_great
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ # meter_event_stream.py - use the high-throughput meter event stream to report create billing meter events.
4
+ #
5
+ # In this example, we:
6
+ # - create a meter event session and store the session's authentication token
7
+ # - define an event with a payload
8
+ # - use the meter_event_stream service accessor in StripeClient to create an event stream that reports this event
9
+ #
10
+ # This example expects a billing meter with an event_name of 'alpaca_ai_tokens'. If you have
11
+ # a different meter event name, you can change it before running this example.
12
+
13
+ require "stripe"
14
+ require "date"
15
+
16
+ class MeterEventManager
17
+ attr_accessor :api_key, :meter_event_session
18
+
19
+ def initialize(api_key)
20
+ @api_key = api_key
21
+ @meter_event_session = nil
22
+ end
23
+
24
+ def refresh_meter_event_session
25
+ return unless @meter_event_session.nil? || DateTime.parse(@meter_event_session.expires_at) <= DateTime.now
26
+
27
+ # Create a new meter event session in case the existing session expired
28
+ client = Stripe::StripeClient.new(api_key)
29
+ @meter_event_session = client.v2.billing.meter_event_session.create
30
+ end
31
+
32
+ def send_meter_event(meter_event)
33
+ # Refresh the meter event session if necessary
34
+ refresh_meter_event_session
35
+
36
+ # Create a meter event with the current session's authentication token
37
+ client = Stripe::StripeClient.new(meter_event_session.authentication_token)
38
+ client.v2.billing.meter_event_stream.create(
39
+ events: [meter_event]
40
+ )
41
+ end
42
+ end
43
+
44
+ # Send meter events
45
+ api_key = "{{API_KEY}}"
46
+ customer_id = "{{CUSTOMER_ID}}"
47
+
48
+ manager = MeterEventManager.new(api_key)
49
+ manager.send_meter_event(
50
+ {
51
+ event_name: "alpaca_ai_tokens",
52
+ payload: {
53
+ "stripe_customer_id" => customer_id,
54
+ "value" => "25",
55
+ },
56
+ }
57
+ )
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+ # typed: false
3
+
4
+ # thinevent_webhook_handler.rb - receive and process thin events like the
5
+ # v1.billing.meter.error_report_triggered event.
6
+ #
7
+ # In this example, we:
8
+ # - create a StripeClient called client
9
+ # - use client.parse_thin_event to parse the received thin event webhook body
10
+ # - call client.v2.core.events.retrieve to retrieve the full event object
11
+ # - if it is a V1BillingMeterErrorReportTriggeredEvent event type, call
12
+ # event.fetchRelatedObject to retrieve the Billing Meter object associated
13
+ # with the event.
14
+
15
+ require "stripe"
16
+ require "sinatra"
17
+
18
+ api_key = ENV.fetch("STRIPE_API_KEY", nil)
19
+ # Retrieve the webhook secret from the environment variable
20
+ webhook_secret = ENV.fetch("WEBHOOK_SECRET", nil)
21
+
22
+ client = Stripe::StripeClient.new(api_key)
23
+
24
+ post "/webhook" do
25
+ webhook_body = request.body.read
26
+ sig_header = request.env["HTTP_STRIPE_SIGNATURE"]
27
+ thin_event = client.parse_thin_event(webhook_body, sig_header, webhook_secret)
28
+
29
+ # Fetch the event data to understand the failure
30
+ event = client.v2.core.events.retrieve(thin_event.id)
31
+ if event.instance_of? Stripe::V1BillingMeterErrorReportTriggeredEvent
32
+ meter = event.fetch_related_object
33
+ meter_id = meter.id
34
+ puts "Success!", meter_id
35
+ end
36
+
37
+ # Record the failures and alert your team
38
+ status 200
39
+ end
@@ -35,7 +35,6 @@ module Stripe
35
35
  end
36
36
  end
37
37
 
38
- # rubocop:disable Metrics/MethodLength
39
38
  private def define_operation(
40
39
  resource,
41
40
  operation,
@@ -54,26 +53,8 @@ module Stripe
54
53
  )
55
54
  end
56
55
  when :retrieve
57
- # TODO: (Major) Split params_or_opts to params and opts and get rid of the complicated way to add params
58
56
  define_singleton_method(:"retrieve_#{resource}") \
59
- do |id, nested_id, params_or_opts = {}, definitely_opts = nil|
60
- opts = nil
61
- params = nil
62
- if definitely_opts.nil?
63
- unrecognized_key = params_or_opts.keys.find { |k| !Util::OPTS_USER_SPECIFIED.include?(k) }
64
- if unrecognized_key
65
- raise ArgumentError,
66
- "Unrecognized request option: #{unrecognized_key}. Did you mean to specify this as " \
67
- "retrieve params? " \
68
- "If so, you must explicitly pass an opts hash as a fourth argument. " \
69
- "For example: .retrieve(#{id}, #{nested_id}, {#{unrecognized_key}: 'foo'}, {})"
70
- end
71
-
72
- opts = params_or_opts
73
- else
74
- opts = definitely_opts
75
- params = params_or_opts
76
- end
57
+ do |id, nested_id, params = {}, opts = {}|
77
58
  request_stripe_object(
78
59
  method: :get,
79
60
  path: send(resource_url_method, id, nested_id),
@@ -115,7 +96,6 @@ module Stripe
115
96
  raise ArgumentError, "Unknown operation: #{operation.inspect}"
116
97
  end
117
98
  end
118
- # rubocop:enable Metrics/MethodLength
119
99
  end
120
100
  end
121
101
  end
@@ -4,20 +4,21 @@ module Stripe
4
4
  module APIOperations
5
5
  module Request
6
6
  module ClassMethods
7
- def execute_resource_request(method, url,
7
+ def execute_resource_request(method, url, base_address = :api,
8
8
  params = {}, opts = {}, usage = [])
9
9
  execute_resource_request_internal(
10
- :execute_request, method, url, params, opts, usage
10
+ :execute_request, method, url, base_address, params, opts, usage
11
11
  )
12
12
  end
13
13
 
14
- def execute_resource_request_stream(method, url,
14
+ def execute_resource_request_stream(method, url, base_address = :api,
15
15
  params = {}, opts = {}, usage = [],
16
16
  &read_body_chunk_block)
17
17
  execute_resource_request_internal(
18
18
  :execute_request_stream,
19
19
  method,
20
20
  url,
21
+ base_address,
21
22
  params,
22
23
  opts,
23
24
  usage,
@@ -25,13 +26,12 @@ module Stripe
25
26
  )
26
27
  end
27
28
 
28
- private def request_stripe_object(method:, path:, params:, opts: {}, usage: [])
29
- resp, opts = execute_resource_request(method, path, params, opts, usage)
30
- Util.convert_to_stripe_object_with_params(resp.data, params, opts, resp)
29
+ private def request_stripe_object(method:, path:, base_address: :api, params: {}, opts: {}, usage: [])
30
+ execute_resource_request(method, path, base_address, params, opts, usage)
31
31
  end
32
32
 
33
33
  private def execute_resource_request_internal(client_request_method_sym,
34
- method, url,
34
+ method, url, base_address,
35
35
  params, opts, usage,
36
36
  &read_body_chunk_block)
37
37
  params ||= {}
@@ -40,60 +40,15 @@ module Stripe
40
40
  warn_on_opts_in_params(params)
41
41
 
42
42
  opts = Util.normalize_opts(opts)
43
- error_on_non_string_user_opts(opts)
43
+ req_opts = RequestOptions.extract_opts_from_hash(opts)
44
44
 
45
- opts[:client] ||= StripeClient.active_client
46
-
47
- headers = opts.clone
48
- api_key = headers.delete(:api_key)
49
- api_base = headers.delete(:api_base)
50
- client = headers.delete(:client)
51
- api_mode = headers.delete(:api_mode)
52
- # Assume all remaining opts must be headers
53
-
54
- resp, opts[:api_key] = client.send(
45
+ APIRequestor.active_requestor.send(
55
46
  client_request_method_sym,
56
47
  method, url,
57
- api_base: api_base, api_key: api_key,
58
- headers: headers, params: params, usage: usage, api_mode: api_mode,
48
+ base_address,
49
+ params: params, opts: req_opts, usage: usage,
59
50
  &read_body_chunk_block
60
51
  )
61
-
62
- # Hash#select returns an array before 1.9
63
- opts_to_persist = {}
64
- opts.each do |k, v|
65
- opts_to_persist[k] = v if Util::OPTS_PERSISTABLE.include?(k)
66
- end
67
-
68
- [resp, opts_to_persist]
69
- end
70
-
71
- # TODO: (major)
72
- # This method used to be called `request`, but it's such a short name
73
- # that it eventually conflicted with the name of a field on an API
74
- # resource (specifically, `Event#request`), so it was renamed to
75
- # something more unique.
76
- #
77
- # The former name had been around for just about forever though, and
78
- # although all internal uses have been renamed, I've left this alias in
79
- # place for backwards compatibility. Consider removing it on the next
80
- # major.
81
- alias request execute_resource_request
82
- extend Gem::Deprecate
83
- deprecate :request, "Stripe.raw_request", 2024, 7
84
-
85
- private def error_on_non_string_user_opts(opts)
86
- Util::OPTS_USER_SPECIFIED.each do |opt|
87
- next unless opts.key?(opt)
88
-
89
- val = opts[opt]
90
- next if val.nil?
91
- next if val.is_a?(String)
92
-
93
- raise ArgumentError,
94
- "request option '#{opt}' should be a string value " \
95
- "(was a #{val.class})"
96
- end
97
52
  end
98
53
 
99
54
  private def error_on_invalid_params(params)
@@ -105,7 +60,7 @@ module Stripe
105
60
  end
106
61
 
107
62
  private def warn_on_opts_in_params(params)
108
- Util::OPTS_USER_SPECIFIED.each do |opt|
63
+ RequestOptions::OPTS_USER_SPECIFIED.each do |opt|
109
64
  warn("WARNING: '#{opt}' should be in opts instead of params.") if params.key?(opt)
110
65
  end
111
66
  end
@@ -115,30 +70,24 @@ module Stripe
115
70
  base.extend(ClassMethods)
116
71
  end
117
72
 
118
- protected def execute_resource_request(method, url,
73
+ protected def execute_resource_request(method, url, base_address = :api,
119
74
  params = {}, opts = {}, usage = [])
120
75
  opts = @opts.merge(Util.normalize_opts(opts))
121
- self.class.execute_resource_request(method, url, params, opts, usage)
76
+ self.class.execute_resource_request(method, url, base_address, params, opts, usage)
122
77
  end
123
78
 
124
- protected def execute_resource_request_stream(method, url,
125
- params = {}, opts = {},
79
+ protected def execute_resource_request_stream(method, url, base_address = :api,
80
+ params = {}, opts = {}, usage = [],
126
81
  &read_body_chunk_block)
127
82
  opts = @opts.merge(Util.normalize_opts(opts))
128
83
  self.class.execute_resource_request_stream(
129
- method, url, params, opts, &read_body_chunk_block
84
+ method, url, base_address, params, opts, usage, &read_body_chunk_block
130
85
  )
131
86
  end
132
87
 
133
- private def request_stripe_object(method:, path:, params:, opts: {}, usage: [])
134
- resp, opts = execute_resource_request(method, path, params, opts, usage)
135
- Util.convert_to_stripe_object_with_params(resp.data, params, opts, resp)
88
+ private def request_stripe_object(method:, path:, params:, base_address: :api, opts: {}, usage: [])
89
+ execute_resource_request(method, path, base_address, params, opts, usage)
136
90
  end
137
-
138
- # See notes on `alias` above.
139
- alias request execute_resource_request
140
- extend Gem::Deprecate
141
- deprecate :request, "Stripe.raw_request", 2024, 7
142
91
  end
143
92
  end
144
93
  end
@@ -65,9 +65,10 @@ module Stripe
65
65
  # Please note that id gets removed here our call to #url above has already
66
66
  # generated a uri for this object with an identifier baked in
67
67
  values.delete(:id)
68
-
69
- resp, opts = execute_resource_request(:post, save_url, values, opts, ["save"])
70
- initialize_from(resp.data, opts, resp)
68
+ opts = Util.normalize_opts(opts)
69
+ APIRequestor.active_requestor.execute_request_initialize_from(:post, save_url, :api, self,
70
+ params: values, opts: opts,
71
+ usage: ["save"])
71
72
  end
72
73
  extend Gem::Deprecate
73
74
  deprecate :save, "the `update` class method (for examples " \
@@ -61,8 +61,11 @@ module Stripe
61
61
 
62
62
  values = serialize_params(self).merge(params)
63
63
 
64
- resp, opts = execute_resource_request(:post, resource_url, values, opts, ["save"])
65
- initialize_from(resp.data, opts, resp)
64
+ opts = Util.normalize_opts(opts)
65
+
66
+ APIRequestor.active_requestor.execute_request_initialize_from(:post, resource_url, :api, self,
67
+ params: values, opts: opts,
68
+ usage: ["save"])
66
69
  end
67
70
  extend Gem::Deprecate
68
71
  deprecate :save, "the `update` class method (for examples " \