stripe 12.0.0 → 12.2.0.pre.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1327 -644
  3. data/Gemfile +0 -1
  4. data/OPENAPI_VERSION +1 -1
  5. data/README.md +11 -1
  6. data/VERSION +1 -1
  7. data/lib/stripe/api_operations/request.rb +2 -1
  8. data/lib/stripe/api_version.rb +1 -0
  9. data/lib/stripe/object_types.rb +17 -0
  10. data/lib/stripe/request_signing_authenticator.rb +79 -0
  11. data/lib/stripe/resources/account_notice.rb +32 -0
  12. data/lib/stripe/resources/bank_account.rb +11 -12
  13. data/lib/stripe/resources/capital/financing_offer.rb +49 -0
  14. data/lib/stripe/resources/capital/financing_summary.rb +15 -0
  15. data/lib/stripe/resources/capital/financing_transaction.rb +27 -0
  16. data/lib/stripe/resources/card.rb +10 -12
  17. data/lib/stripe/resources/customer_session.rb +3 -3
  18. data/lib/stripe/resources/financial_connections/account.rb +3 -0
  19. data/lib/stripe/resources/financial_connections/account_inferred_balance.rb +14 -0
  20. data/lib/stripe/resources/financial_connections/institution.rb +26 -0
  21. data/lib/stripe/resources/gift_cards/card.rb +59 -0
  22. data/lib/stripe/resources/gift_cards/transaction.rb +93 -0
  23. data/lib/stripe/resources/invoice.rb +97 -0
  24. data/lib/stripe/resources/invoice_payment.rb +12 -0
  25. data/lib/stripe/resources/issuing/credit_underwriting_record.rb +88 -0
  26. data/lib/stripe/resources/margin.rb +37 -0
  27. data/lib/stripe/resources/order.rb +120 -0
  28. data/lib/stripe/resources/payment_intent.rb +50 -0
  29. data/lib/stripe/resources/quote.rb +104 -0
  30. data/lib/stripe/resources/quote_phase.rb +39 -0
  31. data/lib/stripe/resources/quote_preview_invoice.rb +43 -0
  32. data/lib/stripe/resources/quote_preview_subscription_schedule.rb +11 -0
  33. data/lib/stripe/resources/subscription_schedule.rb +20 -0
  34. data/lib/stripe/resources/tax/form.rb +49 -0
  35. data/lib/stripe/resources/terminal/reader.rb +60 -0
  36. data/lib/stripe/resources.rb +16 -0
  37. data/lib/stripe/stripe_client.rb +62 -28
  38. data/lib/stripe/stripe_configuration.rb +2 -1
  39. data/lib/stripe/util.rb +8 -1
  40. data/lib/stripe/version.rb +1 -1
  41. data/lib/stripe.rb +54 -0
  42. metadata +21 -4
@@ -15,6 +15,26 @@ module Stripe
15
15
  "subscription_schedule"
16
16
  end
17
17
 
18
+ # Amends an existing subscription schedule.
19
+ def amend(params = {}, opts = {})
20
+ request_stripe_object(
21
+ method: :post,
22
+ path: format("/v1/subscription_schedules/%<schedule>s/amend", { schedule: CGI.escape(self["id"]) }),
23
+ params: params,
24
+ opts: opts
25
+ )
26
+ end
27
+
28
+ # Amends an existing subscription schedule.
29
+ def self.amend(schedule, params = {}, opts = {})
30
+ request_stripe_object(
31
+ method: :post,
32
+ path: format("/v1/subscription_schedules/%<schedule>s/amend", { schedule: CGI.escape(schedule) }),
33
+ params: params,
34
+ opts: opts
35
+ )
36
+ end
37
+
18
38
  # Cancels a subscription schedule and its associated subscription immediately (if the subscription schedule has an active subscription). A subscription schedule can only be canceled if its status is not_started or active.
19
39
  def cancel(params = {}, opts = {})
20
40
  request_stripe_object(
@@ -0,0 +1,49 @@
1
+ # File generated from our OpenAPI spec
2
+ # frozen_string_literal: true
3
+
4
+ module Stripe
5
+ module Tax
6
+ # Tax forms are legal documents which are delivered to one or more tax authorities for information reporting purposes.
7
+ #
8
+ # Related guide: [US tax reporting for Connect platforms](https://stripe.com/docs/connect/tax-reporting)
9
+ class Form < APIResource
10
+ extend Stripe::APIOperations::List
11
+
12
+ OBJECT_NAME = "tax.form"
13
+ def self.object_name
14
+ "tax.form"
15
+ end
16
+
17
+ # Returns a list of tax forms which were previously created. The tax forms are returned in sorted order, with the oldest tax forms appearing first.
18
+ def self.list(filters = {}, opts = {})
19
+ request_stripe_object(method: :get, path: "/v1/tax/forms", params: filters, opts: opts)
20
+ end
21
+
22
+ # Download the PDF for a tax form.
23
+ def pdf(params = {}, opts = {}, &read_body_chunk_block)
24
+ config = opts[:client]&.config || Stripe.config
25
+ opts = { api_base: config.uploads_base }.merge(opts)
26
+ request_stream(
27
+ method: :get,
28
+ path: format("/v1/tax/forms/%<id>s/pdf", { id: CGI.escape(self["id"]) }),
29
+ params: params,
30
+ opts: opts,
31
+ &read_body_chunk_block
32
+ )
33
+ end
34
+
35
+ # Download the PDF for a tax form.
36
+ def self.pdf(id, params = {}, opts = {}, &read_body_chunk_block)
37
+ config = opts[:client]&.config || Stripe.config
38
+ opts = { api_base: config.uploads_base }.merge(opts)
39
+ execute_resource_request_stream(
40
+ :get,
41
+ format("/v1/tax/forms/%<id>s/pdf", { id: CGI.escape(id) }),
42
+ params,
43
+ opts,
44
+ &read_body_chunk_block
45
+ )
46
+ end
47
+ end
48
+ end
49
+ end
@@ -37,6 +37,66 @@ module Stripe
37
37
  )
38
38
  end
39
39
 
40
+ # Initiates an input collection flow on a Reader.
41
+ def collect_inputs(params = {}, opts = {})
42
+ request_stripe_object(
43
+ method: :post,
44
+ path: format("/v1/terminal/readers/%<reader>s/collect_inputs", { reader: CGI.escape(self["id"]) }),
45
+ params: params,
46
+ opts: opts
47
+ )
48
+ end
49
+
50
+ # Initiates an input collection flow on a Reader.
51
+ def self.collect_inputs(reader, params = {}, opts = {})
52
+ request_stripe_object(
53
+ method: :post,
54
+ path: format("/v1/terminal/readers/%<reader>s/collect_inputs", { reader: CGI.escape(reader) }),
55
+ params: params,
56
+ opts: opts
57
+ )
58
+ end
59
+
60
+ # Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation.
61
+ def collect_payment_method(params = {}, opts = {})
62
+ request_stripe_object(
63
+ method: :post,
64
+ path: format("/v1/terminal/readers/%<reader>s/collect_payment_method", { reader: CGI.escape(self["id"]) }),
65
+ params: params,
66
+ opts: opts
67
+ )
68
+ end
69
+
70
+ # Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation.
71
+ def self.collect_payment_method(reader, params = {}, opts = {})
72
+ request_stripe_object(
73
+ method: :post,
74
+ path: format("/v1/terminal/readers/%<reader>s/collect_payment_method", { reader: CGI.escape(reader) }),
75
+ params: params,
76
+ opts: opts
77
+ )
78
+ end
79
+
80
+ # Finalizes a payment on a Reader.
81
+ def confirm_payment_intent(params = {}, opts = {})
82
+ request_stripe_object(
83
+ method: :post,
84
+ path: format("/v1/terminal/readers/%<reader>s/confirm_payment_intent", { reader: CGI.escape(self["id"]) }),
85
+ params: params,
86
+ opts: opts
87
+ )
88
+ end
89
+
90
+ # Finalizes a payment on a Reader.
91
+ def self.confirm_payment_intent(reader, params = {}, opts = {})
92
+ request_stripe_object(
93
+ method: :post,
94
+ path: format("/v1/terminal/readers/%<reader>s/confirm_payment_intent", { reader: CGI.escape(reader) }),
95
+ params: params,
96
+ opts: opts
97
+ )
98
+ end
99
+
40
100
  # Creates a new Reader object.
41
101
  def self.create(params = {}, opts = {})
42
102
  request_stripe_object(
@@ -3,6 +3,7 @@
3
3
 
4
4
  require "stripe/resources/account"
5
5
  require "stripe/resources/account_link"
6
+ require "stripe/resources/account_notice"
6
7
  require "stripe/resources/account_session"
7
8
  require "stripe/resources/apple_pay_domain"
8
9
  require "stripe/resources/application_fee"
@@ -18,6 +19,9 @@ require "stripe/resources/billing/meter_event_summary"
18
19
  require "stripe/resources/billing_portal/configuration"
19
20
  require "stripe/resources/billing_portal/session"
20
21
  require "stripe/resources/capability"
22
+ require "stripe/resources/capital/financing_offer"
23
+ require "stripe/resources/capital/financing_summary"
24
+ require "stripe/resources/capital/financing_transaction"
21
25
  require "stripe/resources/card"
22
26
  require "stripe/resources/cash_balance"
23
27
  require "stripe/resources/charge"
@@ -44,20 +48,26 @@ require "stripe/resources/exchange_rate"
44
48
  require "stripe/resources/file"
45
49
  require "stripe/resources/file_link"
46
50
  require "stripe/resources/financial_connections/account"
51
+ require "stripe/resources/financial_connections/account_inferred_balance"
47
52
  require "stripe/resources/financial_connections/account_owner"
48
53
  require "stripe/resources/financial_connections/account_ownership"
54
+ require "stripe/resources/financial_connections/institution"
49
55
  require "stripe/resources/financial_connections/session"
50
56
  require "stripe/resources/financial_connections/transaction"
51
57
  require "stripe/resources/forwarding/request"
52
58
  require "stripe/resources/funding_instructions"
59
+ require "stripe/resources/gift_cards/card"
60
+ require "stripe/resources/gift_cards/transaction"
53
61
  require "stripe/resources/identity/verification_report"
54
62
  require "stripe/resources/identity/verification_session"
55
63
  require "stripe/resources/invoice"
56
64
  require "stripe/resources/invoice_item"
57
65
  require "stripe/resources/invoice_line_item"
66
+ require "stripe/resources/invoice_payment"
58
67
  require "stripe/resources/issuing/authorization"
59
68
  require "stripe/resources/issuing/card"
60
69
  require "stripe/resources/issuing/cardholder"
70
+ require "stripe/resources/issuing/credit_underwriting_record"
61
71
  require "stripe/resources/issuing/dispute"
62
72
  require "stripe/resources/issuing/personalization_design"
63
73
  require "stripe/resources/issuing/physical_bundle"
@@ -66,6 +76,8 @@ require "stripe/resources/issuing/transaction"
66
76
  require "stripe/resources/line_item"
67
77
  require "stripe/resources/login_link"
68
78
  require "stripe/resources/mandate"
79
+ require "stripe/resources/margin"
80
+ require "stripe/resources/order"
69
81
  require "stripe/resources/payment_intent"
70
82
  require "stripe/resources/payment_link"
71
83
  require "stripe/resources/payment_method"
@@ -79,6 +91,9 @@ require "stripe/resources/product"
79
91
  require "stripe/resources/product_feature"
80
92
  require "stripe/resources/promotion_code"
81
93
  require "stripe/resources/quote"
94
+ require "stripe/resources/quote_phase"
95
+ require "stripe/resources/quote_preview_invoice"
96
+ require "stripe/resources/quote_preview_subscription_schedule"
82
97
  require "stripe/resources/radar/early_fraud_warning"
83
98
  require "stripe/resources/radar/value_list"
84
99
  require "stripe/resources/radar/value_list_item"
@@ -98,6 +113,7 @@ require "stripe/resources/subscription_item"
98
113
  require "stripe/resources/subscription_schedule"
99
114
  require "stripe/resources/tax/calculation"
100
115
  require "stripe/resources/tax/calculation_line_item"
116
+ require "stripe/resources/tax/form"
101
117
  require "stripe/resources/tax/registration"
102
118
  require "stripe/resources/tax/settings"
103
119
  require "stripe/resources/tax/transaction"
@@ -217,9 +217,10 @@ module Stripe
217
217
  "for usage examples)", 2024, 6
218
218
 
219
219
  def execute_request(method, path,
220
- api_base: nil, api_key: nil, headers: {}, params: {}, usage: [])
220
+ api_base: nil, api_key: nil,
221
+ headers: {}, params: {}, api_mode: nil, usage: [])
221
222
  http_resp, api_key = execute_request_internal(
222
- method, path, api_base, api_key, headers, params, usage
223
+ method, path, api_base, api_key, headers, params, api_mode, usage
223
224
  )
224
225
 
225
226
  begin
@@ -250,6 +251,7 @@ module Stripe
250
251
  def execute_request_stream(method, path,
251
252
  api_base: nil, api_key: nil, usage: [],
252
253
  headers: {}, params: {},
254
+ api_mode: nil,
253
255
  &read_body_chunk_block)
254
256
  unless block_given?
255
257
  raise ArgumentError,
@@ -257,7 +259,8 @@ module Stripe
257
259
  end
258
260
 
259
261
  http_resp, api_key = execute_request_internal(
260
- method, path, api_base, api_key, headers, params, usage, &read_body_chunk_block
262
+ method, path, api_base, api_key,
263
+ headers, params, api_mode, usage, &read_body_chunk_block
261
264
  )
262
265
 
263
266
  # When the read_body_chunk_block is given, we no longer have access to the
@@ -436,8 +439,8 @@ module Stripe
436
439
  end
437
440
 
438
441
  private def execute_request_internal(method, path,
439
- api_base, api_key, headers, params, usage,
440
- &read_body_chunk_block)
442
+ api_base, api_key, headers, params,
443
+ api_mode, usage, &read_body_chunk_block)
441
444
  raise ArgumentError, "method should be a symbol" \
442
445
  unless method.is_a?(Symbol)
443
446
  raise ArgumentError, "path should be a string" \
@@ -445,9 +448,10 @@ module Stripe
445
448
 
446
449
  api_base ||= config.api_base
447
450
  api_key ||= config.api_key
451
+ authenticator ||= config.authenticator
448
452
  params = Util.objects_to_ids(params)
449
453
 
450
- check_api_key!(api_key)
454
+ check_keys!(api_key, authenticator)
451
455
 
452
456
  body_params = nil
453
457
  query_params = nil
@@ -460,8 +464,9 @@ module Stripe
460
464
 
461
465
  query_params, path = merge_query_params(query_params, path)
462
466
 
463
- headers = request_headers(api_key, method)
467
+ headers = request_headers(api_key, method, api_mode)
464
468
  .update(Util.normalize_headers(headers))
469
+
465
470
  url = api_url(path, api_base)
466
471
 
467
472
  # Merge given query parameters with any already encoded in the path.
@@ -472,13 +477,16 @@ module Stripe
472
477
  # a log-friendly variant of the encoded form. File objects are displayed
473
478
  # as such instead of as their file contents.
474
479
  body, body_log =
475
- body_params ? encode_body(body_params, headers) : [nil, nil]
480
+ body_params ? encode_body(body_params, headers, api_mode) : [nil, nil]
481
+
482
+ authenticator.authenticate(method, headers, body) unless api_key
476
483
 
477
484
  # stores information on the request we're about to make so that we don't
478
485
  # have to pass as many parameters around for logging.
479
486
  context = RequestLogContext.new
480
487
  context.account = headers["Stripe-Account"]
481
488
  context.api_key = api_key
489
+ context.authenticator = authenticator
482
490
  context.api_version = headers["Stripe-Version"]
483
491
  context.body = body_log
484
492
  context.idempotency_key = headers["Idempotency-Key"]
@@ -515,8 +523,16 @@ module Stripe
515
523
  (api_base || config.api_base) + url
516
524
  end
517
525
 
518
- private def check_api_key!(api_key)
519
- unless api_key
526
+ private def check_keys!(api_key, authenticator)
527
+ if api_key && authenticator
528
+ raise AuthenticationError, "Can't specify both API key " \
529
+ "and authenticator. Either set your API key" \
530
+ 'using "Stripe.api_key = <API-KEY>", or set your authenticator ' \
531
+ 'using "Stripe.authenticator = <AUTHENTICATOR>"' \
532
+ end
533
+
534
+ unless api_key || authenticator
535
+ # Default to missing API key error message for general users.
520
536
  raise AuthenticationError, "No API key provided. " \
521
537
  'Set your API key using "Stripe.api_key = <API-KEY>". ' \
522
538
  "You can generate API keys from the Stripe web interface. " \
@@ -535,7 +551,7 @@ module Stripe
535
551
  # Encodes a set of body parameters using multipart if `Content-Type` is set
536
552
  # for that, or standard form-encoding otherwise. Returns the encoded body
537
553
  # and a version of the encoded body that's safe to be logged.
538
- private def encode_body(body_params, headers)
554
+ private def encode_body(body_params, headers, api_mode)
539
555
  body = nil
540
556
  flattened_params = Util.flatten_params(body_params)
541
557
 
@@ -551,15 +567,22 @@ module Stripe
551
567
  flattened_params =
552
568
  flattened_params.map { |k, v| [k, v.is_a?(String) ? v : v.to_s] }.to_h
553
569
 
570
+ elsif api_mode == :preview
571
+ body = JSON.generate(body_params)
572
+ headers["Content-Type"] = "application/json"
554
573
  else
555
574
  body = Util.encode_parameters(body_params)
556
575
  end
557
576
 
558
- # We don't use `Util.encode_parameters` partly as an optimization (to not
559
- # redo work we've already done), and partly because the encoded forms of
560
- # certain characters introduce a lot of visual noise and it's nice to
561
- # have a clearer format for logs.
562
- body_log = flattened_params.map { |k, v| "#{k}=#{v}" }.join("&")
577
+ body_log = if api_mode == :preview
578
+ body
579
+ else
580
+ # We don't use `Util.encode_parameters` partly as an optimization (to
581
+ # not redo work we've already done), and partly because the encoded
582
+ # forms of certain characters introduce a lot of visual noise and it's
583
+ # nice to have a clearer format for logs.
584
+ flattened_params.map { |k, v| "#{k}=#{v}" }.join("&")
585
+ end
563
586
 
564
587
  [body, body_log]
565
588
  end
@@ -745,10 +768,11 @@ module Stripe
745
768
  end
746
769
 
747
770
  private def specific_api_error(resp, error_data, context)
771
+ message = error_data[:message]
748
772
  Util.log_error("Stripe API error",
749
773
  status: resp.http_status,
750
774
  error_code: error_data[:code],
751
- error_message: error_data[:message],
775
+ error_message: message,
752
776
  error_param: error_data[:param],
753
777
  error_type: error_data[:type],
754
778
  idempotency_key: context.idempotency_key,
@@ -769,26 +793,26 @@ module Stripe
769
793
  when 400, 404
770
794
  case error_data[:type]
771
795
  when "idempotency_error"
772
- IdempotencyError.new(error_data[:message], **opts)
796
+ IdempotencyError.new(message, **opts)
773
797
  else
774
798
  InvalidRequestError.new(
775
- error_data[:message], error_data[:param],
799
+ message, error_data[:param],
776
800
  **opts
777
801
  )
778
802
  end
779
803
  when 401
780
- AuthenticationError.new(error_data[:message], **opts)
804
+ AuthenticationError.new(message, **opts)
781
805
  when 402
782
806
  CardError.new(
783
- error_data[:message], error_data[:param],
807
+ message, error_data[:param],
784
808
  **opts
785
809
  )
786
810
  when 403
787
- PermissionError.new(error_data[:message], **opts)
811
+ PermissionError.new(message, **opts)
788
812
  when 429
789
- RateLimitError.new(error_data[:message], **opts)
813
+ RateLimitError.new(message, **opts)
790
814
  else
791
- APIError.new(error_data[:message], **opts)
815
+ APIError.new(message, **opts)
792
816
  end
793
817
  end
794
818
 
@@ -856,16 +880,20 @@ module Stripe
856
880
  message + "\n\n(Network error: #{error.message})"
857
881
  end
858
882
 
859
- private def request_headers(api_key, method)
883
+ private def request_headers(api_key, method, api_mode)
860
884
  user_agent = "Stripe/v1 RubyBindings/#{Stripe::VERSION}"
861
885
  user_agent += " " + format_app_info(Stripe.app_info) unless Stripe.app_info.nil?
862
886
 
863
887
  headers = {
864
888
  "User-Agent" => user_agent,
865
889
  "Authorization" => "Bearer #{api_key}",
866
- "Content-Type" => "application/x-www-form-urlencoded",
867
890
  }
868
891
 
892
+ if api_mode != :preview
893
+ # TODO: (major) don't set Content-Type if method is not post
894
+ headers["Content-Type"] = "application/x-www-form-urlencoded"
895
+ end
896
+
869
897
  if config.enable_telemetry? && !@last_request_metrics.nil?
870
898
  headers["X-Stripe-Client-Telemetry"] = JSON.generate(
871
899
  last_request_metrics: @last_request_metrics.payload
@@ -878,7 +906,12 @@ module Stripe
878
906
  headers["Idempotency-Key"] ||= SecureRandom.uuid
879
907
  end
880
908
 
881
- headers["Stripe-Version"] = config.api_version if config.api_version
909
+ if api_mode == :preview
910
+ headers["Stripe-Version"] = ApiVersion::PREVIEW
911
+ elsif config.api_version
912
+ headers["Stripe-Version"] = config.api_version
913
+ end
914
+
882
915
  headers["Stripe-Account"] = config.stripe_account if config.stripe_account
883
916
 
884
917
  user_agent = @system_profiler.user_agent
@@ -961,7 +994,8 @@ module Stripe
961
994
  # that we can log certain information. It's useful because it means that we
962
995
  # don't have to pass around as many parameters.
963
996
  class RequestLogContext
964
- attr_accessor :body, :account, :api_key, :api_version, :idempotency_key, :method, :path, :query, :request_id
997
+ attr_accessor :body, :account, :api_key, :authenticator, :api_version, :idempotency_key, :method, :path, :query,
998
+ :request_id
965
999
 
966
1000
  # The idea with this method is that we might want to update some of
967
1001
  # context information because a response that we've received from the API
@@ -25,7 +25,7 @@ module Stripe
25
25
  # If `.logger` is set, the value of `.log_level` is ignored. The decision on
26
26
  # what levels to print is entirely deferred to the logger.
27
27
  class StripeConfiguration
28
- attr_accessor :api_key, :api_version, :client_id, :enable_telemetry, :logger, :stripe_account
28
+ attr_accessor :api_key, :api_version, :authenticator, :client_id, :enable_telemetry, :logger, :stripe_account
29
29
 
30
30
  attr_reader :api_base, :uploads_base, :connect_base, :ca_bundle_path, :log_level, :initial_network_retry_delay,
31
31
  # rubocop:todo Layout/LineLength
@@ -50,6 +50,7 @@ module Stripe
50
50
 
51
51
  def initialize
52
52
  @api_version = ApiVersion::CURRENT
53
+
53
54
  @ca_bundle_path = Stripe::DEFAULT_CA_BUNDLE_PATH
54
55
  @enable_telemetry = true
55
56
  @verify_ssl_certs = true
data/lib/stripe/util.rb CHANGED
@@ -7,6 +7,7 @@ module Stripe
7
7
  # Options that a user is allowed to specify.
8
8
  OPTS_USER_SPECIFIED = Set[
9
9
  :api_key,
10
+ :authenticator,
10
11
  :idempotency_key,
11
12
  :stripe_account,
12
13
  :stripe_version
@@ -279,7 +280,13 @@ module Stripe
279
280
  when String
280
281
  { api_key: opts }
281
282
  when Hash
282
- check_api_key!(opts.fetch(:api_key)) if opts.key?(:api_key)
283
+ # If the user is using request signing for authentication,
284
+ # no need to check the api_key per request.
285
+ if !(opts.key?(:client) &&
286
+ opts.fetch(:client).config.authenticator) &&
287
+ opts.key?(:api_key)
288
+ check_api_key!(opts.fetch(:api_key))
289
+ end
283
290
  # Explicitly use dup here instead of clone to avoid preserving freeze
284
291
  # state on input params.
285
292
  opts.dup
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Stripe
4
- VERSION = "12.0.0"
4
+ VERSION = "12.2.0-beta.1"
5
5
  end
data/lib/stripe.rb CHANGED
@@ -13,6 +13,7 @@ require "set"
13
13
  require "socket"
14
14
  require "uri"
15
15
  require "forwardable"
16
+ require "base64"
16
17
 
17
18
  # Version
18
19
  require "stripe/api_version"
@@ -45,6 +46,7 @@ require "stripe/api_resource_test_helpers"
45
46
  require "stripe/singleton_api_resource"
46
47
  require "stripe/webhook"
47
48
  require "stripe/stripe_configuration"
49
+ require "stripe/request_signing_authenticator"
48
50
 
49
51
  # Named API resources
50
52
  require "stripe/resources"
@@ -71,6 +73,7 @@ module Stripe
71
73
 
72
74
  # User configurable options
73
75
  def_delegators :@config, :api_key, :api_key=
76
+ def_delegators :@config, :authenticator, :authenticator=
74
77
  def_delegators :@config, :api_version, :api_version=
75
78
  def_delegators :@config, :stripe_account, :stripe_account=
76
79
  def_delegators :@config, :api_base, :api_base=
@@ -117,6 +120,57 @@ module Stripe
117
120
  version: version,
118
121
  }
119
122
  end
123
+
124
+ def self.add_beta_version(beta_name, version)
125
+ if api_version.include?("; #{beta_name}=")
126
+ raise "Stripe version header #{api_version} already contains entry for beta #{beta_name}"
127
+ end
128
+
129
+ self.api_version = "#{api_version}; #{beta_name}=#{version}"
130
+ end
131
+
132
+ class Preview
133
+ def self._get_default_opts(opts)
134
+ { api_mode: :preview }.merge(opts)
135
+ end
136
+
137
+ def self.get(url, opts = {})
138
+ Stripe.raw_request(:get, url, {}, _get_default_opts(opts))
139
+ end
140
+
141
+ def self.post(url, params = {}, opts = {})
142
+ Stripe.raw_request(:post, url, params, _get_default_opts(opts))
143
+ end
144
+
145
+ def self.delete(url, opts = {})
146
+ Stripe.raw_request(:delete, url, {}, _get_default_opts(opts))
147
+ end
148
+ end
149
+
150
+ class RawRequest
151
+ include Stripe::APIOperations::Request
152
+
153
+ def initialize
154
+ @opts = {}
155
+ end
156
+
157
+ def execute(method, url, params = {}, opts = {}, usage = [])
158
+ resp, = execute_resource_request(method, url, params, opts, usage)
159
+
160
+ resp
161
+ end
162
+ end
163
+
164
+ # Sends a request to Stripe REST API
165
+ def self.raw_request(method, url, params = {}, opts = {})
166
+ req = RawRequest.new
167
+ req.execute(method, url, params, opts, ["raw_request"])
168
+ end
169
+
170
+ def self.deserialize(data)
171
+ data = JSON.parse(data) if data.is_a?(String)
172
+ Util.convert_to_stripe_object(data, {})
173
+ end
120
174
  end
121
175
 
122
176
  Stripe.log_level = ENV["STRIPE_LOG"] unless ENV["STRIPE_LOG"].nil?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stripe
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.0.0
4
+ version: 12.2.0.pre.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stripe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-24 00:00:00.000000000 Z
11
+ date: 2024-07-05 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Stripe is the easiest way to accept payments online. See https://stripe.com
14
14
  for details.
@@ -51,9 +51,11 @@ files:
51
51
  - lib/stripe/multipart_encoder.rb
52
52
  - lib/stripe/oauth.rb
53
53
  - lib/stripe/object_types.rb
54
+ - lib/stripe/request_signing_authenticator.rb
54
55
  - lib/stripe/resources.rb
55
56
  - lib/stripe/resources/account.rb
56
57
  - lib/stripe/resources/account_link.rb
58
+ - lib/stripe/resources/account_notice.rb
57
59
  - lib/stripe/resources/account_session.rb
58
60
  - lib/stripe/resources/alipay_account.rb
59
61
  - lib/stripe/resources/apple_pay_domain.rb
@@ -70,6 +72,9 @@ files:
70
72
  - lib/stripe/resources/billing_portal/configuration.rb
71
73
  - lib/stripe/resources/billing_portal/session.rb
72
74
  - lib/stripe/resources/capability.rb
75
+ - lib/stripe/resources/capital/financing_offer.rb
76
+ - lib/stripe/resources/capital/financing_summary.rb
77
+ - lib/stripe/resources/capital/financing_transaction.rb
73
78
  - lib/stripe/resources/card.rb
74
79
  - lib/stripe/resources/cash_balance.rb
75
80
  - lib/stripe/resources/charge.rb
@@ -96,20 +101,26 @@ files:
96
101
  - lib/stripe/resources/file.rb
97
102
  - lib/stripe/resources/file_link.rb
98
103
  - lib/stripe/resources/financial_connections/account.rb
104
+ - lib/stripe/resources/financial_connections/account_inferred_balance.rb
99
105
  - lib/stripe/resources/financial_connections/account_owner.rb
100
106
  - lib/stripe/resources/financial_connections/account_ownership.rb
107
+ - lib/stripe/resources/financial_connections/institution.rb
101
108
  - lib/stripe/resources/financial_connections/session.rb
102
109
  - lib/stripe/resources/financial_connections/transaction.rb
103
110
  - lib/stripe/resources/forwarding/request.rb
104
111
  - lib/stripe/resources/funding_instructions.rb
112
+ - lib/stripe/resources/gift_cards/card.rb
113
+ - lib/stripe/resources/gift_cards/transaction.rb
105
114
  - lib/stripe/resources/identity/verification_report.rb
106
115
  - lib/stripe/resources/identity/verification_session.rb
107
116
  - lib/stripe/resources/invoice.rb
108
117
  - lib/stripe/resources/invoice_item.rb
109
118
  - lib/stripe/resources/invoice_line_item.rb
119
+ - lib/stripe/resources/invoice_payment.rb
110
120
  - lib/stripe/resources/issuing/authorization.rb
111
121
  - lib/stripe/resources/issuing/card.rb
112
122
  - lib/stripe/resources/issuing/cardholder.rb
123
+ - lib/stripe/resources/issuing/credit_underwriting_record.rb
113
124
  - lib/stripe/resources/issuing/dispute.rb
114
125
  - lib/stripe/resources/issuing/personalization_design.rb
115
126
  - lib/stripe/resources/issuing/physical_bundle.rb
@@ -118,6 +129,8 @@ files:
118
129
  - lib/stripe/resources/line_item.rb
119
130
  - lib/stripe/resources/login_link.rb
120
131
  - lib/stripe/resources/mandate.rb
132
+ - lib/stripe/resources/margin.rb
133
+ - lib/stripe/resources/order.rb
121
134
  - lib/stripe/resources/payment_intent.rb
122
135
  - lib/stripe/resources/payment_link.rb
123
136
  - lib/stripe/resources/payment_method.rb
@@ -131,6 +144,9 @@ files:
131
144
  - lib/stripe/resources/product_feature.rb
132
145
  - lib/stripe/resources/promotion_code.rb
133
146
  - lib/stripe/resources/quote.rb
147
+ - lib/stripe/resources/quote_phase.rb
148
+ - lib/stripe/resources/quote_preview_invoice.rb
149
+ - lib/stripe/resources/quote_preview_subscription_schedule.rb
134
150
  - lib/stripe/resources/radar/early_fraud_warning.rb
135
151
  - lib/stripe/resources/radar/value_list.rb
136
152
  - lib/stripe/resources/radar/value_list_item.rb
@@ -151,6 +167,7 @@ files:
151
167
  - lib/stripe/resources/subscription_schedule.rb
152
168
  - lib/stripe/resources/tax/calculation.rb
153
169
  - lib/stripe/resources/tax/calculation_line_item.rb
170
+ - lib/stripe/resources/tax/form.rb
154
171
  - lib/stripe/resources/tax/registration.rb
155
172
  - lib/stripe/resources/tax/settings.rb
156
173
  - lib/stripe/resources/tax/transaction.rb
@@ -212,9 +229,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
212
229
  version: 2.3.0
213
230
  required_rubygems_version: !ruby/object:Gem::Requirement
214
231
  requirements:
215
- - - ">="
232
+ - - ">"
216
233
  - !ruby/object:Gem::Version
217
- version: '0'
234
+ version: 1.3.1
218
235
  requirements: []
219
236
  rubygems_version: 3.3.27
220
237
  signing_key: