dodopayments 1.20.0 → 1.47.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 (452) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +45 -0
  3. data/README.md +144 -60
  4. data/SECURITY.md +2 -2
  5. data/lib/dodopayments/client.rb +25 -12
  6. data/lib/dodopayments/errors.rb +23 -1
  7. data/lib/dodopayments/file_part.rb +2 -2
  8. data/lib/dodopayments/internal/cursor_page_pagination.rb +90 -0
  9. data/lib/dodopayments/internal/default_page_number_pagination.rb +2 -2
  10. data/lib/dodopayments/internal/transport/base_client.rb +90 -10
  11. data/lib/dodopayments/internal/transport/pooled_net_requester.rb +17 -1
  12. data/lib/dodopayments/internal/type/array_of.rb +16 -2
  13. data/lib/dodopayments/internal/type/base_model.rb +152 -59
  14. data/lib/dodopayments/internal/type/boolean.rb +15 -1
  15. data/lib/dodopayments/internal/type/converter.rb +86 -33
  16. data/lib/dodopayments/internal/type/enum.rb +30 -6
  17. data/lib/dodopayments/internal/type/file_input.rb +13 -1
  18. data/lib/dodopayments/internal/type/hash_of.rb +16 -2
  19. data/lib/dodopayments/internal/type/request_parameters.rb +6 -12
  20. data/lib/dodopayments/internal/type/union.rb +44 -31
  21. data/lib/dodopayments/internal/type/unknown.rb +15 -1
  22. data/lib/dodopayments/internal/util.rb +136 -12
  23. data/lib/dodopayments/internal.rb +9 -0
  24. data/lib/dodopayments/models/addon_create_params.rb +6 -10
  25. data/lib/dodopayments/models/addon_list_params.rb +4 -4
  26. data/lib/dodopayments/models/addon_response.rb +6 -10
  27. data/lib/dodopayments/models/addon_update_params.rb +6 -10
  28. data/lib/dodopayments/models/attach_addon.rb +21 -0
  29. data/lib/dodopayments/models/billing_address.rb +3 -3
  30. data/lib/dodopayments/models/brand.rb +107 -0
  31. data/lib/dodopayments/models/brand_create_params.rb +44 -0
  32. data/lib/dodopayments/models/{webhook_event_retrieve_params.rb → brand_list_params.rb} +2 -2
  33. data/lib/dodopayments/models/brand_list_response.rb +17 -0
  34. data/lib/dodopayments/models/brand_retrieve_params.rb +14 -0
  35. data/lib/dodopayments/models/brand_update_images_params.rb +14 -0
  36. data/lib/dodopayments/models/brand_update_images_response.rb +25 -0
  37. data/lib/dodopayments/models/brand_update_params.rb +43 -0
  38. data/lib/dodopayments/models/create_new_customer.rb +0 -1
  39. data/lib/dodopayments/models/customer_list_params.rb +13 -5
  40. data/lib/dodopayments/models/customer_request.rb +3 -3
  41. data/lib/dodopayments/models/customers/customer_portal_create_params.rb +2 -2
  42. data/lib/dodopayments/models/discount.rb +15 -4
  43. data/lib/dodopayments/models/discount_create_params.rb +17 -6
  44. data/lib/dodopayments/models/discount_list_params.rb +4 -4
  45. data/lib/dodopayments/models/discount_update_params.rb +16 -5
  46. data/lib/dodopayments/models/dispute.rb +15 -7
  47. data/lib/dodopayments/models/dispute_list_params.rb +44 -16
  48. data/lib/dodopayments/models/dispute_list_response.rb +77 -0
  49. data/lib/dodopayments/models/get_dispute.rb +101 -0
  50. data/lib/dodopayments/models/license_key.rb +3 -3
  51. data/lib/dodopayments/models/license_key_duration.rb +1 -1
  52. data/lib/dodopayments/models/license_key_list_params.rb +23 -11
  53. data/lib/dodopayments/models/license_key_update_params.rb +3 -3
  54. data/lib/dodopayments/models/misc_list_supported_countries_response.rb +1 -1
  55. data/lib/dodopayments/models/new_customer.rb +27 -0
  56. data/lib/dodopayments/models/one_time_product_cart_item.rb +0 -1
  57. data/lib/dodopayments/models/payment.rb +79 -18
  58. data/lib/dodopayments/models/payment_create_params.rb +22 -41
  59. data/lib/dodopayments/models/payment_create_response.rb +16 -6
  60. data/lib/dodopayments/models/payment_list_params.rb +44 -16
  61. data/lib/dodopayments/models/payment_list_response.rb +16 -4
  62. data/lib/dodopayments/models/payment_method_types.rb +31 -0
  63. data/lib/dodopayments/models/payment_retrieve_line_items_params.rb +14 -0
  64. data/lib/dodopayments/models/payment_retrieve_line_items_response.rb +63 -0
  65. data/lib/dodopayments/models/payout_list_params.rb +4 -4
  66. data/lib/dodopayments/models/payout_list_response.rb +7 -3
  67. data/lib/dodopayments/models/price.rb +57 -30
  68. data/lib/dodopayments/models/product.rb +85 -12
  69. data/lib/dodopayments/models/product_create_params.rb +61 -12
  70. data/lib/dodopayments/models/product_list_params.rb +15 -7
  71. data/lib/dodopayments/models/product_list_response.rb +19 -11
  72. data/lib/dodopayments/models/product_update_files_params.rb +20 -0
  73. data/lib/dodopayments/models/product_update_files_response.rb +22 -0
  74. data/lib/dodopayments/models/product_update_params.rb +70 -13
  75. data/lib/dodopayments/models/products/image_update_params.rb +2 -2
  76. data/lib/dodopayments/models/refund.rb +15 -5
  77. data/lib/dodopayments/models/refund_create_params.rb +38 -1
  78. data/lib/dodopayments/models/refund_list_params.rb +26 -13
  79. data/lib/dodopayments/models/subscription.rb +38 -18
  80. data/lib/dodopayments/models/subscription_change_plan_params.rb +19 -3
  81. data/lib/dodopayments/models/subscription_charge_params.rb +38 -2
  82. data/lib/dodopayments/models/subscription_create_params.rb +53 -66
  83. data/lib/dodopayments/models/subscription_create_response.rb +24 -8
  84. data/lib/dodopayments/models/subscription_list_params.rb +37 -14
  85. data/lib/dodopayments/models/subscription_list_response.rb +37 -16
  86. data/lib/dodopayments/models/subscription_status.rb +0 -1
  87. data/lib/dodopayments/models/subscription_update_params.rb +10 -6
  88. data/lib/dodopayments/models/webhook_create_params.rb +86 -0
  89. data/lib/dodopayments/models/webhook_create_response.rb +88 -0
  90. data/lib/dodopayments/models/webhook_delete_params.rb +14 -0
  91. data/lib/dodopayments/models/webhook_event_type.rb +35 -0
  92. data/lib/dodopayments/models/webhook_list_params.rb +30 -0
  93. data/lib/dodopayments/models/webhook_list_response.rb +88 -0
  94. data/lib/dodopayments/models/webhook_payload.rb +161 -0
  95. data/lib/dodopayments/models/webhook_retrieve_params.rb +14 -0
  96. data/lib/dodopayments/models/webhook_retrieve_response.rb +88 -0
  97. data/lib/dodopayments/models/webhook_update_params.rb +69 -0
  98. data/lib/dodopayments/models/webhook_update_response.rb +88 -0
  99. data/lib/dodopayments/models/webhooks/header_retrieve_params.rb +16 -0
  100. data/lib/dodopayments/models/webhooks/header_retrieve_response.rb +31 -0
  101. data/lib/dodopayments/models/webhooks/header_update_params.rb +24 -0
  102. data/lib/dodopayments/models/your_webhook_url_create_params.rb +32 -0
  103. data/lib/dodopayments/models.rb +241 -0
  104. data/lib/dodopayments/request_options.rb +4 -0
  105. data/lib/dodopayments/resources/addons.rb +13 -21
  106. data/lib/dodopayments/resources/brands.rb +119 -0
  107. data/lib/dodopayments/resources/customers/customer_portal.rb +3 -3
  108. data/lib/dodopayments/resources/customers.rb +12 -10
  109. data/lib/dodopayments/resources/discounts.rb +24 -19
  110. data/lib/dodopayments/resources/disputes.rb +12 -12
  111. data/lib/dodopayments/resources/invoices/payments.rb +3 -2
  112. data/lib/dodopayments/resources/license_key_instances.rb +5 -5
  113. data/lib/dodopayments/resources/license_keys.rb +13 -13
  114. data/lib/dodopayments/resources/licenses.rb +4 -4
  115. data/lib/dodopayments/resources/misc.rb +1 -1
  116. data/lib/dodopayments/resources/payments.rb +38 -19
  117. data/lib/dodopayments/resources/payouts.rb +3 -3
  118. data/lib/dodopayments/resources/products/images.rb +2 -2
  119. data/lib/dodopayments/resources/products.rb +58 -24
  120. data/lib/dodopayments/resources/refunds.rb +14 -12
  121. data/lib/dodopayments/resources/subscriptions.rb +44 -29
  122. data/lib/dodopayments/resources/webhook_events.rb +0 -52
  123. data/lib/dodopayments/resources/webhooks/headers.rb +59 -0
  124. data/lib/dodopayments/resources/webhooks.rb +157 -0
  125. data/lib/dodopayments/resources/your_webhook_url.rb +56 -0
  126. data/lib/dodopayments/version.rb +1 -1
  127. data/lib/dodopayments.rb +47 -8
  128. data/rbi/dodopayments/client.rbi +24 -10
  129. data/rbi/dodopayments/errors.rbi +51 -16
  130. data/rbi/dodopayments/file_part.rbi +9 -6
  131. data/rbi/dodopayments/internal/cursor_page_pagination.rbi +25 -0
  132. data/rbi/dodopayments/internal/default_page_number_pagination.rbi +2 -1
  133. data/rbi/dodopayments/internal/transport/base_client.rbi +165 -77
  134. data/rbi/dodopayments/internal/transport/pooled_net_requester.rbi +33 -13
  135. data/rbi/dodopayments/internal/type/array_of.rbi +40 -24
  136. data/rbi/dodopayments/internal/type/base_model.rbi +160 -70
  137. data/rbi/dodopayments/internal/type/base_page.rbi +13 -8
  138. data/rbi/dodopayments/internal/type/boolean.rbi +24 -14
  139. data/rbi/dodopayments/internal/type/converter.rbi +135 -33
  140. data/rbi/dodopayments/internal/type/enum.rbi +29 -13
  141. data/rbi/dodopayments/internal/type/file_input.rbi +13 -4
  142. data/rbi/dodopayments/internal/type/hash_of.rbi +40 -24
  143. data/rbi/dodopayments/internal/type/request_parameters.rbi +14 -4
  144. data/rbi/dodopayments/internal/type/union.rbi +71 -23
  145. data/rbi/dodopayments/internal/type/unknown.rbi +24 -6
  146. data/rbi/dodopayments/internal/util.rbi +274 -89
  147. data/rbi/dodopayments/internal.rbi +7 -0
  148. data/rbi/dodopayments/models/addon_cart_response_item.rbi +16 -4
  149. data/rbi/dodopayments/models/addon_create_params.rbi +33 -24
  150. data/rbi/dodopayments/models/addon_list_params.rbi +29 -17
  151. data/rbi/dodopayments/models/addon_response.rbi +33 -27
  152. data/rbi/dodopayments/models/addon_retrieve_params.rbi +18 -5
  153. data/rbi/dodopayments/models/addon_update_images_params.rbi +18 -5
  154. data/rbi/dodopayments/models/addon_update_images_response.rbi +13 -3
  155. data/rbi/dodopayments/models/addon_update_params.rbi +34 -25
  156. data/rbi/dodopayments/models/attach_addon.rbi +28 -0
  157. data/rbi/dodopayments/models/attach_existing_customer.rbi +13 -3
  158. data/rbi/dodopayments/models/billing_address.rbi +24 -12
  159. data/rbi/dodopayments/models/brand.rbi +132 -0
  160. data/rbi/dodopayments/models/brand_create_params.rbi +68 -0
  161. data/rbi/dodopayments/models/brand_list_params.rbi +29 -0
  162. data/rbi/dodopayments/models/brand_list_response.rbi +34 -0
  163. data/rbi/dodopayments/models/brand_retrieve_params.rbi +32 -0
  164. data/rbi/dodopayments/models/brand_update_images_params.rbi +32 -0
  165. data/rbi/dodopayments/models/brand_update_images_response.rbi +36 -0
  166. data/rbi/dodopayments/models/brand_update_params.rbi +64 -0
  167. data/rbi/dodopayments/models/country_code.rbi +255 -252
  168. data/rbi/dodopayments/models/create_new_customer.rbi +27 -11
  169. data/rbi/dodopayments/models/currency.rbi +149 -148
  170. data/rbi/dodopayments/models/customer.rbi +27 -15
  171. data/rbi/dodopayments/models/customer_create_params.rbi +22 -14
  172. data/rbi/dodopayments/models/customer_limited_details.rbi +21 -4
  173. data/rbi/dodopayments/models/customer_list_params.rbi +43 -17
  174. data/rbi/dodopayments/models/customer_portal_session.rbi +13 -3
  175. data/rbi/dodopayments/models/customer_request.rbi +10 -2
  176. data/rbi/dodopayments/models/customer_retrieve_params.rbi +18 -5
  177. data/rbi/dodopayments/models/customer_update_params.rbi +21 -13
  178. data/rbi/dodopayments/models/customers/customer_portal_create_params.rbi +26 -8
  179. data/rbi/dodopayments/models/discount.rbi +42 -22
  180. data/rbi/dodopayments/models/discount_create_params.rbi +43 -20
  181. data/rbi/dodopayments/models/discount_delete_params.rbi +18 -5
  182. data/rbi/dodopayments/models/discount_list_params.rbi +32 -17
  183. data/rbi/dodopayments/models/discount_retrieve_params.rbi +18 -5
  184. data/rbi/dodopayments/models/discount_type.rbi +7 -4
  185. data/rbi/dodopayments/models/discount_update_params.rbi +43 -20
  186. data/rbi/dodopayments/models/dispute.rbi +41 -23
  187. data/rbi/dodopayments/models/dispute_list_params.rbi +178 -33
  188. data/rbi/dodopayments/models/dispute_list_response.rbi +98 -0
  189. data/rbi/dodopayments/models/dispute_retrieve_params.rbi +18 -5
  190. data/rbi/dodopayments/models/dispute_stage.rbi +11 -6
  191. data/rbi/dodopayments/models/dispute_status.rbi +20 -10
  192. data/rbi/dodopayments/models/get_dispute.rbi +124 -0
  193. data/rbi/dodopayments/models/intent_status.rbi +32 -14
  194. data/rbi/dodopayments/models/invoices/payment_retrieve_params.rbi +18 -5
  195. data/rbi/dodopayments/models/license_activate_params.rbi +21 -6
  196. data/rbi/dodopayments/models/license_deactivate_params.rbi +21 -13
  197. data/rbi/dodopayments/models/license_key.rbi +31 -23
  198. data/rbi/dodopayments/models/license_key_duration.rbi +24 -5
  199. data/rbi/dodopayments/models/license_key_instance.rbi +19 -4
  200. data/rbi/dodopayments/models/license_key_instance_list_params.rbi +23 -14
  201. data/rbi/dodopayments/models/license_key_instance_retrieve_params.rbi +18 -5
  202. data/rbi/dodopayments/models/license_key_instance_update_params.rbi +19 -6
  203. data/rbi/dodopayments/models/license_key_list_params.rbi +91 -26
  204. data/rbi/dodopayments/models/license_key_retrieve_params.rbi +18 -5
  205. data/rbi/dodopayments/models/license_key_status.rbi +10 -6
  206. data/rbi/dodopayments/models/license_key_update_params.rbi +23 -14
  207. data/rbi/dodopayments/models/license_validate_params.rbi +25 -13
  208. data/rbi/dodopayments/models/license_validate_response.rbi +13 -3
  209. data/rbi/dodopayments/models/misc_list_supported_countries_params.rbi +18 -5
  210. data/rbi/dodopayments/models/misc_list_supported_countries_response.rbi +1 -1
  211. data/rbi/dodopayments/models/new_customer.rbi +39 -0
  212. data/rbi/dodopayments/models/one_time_product_cart_item.rbi +23 -4
  213. data/rbi/dodopayments/models/payment.rbi +149 -54
  214. data/rbi/dodopayments/models/payment_create_params.rbi +67 -87
  215. data/rbi/dodopayments/models/payment_create_response.rbi +45 -22
  216. data/rbi/dodopayments/models/payment_list_params.rbi +149 -32
  217. data/rbi/dodopayments/models/payment_list_response.rbi +47 -26
  218. data/rbi/dodopayments/models/payment_method_types.rbi +52 -0
  219. data/rbi/dodopayments/models/payment_retrieve_line_items_params.rbi +32 -0
  220. data/rbi/dodopayments/models/payment_retrieve_line_items_response.rbi +114 -0
  221. data/rbi/dodopayments/models/payment_retrieve_params.rbi +18 -5
  222. data/rbi/dodopayments/models/payout_list_params.rbi +29 -17
  223. data/rbi/dodopayments/models/payout_list_response.rbi +82 -35
  224. data/rbi/dodopayments/models/price.rbi +142 -55
  225. data/rbi/dodopayments/models/product.rbi +177 -38
  226. data/rbi/dodopayments/models/product_create_params.rbi +151 -36
  227. data/rbi/dodopayments/models/product_delete_params.rbi +18 -5
  228. data/rbi/dodopayments/models/product_list_params.rbi +50 -21
  229. data/rbi/dodopayments/models/product_list_response.rbi +57 -42
  230. data/rbi/dodopayments/models/product_retrieve_params.rbi +18 -5
  231. data/rbi/dodopayments/models/product_unarchive_params.rbi +18 -5
  232. data/rbi/dodopayments/models/product_update_files_params.rbi +38 -0
  233. data/rbi/dodopayments/models/product_update_files_response.rbi +29 -0
  234. data/rbi/dodopayments/models/product_update_params.rbi +160 -37
  235. data/rbi/dodopayments/models/products/image_update_params.rbi +20 -8
  236. data/rbi/dodopayments/models/products/image_update_response.rbi +18 -4
  237. data/rbi/dodopayments/models/refund.rbi +39 -21
  238. data/rbi/dodopayments/models/refund_create_params.rbi +87 -11
  239. data/rbi/dodopayments/models/refund_list_params.rbi +86 -29
  240. data/rbi/dodopayments/models/refund_retrieve_params.rbi +18 -5
  241. data/rbi/dodopayments/models/refund_status.rbi +10 -7
  242. data/rbi/dodopayments/models/subscription.rbi +83 -47
  243. data/rbi/dodopayments/models/subscription_change_plan_params.rbi +68 -21
  244. data/rbi/dodopayments/models/subscription_charge_params.rbi +65 -6
  245. data/rbi/dodopayments/models/subscription_charge_response.rbi +13 -3
  246. data/rbi/dodopayments/models/subscription_create_params.rbi +136 -128
  247. data/rbi/dodopayments/models/subscription_create_response.rbi +51 -22
  248. data/rbi/dodopayments/models/subscription_list_params.rbi +125 -29
  249. data/rbi/dodopayments/models/subscription_list_response.rbi +85 -44
  250. data/rbi/dodopayments/models/subscription_retrieve_params.rbi +18 -5
  251. data/rbi/dodopayments/models/subscription_status.rbi +16 -10
  252. data/rbi/dodopayments/models/subscription_update_params.rbi +63 -33
  253. data/rbi/dodopayments/models/tax_category.rbi +11 -7
  254. data/rbi/dodopayments/models/time_interval.rbi +10 -7
  255. data/rbi/dodopayments/models/webhook_create_params.rbi +115 -0
  256. data/rbi/dodopayments/models/webhook_create_response.rbi +112 -0
  257. data/rbi/dodopayments/models/webhook_delete_params.rbi +32 -0
  258. data/rbi/dodopayments/models/webhook_event_type.rbi +102 -0
  259. data/rbi/dodopayments/models/webhook_list_params.rbi +54 -0
  260. data/rbi/dodopayments/models/webhook_list_response.rbi +112 -0
  261. data/rbi/dodopayments/models/webhook_payload.rbi +440 -0
  262. data/rbi/dodopayments/models/webhook_retrieve_params.rbi +32 -0
  263. data/rbi/dodopayments/models/webhook_retrieve_response.rbi +112 -0
  264. data/rbi/dodopayments/models/webhook_update_params.rbi +94 -0
  265. data/rbi/dodopayments/models/webhook_update_response.rbi +112 -0
  266. data/rbi/dodopayments/models/webhooks/header_retrieve_params.rbi +34 -0
  267. data/rbi/dodopayments/models/webhooks/header_retrieve_response.rbi +50 -0
  268. data/rbi/dodopayments/models/webhooks/header_update_params.rbi +48 -0
  269. data/rbi/dodopayments/models/your_webhook_url_create_params.rbi +56 -0
  270. data/rbi/dodopayments/models.rbi +209 -0
  271. data/rbi/dodopayments/request_options.rbi +18 -7
  272. data/rbi/dodopayments/resources/addons.rbi +44 -27
  273. data/rbi/dodopayments/resources/brands.rbi +89 -0
  274. data/rbi/dodopayments/resources/customers/customer_portal.rbi +8 -6
  275. data/rbi/dodopayments/resources/customers.rbi +31 -17
  276. data/rbi/dodopayments/resources/discounts.rbi +54 -22
  277. data/rbi/dodopayments/resources/disputes.rbi +26 -14
  278. data/rbi/dodopayments/resources/invoices/payments.rbi +10 -3
  279. data/rbi/dodopayments/resources/invoices.rbi +2 -1
  280. data/rbi/dodopayments/resources/license_key_instances.rbi +25 -10
  281. data/rbi/dodopayments/resources/license_keys.rbi +29 -15
  282. data/rbi/dodopayments/resources/licenses.rbi +25 -12
  283. data/rbi/dodopayments/resources/misc.rbi +7 -4
  284. data/rbi/dodopayments/resources/payments.rbi +61 -27
  285. data/rbi/dodopayments/resources/payouts.rbi +12 -6
  286. data/rbi/dodopayments/resources/products/images.rbi +10 -4
  287. data/rbi/dodopayments/resources/products.rbi +118 -41
  288. data/rbi/dodopayments/resources/refunds.rbi +35 -15
  289. data/rbi/dodopayments/resources/subscriptions.rbi +98 -50
  290. data/rbi/dodopayments/resources/webhook_events.rbi +2 -34
  291. data/rbi/dodopayments/resources/webhooks/headers.rbi +40 -0
  292. data/rbi/dodopayments/resources/webhooks.rbi +127 -0
  293. data/rbi/dodopayments/resources/your_webhook_url.rbi +51 -0
  294. data/sig/dodopayments/client.rbs +8 -2
  295. data/sig/dodopayments/errors.rbs +9 -0
  296. data/sig/dodopayments/internal/cursor_page_pagination.rbs +15 -0
  297. data/sig/dodopayments/internal/transport/base_client.rbs +17 -2
  298. data/sig/dodopayments/internal/transport/pooled_net_requester.rbs +4 -0
  299. data/sig/dodopayments/internal/type/array_of.rbs +3 -0
  300. data/sig/dodopayments/internal/type/base_model.rbs +13 -5
  301. data/sig/dodopayments/internal/type/base_page.rbs +1 -1
  302. data/sig/dodopayments/internal/type/boolean.rbs +3 -0
  303. data/sig/dodopayments/internal/type/converter.rbs +26 -1
  304. data/sig/dodopayments/internal/type/enum.rbs +3 -0
  305. data/sig/dodopayments/internal/type/file_input.rbs +2 -0
  306. data/sig/dodopayments/internal/type/hash_of.rbs +3 -0
  307. data/sig/dodopayments/internal/type/request_parameters.rbs +5 -1
  308. data/sig/dodopayments/internal/type/union.rbs +5 -2
  309. data/sig/dodopayments/internal/type/unknown.rbs +3 -0
  310. data/sig/dodopayments/internal/util.rbs +27 -0
  311. data/sig/dodopayments/internal.rbs +4 -0
  312. data/sig/dodopayments/models/addon_cart_response_item.rbs +1 -1
  313. data/sig/dodopayments/models/addon_create_params.rbs +8 -1
  314. data/sig/dodopayments/models/addon_list_params.rbs +14 -6
  315. data/sig/dodopayments/models/addon_response.rbs +12 -1
  316. data/sig/dodopayments/models/addon_retrieve_params.rbs +1 -1
  317. data/sig/dodopayments/models/addon_update_images_params.rbs +1 -1
  318. data/sig/dodopayments/models/addon_update_images_response.rbs +1 -1
  319. data/sig/dodopayments/models/addon_update_params.rbs +9 -1
  320. data/sig/dodopayments/models/attach_addon.rbs +15 -0
  321. data/sig/dodopayments/models/attach_existing_customer.rbs +1 -1
  322. data/sig/dodopayments/models/billing_address.rbs +7 -1
  323. data/sig/dodopayments/models/brand.rbs +88 -0
  324. data/sig/dodopayments/models/brand_create_params.rbs +46 -0
  325. data/sig/dodopayments/models/{webhook_event_retrieve_params.rbs → brand_list_params.rbs} +3 -3
  326. data/sig/dodopayments/models/brand_list_response.rbs +13 -0
  327. data/sig/dodopayments/models/brand_retrieve_params.rbs +15 -0
  328. data/sig/dodopayments/models/brand_update_images_params.rbs +15 -0
  329. data/sig/dodopayments/models/brand_update_images_response.rbs +15 -0
  330. data/sig/dodopayments/models/brand_update_params.rbs +41 -0
  331. data/sig/dodopayments/models/create_new_customer.rbs +6 -1
  332. data/sig/dodopayments/models/customer.rbs +8 -1
  333. data/sig/dodopayments/models/customer_create_params.rbs +6 -1
  334. data/sig/dodopayments/models/customer_limited_details.rbs +1 -1
  335. data/sig/dodopayments/models/customer_list_params.rbs +20 -6
  336. data/sig/dodopayments/models/customer_portal_session.rbs +1 -1
  337. data/sig/dodopayments/models/customer_request.rbs +2 -3
  338. data/sig/dodopayments/models/customer_retrieve_params.rbs +1 -1
  339. data/sig/dodopayments/models/customer_update_params.rbs +5 -1
  340. data/sig/dodopayments/models/customers/customer_portal_create_params.rbs +9 -4
  341. data/sig/dodopayments/models/discount.rbs +18 -1
  342. data/sig/dodopayments/models/discount_create_params.rbs +15 -1
  343. data/sig/dodopayments/models/discount_delete_params.rbs +1 -1
  344. data/sig/dodopayments/models/discount_list_params.rbs +14 -6
  345. data/sig/dodopayments/models/discount_retrieve_params.rbs +1 -1
  346. data/sig/dodopayments/models/discount_update_params.rbs +15 -1
  347. data/sig/dodopayments/models/dispute.rbs +17 -3
  348. data/sig/dodopayments/models/dispute_list_params.rbs +84 -22
  349. data/sig/dodopayments/models/dispute_list_response.rbs +55 -0
  350. data/sig/dodopayments/models/dispute_retrieve_params.rbs +1 -1
  351. data/sig/dodopayments/models/get_dispute.rbs +70 -0
  352. data/sig/dodopayments/models/invoices/payment_retrieve_params.rbs +1 -1
  353. data/sig/dodopayments/models/license_activate_params.rbs +5 -1
  354. data/sig/dodopayments/models/license_deactivate_params.rbs +5 -1
  355. data/sig/dodopayments/models/license_key.rbs +14 -1
  356. data/sig/dodopayments/models/license_key_duration.rbs +4 -1
  357. data/sig/dodopayments/models/license_key_instance.rbs +7 -1
  358. data/sig/dodopayments/models/license_key_instance_list_params.rbs +6 -1
  359. data/sig/dodopayments/models/license_key_instance_retrieve_params.rbs +1 -1
  360. data/sig/dodopayments/models/license_key_instance_update_params.rbs +4 -1
  361. data/sig/dodopayments/models/license_key_list_params.rbs +47 -16
  362. data/sig/dodopayments/models/license_key_retrieve_params.rbs +1 -1
  363. data/sig/dodopayments/models/license_key_update_params.rbs +6 -1
  364. data/sig/dodopayments/models/license_validate_params.rbs +5 -1
  365. data/sig/dodopayments/models/license_validate_response.rbs +1 -1
  366. data/sig/dodopayments/models/misc_list_supported_countries_params.rbs +1 -1
  367. data/sig/dodopayments/models/new_customer.rbs +21 -0
  368. data/sig/dodopayments/models/one_time_product_cart_item.rbs +5 -1
  369. data/sig/dodopayments/models/payment.rbs +76 -17
  370. data/sig/dodopayments/models/payment_create_params.rbs +23 -55
  371. data/sig/dodopayments/models/payment_create_response.rbs +21 -7
  372. data/sig/dodopayments/models/payment_list_params.rbs +85 -22
  373. data/sig/dodopayments/models/payment_list_response.rbs +25 -4
  374. data/sig/dodopayments/models/payment_method_types.rbs +48 -0
  375. data/sig/dodopayments/models/payment_retrieve_line_items_params.rbs +15 -0
  376. data/sig/dodopayments/models/payment_retrieve_line_items_response.rbs +67 -0
  377. data/sig/dodopayments/models/payment_retrieve_params.rbs +1 -1
  378. data/sig/dodopayments/models/payout_list_params.rbs +14 -6
  379. data/sig/dodopayments/models/payout_list_response.rbs +17 -1
  380. data/sig/dodopayments/models/price.rbs +53 -13
  381. data/sig/dodopayments/models/product.rbs +80 -4
  382. data/sig/dodopayments/models/product_create_params.rbs +45 -4
  383. data/sig/dodopayments/models/product_delete_params.rbs +1 -1
  384. data/sig/dodopayments/models/product_list_params.rbs +29 -10
  385. data/sig/dodopayments/models/product_list_response.rbs +20 -1
  386. data/sig/dodopayments/models/product_retrieve_params.rbs +1 -1
  387. data/sig/dodopayments/models/product_unarchive_params.rbs +1 -1
  388. data/sig/dodopayments/models/product_update_files_params.rbs +23 -0
  389. data/sig/dodopayments/models/product_update_files_response.rbs +15 -0
  390. data/sig/dodopayments/models/product_update_params.rbs +58 -4
  391. data/sig/dodopayments/models/products/image_update_params.rbs +9 -4
  392. data/sig/dodopayments/models/products/image_update_response.rbs +1 -1
  393. data/sig/dodopayments/models/refund.rbs +15 -1
  394. data/sig/dodopayments/models/refund_create_params.rbs +38 -2
  395. data/sig/dodopayments/models/refund_list_params.rbs +54 -19
  396. data/sig/dodopayments/models/refund_retrieve_params.rbs +1 -1
  397. data/sig/dodopayments/models/subscription.rbs +43 -10
  398. data/sig/dodopayments/models/subscription_change_plan_params.rbs +16 -3
  399. data/sig/dodopayments/models/subscription_charge_params.rbs +27 -2
  400. data/sig/dodopayments/models/subscription_charge_response.rbs +1 -1
  401. data/sig/dodopayments/models/subscription_create_params.rbs +58 -73
  402. data/sig/dodopayments/models/subscription_create_response.rbs +26 -7
  403. data/sig/dodopayments/models/subscription_list_params.rbs +64 -19
  404. data/sig/dodopayments/models/subscription_list_response.rbs +39 -7
  405. data/sig/dodopayments/models/subscription_retrieve_params.rbs +1 -1
  406. data/sig/dodopayments/models/subscription_status.rbs +1 -2
  407. data/sig/dodopayments/models/subscription_update_params.rbs +20 -8
  408. data/sig/dodopayments/models/webhook_create_params.rbs +65 -0
  409. data/sig/dodopayments/models/webhook_create_response.rbs +60 -0
  410. data/sig/dodopayments/models/webhook_delete_params.rbs +15 -0
  411. data/sig/dodopayments/models/webhook_event_type.rbs +54 -0
  412. data/sig/dodopayments/models/webhook_list_params.rbs +28 -0
  413. data/sig/dodopayments/models/webhook_list_response.rbs +60 -0
  414. data/sig/dodopayments/models/webhook_payload.rbs +203 -0
  415. data/sig/dodopayments/models/webhook_retrieve_params.rbs +15 -0
  416. data/sig/dodopayments/models/webhook_retrieve_response.rbs +60 -0
  417. data/sig/dodopayments/models/webhook_update_params.rbs +51 -0
  418. data/sig/dodopayments/models/webhook_update_response.rbs +60 -0
  419. data/sig/dodopayments/models/webhooks/header_retrieve_params.rbs +17 -0
  420. data/sig/dodopayments/models/webhooks/header_retrieve_response.rbs +24 -0
  421. data/sig/dodopayments/models/webhooks/header_update_params.rbs +26 -0
  422. data/sig/dodopayments/models/your_webhook_url_create_params.rbs +42 -0
  423. data/sig/dodopayments/models.rbs +201 -0
  424. data/sig/dodopayments/request_options.rbs +1 -1
  425. data/sig/dodopayments/resources/addons.rbs +6 -6
  426. data/sig/dodopayments/resources/brands.rbs +39 -0
  427. data/sig/dodopayments/resources/customers/customer_portal.rbs +2 -2
  428. data/sig/dodopayments/resources/customers.rbs +7 -6
  429. data/sig/dodopayments/resources/discounts.rbs +8 -6
  430. data/sig/dodopayments/resources/disputes.rbs +9 -9
  431. data/sig/dodopayments/resources/invoices/payments.rbs +1 -1
  432. data/sig/dodopayments/resources/license_key_instances.rbs +3 -3
  433. data/sig/dodopayments/resources/license_keys.rbs +8 -8
  434. data/sig/dodopayments/resources/licenses.rbs +1 -1
  435. data/sig/dodopayments/resources/payments.rbs +17 -11
  436. data/sig/dodopayments/resources/payouts.rbs +2 -2
  437. data/sig/dodopayments/resources/products/images.rbs +1 -1
  438. data/sig/dodopayments/resources/products.rbs +20 -7
  439. data/sig/dodopayments/resources/refunds.rbs +10 -9
  440. data/sig/dodopayments/resources/subscriptions.rbs +21 -14
  441. data/sig/dodopayments/resources/webhook_events.rbs +0 -15
  442. data/sig/dodopayments/resources/webhooks/headers.rbs +20 -0
  443. data/sig/dodopayments/resources/webhooks.rbs +48 -0
  444. data/sig/dodopayments/resources/your_webhook_url.rbs +18 -0
  445. metadata +116 -11
  446. data/lib/dodopayments/models/webhook_event.rb +0 -58
  447. data/lib/dodopayments/models/webhook_event_list_params.rb +0 -66
  448. data/rbi/dodopayments/models/webhook_event.rbi +0 -71
  449. data/rbi/dodopayments/models/webhook_event_list_params.rbi +0 -77
  450. data/rbi/dodopayments/models/webhook_event_retrieve_params.rbi +0 -19
  451. data/sig/dodopayments/models/webhook_event.rbs +0 -46
  452. data/sig/dodopayments/models/webhook_event_list_params.rbs +0 -43
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9c7b22e5857506ae73a79e9a4f5c8cbd92f03696fcf72f9934b7f70d73b9be99
4
- data.tar.gz: 3aba6366092a43c500db25321615514724aa4e0015ca108ec27eb478346acd06
3
+ metadata.gz: 2252a6403fed71969ac392ab9bb4ba2848d974c23f4d1b74794adef1f07b59ad
4
+ data.tar.gz: 5e8dd97afcdc4842b4be9e6e5180530a76704a3fb2a6a8ef69cf1562c1abdda1
5
5
  SHA512:
6
- metadata.gz: 0bb40b6240681cf2f68f968c3da1b960e782aa9daebe21cc1738730290ebb6aea7100f4aa8ac9b642dd685059dc5c155955984bc2bc1d7fb5c6604cf5e425171
7
- data.tar.gz: be7ead7c6dcef10ddcacb9c6c6b46b423ccab46231a8f4ac9794054a0214b5220c69e0829837504be20a20f4214d846a5b0ba2f5c0fbb9ba7ead43e661669e0c
6
+ metadata.gz: 2118a05e104d278c37ef7482b7be3f9882d80135faae3850a660839a688f760cbe472c93067a44b7a298eef4919230f3f4ad4fbc61b36bd0a6c02236c45048c8
7
+ data.tar.gz: d94324ab3b148412073eb5a314115030d12b463b554da4ba47d5c967702692e00262d050223cae492df5e8ff190823a5a26a9ddfb31c779962baa8f1489c0e01
data/CHANGELOG.md CHANGED
@@ -1,5 +1,50 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.47.0 (2025-08-13)
4
+
5
+ Full Changelog: [v1.22.0...v1.47.0](https://github.com/dodopayments/dodopayments-ruby/compare/v1.22.0...v1.47.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** manual updates ([983773e](https://github.com/dodopayments/dodopayments-ruby/commit/983773e4c578f0ed96f540e3f045834c10554143))
10
+
11
+
12
+ ### Chores
13
+
14
+ * sync repo ([db17fcd](https://github.com/dodopayments/dodopayments-ruby/commit/db17fcde07de41be8514f3a310def3322718a388))
15
+
16
+ ## 1.22.0 (2025-05-09)
17
+
18
+ Full Changelog: [v1.20.0...v1.22.0](https://github.com/dodopayments/dodopayments-ruby/compare/v1.20.0...v1.22.0)
19
+
20
+ ### Features
21
+
22
+ * **api:** fixed api key schema to bearer ([06d3549](https://github.com/dodopayments/dodopayments-ruby/commit/06d354910a3eb15c036d35f68cfb5393c5a20c62))
23
+ * **api:** manual updates ([eae9353](https://github.com/dodopayments/dodopayments-ruby/commit/eae935376b239dc03bc8ad8ed201e9ca9c2eeaa4))
24
+ * **api:** updated openapi spec ([c369261](https://github.com/dodopayments/dodopayments-ruby/commit/c369261442be58e8b31890f0362fba1536bb9593))
25
+
26
+
27
+ ### Bug Fixes
28
+
29
+ * **internal:** fix formatting script for macos ([8abfc9c](https://github.com/dodopayments/dodopayments-ruby/commit/8abfc9c2b3921e5fb3e5903612111e02a87e92d1))
30
+
31
+
32
+ ### Chores
33
+
34
+ * accept all nd-json mimetype variants ([b0dd5d6](https://github.com/dodopayments/dodopayments-ruby/commit/b0dd5d644ce5ebbcd0259dca5f9113befa548b54))
35
+ * always check if current page is empty in `next_page?` ([45b817d](https://github.com/dodopayments/dodopayments-ruby/commit/45b817d504e3c4cbc17b328c53ab9a310d038b22))
36
+ * **internal:** codegen related update ([e3ce1b3](https://github.com/dodopayments/dodopayments-ruby/commit/e3ce1b36a1ea8dba0fbd2915a6deadc01820d280))
37
+ * **internal:** codegen related update ([2cd0f3e](https://github.com/dodopayments/dodopayments-ruby/commit/2cd0f3e089a67097c26e9abef90b55cecfaa014c))
38
+ * re-export top level models under library namespace ([bbc82df](https://github.com/dodopayments/dodopayments-ruby/commit/bbc82df831d64038e9169ff0912401d2e333082b))
39
+ * remove Gemfile.lock during bootstrap ([a484914](https://github.com/dodopayments/dodopayments-ruby/commit/a48491445f25a274883dd8068913efcd9e68c32d))
40
+ * revert ignoring Gemfile.lock ([8ba5e6a](https://github.com/dodopayments/dodopayments-ruby/commit/8ba5e6a4f876f0823b33eb92443ebd5d97c2139f))
41
+ * validate request option coercion correctness ([1ac286c](https://github.com/dodopayments/dodopayments-ruby/commit/1ac286ccf79b674d312bf50fa29bb8a1f7e37176))
42
+
43
+
44
+ ### Documentation
45
+
46
+ * illustrate environmental defaults for auth variables ([520d6cf](https://github.com/dodopayments/dodopayments-ruby/commit/520d6cf3692d5aeaf3faee980160521d81bd3867))
47
+
3
48
  ## 1.20.0 (2025-05-01)
4
49
 
5
50
  Full Changelog: [v1.19.0...v1.20.0](https://github.com/dodopayments/dodopayments-ruby/compare/v1.19.0...v1.20.0)
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Dodo Payments Ruby API library
2
2
 
3
- The Dodo Payments Ruby library provides convenient access to the Dodo Payments REST API from any Ruby 3.2.0+ application.
3
+ The Dodo Payments Ruby library provides convenient access to the Dodo Payments REST API from any Ruby 3.2.0+ application. It ships with comprehensive types & docstrings in Yard, RBS, and RBI – [see below](https://github.com/dodopayments/dodopayments-ruby#Sorbet) for usage with Sorbet. The standard library's `net/http` is used as the HTTP transport, with connection pooling via the `connection_pool` gem.
4
4
 
5
5
  It is generated with [Stainless](https://www.stainless.com/).
6
6
 
@@ -17,7 +17,7 @@ To use this gem, install via Bundler by adding the following to your application
17
17
  <!-- x-release-please-start-version -->
18
18
 
19
19
  ```ruby
20
- gem "dodopayments", "~> 1.20.0"
20
+ gem "dodopayments", "~> 1.47.0"
21
21
  ```
22
22
 
23
23
  <!-- x-release-please-end -->
@@ -29,25 +29,19 @@ require "bundler/setup"
29
29
  require "dodopayments"
30
30
 
31
31
  dodo_payments = Dodopayments::Client.new(
32
- api_key: "My API Key", # defaults to ENV["DODO_PAYMENTS_API_KEY"]
32
+ bearer_token: ENV["DODO_PAYMENTS_API_KEY"], # This is the default and can be omitted
33
33
  environment: "test_mode" # defaults to "live_mode"
34
34
  )
35
35
 
36
- payment = dodo_payments.payments.create
36
+ payment = dodo_payments.payments.create(
37
+ billing: {city: "city", country: "AF", state: "state", street: "street", zipcode: "zipcode"},
38
+ customer: {customer_id: "customer_id"},
39
+ product_cart: [{product_id: "product_id", quantity: 0}]
40
+ )
37
41
 
38
42
  puts(payment.payment_id)
39
43
  ```
40
44
 
41
- ## Sorbet
42
-
43
- This library is written with [Sorbet type definitions](https://sorbet.org/docs/rbi). However, there is no runtime dependency on the `sorbet-runtime`.
44
-
45
- When using sorbet, it is recommended to use model classes as below. This provides stronger type checking and tooling integration.
46
-
47
- ```ruby
48
- dodo_payments.payments.create
49
- ```
50
-
51
45
  ### Pagination
52
46
 
53
47
  List methods in the Dodo Payments API are paginated.
@@ -59,23 +53,42 @@ page = dodo_payments.payments.list
59
53
 
60
54
  # Fetch single item from page.
61
55
  payment = page.items[0]
62
- puts(payment.payment_id)
56
+ puts(payment.brand_id)
63
57
 
64
58
  # Automatically fetches more pages as needed.
65
59
  page.auto_paging_each do |payment|
66
- puts(payment.payment_id)
60
+ puts(payment.brand_id)
67
61
  end
68
62
  ```
69
63
 
70
- ### Errors
64
+ Alternatively, you can use the `#next_page?` and `#next_page` methods for more granular control working with pages.
65
+
66
+ ```ruby
67
+ if page.next_page?
68
+ new_page = page.next_page
69
+ puts(new_page.items[0].brand_id)
70
+ end
71
+ ```
72
+
73
+ ### Handling errors
71
74
 
72
75
  When the library is unable to connect to the API, or if the API returns a non-success status code (i.e., 4xx or 5xx response), a subclass of `Dodopayments::Errors::APIError` will be thrown:
73
76
 
74
77
  ```ruby
75
78
  begin
76
- payment = dodo_payments.payments.create
77
- rescue Dodopayments::Errors::APIError => e
78
- puts(e.status) # 400
79
+ payment = dodo_payments.payments.create(
80
+ billing: {city: "city", country: "AF", state: "state", street: "street", zipcode: "zipcode"},
81
+ customer: {customer_id: "customer_id"},
82
+ product_cart: [{product_id: "product_id", quantity: 0}]
83
+ )
84
+ rescue Dodopayments::Errors::APIConnectionError => e
85
+ puts("The server could not be reached")
86
+ puts(e.cause) # an underlying Exception, likely raised within `net/http`
87
+ rescue Dodopayments::Errors::RateLimitError => e
88
+ puts("A 429 status code was received; we should back off a bit.")
89
+ rescue Dodopayments::Errors::APIStatusError => e
90
+ puts("Another non-200-range status code was received")
91
+ puts(e.status)
79
92
  end
80
93
  ```
81
94
 
@@ -110,16 +123,17 @@ dodo_payments = Dodopayments::Client.new(
110
123
  )
111
124
 
112
125
  # Or, configure per-request:
113
- dodo_payments.payments.create(request_options: {max_retries: 5})
126
+ dodo_payments.payments.create(
127
+ billing: {city: "city", country: "AF", state: "state", street: "street", zipcode: "zipcode"},
128
+ customer: {customer_id: "customer_id"},
129
+ product_cart: [{product_id: "product_id", quantity: 0}],
130
+ request_options: {max_retries: 5}
131
+ )
114
132
  ```
115
133
 
116
134
  ### Timeouts
117
135
 
118
- By default, requests will time out after 60 seconds.
119
-
120
- Timeouts are applied separately to the initial connection and the overall request time, so in some cases a request could wait 2\*timeout seconds before it fails.
121
-
122
- You can use the `timeout` option to configure or disable this:
136
+ By default, requests will time out after 60 seconds. You can use the timeout option to configure or disable this:
123
137
 
124
138
  ```ruby
125
139
  # Configure the default for all requests:
@@ -128,42 +142,63 @@ dodo_payments = Dodopayments::Client.new(
128
142
  )
129
143
 
130
144
  # Or, configure per-request:
131
- dodo_payments.payments.create(request_options: {timeout: 5})
145
+ dodo_payments.payments.create(
146
+ billing: {city: "city", country: "AF", state: "state", street: "street", zipcode: "zipcode"},
147
+ customer: {customer_id: "customer_id"},
148
+ product_cart: [{product_id: "product_id", quantity: 0}],
149
+ request_options: {timeout: 5}
150
+ )
132
151
  ```
133
152
 
134
- ## Model DSL
153
+ On timeout, `Dodopayments::Errors::APITimeoutError` is raised.
135
154
 
136
- This library uses a simple DSL to represent request parameters and response shapes in `lib/dodopayments/models`.
155
+ Note that requests that time out are retried by default.
137
156
 
138
- With the right [editor plugins](https://shopify.github.io/ruby-lsp), you can ctrl-click on elements of the DSL to navigate around and explore the library.
157
+ ## Advanced concepts
139
158
 
140
- In all places where a `BaseModel` type is specified, vanilla Ruby `Hash` can also be used. For example, the following are interchangeable as arguments:
159
+ ### BaseModel
141
160
 
142
- ```ruby
143
- # This has tooling readability, for auto-completion, static analysis, and goto definition with supported language services
144
- params = Dodopayments::Models::PaymentCreateParams.new
161
+ All parameter and response objects inherit from `Dodopayments::Internal::Type::BaseModel`, which provides several conveniences, including:
145
162
 
146
- # This also works
147
- params = {
163
+ 1. All fields, including unknown ones, are accessible with `obj[:prop]` syntax, and can be destructured with `obj => {prop: prop}` or pattern-matching syntax.
148
164
 
149
- }
150
- ```
165
+ 2. Structural equivalence for equality; if two API calls return the same values, comparing the responses with == will return true.
151
166
 
152
- ## Editor support
167
+ 3. Both instances and the classes themselves can be pretty-printed.
153
168
 
154
- A combination of [Shopify LSP](https://shopify.github.io/ruby-lsp) and [Solargraph](https://solargraph.org/) is recommended for non-[Sorbet](https://sorbet.org) users. The former is especially good at go to definition, while the latter has much better auto-completion support.
169
+ 4. Helpers such as `#to_h`, `#deep_to_h`, `#to_json`, and `#to_yaml`.
155
170
 
156
- ## Advanced concepts
171
+ ### Making custom or undocumented requests
172
+
173
+ #### Undocumented properties
157
174
 
158
- ### Making custom/undocumented requests
175
+ You can send undocumented parameters to any endpoint, and read undocumented response properties, like so:
176
+
177
+ Note: the `extra_` parameters of the same name overrides the documented parameters.
178
+
179
+ ```ruby
180
+ payment =
181
+ dodo_payments.payments.create(
182
+ billing: {city: "city", country: "AF", state: "state", street: "street", zipcode: "zipcode"},
183
+ customer: {customer_id: "customer_id"},
184
+ product_cart: [{product_id: "product_id", quantity: 0}],
185
+ request_options: {
186
+ extra_query: {my_query_parameter: value},
187
+ extra_body: {my_body_parameter: value},
188
+ extra_headers: {"my-header": value}
189
+ }
190
+ )
191
+
192
+ puts(payment[:my_undocumented_property])
193
+ ```
159
194
 
160
195
  #### Undocumented request params
161
196
 
162
- If you want to explicitly send an extra param, you can do so with the `extra_query`, `extra_body`, and `extra_headers` under the `request_options:` parameter when making a requests as seen in examples above.
197
+ If you want to explicitly send an extra param, you can do so with the `extra_query`, `extra_body`, and `extra_headers` under the `request_options:` parameter when making a request, as seen in the examples above.
163
198
 
164
199
  #### Undocumented endpoints
165
200
 
166
- To make requests to undocumented endpoints, you can make requests using `client.request`. Options on the client will be respected (such as retries) when making this request.
201
+ To make requests to undocumented endpoints while retaining the benefit of auth, retries, and so on, you can make requests using `client.request`, like so:
167
202
 
168
203
  ```ruby
169
204
  response = client.request(
@@ -171,42 +206,91 @@ response = client.request(
171
206
  path: '/undocumented/endpoint',
172
207
  query: {"dog": "woof"},
173
208
  headers: {"useful-header": "interesting-value"},
174
- body: {"he": "llo"},
209
+ body: {"hello": "world"}
175
210
  )
176
211
  ```
177
212
 
178
213
  ### Concurrency & connection pooling
179
214
 
180
- The `Dodopayments::Client` instances are thread-safe, and should be re-used across multiple threads. By default, each `Client` have their own HTTP connection pool, with a maximum number of connections equal to thread count.
215
+ The `Dodopayments::Client` instances are threadsafe, but are only are fork-safe when there are no in-flight HTTP requests.
216
+
217
+ Each instance of `Dodopayments::Client` has its own HTTP connection pool with a default size of 99. As such, we recommend instantiating the client once per application in most settings.
181
218
 
182
- When the maximum number of connections has been checked out from the connection pool, the `Client` will wait for an in use connection to become available. The queue time for this mechanism is accounted for by the per-request timeout.
219
+ When all available connections from the pool are checked out, requests wait for a new connection to become available, with queue time counting towards the request timeout.
183
220
 
184
221
  Unless otherwise specified, other classes in the SDK do not have locks protecting their underlying data structure.
185
222
 
186
- Currently, `Dodopayments::Client` instances are only fork-safe if there are no in-flight HTTP requests.
223
+ ## Sorbet
187
224
 
188
- ### Sorbet
225
+ This library provides comprehensive [RBI](https://sorbet.org/docs/rbi) definitions, and has no dependency on sorbet-runtime.
189
226
 
190
- #### Enums
227
+ You can provide typesafe request parameters like so:
191
228
 
192
- Sorbet's typed enums require sub-classing of the [`T::Enum` class](https://sorbet.org/docs/tenum) from the `sorbet-runtime` gem.
229
+ ```ruby
230
+ dodo_payments.payments.create(
231
+ billing: Dodopayments::BillingAddress.new(
232
+ city: "city",
233
+ country: "AF",
234
+ state: "state",
235
+ street: "street",
236
+ zipcode: "zipcode"
237
+ ),
238
+ customer: Dodopayments::AttachExistingCustomer.new(customer_id: "customer_id"),
239
+ product_cart: [Dodopayments::OneTimeProductCartItem.new(product_id: "product_id", quantity: 0)]
240
+ )
241
+ ```
193
242
 
194
- Since this library does not depend on `sorbet-runtime`, it uses a [`T.all` intersection type](https://sorbet.org/docs/intersection-types) with a ruby primitive type to construct a "tagged alias" instead.
243
+ Or, equivalently:
195
244
 
196
245
  ```ruby
197
- module Dodopayments::Models::IntentStatus
198
- # This alias aids language service driven navigation.
199
- TaggedSymbol = T.type_alias { T.all(Symbol, Dodopayments::Models::IntentStatus) }
200
- end
246
+ # Hashes work, but are not typesafe:
247
+ dodo_payments.payments.create(
248
+ billing: {city: "city", country: "AF", state: "state", street: "street", zipcode: "zipcode"},
249
+ customer: {customer_id: "customer_id"},
250
+ product_cart: [{product_id: "product_id", quantity: 0}]
251
+ )
252
+
253
+ # You can also splat a full Params class:
254
+ params = Dodopayments::PaymentCreateParams.new(
255
+ billing: Dodopayments::BillingAddress.new(
256
+ city: "city",
257
+ country: "AF",
258
+ state: "state",
259
+ street: "street",
260
+ zipcode: "zipcode"
261
+ ),
262
+ customer: Dodopayments::AttachExistingCustomer.new(customer_id: "customer_id"),
263
+ product_cart: [Dodopayments::OneTimeProductCartItem.new(product_id: "product_id", quantity: 0)]
264
+ )
265
+ dodo_payments.payments.create(**params)
201
266
  ```
202
267
 
203
- #### Argument passing trick
268
+ ### Enums
204
269
 
205
- It is possible to pass a compatible model / parameter class to a method that expects keyword arguments by using the `**` splat operator.
270
+ Since this library does not depend on `sorbet-runtime`, it cannot provide [`T::Enum`](https://sorbet.org/docs/tenum) instances. Instead, we provide "tagged symbols" instead, which is always a primitive at runtime:
206
271
 
207
272
  ```ruby
208
- params = Dodopayments::Models::PaymentCreateParams.new
209
- dodo_payments.payments.create(**params)
273
+ # :AED
274
+ puts(Dodopayments::Currency::AED)
275
+
276
+ # Revealed type: `T.all(Dodopayments::Currency, Symbol)`
277
+ T.reveal_type(Dodopayments::Currency::AED)
278
+ ```
279
+
280
+ Enum parameters have a "relaxed" type, so you can either pass in enum constants or their literal value:
281
+
282
+ ```ruby
283
+ # Using the enum constants preserves the tagged type information:
284
+ dodo_payments.payments.create(
285
+ billing_currency: Dodopayments::Currency::AED,
286
+ # …
287
+ )
288
+
289
+ # Literal values are also permissible:
290
+ dodo_payments.payments.create(
291
+ billing_currency: :AED,
292
+ # …
293
+ )
210
294
  ```
211
295
 
212
296
  ## Versioning
data/SECURITY.md CHANGED
@@ -16,11 +16,11 @@ before making any information public.
16
16
  ## Reporting Non-SDK Related Security Issues
17
17
 
18
18
  If you encounter security issues that are not directly related to SDKs but pertain to the services
19
- or products provided by Dodo Payments please follow the respective company's security reporting guidelines.
19
+ or products provided by Dodo Payments, please follow the respective company's security reporting guidelines.
20
20
 
21
21
  ### Dodo Payments Terms and Policies
22
22
 
23
- Please contact founders@dodopayments.com for any questions or concerns regarding security of our services.
23
+ Please contact founders@dodopayments.com for any questions or concerns regarding the security of our services.
24
24
 
25
25
  ---
26
26
 
@@ -20,8 +20,9 @@ module Dodopayments
20
20
  ENVIRONMENTS = {live_mode: "https://live.dodopayments.com", test_mode: "https://test.dodopayments.com"}
21
21
  # rubocop:enable Style/MutableConstant
22
22
 
23
+ # Bearer Token for API authentication
23
24
  # @return [String]
24
- attr_reader :api_key
25
+ attr_reader :bearer_token
25
26
 
26
27
  # @return [Dodopayments::Resources::Payments]
27
28
  attr_reader :payments
@@ -68,18 +69,27 @@ module Dodopayments
68
69
  # @return [Dodopayments::Resources::Addons]
69
70
  attr_reader :addons
70
71
 
72
+ # @return [Dodopayments::Resources::Brands]
73
+ attr_reader :brands
74
+
75
+ # @return [Dodopayments::Resources::Webhooks]
76
+ attr_reader :webhooks
77
+
78
+ # @return [Dodopayments::Resources::YourWebhookURL]
79
+ attr_reader :your_webhook_url
80
+
71
81
  # @api private
72
82
  #
73
83
  # @return [Hash{String=>String}]
74
84
  private def auth_headers
75
- return {} if @api_key.nil?
85
+ return {} if @bearer_token.nil?
76
86
 
77
- {"authorization" => "Bearer #{@api_key}"}
87
+ {"authorization" => "Bearer #{@bearer_token}"}
78
88
  end
79
89
 
80
90
  # Creates and returns a new client for interacting with the API.
81
91
  #
82
- # @param api_key [String, nil] Defaults to `ENV["DODO_PAYMENTS_API_KEY"]`
92
+ # @param bearer_token [String, nil] Bearer Token for API authentication Defaults to `ENV["DODO_PAYMENTS_API_KEY"]`
83
93
  #
84
94
  # @param environment [:live_mode, :test_mode, nil] Specifies the environment to use for the API.
85
95
  #
@@ -99,24 +109,24 @@ module Dodopayments
99
109
  #
100
110
  # @param max_retry_delay [Float]
101
111
  def initialize(
102
- api_key: ENV["DODO_PAYMENTS_API_KEY"],
112
+ bearer_token: ENV["DODO_PAYMENTS_API_KEY"],
103
113
  environment: nil,
104
114
  base_url: ENV["DODO_PAYMENTS_BASE_URL"],
105
- max_retries: Dodopayments::Client::DEFAULT_MAX_RETRIES,
106
- timeout: Dodopayments::Client::DEFAULT_TIMEOUT_IN_SECONDS,
107
- initial_retry_delay: Dodopayments::Client::DEFAULT_INITIAL_RETRY_DELAY,
108
- max_retry_delay: Dodopayments::Client::DEFAULT_MAX_RETRY_DELAY
115
+ max_retries: self.class::DEFAULT_MAX_RETRIES,
116
+ timeout: self.class::DEFAULT_TIMEOUT_IN_SECONDS,
117
+ initial_retry_delay: self.class::DEFAULT_INITIAL_RETRY_DELAY,
118
+ max_retry_delay: self.class::DEFAULT_MAX_RETRY_DELAY
109
119
  )
110
120
  base_url ||= Dodopayments::Client::ENVIRONMENTS.fetch(environment&.to_sym || :production) do
111
121
  message = "environment must be one of #{Dodopayments::Client::ENVIRONMENTS.keys}, got #{environment}"
112
122
  raise ArgumentError.new(message)
113
123
  end
114
124
 
115
- if api_key.nil?
116
- raise ArgumentError.new("api_key is required, and can be set via environ: \"DODO_PAYMENTS_API_KEY\"")
125
+ if bearer_token.nil?
126
+ raise ArgumentError.new("bearer_token is required, and can be set via environ: \"DODO_PAYMENTS_API_KEY\"")
117
127
  end
118
128
 
119
- @api_key = api_key.to_s
129
+ @bearer_token = bearer_token.to_s
120
130
 
121
131
  super(
122
132
  base_url: base_url,
@@ -141,6 +151,9 @@ module Dodopayments
141
151
  @misc = Dodopayments::Resources::Misc.new(client: self)
142
152
  @discounts = Dodopayments::Resources::Discounts.new(client: self)
143
153
  @addons = Dodopayments::Resources::Addons.new(client: self)
154
+ @brands = Dodopayments::Resources::Brands.new(client: self)
155
+ @webhooks = Dodopayments::Resources::Webhooks.new(client: self)
156
+ @your_webhook_url = Dodopayments::Resources::YourWebhookURL.new(client: self)
144
157
  end
145
158
  end
146
159
  end
@@ -9,6 +9,28 @@ module Dodopayments
9
9
  end
10
10
 
11
11
  class ConversionError < Dodopayments::Errors::Error
12
+ # @return [StandardError, nil]
13
+ def cause = @cause.nil? ? super : @cause
14
+
15
+ # @api private
16
+ #
17
+ # @param on [Class<StandardError>]
18
+ # @param method [Symbol]
19
+ # @param target [Object]
20
+ # @param value [Object]
21
+ # @param cause [StandardError, nil]
22
+ def initialize(on:, method:, target:, value:, cause: nil)
23
+ cls = on.name.split("::").last
24
+
25
+ message = [
26
+ "Failed to parse #{cls}.#{method} from #{value.class} to #{target.inspect}.",
27
+ "To get the unparsed API response, use #{cls}[#{method.inspect}].",
28
+ cause && "Cause: #{cause.message}"
29
+ ].filter(&:itself).join(" ")
30
+
31
+ @cause = cause
32
+ super(message)
33
+ end
12
34
  end
13
35
 
14
36
  class APIError < Dodopayments::Errors::Error
@@ -99,7 +121,7 @@ module Dodopayments
99
121
  # @param response [nil]
100
122
  # @param message [String, nil]
101
123
  #
102
- # @return [Dodopayments::Errors::APIStatusError]
124
+ # @return [self]
103
125
  def self.for(url:, status:, body:, request:, response:, message: nil)
104
126
  kwargs = {
105
127
  url: url,
@@ -45,9 +45,9 @@ module Dodopayments
45
45
  @filename =
46
46
  case content
47
47
  in Pathname
48
- filename.nil? ? content.basename.to_path : File.basename(filename)
48
+ filename.nil? ? content.basename.to_path : ::File.basename(filename)
49
49
  else
50
- filename.nil? ? nil : File.basename(filename)
50
+ filename.nil? ? nil : ::File.basename(filename)
51
51
  end
52
52
  @content_type = content_type
53
53
  end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dodopayments
4
+ module Internal
5
+ # @generic Elem
6
+ #
7
+ # @example
8
+ # if cursor_page_pagination.has_next?
9
+ # cursor_page_pagination = cursor_page_pagination.next_page
10
+ # end
11
+ #
12
+ # @example
13
+ # cursor_page_pagination.auto_paging_each do |webhook|
14
+ # puts(webhook)
15
+ # end
16
+ class CursorPagePagination
17
+ include Dodopayments::Internal::Type::BasePage
18
+
19
+ # @return [Array<generic<Elem>>, nil]
20
+ attr_accessor :data
21
+
22
+ # @return [String]
23
+ attr_accessor :iterator
24
+
25
+ # @return [Boolean]
26
+ attr_accessor :done
27
+
28
+ # @return [Boolean]
29
+ def next_page?
30
+ done
31
+ end
32
+
33
+ # @raise [Dodopayments::HTTP::Error]
34
+ # @return [self]
35
+ def next_page
36
+ unless next_page?
37
+ message = "No more pages available. Please check #next_page? before calling ##{__method__}"
38
+ raise RuntimeError.new(message)
39
+ end
40
+
41
+ req = Dodopayments::Internal::Util.deep_merge(@req, {query: {iterator: iterator}})
42
+ @client.request(req)
43
+ end
44
+
45
+ # @param blk [Proc]
46
+ #
47
+ # @yieldparam [generic<Elem>]
48
+ def auto_paging_each(&blk)
49
+ unless block_given?
50
+ raise ArgumentError.new("A block must be given to ##{__method__}")
51
+ end
52
+
53
+ page = self
54
+ loop do
55
+ page.data&.each(&blk)
56
+
57
+ break unless page.next_page?
58
+ page = page.next_page
59
+ end
60
+ end
61
+
62
+ # @api private
63
+ #
64
+ # @param client [Dodopayments::Internal::Transport::BaseClient]
65
+ # @param req [Hash{Symbol=>Object}]
66
+ # @param headers [Hash{String=>String}, Net::HTTPHeader]
67
+ # @param page_data [Hash{Symbol=>Object}]
68
+ def initialize(client:, req:, headers:, page_data:)
69
+ super
70
+
71
+ case page_data
72
+ in {data: Array => data}
73
+ @data = data.map { Dodopayments::Internal::Type::Converter.coerce(@model, _1) }
74
+ else
75
+ end
76
+ @iterator = page_data[:iterator]
77
+ @done = page_data[:done]
78
+ end
79
+
80
+ # @api private
81
+ #
82
+ # @return [String]
83
+ def inspect
84
+ model = Dodopayments::Internal::Type::Converter.inspect(@model, depth: 1)
85
+
86
+ "#<#{self.class}[#{model}]:0x#{object_id.to_s(16)} iterator=#{iterator.inspect} done=#{done.inspect}>"
87
+ end
88
+ end
89
+ end
90
+ end
@@ -72,8 +72,8 @@ module Dodopayments
72
72
  super
73
73
 
74
74
  case page_data
75
- in {items: Array | nil => items}
76
- @items = items&.map { Dodopayments::Internal::Type::Converter.coerce(@model, _1) }
75
+ in {items: Array => items}
76
+ @items = items.map { Dodopayments::Internal::Type::Converter.coerce(@model, _1) }
77
77
  else
78
78
  end
79
79
  end