dodopayments 1.22.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 (449) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +143 -59
  4. data/SECURITY.md +2 -2
  5. data/lib/dodopayments/client.rb +16 -4
  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/transport/base_client.rb +88 -8
  10. data/lib/dodopayments/internal/transport/pooled_net_requester.rb +17 -1
  11. data/lib/dodopayments/internal/type/array_of.rb +16 -2
  12. data/lib/dodopayments/internal/type/base_model.rb +155 -54
  13. data/lib/dodopayments/internal/type/boolean.rb +15 -1
  14. data/lib/dodopayments/internal/type/converter.rb +86 -33
  15. data/lib/dodopayments/internal/type/enum.rb +30 -6
  16. data/lib/dodopayments/internal/type/file_input.rb +13 -1
  17. data/lib/dodopayments/internal/type/hash_of.rb +16 -2
  18. data/lib/dodopayments/internal/type/request_parameters.rb +4 -4
  19. data/lib/dodopayments/internal/type/union.rb +44 -31
  20. data/lib/dodopayments/internal/type/unknown.rb +15 -1
  21. data/lib/dodopayments/internal/util.rb +119 -11
  22. data/lib/dodopayments/internal.rb +9 -0
  23. data/lib/dodopayments/models/addon_create_params.rb +6 -10
  24. data/lib/dodopayments/models/addon_list_params.rb +4 -4
  25. data/lib/dodopayments/models/addon_response.rb +6 -10
  26. data/lib/dodopayments/models/addon_update_params.rb +6 -10
  27. data/lib/dodopayments/models/attach_addon.rb +21 -0
  28. data/lib/dodopayments/models/billing_address.rb +3 -3
  29. data/lib/dodopayments/models/brand.rb +107 -0
  30. data/lib/dodopayments/models/brand_create_params.rb +44 -0
  31. data/lib/dodopayments/models/{webhook_event_retrieve_params.rb → brand_list_params.rb} +2 -2
  32. data/lib/dodopayments/models/brand_list_response.rb +17 -0
  33. data/lib/dodopayments/models/brand_retrieve_params.rb +14 -0
  34. data/lib/dodopayments/models/brand_update_images_params.rb +14 -0
  35. data/lib/dodopayments/models/brand_update_images_response.rb +25 -0
  36. data/lib/dodopayments/models/brand_update_params.rb +43 -0
  37. data/lib/dodopayments/models/create_new_customer.rb +0 -1
  38. data/lib/dodopayments/models/customer_list_params.rb +13 -5
  39. data/lib/dodopayments/models/customer_request.rb +3 -3
  40. data/lib/dodopayments/models/customers/customer_portal_create_params.rb +2 -2
  41. data/lib/dodopayments/models/discount.rb +15 -4
  42. data/lib/dodopayments/models/discount_create_params.rb +17 -6
  43. data/lib/dodopayments/models/discount_list_params.rb +4 -4
  44. data/lib/dodopayments/models/discount_update_params.rb +16 -5
  45. data/lib/dodopayments/models/dispute.rb +6 -5
  46. data/lib/dodopayments/models/dispute_list_params.rb +44 -16
  47. data/lib/dodopayments/models/dispute_list_response.rb +6 -5
  48. data/lib/dodopayments/models/{dispute_retrieve_response.rb → get_dispute.rb} +11 -9
  49. data/lib/dodopayments/models/license_key.rb +3 -3
  50. data/lib/dodopayments/models/license_key_duration.rb +1 -1
  51. data/lib/dodopayments/models/license_key_list_params.rb +23 -11
  52. data/lib/dodopayments/models/license_key_update_params.rb +3 -3
  53. data/lib/dodopayments/models/misc_list_supported_countries_response.rb +1 -1
  54. data/lib/dodopayments/models/new_customer.rb +27 -0
  55. data/lib/dodopayments/models/one_time_product_cart_item.rb +0 -1
  56. data/lib/dodopayments/models/payment.rb +50 -21
  57. data/lib/dodopayments/models/payment_create_params.rb +22 -41
  58. data/lib/dodopayments/models/payment_create_response.rb +16 -6
  59. data/lib/dodopayments/models/payment_list_params.rb +44 -16
  60. data/lib/dodopayments/models/payment_list_response.rb +16 -4
  61. data/lib/dodopayments/models/payment_method_types.rb +31 -0
  62. data/lib/dodopayments/models/payment_retrieve_line_items_params.rb +14 -0
  63. data/lib/dodopayments/models/payment_retrieve_line_items_response.rb +63 -0
  64. data/lib/dodopayments/models/payout_list_params.rb +4 -4
  65. data/lib/dodopayments/models/payout_list_response.rb +7 -3
  66. data/lib/dodopayments/models/price.rb +57 -30
  67. data/lib/dodopayments/models/product.rb +85 -12
  68. data/lib/dodopayments/models/product_create_params.rb +61 -12
  69. data/lib/dodopayments/models/product_list_params.rb +15 -7
  70. data/lib/dodopayments/models/product_list_response.rb +19 -11
  71. data/lib/dodopayments/models/product_update_files_params.rb +20 -0
  72. data/lib/dodopayments/models/product_update_files_response.rb +22 -0
  73. data/lib/dodopayments/models/product_update_params.rb +70 -13
  74. data/lib/dodopayments/models/products/image_update_params.rb +2 -2
  75. data/lib/dodopayments/models/refund.rb +15 -5
  76. data/lib/dodopayments/models/refund_create_params.rb +38 -1
  77. data/lib/dodopayments/models/refund_list_params.rb +26 -13
  78. data/lib/dodopayments/models/subscription.rb +38 -18
  79. data/lib/dodopayments/models/subscription_change_plan_params.rb +9 -23
  80. data/lib/dodopayments/models/subscription_charge_params.rb +38 -2
  81. data/lib/dodopayments/models/subscription_create_params.rb +53 -66
  82. data/lib/dodopayments/models/subscription_create_response.rb +24 -8
  83. data/lib/dodopayments/models/subscription_list_params.rb +37 -14
  84. data/lib/dodopayments/models/subscription_list_response.rb +37 -16
  85. data/lib/dodopayments/models/subscription_status.rb +0 -1
  86. data/lib/dodopayments/models/subscription_update_params.rb +10 -6
  87. data/lib/dodopayments/models/webhook_create_params.rb +86 -0
  88. data/lib/dodopayments/models/webhook_create_response.rb +88 -0
  89. data/lib/dodopayments/models/webhook_delete_params.rb +14 -0
  90. data/lib/dodopayments/models/webhook_event_type.rb +35 -0
  91. data/lib/dodopayments/models/webhook_list_params.rb +30 -0
  92. data/lib/dodopayments/models/webhook_list_response.rb +88 -0
  93. data/lib/dodopayments/models/webhook_payload.rb +161 -0
  94. data/lib/dodopayments/models/webhook_retrieve_params.rb +14 -0
  95. data/lib/dodopayments/models/webhook_retrieve_response.rb +88 -0
  96. data/lib/dodopayments/models/webhook_update_params.rb +69 -0
  97. data/lib/dodopayments/models/webhook_update_response.rb +88 -0
  98. data/lib/dodopayments/models/webhooks/header_retrieve_params.rb +16 -0
  99. data/lib/dodopayments/models/webhooks/header_retrieve_response.rb +31 -0
  100. data/lib/dodopayments/models/webhooks/header_update_params.rb +24 -0
  101. data/lib/dodopayments/models/your_webhook_url_create_params.rb +32 -0
  102. data/lib/dodopayments/models.rb +77 -3
  103. data/lib/dodopayments/request_options.rb +4 -0
  104. data/lib/dodopayments/resources/addons.rb +13 -21
  105. data/lib/dodopayments/resources/brands.rb +119 -0
  106. data/lib/dodopayments/resources/customers/customer_portal.rb +3 -3
  107. data/lib/dodopayments/resources/customers.rb +12 -10
  108. data/lib/dodopayments/resources/discounts.rb +24 -19
  109. data/lib/dodopayments/resources/disputes.rb +10 -10
  110. data/lib/dodopayments/resources/license_key_instances.rb +5 -5
  111. data/lib/dodopayments/resources/license_keys.rb +13 -13
  112. data/lib/dodopayments/resources/licenses.rb +4 -4
  113. data/lib/dodopayments/resources/misc.rb +1 -1
  114. data/lib/dodopayments/resources/payments.rb +38 -19
  115. data/lib/dodopayments/resources/payouts.rb +3 -3
  116. data/lib/dodopayments/resources/products/images.rb +2 -2
  117. data/lib/dodopayments/resources/products.rb +58 -24
  118. data/lib/dodopayments/resources/refunds.rb +14 -12
  119. data/lib/dodopayments/resources/subscriptions.rb +39 -29
  120. data/lib/dodopayments/resources/webhook_events.rb +0 -52
  121. data/lib/dodopayments/resources/webhooks/headers.rb +59 -0
  122. data/lib/dodopayments/resources/webhooks.rb +157 -0
  123. data/lib/dodopayments/resources/your_webhook_url.rb +56 -0
  124. data/lib/dodopayments/version.rb +1 -1
  125. data/lib/dodopayments.rb +46 -9
  126. data/rbi/dodopayments/client.rbi +19 -6
  127. data/rbi/dodopayments/errors.rbi +51 -16
  128. data/rbi/dodopayments/file_part.rbi +9 -6
  129. data/rbi/dodopayments/internal/cursor_page_pagination.rbi +25 -0
  130. data/rbi/dodopayments/internal/default_page_number_pagination.rbi +2 -1
  131. data/rbi/dodopayments/internal/transport/base_client.rbi +165 -77
  132. data/rbi/dodopayments/internal/transport/pooled_net_requester.rbi +33 -13
  133. data/rbi/dodopayments/internal/type/array_of.rbi +40 -24
  134. data/rbi/dodopayments/internal/type/base_model.rbi +160 -70
  135. data/rbi/dodopayments/internal/type/base_page.rbi +13 -8
  136. data/rbi/dodopayments/internal/type/boolean.rbi +24 -14
  137. data/rbi/dodopayments/internal/type/converter.rbi +135 -33
  138. data/rbi/dodopayments/internal/type/enum.rbi +29 -13
  139. data/rbi/dodopayments/internal/type/file_input.rbi +13 -4
  140. data/rbi/dodopayments/internal/type/hash_of.rbi +40 -24
  141. data/rbi/dodopayments/internal/type/request_parameters.rbi +14 -4
  142. data/rbi/dodopayments/internal/type/union.rbi +71 -23
  143. data/rbi/dodopayments/internal/type/unknown.rbi +24 -6
  144. data/rbi/dodopayments/internal/util.rbi +272 -91
  145. data/rbi/dodopayments/internal.rbi +7 -0
  146. data/rbi/dodopayments/models/addon_cart_response_item.rbi +16 -4
  147. data/rbi/dodopayments/models/addon_create_params.rbi +33 -24
  148. data/rbi/dodopayments/models/addon_list_params.rbi +29 -17
  149. data/rbi/dodopayments/models/addon_response.rbi +33 -27
  150. data/rbi/dodopayments/models/addon_retrieve_params.rbi +18 -5
  151. data/rbi/dodopayments/models/addon_update_images_params.rbi +18 -5
  152. data/rbi/dodopayments/models/addon_update_images_response.rbi +13 -3
  153. data/rbi/dodopayments/models/addon_update_params.rbi +34 -25
  154. data/rbi/dodopayments/models/attach_addon.rbi +28 -0
  155. data/rbi/dodopayments/models/attach_existing_customer.rbi +13 -3
  156. data/rbi/dodopayments/models/billing_address.rbi +24 -12
  157. data/rbi/dodopayments/models/brand.rbi +132 -0
  158. data/rbi/dodopayments/models/brand_create_params.rbi +68 -0
  159. data/rbi/dodopayments/models/brand_list_params.rbi +29 -0
  160. data/rbi/dodopayments/models/brand_list_response.rbi +34 -0
  161. data/rbi/dodopayments/models/brand_retrieve_params.rbi +32 -0
  162. data/rbi/dodopayments/models/brand_update_images_params.rbi +32 -0
  163. data/rbi/dodopayments/models/brand_update_images_response.rbi +36 -0
  164. data/rbi/dodopayments/models/brand_update_params.rbi +64 -0
  165. data/rbi/dodopayments/models/country_code.rbi +255 -252
  166. data/rbi/dodopayments/models/create_new_customer.rbi +27 -11
  167. data/rbi/dodopayments/models/currency.rbi +149 -148
  168. data/rbi/dodopayments/models/customer.rbi +27 -15
  169. data/rbi/dodopayments/models/customer_create_params.rbi +22 -14
  170. data/rbi/dodopayments/models/customer_limited_details.rbi +21 -4
  171. data/rbi/dodopayments/models/customer_list_params.rbi +43 -17
  172. data/rbi/dodopayments/models/customer_portal_session.rbi +13 -3
  173. data/rbi/dodopayments/models/customer_request.rbi +10 -2
  174. data/rbi/dodopayments/models/customer_retrieve_params.rbi +18 -5
  175. data/rbi/dodopayments/models/customer_update_params.rbi +21 -13
  176. data/rbi/dodopayments/models/customers/customer_portal_create_params.rbi +26 -8
  177. data/rbi/dodopayments/models/discount.rbi +42 -22
  178. data/rbi/dodopayments/models/discount_create_params.rbi +43 -20
  179. data/rbi/dodopayments/models/discount_delete_params.rbi +18 -5
  180. data/rbi/dodopayments/models/discount_list_params.rbi +32 -17
  181. data/rbi/dodopayments/models/discount_retrieve_params.rbi +18 -5
  182. data/rbi/dodopayments/models/discount_type.rbi +7 -4
  183. data/rbi/dodopayments/models/discount_update_params.rbi +43 -20
  184. data/rbi/dodopayments/models/dispute.rbi +32 -22
  185. data/rbi/dodopayments/models/dispute_list_params.rbi +178 -33
  186. data/rbi/dodopayments/models/dispute_list_response.rbi +34 -21
  187. data/rbi/dodopayments/models/dispute_retrieve_params.rbi +18 -5
  188. data/rbi/dodopayments/models/dispute_stage.rbi +11 -6
  189. data/rbi/dodopayments/models/dispute_status.rbi +20 -10
  190. data/rbi/dodopayments/models/{dispute_retrieve_response.rbi → get_dispute.rbi} +40 -28
  191. data/rbi/dodopayments/models/intent_status.rbi +32 -14
  192. data/rbi/dodopayments/models/invoices/payment_retrieve_params.rbi +18 -5
  193. data/rbi/dodopayments/models/license_activate_params.rbi +21 -6
  194. data/rbi/dodopayments/models/license_deactivate_params.rbi +21 -13
  195. data/rbi/dodopayments/models/license_key.rbi +31 -23
  196. data/rbi/dodopayments/models/license_key_duration.rbi +24 -5
  197. data/rbi/dodopayments/models/license_key_instance.rbi +19 -4
  198. data/rbi/dodopayments/models/license_key_instance_list_params.rbi +23 -14
  199. data/rbi/dodopayments/models/license_key_instance_retrieve_params.rbi +18 -5
  200. data/rbi/dodopayments/models/license_key_instance_update_params.rbi +19 -6
  201. data/rbi/dodopayments/models/license_key_list_params.rbi +91 -26
  202. data/rbi/dodopayments/models/license_key_retrieve_params.rbi +18 -5
  203. data/rbi/dodopayments/models/license_key_status.rbi +10 -6
  204. data/rbi/dodopayments/models/license_key_update_params.rbi +23 -14
  205. data/rbi/dodopayments/models/license_validate_params.rbi +25 -13
  206. data/rbi/dodopayments/models/license_validate_response.rbi +13 -3
  207. data/rbi/dodopayments/models/misc_list_supported_countries_params.rbi +18 -5
  208. data/rbi/dodopayments/models/misc_list_supported_countries_response.rbi +1 -1
  209. data/rbi/dodopayments/models/new_customer.rbi +39 -0
  210. data/rbi/dodopayments/models/one_time_product_cart_item.rbi +23 -4
  211. data/rbi/dodopayments/models/payment.rbi +125 -62
  212. data/rbi/dodopayments/models/payment_create_params.rbi +67 -87
  213. data/rbi/dodopayments/models/payment_create_response.rbi +45 -22
  214. data/rbi/dodopayments/models/payment_list_params.rbi +149 -32
  215. data/rbi/dodopayments/models/payment_list_response.rbi +47 -26
  216. data/rbi/dodopayments/models/payment_method_types.rbi +52 -0
  217. data/rbi/dodopayments/models/payment_retrieve_line_items_params.rbi +32 -0
  218. data/rbi/dodopayments/models/payment_retrieve_line_items_response.rbi +114 -0
  219. data/rbi/dodopayments/models/payment_retrieve_params.rbi +18 -5
  220. data/rbi/dodopayments/models/payout_list_params.rbi +29 -17
  221. data/rbi/dodopayments/models/payout_list_response.rbi +82 -35
  222. data/rbi/dodopayments/models/price.rbi +142 -55
  223. data/rbi/dodopayments/models/product.rbi +177 -38
  224. data/rbi/dodopayments/models/product_create_params.rbi +151 -36
  225. data/rbi/dodopayments/models/product_delete_params.rbi +18 -5
  226. data/rbi/dodopayments/models/product_list_params.rbi +50 -21
  227. data/rbi/dodopayments/models/product_list_response.rbi +57 -42
  228. data/rbi/dodopayments/models/product_retrieve_params.rbi +18 -5
  229. data/rbi/dodopayments/models/product_unarchive_params.rbi +18 -5
  230. data/rbi/dodopayments/models/product_update_files_params.rbi +38 -0
  231. data/rbi/dodopayments/models/product_update_files_response.rbi +29 -0
  232. data/rbi/dodopayments/models/product_update_params.rbi +160 -37
  233. data/rbi/dodopayments/models/products/image_update_params.rbi +20 -8
  234. data/rbi/dodopayments/models/products/image_update_response.rbi +18 -4
  235. data/rbi/dodopayments/models/refund.rbi +39 -21
  236. data/rbi/dodopayments/models/refund_create_params.rbi +87 -11
  237. data/rbi/dodopayments/models/refund_list_params.rbi +86 -29
  238. data/rbi/dodopayments/models/refund_retrieve_params.rbi +18 -5
  239. data/rbi/dodopayments/models/refund_status.rbi +10 -7
  240. data/rbi/dodopayments/models/subscription.rbi +83 -47
  241. data/rbi/dodopayments/models/subscription_change_plan_params.rbi +61 -40
  242. data/rbi/dodopayments/models/subscription_charge_params.rbi +65 -6
  243. data/rbi/dodopayments/models/subscription_charge_response.rbi +13 -3
  244. data/rbi/dodopayments/models/subscription_create_params.rbi +136 -128
  245. data/rbi/dodopayments/models/subscription_create_response.rbi +51 -22
  246. data/rbi/dodopayments/models/subscription_list_params.rbi +125 -29
  247. data/rbi/dodopayments/models/subscription_list_response.rbi +85 -44
  248. data/rbi/dodopayments/models/subscription_retrieve_params.rbi +18 -5
  249. data/rbi/dodopayments/models/subscription_status.rbi +16 -10
  250. data/rbi/dodopayments/models/subscription_update_params.rbi +63 -33
  251. data/rbi/dodopayments/models/tax_category.rbi +11 -7
  252. data/rbi/dodopayments/models/time_interval.rbi +10 -7
  253. data/rbi/dodopayments/models/webhook_create_params.rbi +115 -0
  254. data/rbi/dodopayments/models/webhook_create_response.rbi +112 -0
  255. data/rbi/dodopayments/models/webhook_delete_params.rbi +32 -0
  256. data/rbi/dodopayments/models/webhook_event_type.rbi +102 -0
  257. data/rbi/dodopayments/models/webhook_list_params.rbi +54 -0
  258. data/rbi/dodopayments/models/webhook_list_response.rbi +112 -0
  259. data/rbi/dodopayments/models/webhook_payload.rbi +440 -0
  260. data/rbi/dodopayments/models/webhook_retrieve_params.rbi +32 -0
  261. data/rbi/dodopayments/models/webhook_retrieve_response.rbi +112 -0
  262. data/rbi/dodopayments/models/webhook_update_params.rbi +94 -0
  263. data/rbi/dodopayments/models/webhook_update_response.rbi +112 -0
  264. data/rbi/dodopayments/models/webhooks/header_retrieve_params.rbi +34 -0
  265. data/rbi/dodopayments/models/webhooks/header_retrieve_response.rbi +50 -0
  266. data/rbi/dodopayments/models/webhooks/header_update_params.rbi +48 -0
  267. data/rbi/dodopayments/models/your_webhook_url_create_params.rbi +56 -0
  268. data/rbi/dodopayments/models.rbi +50 -8
  269. data/rbi/dodopayments/request_options.rbi +18 -7
  270. data/rbi/dodopayments/resources/addons.rbi +44 -27
  271. data/rbi/dodopayments/resources/brands.rbi +89 -0
  272. data/rbi/dodopayments/resources/customers/customer_portal.rbi +8 -6
  273. data/rbi/dodopayments/resources/customers.rbi +31 -17
  274. data/rbi/dodopayments/resources/discounts.rbi +54 -22
  275. data/rbi/dodopayments/resources/disputes.rbi +26 -14
  276. data/rbi/dodopayments/resources/invoices/payments.rbi +10 -3
  277. data/rbi/dodopayments/resources/invoices.rbi +2 -1
  278. data/rbi/dodopayments/resources/license_key_instances.rbi +25 -10
  279. data/rbi/dodopayments/resources/license_keys.rbi +29 -15
  280. data/rbi/dodopayments/resources/licenses.rbi +25 -12
  281. data/rbi/dodopayments/resources/misc.rbi +7 -4
  282. data/rbi/dodopayments/resources/payments.rbi +61 -27
  283. data/rbi/dodopayments/resources/payouts.rbi +12 -6
  284. data/rbi/dodopayments/resources/products/images.rbi +10 -4
  285. data/rbi/dodopayments/resources/products.rbi +118 -41
  286. data/rbi/dodopayments/resources/refunds.rbi +35 -15
  287. data/rbi/dodopayments/resources/subscriptions.rbi +95 -53
  288. data/rbi/dodopayments/resources/webhook_events.rbi +2 -34
  289. data/rbi/dodopayments/resources/webhooks/headers.rbi +40 -0
  290. data/rbi/dodopayments/resources/webhooks.rbi +127 -0
  291. data/rbi/dodopayments/resources/your_webhook_url.rbi +51 -0
  292. data/sig/dodopayments/client.rbs +6 -0
  293. data/sig/dodopayments/errors.rbs +9 -0
  294. data/sig/dodopayments/internal/cursor_page_pagination.rbs +15 -0
  295. data/sig/dodopayments/internal/transport/base_client.rbs +17 -2
  296. data/sig/dodopayments/internal/transport/pooled_net_requester.rbs +4 -0
  297. data/sig/dodopayments/internal/type/array_of.rbs +3 -0
  298. data/sig/dodopayments/internal/type/base_model.rbs +13 -5
  299. data/sig/dodopayments/internal/type/base_page.rbs +1 -1
  300. data/sig/dodopayments/internal/type/boolean.rbs +3 -0
  301. data/sig/dodopayments/internal/type/converter.rbs +26 -1
  302. data/sig/dodopayments/internal/type/enum.rbs +3 -0
  303. data/sig/dodopayments/internal/type/file_input.rbs +2 -0
  304. data/sig/dodopayments/internal/type/hash_of.rbs +3 -0
  305. data/sig/dodopayments/internal/type/request_parameters.rbs +5 -1
  306. data/sig/dodopayments/internal/type/union.rbs +5 -2
  307. data/sig/dodopayments/internal/type/unknown.rbs +3 -0
  308. data/sig/dodopayments/internal/util.rbs +25 -0
  309. data/sig/dodopayments/internal.rbs +4 -0
  310. data/sig/dodopayments/models/addon_cart_response_item.rbs +1 -1
  311. data/sig/dodopayments/models/addon_create_params.rbs +8 -1
  312. data/sig/dodopayments/models/addon_list_params.rbs +14 -6
  313. data/sig/dodopayments/models/addon_response.rbs +12 -1
  314. data/sig/dodopayments/models/addon_retrieve_params.rbs +1 -1
  315. data/sig/dodopayments/models/addon_update_images_params.rbs +1 -1
  316. data/sig/dodopayments/models/addon_update_images_response.rbs +1 -1
  317. data/sig/dodopayments/models/addon_update_params.rbs +9 -1
  318. data/sig/dodopayments/models/attach_addon.rbs +15 -0
  319. data/sig/dodopayments/models/attach_existing_customer.rbs +1 -1
  320. data/sig/dodopayments/models/billing_address.rbs +7 -1
  321. data/sig/dodopayments/models/brand.rbs +88 -0
  322. data/sig/dodopayments/models/brand_create_params.rbs +46 -0
  323. data/sig/dodopayments/models/{webhook_event_retrieve_params.rbs → brand_list_params.rbs} +3 -3
  324. data/sig/dodopayments/models/brand_list_response.rbs +13 -0
  325. data/sig/dodopayments/models/brand_retrieve_params.rbs +15 -0
  326. data/sig/dodopayments/models/brand_update_images_params.rbs +15 -0
  327. data/sig/dodopayments/models/brand_update_images_response.rbs +15 -0
  328. data/sig/dodopayments/models/brand_update_params.rbs +41 -0
  329. data/sig/dodopayments/models/create_new_customer.rbs +6 -1
  330. data/sig/dodopayments/models/customer.rbs +8 -1
  331. data/sig/dodopayments/models/customer_create_params.rbs +6 -1
  332. data/sig/dodopayments/models/customer_limited_details.rbs +1 -1
  333. data/sig/dodopayments/models/customer_list_params.rbs +20 -6
  334. data/sig/dodopayments/models/customer_portal_session.rbs +1 -1
  335. data/sig/dodopayments/models/customer_request.rbs +2 -3
  336. data/sig/dodopayments/models/customer_retrieve_params.rbs +1 -1
  337. data/sig/dodopayments/models/customer_update_params.rbs +5 -1
  338. data/sig/dodopayments/models/customers/customer_portal_create_params.rbs +9 -4
  339. data/sig/dodopayments/models/discount.rbs +18 -1
  340. data/sig/dodopayments/models/discount_create_params.rbs +15 -1
  341. data/sig/dodopayments/models/discount_delete_params.rbs +1 -1
  342. data/sig/dodopayments/models/discount_list_params.rbs +14 -6
  343. data/sig/dodopayments/models/discount_retrieve_params.rbs +1 -1
  344. data/sig/dodopayments/models/discount_update_params.rbs +15 -1
  345. data/sig/dodopayments/models/dispute.rbs +11 -1
  346. data/sig/dodopayments/models/dispute_list_params.rbs +84 -22
  347. data/sig/dodopayments/models/dispute_list_response.rbs +10 -1
  348. data/sig/dodopayments/models/dispute_retrieve_params.rbs +1 -1
  349. data/sig/dodopayments/models/{dispute_retrieve_response.rbs → get_dispute.rbs} +18 -6
  350. data/sig/dodopayments/models/invoices/payment_retrieve_params.rbs +1 -1
  351. data/sig/dodopayments/models/license_activate_params.rbs +5 -1
  352. data/sig/dodopayments/models/license_deactivate_params.rbs +5 -1
  353. data/sig/dodopayments/models/license_key.rbs +14 -1
  354. data/sig/dodopayments/models/license_key_duration.rbs +4 -1
  355. data/sig/dodopayments/models/license_key_instance.rbs +7 -1
  356. data/sig/dodopayments/models/license_key_instance_list_params.rbs +6 -1
  357. data/sig/dodopayments/models/license_key_instance_retrieve_params.rbs +1 -1
  358. data/sig/dodopayments/models/license_key_instance_update_params.rbs +4 -1
  359. data/sig/dodopayments/models/license_key_list_params.rbs +47 -16
  360. data/sig/dodopayments/models/license_key_retrieve_params.rbs +1 -1
  361. data/sig/dodopayments/models/license_key_update_params.rbs +6 -1
  362. data/sig/dodopayments/models/license_validate_params.rbs +5 -1
  363. data/sig/dodopayments/models/license_validate_response.rbs +1 -1
  364. data/sig/dodopayments/models/misc_list_supported_countries_params.rbs +1 -1
  365. data/sig/dodopayments/models/new_customer.rbs +21 -0
  366. data/sig/dodopayments/models/one_time_product_cart_item.rbs +5 -1
  367. data/sig/dodopayments/models/payment.rbs +60 -17
  368. data/sig/dodopayments/models/payment_create_params.rbs +23 -55
  369. data/sig/dodopayments/models/payment_create_response.rbs +21 -7
  370. data/sig/dodopayments/models/payment_list_params.rbs +85 -22
  371. data/sig/dodopayments/models/payment_list_response.rbs +25 -4
  372. data/sig/dodopayments/models/payment_method_types.rbs +48 -0
  373. data/sig/dodopayments/models/payment_retrieve_line_items_params.rbs +15 -0
  374. data/sig/dodopayments/models/payment_retrieve_line_items_response.rbs +67 -0
  375. data/sig/dodopayments/models/payment_retrieve_params.rbs +1 -1
  376. data/sig/dodopayments/models/payout_list_params.rbs +14 -6
  377. data/sig/dodopayments/models/payout_list_response.rbs +17 -1
  378. data/sig/dodopayments/models/price.rbs +53 -13
  379. data/sig/dodopayments/models/product.rbs +80 -4
  380. data/sig/dodopayments/models/product_create_params.rbs +45 -4
  381. data/sig/dodopayments/models/product_delete_params.rbs +1 -1
  382. data/sig/dodopayments/models/product_list_params.rbs +29 -10
  383. data/sig/dodopayments/models/product_list_response.rbs +20 -1
  384. data/sig/dodopayments/models/product_retrieve_params.rbs +1 -1
  385. data/sig/dodopayments/models/product_unarchive_params.rbs +1 -1
  386. data/sig/dodopayments/models/product_update_files_params.rbs +23 -0
  387. data/sig/dodopayments/models/product_update_files_response.rbs +15 -0
  388. data/sig/dodopayments/models/product_update_params.rbs +58 -4
  389. data/sig/dodopayments/models/products/image_update_params.rbs +9 -4
  390. data/sig/dodopayments/models/products/image_update_response.rbs +1 -1
  391. data/sig/dodopayments/models/refund.rbs +15 -1
  392. data/sig/dodopayments/models/refund_create_params.rbs +38 -2
  393. data/sig/dodopayments/models/refund_list_params.rbs +54 -19
  394. data/sig/dodopayments/models/refund_retrieve_params.rbs +1 -1
  395. data/sig/dodopayments/models/subscription.rbs +43 -10
  396. data/sig/dodopayments/models/subscription_change_plan_params.rbs +14 -17
  397. data/sig/dodopayments/models/subscription_charge_params.rbs +27 -2
  398. data/sig/dodopayments/models/subscription_charge_response.rbs +1 -1
  399. data/sig/dodopayments/models/subscription_create_params.rbs +58 -73
  400. data/sig/dodopayments/models/subscription_create_response.rbs +26 -7
  401. data/sig/dodopayments/models/subscription_list_params.rbs +64 -19
  402. data/sig/dodopayments/models/subscription_list_response.rbs +39 -7
  403. data/sig/dodopayments/models/subscription_retrieve_params.rbs +1 -1
  404. data/sig/dodopayments/models/subscription_status.rbs +1 -2
  405. data/sig/dodopayments/models/subscription_update_params.rbs +20 -8
  406. data/sig/dodopayments/models/webhook_create_params.rbs +65 -0
  407. data/sig/dodopayments/models/webhook_create_response.rbs +60 -0
  408. data/sig/dodopayments/models/webhook_delete_params.rbs +15 -0
  409. data/sig/dodopayments/models/webhook_event_type.rbs +54 -0
  410. data/sig/dodopayments/models/webhook_list_params.rbs +28 -0
  411. data/sig/dodopayments/models/webhook_list_response.rbs +60 -0
  412. data/sig/dodopayments/models/webhook_payload.rbs +203 -0
  413. data/sig/dodopayments/models/webhook_retrieve_params.rbs +15 -0
  414. data/sig/dodopayments/models/webhook_retrieve_response.rbs +60 -0
  415. data/sig/dodopayments/models/webhook_update_params.rbs +51 -0
  416. data/sig/dodopayments/models/webhook_update_response.rbs +60 -0
  417. data/sig/dodopayments/models/webhooks/header_retrieve_params.rbs +17 -0
  418. data/sig/dodopayments/models/webhooks/header_retrieve_response.rbs +24 -0
  419. data/sig/dodopayments/models/webhooks/header_update_params.rbs +26 -0
  420. data/sig/dodopayments/models/your_webhook_url_create_params.rbs +42 -0
  421. data/sig/dodopayments/models.rbs +39 -3
  422. data/sig/dodopayments/request_options.rbs +1 -1
  423. data/sig/dodopayments/resources/addons.rbs +6 -6
  424. data/sig/dodopayments/resources/brands.rbs +39 -0
  425. data/sig/dodopayments/resources/customers/customer_portal.rbs +2 -2
  426. data/sig/dodopayments/resources/customers.rbs +7 -6
  427. data/sig/dodopayments/resources/discounts.rbs +8 -6
  428. data/sig/dodopayments/resources/disputes.rbs +8 -8
  429. data/sig/dodopayments/resources/license_key_instances.rbs +3 -3
  430. data/sig/dodopayments/resources/license_keys.rbs +8 -8
  431. data/sig/dodopayments/resources/licenses.rbs +1 -1
  432. data/sig/dodopayments/resources/payments.rbs +17 -11
  433. data/sig/dodopayments/resources/payouts.rbs +2 -2
  434. data/sig/dodopayments/resources/products/images.rbs +1 -1
  435. data/sig/dodopayments/resources/products.rbs +20 -7
  436. data/sig/dodopayments/resources/refunds.rbs +10 -9
  437. data/sig/dodopayments/resources/subscriptions.rbs +21 -15
  438. data/sig/dodopayments/resources/webhook_events.rbs +0 -15
  439. data/sig/dodopayments/resources/webhooks/headers.rbs +20 -0
  440. data/sig/dodopayments/resources/webhooks.rbs +48 -0
  441. data/sig/dodopayments/resources/your_webhook_url.rbs +18 -0
  442. metadata +110 -14
  443. data/lib/dodopayments/models/webhook_event.rb +0 -58
  444. data/lib/dodopayments/models/webhook_event_list_params.rb +0 -66
  445. data/rbi/dodopayments/models/webhook_event.rbi +0 -71
  446. data/rbi/dodopayments/models/webhook_event_list_params.rbi +0 -77
  447. data/rbi/dodopayments/models/webhook_event_retrieve_params.rbi +0 -19
  448. data/sig/dodopayments/models/webhook_event.rbs +0 -46
  449. data/sig/dodopayments/models/webhook_event_list_params.rbs +0 -43
@@ -7,6 +7,8 @@ module Dodopayments
7
7
  #
8
8
  # @abstract
9
9
  class BaseClient
10
+ extend Dodopayments::Internal::Util::SorbetRuntimeSupport
11
+
10
12
  # from whatwg fetch spec
11
13
  MAX_REDIRECTS = 20
12
14
 
@@ -151,6 +153,27 @@ module Dodopayments
151
153
  end
152
154
  end
153
155
 
156
+ # @return [URI::Generic]
157
+ attr_reader :base_url
158
+
159
+ # @return [Float]
160
+ attr_reader :timeout
161
+
162
+ # @return [Integer]
163
+ attr_reader :max_retries
164
+
165
+ # @return [Float]
166
+ attr_reader :initial_retry_delay
167
+
168
+ # @return [Float]
169
+ attr_reader :max_retry_delay
170
+
171
+ # @return [Hash{String=>String}]
172
+ attr_reader :headers
173
+
174
+ # @return [String, nil]
175
+ attr_reader :idempotency_header
176
+
154
177
  # @api private
155
178
  # @return [Dodopayments::Internal::Transport::PooledNetRequester]
156
179
  attr_reader :requester
@@ -182,10 +205,11 @@ module Dodopayments
182
205
  },
183
206
  headers
184
207
  )
185
- @base_url = Dodopayments::Internal::Util.parse_uri(base_url)
208
+ @base_url_components = Dodopayments::Internal::Util.parse_uri(base_url)
209
+ @base_url = Dodopayments::Internal::Util.unparse_uri(@base_url_components)
186
210
  @idempotency_header = idempotency_header&.to_s&.downcase
187
- @max_retries = max_retries
188
211
  @timeout = timeout
212
+ @max_retries = max_retries
189
213
  @initial_retry_delay = initial_retry_delay
190
214
  @max_retry_delay = max_retry_delay
191
215
  end
@@ -276,10 +300,14 @@ module Dodopayments
276
300
  Dodopayments::Internal::Util.deep_merge(*[req[:body], opts[:extra_body]].compact)
277
301
  end
278
302
 
303
+ url = Dodopayments::Internal::Util.join_parsed_uri(
304
+ @base_url_components,
305
+ {**req, path: path, query: query}
306
+ )
279
307
  headers, encoded = Dodopayments::Internal::Util.encode_content(headers, body)
280
308
  {
281
309
  method: method,
282
- url: Dodopayments::Internal::Util.join_parsed_uri(@base_url, {**req, path: path, query: query}),
310
+ url: url,
283
311
  headers: headers,
284
312
  body: encoded,
285
313
  max_retries: opts.fetch(:max_retries, @max_retries),
@@ -337,7 +365,7 @@ module Dodopayments
337
365
  #
338
366
  # @raise [Dodopayments::Errors::APIError]
339
367
  # @return [Array(Integer, Net::HTTPResponse, Enumerable<String>)]
340
- private def send_request(request, redirect_count:, retry_count:, send_retry_header:)
368
+ def send_request(request, redirect_count:, retry_count:, send_retry_header:)
341
369
  url, headers, max_retries, timeout = request.fetch_values(:url, :headers, :max_retries, :timeout)
342
370
  input = {
343
371
  **request.except(:timeout),
@@ -446,6 +474,7 @@ module Dodopayments
446
474
  self.class.validate!(req)
447
475
  model = req.fetch(:model) { Dodopayments::Internal::Type::Unknown }
448
476
  opts = req[:options].to_h
477
+ unwrap = req[:unwrap]
449
478
  Dodopayments::RequestOptions.validate!(opts)
450
479
  request = build_request(req.except(:options), opts)
451
480
  url = request.fetch(:url)
@@ -462,11 +491,18 @@ module Dodopayments
462
491
  decoded = Dodopayments::Internal::Util.decode_content(response, stream: stream)
463
492
  case req
464
493
  in {stream: Class => st}
465
- st.new(model: model, url: url, status: status, response: response, stream: decoded)
494
+ st.new(
495
+ model: model,
496
+ url: url,
497
+ status: status,
498
+ response: response,
499
+ unwrap: unwrap,
500
+ stream: decoded
501
+ )
466
502
  in {page: Class => page}
467
503
  page.new(client: self, req: req, headers: response, page_data: decoded)
468
504
  else
469
- unwrapped = Dodopayments::Internal::Util.dig(decoded, req[:unwrap])
505
+ unwrapped = Dodopayments::Internal::Util.dig(decoded, unwrap)
470
506
  Dodopayments::Internal::Type::Converter.coerce(model, unwrapped)
471
507
  end
472
508
  end
@@ -476,10 +512,54 @@ module Dodopayments
476
512
  # @return [String]
477
513
  def inspect
478
514
  # rubocop:disable Layout/LineLength
479
- base_url = Dodopayments::Internal::Util.unparse_uri(@base_url)
480
- "#<#{self.class.name}:0x#{object_id.to_s(16)} base_url=#{base_url} max_retries=#{@max_retries} timeout=#{@timeout}>"
515
+ "#<#{self.class.name}:0x#{object_id.to_s(16)} base_url=#{@base_url} max_retries=#{@max_retries} timeout=#{@timeout}>"
481
516
  # rubocop:enable Layout/LineLength
482
517
  end
518
+
519
+ define_sorbet_constant!(:RequestComponents) do
520
+ T.type_alias do
521
+ {
522
+ method: Symbol,
523
+ path: T.any(String, T::Array[String]),
524
+ query: T.nilable(T::Hash[String, T.nilable(T.any(T::Array[String], String))]),
525
+ headers: T.nilable(
526
+ T::Hash[String,
527
+ T.nilable(
528
+ T.any(
529
+ String,
530
+ Integer,
531
+ T::Array[T.nilable(T.any(String, Integer))]
532
+ )
533
+ )]
534
+ ),
535
+ body: T.nilable(T.anything),
536
+ unwrap: T.nilable(
537
+ T.any(
538
+ Symbol,
539
+ Integer,
540
+ T::Array[T.any(Symbol, Integer)],
541
+ T.proc.params(arg0: T.anything).returns(T.anything)
542
+ )
543
+ ),
544
+ page: T.nilable(T::Class[Dodopayments::Internal::Type::BasePage[Dodopayments::Internal::Type::BaseModel]]),
545
+ stream: T.nilable(T::Class[T.anything]),
546
+ model: T.nilable(Dodopayments::Internal::Type::Converter::Input),
547
+ options: T.nilable(Dodopayments::RequestOptions::OrHash)
548
+ }
549
+ end
550
+ end
551
+ define_sorbet_constant!(:RequestInput) do
552
+ T.type_alias do
553
+ {
554
+ method: Symbol,
555
+ url: URI::Generic,
556
+ headers: T::Hash[String, String],
557
+ body: T.anything,
558
+ max_retries: Integer,
559
+ timeout: Float
560
+ }
561
+ end
562
+ end
483
563
  end
484
564
  end
485
565
  end
@@ -5,10 +5,14 @@ module Dodopayments
5
5
  module Transport
6
6
  # @api private
7
7
  class PooledNetRequester
8
+ extend Dodopayments::Internal::Util::SorbetRuntimeSupport
9
+
8
10
  # from the golang stdlib
9
11
  # https://github.com/golang/go/blob/c8eced8580028328fde7c03cbfcb720ce15b2358/src/net/http/transport.go#L49
10
12
  KEEP_ALIVE_TIMEOUT = 30
11
13
 
14
+ DEFAULT_MAX_CONNECTIONS = [Etc.nprocessors, 99].max
15
+
12
16
  class << self
13
17
  # @api private
14
18
  #
@@ -182,11 +186,23 @@ module Dodopayments
182
186
  # @api private
183
187
  #
184
188
  # @param size [Integer]
185
- def initialize(size: Etc.nprocessors)
189
+ def initialize(size: self.class::DEFAULT_MAX_CONNECTIONS)
186
190
  @mutex = Mutex.new
187
191
  @size = size
188
192
  @pools = {}
189
193
  end
194
+
195
+ define_sorbet_constant!(:Request) do
196
+ T.type_alias do
197
+ {
198
+ method: Symbol,
199
+ url: URI::Generic,
200
+ headers: T::Hash[String, String],
201
+ body: T.anything,
202
+ deadline: Float
203
+ }
204
+ end
205
+ end
190
206
  end
191
207
  end
192
208
  end
@@ -12,6 +12,7 @@ module Dodopayments
12
12
  # Array of items of a given type.
13
13
  class ArrayOf
14
14
  include Dodopayments::Internal::Type::Converter
15
+ include Dodopayments::Internal::Util::SorbetRuntimeSupport
15
16
 
16
17
  private_class_method :new
17
18
 
@@ -29,7 +30,7 @@ module Dodopayments
29
30
  #
30
31
  # @option spec [Boolean] :"nil?"
31
32
  #
32
- # @return [Dodopayments::Internal::Type::ArrayOf]
33
+ # @return [self]
33
34
  def self.[](...) = new(...)
34
35
 
35
36
  # @api public
@@ -61,10 +62,14 @@ module Dodopayments
61
62
  #
62
63
  # @param state [Hash{Symbol=>Object}] .
63
64
  #
64
- # @option state [Boolean, :strong] :strictness
65
+ # @option state [Boolean] :translate_names
66
+ #
67
+ # @option state [Boolean] :strictness
65
68
  #
66
69
  # @option state [Hash{Symbol=>Object}] :exactness
67
70
  #
71
+ # @option state [Class<StandardError>] :error
72
+ #
68
73
  # @option state [Integer] :branched
69
74
  #
70
75
  # @return [Array<Object>, Object]
@@ -73,6 +78,7 @@ module Dodopayments
73
78
 
74
79
  unless value.is_a?(Array)
75
80
  exactness[:no] += 1
81
+ state[:error] = TypeError.new("#{value.class} can't be coerced into #{Array}")
76
82
  return value
77
83
  end
78
84
 
@@ -110,6 +116,13 @@ module Dodopayments
110
116
  end
111
117
  end
112
118
 
119
+ # @api private
120
+ #
121
+ # @return [Object]
122
+ def to_sorbet_type
123
+ T::Array[Dodopayments::Internal::Util::SorbetRuntimeSupport.to_sorbet_type(item_type)]
124
+ end
125
+
113
126
  # @api private
114
127
  #
115
128
  # @return [generic<Elem>]
@@ -135,6 +148,7 @@ module Dodopayments
135
148
  # @option spec [Boolean] :"nil?"
136
149
  def initialize(type_info, spec = {})
137
150
  @item_type_fn = Dodopayments::Internal::Type::Converter.type_info(type_info || spec)
151
+ @meta = Dodopayments::Internal::Type::Converter.meta_info(type_info, spec)
138
152
  @nilable = spec.fetch(:nil?, false)
139
153
  end
140
154
 
@@ -6,6 +6,7 @@ module Dodopayments
6
6
  # @abstract
7
7
  class BaseModel
8
8
  extend Dodopayments::Internal::Type::Converter
9
+ extend Dodopayments::Internal::Util::SorbetRuntimeSupport
9
10
 
10
11
  class << self
11
12
  # @api private
@@ -13,11 +14,17 @@ module Dodopayments
13
14
  # Assumes superclass fields are totally defined before fields are accessed /
14
15
  # defined on subclasses.
15
16
  #
16
- # @return [Hash{Symbol=>Hash{Symbol=>Object}}]
17
- def known_fields
18
- @known_fields ||= (self < Dodopayments::Internal::Type::BaseModel ? superclass.known_fields.dup : {})
17
+ # @param child [Class<Dodopayments::Internal::Type::BaseModel>]
18
+ def inherited(child)
19
+ super
20
+ child.known_fields.replace(known_fields.dup)
19
21
  end
20
22
 
23
+ # @api private
24
+ #
25
+ # @return [Hash{Symbol=>Hash{Symbol=>Object}}]
26
+ def known_fields = @known_fields ||= {}
27
+
21
28
  # @api private
22
29
  #
23
30
  # @return [Hash{Symbol=>Hash{Symbol=>Object}}]
@@ -45,6 +52,7 @@ module Dodopayments
45
52
  #
46
53
  # @option spec [Boolean] :"nil?"
47
54
  private def add_field(name_sym, required:, type_info:, spec:)
55
+ meta = Dodopayments::Internal::Type::Converter.meta_info(type_info, spec)
48
56
  type_fn, info =
49
57
  case type_info
50
58
  in Proc | Dodopayments::Internal::Type::Converter | Class
@@ -53,7 +61,7 @@ module Dodopayments
53
61
  [Dodopayments::Internal::Type::Converter.type_info(type_info), type_info]
54
62
  end
55
63
 
56
- setter = "#{name_sym}="
64
+ setter = :"#{name_sym}="
57
65
  api_name = info.fetch(:api_name, name_sym)
58
66
  nilable = info.fetch(:nil?, false)
59
67
  const = if required && !nilable
@@ -74,31 +82,65 @@ module Dodopayments
74
82
  required: required,
75
83
  nilable: nilable,
76
84
  const: const,
77
- type_fn: type_fn
85
+ type_fn: type_fn,
86
+ meta: meta
78
87
  }
79
88
 
80
- define_method(setter) { @data.store(name_sym, _1) }
89
+ define_method(setter) do |value|
90
+ target = type_fn.call
91
+ state = Dodopayments::Internal::Type::Converter.new_coerce_state(translate_names: false)
92
+ coerced = Dodopayments::Internal::Type::Converter.coerce(target, value, state: state)
93
+ status = @coerced.store(name_sym, state.fetch(:error) || true)
94
+ stored =
95
+ case [target, status]
96
+ in [Dodopayments::Internal::Type::Converter | Symbol, true]
97
+ coerced
98
+ else
99
+ value
100
+ end
101
+ @data.store(name_sym, stored)
102
+ end
81
103
 
104
+ # rubocop:disable Style/CaseEquality
105
+ # rubocop:disable Metrics/BlockLength
82
106
  define_method(name_sym) do
83
107
  target = type_fn.call
84
- value = @data.fetch(name_sym) { const == Dodopayments::Internal::OMIT ? nil : const }
85
- state = {strictness: :strong, exactness: {yes: 0, no: 0, maybe: 0}, branched: 0}
86
- if (nilable || !required) && value.nil?
87
- nil
88
- else
89
- Dodopayments::Internal::Type::Converter.coerce(
90
- target, value, state: state
108
+
109
+ case @coerced[name_sym]
110
+ in true | false if Dodopayments::Internal::Type::Converter === target
111
+ @data.fetch(name_sym)
112
+ in ::StandardError => e
113
+ raise Dodopayments::Errors::ConversionError.new(
114
+ on: self.class,
115
+ method: __method__,
116
+ target: target,
117
+ value: @data.fetch(name_sym),
118
+ cause: e
91
119
  )
120
+ else
121
+ Kernel.then do
122
+ value = @data.fetch(name_sym) { const == Dodopayments::Internal::OMIT ? nil : const }
123
+ state = Dodopayments::Internal::Type::Converter.new_coerce_state(translate_names: false)
124
+ if (nilable || !required) && value.nil?
125
+ nil
126
+ else
127
+ Dodopayments::Internal::Type::Converter.coerce(
128
+ target, value, state: state
129
+ )
130
+ end
131
+ rescue StandardError => e
132
+ raise Dodopayments::Errors::ConversionError.new(
133
+ on: self.class,
134
+ method: __method__,
135
+ target: target,
136
+ value: value,
137
+ cause: e
138
+ )
139
+ end
92
140
  end
93
- rescue StandardError => e
94
- cls = self.class.name.split("::").last
95
- message = [
96
- "Failed to parse #{cls}.#{__method__} from #{value.class} to #{target.inspect}.",
97
- "To get the unparsed API response, use #{cls}[#{__method__.inspect}].",
98
- "Cause: #{e.message}"
99
- ].join(" ")
100
- raise Dodopayments::Errors::ConversionError.new(message)
101
141
  end
142
+ # rubocop:enable Metrics/BlockLength
143
+ # rubocop:enable Style/CaseEquality
102
144
  end
103
145
 
104
146
  # @api private
@@ -198,23 +240,28 @@ module Dodopayments
198
240
  #
199
241
  # @param state [Hash{Symbol=>Object}] .
200
242
  #
201
- # @option state [Boolean, :strong] :strictness
243
+ # @option state [Boolean] :translate_names
244
+ #
245
+ # @option state [Boolean] :strictness
202
246
  #
203
247
  # @option state [Hash{Symbol=>Object}] :exactness
204
248
  #
249
+ # @option state [Class<StandardError>] :error
250
+ #
205
251
  # @option state [Integer] :branched
206
252
  #
207
- # @return [Dodopayments::Internal::Type::BaseModel, Object]
253
+ # @return [self, Object]
208
254
  def coerce(value, state:)
209
255
  exactness = state.fetch(:exactness)
210
256
 
211
- if value.is_a?(self.class)
257
+ if value.is_a?(self)
212
258
  exactness[:yes] += 1
213
259
  return value
214
260
  end
215
261
 
216
262
  unless (val = Dodopayments::Internal::Util.coerce_hash(value)).is_a?(Hash)
217
263
  exactness[:no] += 1
264
+ state[:error] = TypeError.new("#{value.class} can't be coerced into #{Hash}")
218
265
  return value
219
266
  end
220
267
  exactness[:yes] += 1
@@ -222,13 +269,15 @@ module Dodopayments
222
269
  keys = val.keys.to_set
223
270
  instance = new
224
271
  data = instance.to_h
272
+ status = instance.instance_variable_get(:@coerced)
225
273
 
226
274
  # rubocop:disable Metrics/BlockLength
227
275
  fields.each do |name, field|
228
276
  mode, required, target = field.fetch_values(:mode, :required, :type)
229
277
  api_name, nilable, const = field.fetch_values(:api_name, :nilable, :const)
278
+ src_name = state.fetch(:translate_names) ? api_name : name
230
279
 
231
- unless val.key?(api_name)
280
+ unless val.key?(src_name)
232
281
  if required && mode != :dump && const == Dodopayments::Internal::OMIT
233
282
  exactness[nilable ? :maybe : :no] += 1
234
283
  else
@@ -237,9 +286,10 @@ module Dodopayments
237
286
  next
238
287
  end
239
288
 
240
- item = val.fetch(api_name)
241
- keys.delete(api_name)
289
+ item = val.fetch(src_name)
290
+ keys.delete(src_name)
242
291
 
292
+ state[:error] = nil
243
293
  converted =
244
294
  if item.nil? && (nilable || !required)
245
295
  exactness[nilable ? :yes : :maybe] += 1
@@ -253,6 +303,8 @@ module Dodopayments
253
303
  item
254
304
  end
255
305
  end
306
+
307
+ status.store(name, state.fetch(:error) || true)
256
308
  data.store(name, converted)
257
309
  end
258
310
  # rubocop:enable Metrics/BlockLength
@@ -263,7 +315,7 @@ module Dodopayments
263
315
 
264
316
  # @api private
265
317
  #
266
- # @param value [Dodopayments::Internal::Type::BaseModel, Object]
318
+ # @param value [self, Object]
267
319
  #
268
320
  # @param state [Hash{Symbol=>Object}] .
269
321
  #
@@ -302,6 +354,46 @@ module Dodopayments
302
354
 
303
355
  acc
304
356
  end
357
+
358
+ # @api private
359
+ #
360
+ # @return [Object]
361
+ def to_sorbet_type
362
+ self
363
+ end
364
+ end
365
+
366
+ class << self
367
+ # @api private
368
+ #
369
+ # @param model [Dodopayments::Internal::Type::BaseModel]
370
+ # @param convert [Boolean]
371
+ #
372
+ # @return [Hash{Symbol=>Object}]
373
+ def recursively_to_h(model, convert:)
374
+ rec = ->(x) do
375
+ case x
376
+ in Dodopayments::Internal::Type::BaseModel
377
+ if convert
378
+ fields = x.class.known_fields
379
+ x.to_h.to_h do |key, val|
380
+ [key, rec.call(fields.key?(key) ? x.public_send(key) : val)]
381
+ rescue Dodopayments::Errors::ConversionError
382
+ [key, rec.call(val)]
383
+ end
384
+ else
385
+ rec.call(x.to_h)
386
+ end
387
+ in Hash
388
+ x.transform_values(&rec)
389
+ in Array
390
+ x.map(&rec)
391
+ else
392
+ x
393
+ end
394
+ end
395
+ rec.call(model)
396
+ end
305
397
  end
306
398
 
307
399
  # @api public
@@ -340,9 +432,23 @@ module Dodopayments
340
432
 
341
433
  alias_method :to_hash, :to_h
342
434
 
435
+ # @api public
436
+ #
437
+ # In addition to the behaviour of `#to_h`, this method will recursively call
438
+ # `#to_h` on nested models.
439
+ #
440
+ # @return [Hash{Symbol=>Object}]
441
+ def deep_to_h = self.class.recursively_to_h(@data, convert: false)
442
+
343
443
  # @param keys [Array<Symbol>, nil]
344
444
  #
345
445
  # @return [Hash{Symbol=>Object}]
446
+ #
447
+ # @example
448
+ # # `attach_existing_customer` is a `Dodopayments::AttachExistingCustomer`
449
+ # attach_existing_customer => {
450
+ # customer_id: customer_id
451
+ # }
346
452
  def deconstruct_keys(keys)
347
453
  (keys || self.class.known_fields.keys)
348
454
  .filter_map do |k|
@@ -355,29 +461,6 @@ module Dodopayments
355
461
  .to_h
356
462
  end
357
463
 
358
- class << self
359
- # @api private
360
- #
361
- # @param model [Dodopayments::Internal::Type::BaseModel]
362
- #
363
- # @return [Hash{Symbol=>Object}]
364
- def walk(model)
365
- walk = ->(x) do
366
- case x
367
- in Dodopayments::Internal::Type::BaseModel
368
- walk.call(x.to_h)
369
- in Hash
370
- x.transform_values(&walk)
371
- in Array
372
- x.map(&walk)
373
- else
374
- x
375
- end
376
- end
377
- walk.call(model)
378
- end
379
- end
380
-
381
464
  # @api public
382
465
  #
383
466
  # @param a [Object]
@@ -395,7 +478,18 @@ module Dodopayments
395
478
  # Create a new instance of a model.
396
479
  #
397
480
  # @param data [Hash{Symbol=>Object}, self]
398
- def initialize(data = {}) = (@data = Dodopayments::Internal::Util.coerce_hash!(data).to_h)
481
+ def initialize(data = {})
482
+ @data = {}
483
+ @coerced = {}
484
+ Dodopayments::Internal::Util.coerce_hash!(data).each do
485
+ if self.class.known_fields.key?(_1)
486
+ public_send(:"#{_1}=", _2)
487
+ else
488
+ @data.store(_1, _2)
489
+ @coerced.store(_1, false)
490
+ end
491
+ end
492
+ end
399
493
 
400
494
  class << self
401
495
  # @api private
@@ -423,12 +517,19 @@ module Dodopayments
423
517
  # @api public
424
518
  #
425
519
  # @return [String]
426
- def to_s = self.class.walk(@data).to_s
520
+ def to_s = deep_to_h.to_s
427
521
 
428
522
  # @api private
429
523
  #
430
524
  # @return [String]
431
- def inspect = "#<#{self.class}:0x#{object_id.to_s(16)} #{self}>"
525
+ def inspect
526
+ converted = self.class.recursively_to_h(self, convert: true)
527
+ "#<#{self.class}:0x#{object_id.to_s(16)} #{converted}>"
528
+ end
529
+
530
+ define_sorbet_constant!(:KnownField) do
531
+ T.type_alias { {mode: T.nilable(Symbol), required: T::Boolean, nilable: T::Boolean} }
532
+ end
432
533
  end
433
534
  end
434
535
  end
@@ -10,6 +10,7 @@ module Dodopayments
10
10
  # Ruby has no Boolean class; this is something for models to refer to.
11
11
  class Boolean
12
12
  extend Dodopayments::Internal::Type::Converter
13
+ extend Dodopayments::Internal::Util::SorbetRuntimeSupport
13
14
 
14
15
  private_class_method :new
15
16
 
@@ -30,14 +31,20 @@ module Dodopayments
30
31
  class << self
31
32
  # @api private
32
33
  #
34
+ # Coerce value to Boolean if possible, otherwise return the original value.
35
+ #
33
36
  # @param value [Boolean, Object]
34
37
  #
35
38
  # @param state [Hash{Symbol=>Object}] .
36
39
  #
37
- # @option state [Boolean, :strong] :strictness
40
+ # @option state [Boolean] :translate_names
41
+ #
42
+ # @option state [Boolean] :strictness
38
43
  #
39
44
  # @option state [Hash{Symbol=>Object}] :exactness
40
45
  #
46
+ # @option state [Class<StandardError>] :error
47
+ #
41
48
  # @option state [Integer] :branched
42
49
  #
43
50
  # @return [Boolean, Object]
@@ -56,6 +63,13 @@ module Dodopayments
56
63
  # @option state [Boolean] :can_retry
57
64
  #
58
65
  # @return [Boolean, Object]
66
+
67
+ # @api private
68
+ #
69
+ # @return [Object]
70
+ def to_sorbet_type
71
+ T::Boolean
72
+ end
59
73
  end
60
74
  end
61
75
  end