dodopayments 2.1.2 → 2.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 777c3fbb6da9aaa355779f987cada0a8ebd8ef1c733b5a9c847bd4a58472a74f
4
- data.tar.gz: e0ab15d802bbbb3db3313d15b65ad542c16b970824fff441eff5f86859d7ec24
3
+ metadata.gz: 288683b7ef76f820f060d6adff43714ad2fb7be3a72f47e3244d07c81e744fe8
4
+ data.tar.gz: 3f7d919faa8bf245058c30aa1fee3c7ab7a1a845036528e34bd3e8e81aa6f290
5
5
  SHA512:
6
- metadata.gz: b0fc3d2dd44ad2d51eb148ac750941022fb91024a5630cfcb105d9404bc7953cf2914df5b87985dfeb2121e2c7c2be2f86cb2c2df1e447473dcdb79590f46eb3
7
- data.tar.gz: 2d13501625d39db2d45aac9215c4a6d09a1b9bbc937a4f6be87ab2a39845bbb01f07e87d5c62b32f8523666fc357a0f53bcad4dfcdc10b60cc7dcc6e7c1d7453
6
+ metadata.gz: e1d7c7dc76e74e7da61a5762ec7132be03c49c1abd34b904d6c07ccfb1e9a24f0e54f45884cef06f14dbf09b695ffe6f6e8aea0719b00a2b2e532cdce79e5240
7
+ data.tar.gz: b0128ca6313bcabc75be7378752e04e9f4865538a0638782dd5e311467c46193aaa92798004ee9dd43970f804dffc2b7cca71df5138b16edd280ef0afbefac53
data/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.2.0 (2026-03-21)
4
+
5
+ Full Changelog: [v2.1.2...v2.2.0](https://github.com/dodopayments/dodopayments-ruby/compare/v2.1.2...v2.2.0)
6
+
7
+ ### Features
8
+
9
+ * **client:** add webhook support ([8f3488c](https://github.com/dodopayments/dodopayments-ruby/commit/8f3488c1db4e3c8b58c9d9bb208448db009c4ad3))
10
+
11
+
12
+ ### Chores
13
+
14
+ * **ci:** skip uploading artifacts on stainless-internal branches ([15197f0](https://github.com/dodopayments/dodopayments-ruby/commit/15197f0450856e33a2e6fa990ea4e0d0bc294022))
15
+ * **internal:** tweak CI branches ([dc3f7dc](https://github.com/dodopayments/dodopayments-ruby/commit/dc3f7dc0938f71b047786e11f56c4b51a1e0a776))
16
+ * **tests:** bump steady to v0.19.4 ([4247a60](https://github.com/dodopayments/dodopayments-ruby/commit/4247a60b34ccc131f2b906b03eb0f23841a18240))
17
+ * **tests:** bump steady to v0.19.5 ([7f4e044](https://github.com/dodopayments/dodopayments-ruby/commit/7f4e04431b6f274cccd98ef0d9bd322a1c73868a))
18
+
19
+
20
+ ### Refactors
21
+
22
+ * **tests:** switch from prism to steady ([62bcdf6](https://github.com/dodopayments/dodopayments-ruby/commit/62bcdf666e0b382ba8dc83bb530cff79c31931bc))
23
+
3
24
  ## 2.1.2 (2026-03-06)
4
25
 
5
26
  Full Changelog: [v2.1.1...v2.1.2](https://github.com/dodopayments/dodopayments-ruby/compare/v2.1.1...v2.1.2)
data/README.md CHANGED
@@ -26,7 +26,7 @@ To use this gem, install via Bundler by adding the following to your application
26
26
  <!-- x-release-please-start-version -->
27
27
 
28
28
  ```ruby
29
- gem "dodopayments", "~> 2.1.2"
29
+ gem "dodopayments", "~> 2.2.0"
30
30
  ```
31
31
 
32
32
  <!-- x-release-please-end -->
@@ -24,6 +24,9 @@ module Dodopayments
24
24
  # @return [String]
25
25
  attr_reader :bearer_token
26
26
 
27
+ # @return [String, nil]
28
+ attr_reader :webhook_key
29
+
27
30
  # @return [Dodopayments::Resources::CheckoutSessions]
28
31
  attr_reader :checkout_sessions
29
32
 
@@ -103,6 +106,8 @@ module Dodopayments
103
106
  #
104
107
  # @param bearer_token [String, nil] Bearer Token for API authentication Defaults to `ENV["DODO_PAYMENTS_API_KEY"]`
105
108
  #
109
+ # @param webhook_key [String, nil] Defaults to `ENV["DODO_PAYMENTS_WEBHOOK_KEY"]`
110
+ #
106
111
  # @param environment [:live_mode, :test_mode, nil] Specifies the environment to use for the API.
107
112
  #
108
113
  # Each environment maps to a different base URL:
@@ -122,6 +127,7 @@ module Dodopayments
122
127
  # @param max_retry_delay [Float]
123
128
  def initialize(
124
129
  bearer_token: ENV["DODO_PAYMENTS_API_KEY"],
130
+ webhook_key: ENV["DODO_PAYMENTS_WEBHOOK_KEY"],
125
131
  environment: nil,
126
132
  base_url: ENV["DODO_PAYMENTS_BASE_URL"],
127
133
  max_retries: self.class::DEFAULT_MAX_RETRIES,
@@ -139,6 +145,7 @@ module Dodopayments
139
145
  end
140
146
 
141
147
  @bearer_token = bearer_token.to_s
148
+ @webhook_key = webhook_key&.to_s
142
149
 
143
150
  super(
144
151
  base_url: base_url,
@@ -175,8 +175,18 @@ module Dodopayments
175
175
 
176
176
  # @param payload [String] The raw webhook payload as a string
177
177
  #
178
+ # @param headers [Hash{String=>String}] The raw HTTP headers that came with the payload
179
+ #
180
+ # @param key [String, nil] The webhook signing key
181
+ #
178
182
  # @return [Dodopayments::Models::CreditAddedWebhookEvent, Dodopayments::Models::CreditBalanceLowWebhookEvent, Dodopayments::Models::CreditDeductedWebhookEvent, Dodopayments::Models::CreditExpiredWebhookEvent, Dodopayments::Models::CreditManualAdjustmentWebhookEvent, Dodopayments::Models::CreditOverageChargedWebhookEvent, Dodopayments::Models::CreditRolledOverWebhookEvent, Dodopayments::Models::CreditRolloverForfeitedWebhookEvent, Dodopayments::Models::DisputeAcceptedWebhookEvent, Dodopayments::Models::DisputeCancelledWebhookEvent, Dodopayments::Models::DisputeChallengedWebhookEvent, Dodopayments::Models::DisputeExpiredWebhookEvent, Dodopayments::Models::DisputeLostWebhookEvent, Dodopayments::Models::DisputeOpenedWebhookEvent, Dodopayments::Models::DisputeWonWebhookEvent, Dodopayments::Models::LicenseKeyCreatedWebhookEvent, Dodopayments::Models::PaymentCancelledWebhookEvent, Dodopayments::Models::PaymentFailedWebhookEvent, Dodopayments::Models::PaymentProcessingWebhookEvent, Dodopayments::Models::PaymentSucceededWebhookEvent, Dodopayments::Models::RefundFailedWebhookEvent, Dodopayments::Models::RefundSucceededWebhookEvent, Dodopayments::Models::SubscriptionActiveWebhookEvent, Dodopayments::Models::SubscriptionCancelledWebhookEvent, Dodopayments::Models::SubscriptionExpiredWebhookEvent, Dodopayments::Models::SubscriptionFailedWebhookEvent, Dodopayments::Models::SubscriptionOnHoldWebhookEvent, Dodopayments::Models::SubscriptionPlanChangedWebhookEvent, Dodopayments::Models::SubscriptionRenewedWebhookEvent, Dodopayments::Models::SubscriptionUpdatedWebhookEvent]
179
- def unwrap(payload)
183
+ def unwrap(payload, headers:, key: @client.webhook_key)
184
+ if key.nil?
185
+ raise ArgumentError.new("Cannot verify a webhook without a key on either the client's webhook_key or passed in as an argument")
186
+ end
187
+
188
+ ::StandardWebhooks::Webhook.new(key).verify(payload, headers)
189
+
180
190
  parsed = JSON.parse(payload, symbolize_names: true)
181
191
  Dodopayments::Internal::Type::Converter.coerce(Dodopayments::Models::UnwrapWebhookEvent, parsed)
182
192
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dodopayments
4
- VERSION = "2.1.2"
4
+ VERSION = "2.2.0"
5
5
  end
data/lib/dodopayments.rb CHANGED
@@ -30,6 +30,7 @@ end
30
30
 
31
31
  # Gems.
32
32
  require "connection_pool"
33
+ require "standardwebhooks"
33
34
 
34
35
  # Package files.
35
36
  require_relative "dodopayments/version"
@@ -23,6 +23,9 @@ module Dodopayments
23
23
  sig { returns(String) }
24
24
  attr_reader :bearer_token
25
25
 
26
+ sig { returns(T.nilable(String)) }
27
+ attr_reader :webhook_key
28
+
26
29
  sig { returns(Dodopayments::Resources::CheckoutSessions) }
27
30
  attr_reader :checkout_sessions
28
31
 
@@ -98,6 +101,7 @@ module Dodopayments
98
101
  sig do
99
102
  params(
100
103
  bearer_token: T.nilable(String),
104
+ webhook_key: T.nilable(String),
101
105
  environment: T.nilable(T.any(Symbol, String)),
102
106
  base_url: T.nilable(String),
103
107
  max_retries: Integer,
@@ -109,6 +113,8 @@ module Dodopayments
109
113
  def self.new(
110
114
  # Bearer Token for API authentication Defaults to `ENV["DODO_PAYMENTS_API_KEY"]`
111
115
  bearer_token: ENV["DODO_PAYMENTS_API_KEY"],
116
+ # Defaults to `ENV["DODO_PAYMENTS_WEBHOOK_KEY"]`
117
+ webhook_key: ENV["DODO_PAYMENTS_WEBHOOK_KEY"],
112
118
  # Specifies the environment to use for the API.
113
119
  #
114
120
  # Each environment maps to a different base URL:
@@ -171,7 +171,11 @@ module Dodopayments
171
171
  end
172
172
 
173
173
  sig do
174
- params(payload: String).returns(
174
+ params(
175
+ payload: String,
176
+ headers: T::Hash[String, String],
177
+ key: T.nilable(String)
178
+ ).returns(
175
179
  T.any(
176
180
  Dodopayments::CreditAddedWebhookEvent,
177
181
  Dodopayments::CreditBalanceLowWebhookEvent,
@@ -208,7 +212,11 @@ module Dodopayments
208
212
  end
209
213
  def unwrap(
210
214
  # The raw webhook payload as a string
211
- payload
215
+ payload,
216
+ # The raw HTTP headers that came with the payload
217
+ headers:,
218
+ # The webhook signing key
219
+ key: @client.webhook_key
212
220
  )
213
221
  end
214
222
 
@@ -15,6 +15,8 @@ module Dodopayments
15
15
 
16
16
  attr_reader bearer_token: String
17
17
 
18
+ attr_reader webhook_key: String?
19
+
18
20
  attr_reader checkout_sessions: Dodopayments::Resources::CheckoutSessions
19
21
 
20
22
  attr_reader payments: Dodopayments::Resources::Payments
@@ -63,6 +65,7 @@ module Dodopayments
63
65
 
64
66
  def initialize: (
65
67
  ?bearer_token: String?,
68
+ ?webhook_key: String?,
66
69
  ?environment: :live_mode | :test_mode | nil,
67
70
  ?base_url: String?,
68
71
  ?max_retries: Integer,
@@ -81,7 +81,9 @@ module Dodopayments
81
81
  | Dodopayments::SubscriptionUpdatedWebhookEvent)
82
82
 
83
83
  def unwrap: (
84
- String payload
84
+ String payload,
85
+ headers: ::Hash[String, String],
86
+ ?key: String?
85
87
  ) -> (Dodopayments::CreditAddedWebhookEvent
86
88
  | Dodopayments::CreditBalanceLowWebhookEvent
87
89
  | Dodopayments::CreditDeductedWebhookEvent
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dodopayments
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dodo Payments
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-03-06 00:00:00.000000000 Z
11
+ date: 2026-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cgi
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: standardwebhooks
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description:
42
56
  email: support@dodopayments.com
43
57
  executables: []