dodopayments 0.0.1.pre.alpha.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 (326) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +154 -0
  3. data/lib/dodopayments/base_client.rb +453 -0
  4. data/lib/dodopayments/base_model.rb +1217 -0
  5. data/lib/dodopayments/base_page.rb +62 -0
  6. data/lib/dodopayments/client.rb +147 -0
  7. data/lib/dodopayments/default_page_number_pagination.rb +97 -0
  8. data/lib/dodopayments/errors.rb +183 -0
  9. data/lib/dodopayments/extern.rb +9 -0
  10. data/lib/dodopayments/models/attach_existing_customer.rb +19 -0
  11. data/lib/dodopayments/models/billing_address.rb +48 -0
  12. data/lib/dodopayments/models/country_code.rb +262 -0
  13. data/lib/dodopayments/models/create_new_customer.rb +44 -0
  14. data/lib/dodopayments/models/customer.rb +49 -0
  15. data/lib/dodopayments/models/customer_create_params.rb +36 -0
  16. data/lib/dodopayments/models/customer_limited_details.rb +34 -0
  17. data/lib/dodopayments/models/customer_list_params.rb +32 -0
  18. data/lib/dodopayments/models/customer_portal_session.rb +19 -0
  19. data/lib/dodopayments/models/customer_request.rb +18 -0
  20. data/lib/dodopayments/models/customer_retrieve_params.rb +18 -0
  21. data/lib/dodopayments/models/customer_update_params.rb +30 -0
  22. data/lib/dodopayments/models/customers/customer_portal_create_params.rb +27 -0
  23. data/lib/dodopayments/models/discount.rb +108 -0
  24. data/lib/dodopayments/models/discount_create_params.rb +87 -0
  25. data/lib/dodopayments/models/discount_delete_params.rb +18 -0
  26. data/lib/dodopayments/models/discount_list_params.rb +32 -0
  27. data/lib/dodopayments/models/discount_retrieve_params.rb +18 -0
  28. data/lib/dodopayments/models/discount_type.rb +12 -0
  29. data/lib/dodopayments/models/discount_update_params.rb +82 -0
  30. data/lib/dodopayments/models/dispute.rb +80 -0
  31. data/lib/dodopayments/models/dispute_list_params.rb +79 -0
  32. data/lib/dodopayments/models/dispute_retrieve_params.rb +18 -0
  33. data/lib/dodopayments/models/dispute_stage.rb +14 -0
  34. data/lib/dodopayments/models/dispute_status.rb +18 -0
  35. data/lib/dodopayments/models/intent_status.rb +22 -0
  36. data/lib/dodopayments/models/invoices/payment_retrieve_params.rb +20 -0
  37. data/lib/dodopayments/models/license_activate_params.rb +30 -0
  38. data/lib/dodopayments/models/license_deactivate_params.rb +30 -0
  39. data/lib/dodopayments/models/license_key.rb +113 -0
  40. data/lib/dodopayments/models/license_key_duration.rb +25 -0
  41. data/lib/dodopayments/models/license_key_instance.rb +43 -0
  42. data/lib/dodopayments/models/license_key_instance_list_params.rb +39 -0
  43. data/lib/dodopayments/models/license_key_instance_retrieve_params.rb +18 -0
  44. data/lib/dodopayments/models/license_key_instance_update_params.rb +24 -0
  45. data/lib/dodopayments/models/license_key_list_params.rb +53 -0
  46. data/lib/dodopayments/models/license_key_retrieve_params.rb +18 -0
  47. data/lib/dodopayments/models/license_key_status.rb +14 -0
  48. data/lib/dodopayments/models/license_key_update_params.rb +42 -0
  49. data/lib/dodopayments/models/license_validate_params.rb +30 -0
  50. data/lib/dodopayments/models/license_validate_response.rb +19 -0
  51. data/lib/dodopayments/models/misc_list_supported_countries_params.rb +18 -0
  52. data/lib/dodopayments/models/misc_list_supported_countries_response.rb +7 -0
  53. data/lib/dodopayments/models/one_time_product_cart_item.rb +33 -0
  54. data/lib/dodopayments/models/payment.rb +339 -0
  55. data/lib/dodopayments/models/payment_create_params.rb +90 -0
  56. data/lib/dodopayments/models/payment_create_response.rb +82 -0
  57. data/lib/dodopayments/models/payment_list_params.rb +79 -0
  58. data/lib/dodopayments/models/payment_list_response.rb +238 -0
  59. data/lib/dodopayments/models/payment_retrieve_params.rb +18 -0
  60. data/lib/dodopayments/models/payout_list_params.rb +32 -0
  61. data/lib/dodopayments/models/payout_list_response.rb +295 -0
  62. data/lib/dodopayments/models/price.rb +512 -0
  63. data/lib/dodopayments/models/product.rb +149 -0
  64. data/lib/dodopayments/models/product_create_params.rb +107 -0
  65. data/lib/dodopayments/models/product_delete_params.rb +18 -0
  66. data/lib/dodopayments/models/product_list_params.rb +54 -0
  67. data/lib/dodopayments/models/product_list_response.rb +293 -0
  68. data/lib/dodopayments/models/product_retrieve_params.rb +18 -0
  69. data/lib/dodopayments/models/product_unarchive_params.rb +18 -0
  70. data/lib/dodopayments/models/product_update_params.rb +124 -0
  71. data/lib/dodopayments/models/products/image_update_params.rb +26 -0
  72. data/lib/dodopayments/models/products/image_update_response.rb +27 -0
  73. data/lib/dodopayments/models/refund.rb +218 -0
  74. data/lib/dodopayments/models/refund_create_params.rb +40 -0
  75. data/lib/dodopayments/models/refund_list_params.rb +71 -0
  76. data/lib/dodopayments/models/refund_retrieve_params.rb +18 -0
  77. data/lib/dodopayments/models/refund_status.rb +15 -0
  78. data/lib/dodopayments/models/subscription.rb +309 -0
  79. data/lib/dodopayments/models/subscription_create_params.rb +106 -0
  80. data/lib/dodopayments/models/subscription_create_response.rb +73 -0
  81. data/lib/dodopayments/models/subscription_list_params.rb +71 -0
  82. data/lib/dodopayments/models/subscription_retrieve_params.rb +18 -0
  83. data/lib/dodopayments/models/subscription_status.rb +18 -0
  84. data/lib/dodopayments/models/subscription_update_params.rb +30 -0
  85. data/lib/dodopayments/models/time_interval.rb +15 -0
  86. data/lib/dodopayments/models/webhook_event.rb +73 -0
  87. data/lib/dodopayments/models/webhook_event_list_params.rb +71 -0
  88. data/lib/dodopayments/models/webhook_event_retrieve_params.rb +18 -0
  89. data/lib/dodopayments/pooled_net_requester.rb +164 -0
  90. data/lib/dodopayments/request_options.rb +110 -0
  91. data/lib/dodopayments/resources/customers/customer_portal.rb +34 -0
  92. data/lib/dodopayments/resources/customers.rb +97 -0
  93. data/lib/dodopayments/resources/discounts.rb +154 -0
  94. data/lib/dodopayments/resources/disputes.rb +59 -0
  95. data/lib/dodopayments/resources/invoices/payments.rb +30 -0
  96. data/lib/dodopayments/resources/invoices.rb +16 -0
  97. data/lib/dodopayments/resources/license_key_instances.rb +71 -0
  98. data/lib/dodopayments/resources/license_keys.rb +82 -0
  99. data/lib/dodopayments/resources/licenses.rb +72 -0
  100. data/lib/dodopayments/resources/misc.rb +26 -0
  101. data/lib/dodopayments/resources/payments.rb +93 -0
  102. data/lib/dodopayments/resources/payouts.rb +33 -0
  103. data/lib/dodopayments/resources/products/images.rb +34 -0
  104. data/lib/dodopayments/resources/products.rb +176 -0
  105. data/lib/dodopayments/resources/refunds.rb +80 -0
  106. data/lib/dodopayments/resources/subscriptions.rb +117 -0
  107. data/lib/dodopayments/resources/webhook_events.rb +57 -0
  108. data/lib/dodopayments/util.rb +717 -0
  109. data/lib/dodopayments/version.rb +5 -0
  110. data/lib/dodopayments.rb +128 -0
  111. data/manifest.yaml +14 -0
  112. data/rbi/lib/dodopayments/base_client.rbi +186 -0
  113. data/rbi/lib/dodopayments/base_model.rbi +606 -0
  114. data/rbi/lib/dodopayments/base_page.rbi +40 -0
  115. data/rbi/lib/dodopayments/client.rbi +117 -0
  116. data/rbi/lib/dodopayments/default_page_number_pagination.rbi +17 -0
  117. data/rbi/lib/dodopayments/errors.rbi +179 -0
  118. data/rbi/lib/dodopayments/extern.rbi +8 -0
  119. data/rbi/lib/dodopayments/models/attach_existing_customer.rbi +23 -0
  120. data/rbi/lib/dodopayments/models/billing_address.rbi +65 -0
  121. data/rbi/lib/dodopayments/models/country_code.rbi +266 -0
  122. data/rbi/lib/dodopayments/models/create_new_customer.rbi +61 -0
  123. data/rbi/lib/dodopayments/models/customer.rbi +85 -0
  124. data/rbi/lib/dodopayments/models/customer_create_params.rbi +60 -0
  125. data/rbi/lib/dodopayments/models/customer_limited_details.rbi +42 -0
  126. data/rbi/lib/dodopayments/models/customer_list_params.rbi +52 -0
  127. data/rbi/lib/dodopayments/models/customer_portal_session.rbi +23 -0
  128. data/rbi/lib/dodopayments/models/customer_request.rbi +15 -0
  129. data/rbi/lib/dodopayments/models/customer_retrieve_params.rbi +21 -0
  130. data/rbi/lib/dodopayments/models/customer_update_params.rbi +50 -0
  131. data/rbi/lib/dodopayments/models/customers/customer_portal_create_params.rbi +37 -0
  132. data/rbi/lib/dodopayments/models/discount.rbi +161 -0
  133. data/rbi/lib/dodopayments/models/discount_create_params.rbi +124 -0
  134. data/rbi/lib/dodopayments/models/discount_delete_params.rbi +21 -0
  135. data/rbi/lib/dodopayments/models/discount_list_params.rbi +52 -0
  136. data/rbi/lib/dodopayments/models/discount_retrieve_params.rbi +21 -0
  137. data/rbi/lib/dodopayments/models/discount_type.rbi +17 -0
  138. data/rbi/lib/dodopayments/models/discount_update_params.rbi +119 -0
  139. data/rbi/lib/dodopayments/models/dispute.rbi +112 -0
  140. data/rbi/lib/dodopayments/models/dispute_list_params.rbi +116 -0
  141. data/rbi/lib/dodopayments/models/dispute_retrieve_params.rbi +21 -0
  142. data/rbi/lib/dodopayments/models/dispute_stage.rbi +19 -0
  143. data/rbi/lib/dodopayments/models/dispute_status.rbi +23 -0
  144. data/rbi/lib/dodopayments/models/intent_status.rbi +27 -0
  145. data/rbi/lib/dodopayments/models/invoices/payment_retrieve_params.rbi +23 -0
  146. data/rbi/lib/dodopayments/models/license_activate_params.rbi +43 -0
  147. data/rbi/lib/dodopayments/models/license_deactivate_params.rbi +50 -0
  148. data/rbi/lib/dodopayments/models/license_key.rbi +170 -0
  149. data/rbi/lib/dodopayments/models/license_key_duration.rbi +31 -0
  150. data/rbi/lib/dodopayments/models/license_key_instance.rbi +68 -0
  151. data/rbi/lib/dodopayments/models/license_key_instance_list_params.rbi +63 -0
  152. data/rbi/lib/dodopayments/models/license_key_instance_retrieve_params.rbi +21 -0
  153. data/rbi/lib/dodopayments/models/license_key_instance_update_params.rbi +35 -0
  154. data/rbi/lib/dodopayments/models/license_key_list_params.rbi +85 -0
  155. data/rbi/lib/dodopayments/models/license_key_retrieve_params.rbi +21 -0
  156. data/rbi/lib/dodopayments/models/license_key_status.rbi +19 -0
  157. data/rbi/lib/dodopayments/models/license_key_update_params.rbi +66 -0
  158. data/rbi/lib/dodopayments/models/license_validate_params.rbi +50 -0
  159. data/rbi/lib/dodopayments/models/license_validate_response.rbi +23 -0
  160. data/rbi/lib/dodopayments/models/misc_list_supported_countries_params.rbi +21 -0
  161. data/rbi/lib/dodopayments/models/misc_list_supported_countries_response.rbi +7 -0
  162. data/rbi/lib/dodopayments/models/one_time_product_cart_item.rbi +43 -0
  163. data/rbi/lib/dodopayments/models/payment.rbi +439 -0
  164. data/rbi/lib/dodopayments/models/payment_create_params.rbi +133 -0
  165. data/rbi/lib/dodopayments/models/payment_create_response.rbi +127 -0
  166. data/rbi/lib/dodopayments/models/payment_list_params.rbi +116 -0
  167. data/rbi/lib/dodopayments/models/payment_list_response.rbi +295 -0
  168. data/rbi/lib/dodopayments/models/payment_retrieve_params.rbi +21 -0
  169. data/rbi/lib/dodopayments/models/payout_list_params.rbi +52 -0
  170. data/rbi/lib/dodopayments/models/payout_list_response.rbi +374 -0
  171. data/rbi/lib/dodopayments/models/price.rbi +603 -0
  172. data/rbi/lib/dodopayments/models/product.rbi +228 -0
  173. data/rbi/lib/dodopayments/models/product_create_params.rbi +162 -0
  174. data/rbi/lib/dodopayments/models/product_delete_params.rbi +21 -0
  175. data/rbi/lib/dodopayments/models/product_list_params.rbi +78 -0
  176. data/rbi/lib/dodopayments/models/product_list_response.rbi +374 -0
  177. data/rbi/lib/dodopayments/models/product_retrieve_params.rbi +21 -0
  178. data/rbi/lib/dodopayments/models/product_unarchive_params.rbi +21 -0
  179. data/rbi/lib/dodopayments/models/product_update_params.rbi +191 -0
  180. data/rbi/lib/dodopayments/models/products/image_update_params.rbi +41 -0
  181. data/rbi/lib/dodopayments/models/products/image_update_response.rbi +33 -0
  182. data/rbi/lib/dodopayments/models/refund.rbi +267 -0
  183. data/rbi/lib/dodopayments/models/refund_create_params.rbi +64 -0
  184. data/rbi/lib/dodopayments/models/refund_list_params.rbi +104 -0
  185. data/rbi/lib/dodopayments/models/refund_retrieve_params.rbi +21 -0
  186. data/rbi/lib/dodopayments/models/refund_status.rbi +20 -0
  187. data/rbi/lib/dodopayments/models/subscription.rbi +397 -0
  188. data/rbi/lib/dodopayments/models/subscription_create_params.rbi +154 -0
  189. data/rbi/lib/dodopayments/models/subscription_create_response.rbi +113 -0
  190. data/rbi/lib/dodopayments/models/subscription_list_params.rbi +104 -0
  191. data/rbi/lib/dodopayments/models/subscription_retrieve_params.rbi +21 -0
  192. data/rbi/lib/dodopayments/models/subscription_status.rbi +23 -0
  193. data/rbi/lib/dodopayments/models/subscription_update_params.rbi +50 -0
  194. data/rbi/lib/dodopayments/models/time_interval.rbi +20 -0
  195. data/rbi/lib/dodopayments/models/webhook_event.rbi +114 -0
  196. data/rbi/lib/dodopayments/models/webhook_event_list_params.rbi +104 -0
  197. data/rbi/lib/dodopayments/models/webhook_event_retrieve_params.rbi +21 -0
  198. data/rbi/lib/dodopayments/pooled_net_requester.rbi +47 -0
  199. data/rbi/lib/dodopayments/request_options.rbi +109 -0
  200. data/rbi/lib/dodopayments/resources/customers/customer_portal.rbi +30 -0
  201. data/rbi/lib/dodopayments/resources/customers.rbi +76 -0
  202. data/rbi/lib/dodopayments/resources/discounts.rbi +139 -0
  203. data/rbi/lib/dodopayments/resources/disputes.rbi +57 -0
  204. data/rbi/lib/dodopayments/resources/invoices/payments.rbi +23 -0
  205. data/rbi/lib/dodopayments/resources/invoices.rbi +15 -0
  206. data/rbi/lib/dodopayments/resources/license_key_instances.rbi +61 -0
  207. data/rbi/lib/dodopayments/resources/license_keys.rbi +77 -0
  208. data/rbi/lib/dodopayments/resources/licenses.rbi +44 -0
  209. data/rbi/lib/dodopayments/resources/misc.rbi +18 -0
  210. data/rbi/lib/dodopayments/resources/payments.rbi +91 -0
  211. data/rbi/lib/dodopayments/resources/payouts.rbi +28 -0
  212. data/rbi/lib/dodopayments/resources/products/images.rbi +29 -0
  213. data/rbi/lib/dodopayments/resources/products.rbi +164 -0
  214. data/rbi/lib/dodopayments/resources/refunds.rbi +75 -0
  215. data/rbi/lib/dodopayments/resources/subscriptions.rbi +112 -0
  216. data/rbi/lib/dodopayments/resources/webhook_events.rbi +50 -0
  217. data/rbi/lib/dodopayments/util.rbi +270 -0
  218. data/rbi/lib/dodopayments/version.rbi +5 -0
  219. data/sig/dodopayments/base_client.rbs +103 -0
  220. data/sig/dodopayments/base_model.rbs +246 -0
  221. data/sig/dodopayments/base_page.rbs +20 -0
  222. data/sig/dodopayments/client.rbs +58 -0
  223. data/sig/dodopayments/default_page_number_pagination.rbs +7 -0
  224. data/sig/dodopayments/errors.rbs +99 -0
  225. data/sig/dodopayments/extern.rbs +4 -0
  226. data/sig/dodopayments/models/attach_existing_customer.rbs +18 -0
  227. data/sig/dodopayments/models/billing_address.rbs +38 -0
  228. data/sig/dodopayments/models/country_code.rbs +508 -0
  229. data/sig/dodopayments/models/create_new_customer.rbs +37 -0
  230. data/sig/dodopayments/models/customer.rbs +42 -0
  231. data/sig/dodopayments/models/customer_create_params.rbs +32 -0
  232. data/sig/dodopayments/models/customer_limited_details.rbs +23 -0
  233. data/sig/dodopayments/models/customer_list_params.rbs +29 -0
  234. data/sig/dodopayments/models/customer_portal_session.rbs +18 -0
  235. data/sig/dodopayments/models/customer_request.rbs +11 -0
  236. data/sig/dodopayments/models/customer_retrieve_params.rbs +19 -0
  237. data/sig/dodopayments/models/customer_update_params.rbs +29 -0
  238. data/sig/dodopayments/models/customers/customer_portal_create_params.rbs +27 -0
  239. data/sig/dodopayments/models/discount.rbs +62 -0
  240. data/sig/dodopayments/models/discount_create_params.rbs +52 -0
  241. data/sig/dodopayments/models/discount_delete_params.rbs +19 -0
  242. data/sig/dodopayments/models/discount_list_params.rbs +29 -0
  243. data/sig/dodopayments/models/discount_retrieve_params.rbs +19 -0
  244. data/sig/dodopayments/models/discount_type.rbs +11 -0
  245. data/sig/dodopayments/models/discount_update_params.rbs +52 -0
  246. data/sig/dodopayments/models/dispute.rbs +50 -0
  247. data/sig/dodopayments/models/dispute_list_params.rbs +52 -0
  248. data/sig/dodopayments/models/dispute_retrieve_params.rbs +19 -0
  249. data/sig/dodopayments/models/dispute_stage.rbs +13 -0
  250. data/sig/dodopayments/models/dispute_status.rbs +24 -0
  251. data/sig/dodopayments/models/intent_status.rbs +32 -0
  252. data/sig/dodopayments/models/invoices/payment_retrieve_params.rbs +21 -0
  253. data/sig/dodopayments/models/license_activate_params.rbs +28 -0
  254. data/sig/dodopayments/models/license_deactivate_params.rbs +29 -0
  255. data/sig/dodopayments/models/license_key.rbs +66 -0
  256. data/sig/dodopayments/models/license_key_duration.rbs +21 -0
  257. data/sig/dodopayments/models/license_key_instance.rbs +39 -0
  258. data/sig/dodopayments/models/license_key_instance_list_params.rbs +32 -0
  259. data/sig/dodopayments/models/license_key_instance_retrieve_params.rbs +20 -0
  260. data/sig/dodopayments/models/license_key_instance_update_params.rbs +22 -0
  261. data/sig/dodopayments/models/license_key_list_params.rbs +44 -0
  262. data/sig/dodopayments/models/license_key_retrieve_params.rbs +19 -0
  263. data/sig/dodopayments/models/license_key_status.rbs +13 -0
  264. data/sig/dodopayments/models/license_key_update_params.rbs +32 -0
  265. data/sig/dodopayments/models/license_validate_params.rbs +29 -0
  266. data/sig/dodopayments/models/license_validate_response.rbs +18 -0
  267. data/sig/dodopayments/models/misc_list_supported_countries_params.rbs +20 -0
  268. data/sig/dodopayments/models/misc_list_supported_countries_response.rbs +8 -0
  269. data/sig/dodopayments/models/one_time_product_cart_item.rbs +23 -0
  270. data/sig/dodopayments/models/payment.rbs +408 -0
  271. data/sig/dodopayments/models/payment_create_params.rbs +58 -0
  272. data/sig/dodopayments/models/payment_create_response.rbs +51 -0
  273. data/sig/dodopayments/models/payment_list_params.rbs +52 -0
  274. data/sig/dodopayments/models/payment_list_response.rbs +356 -0
  275. data/sig/dodopayments/models/payment_retrieve_params.rbs +19 -0
  276. data/sig/dodopayments/models/payout_list_params.rbs +29 -0
  277. data/sig/dodopayments/models/payout_list_response.rbs +386 -0
  278. data/sig/dodopayments/models/price.rbs +717 -0
  279. data/sig/dodopayments/models/product.rbs +89 -0
  280. data/sig/dodopayments/models/product_create_params.rbs +71 -0
  281. data/sig/dodopayments/models/product_delete_params.rbs +19 -0
  282. data/sig/dodopayments/models/product_list_params.rbs +42 -0
  283. data/sig/dodopayments/models/product_list_response.rbs +379 -0
  284. data/sig/dodopayments/models/product_retrieve_params.rbs +19 -0
  285. data/sig/dodopayments/models/product_unarchive_params.rbs +19 -0
  286. data/sig/dodopayments/models/product_update_params.rbs +75 -0
  287. data/sig/dodopayments/models/products/image_update_params.rbs +27 -0
  288. data/sig/dodopayments/models/products/image_update_response.rbs +22 -0
  289. data/sig/dodopayments/models/refund.rbs +345 -0
  290. data/sig/dodopayments/models/refund_create_params.rbs +32 -0
  291. data/sig/dodopayments/models/refund_list_params.rbs +48 -0
  292. data/sig/dodopayments/models/refund_retrieve_params.rbs +19 -0
  293. data/sig/dodopayments/models/refund_status.rbs +14 -0
  294. data/sig/dodopayments/models/subscription.rbs +387 -0
  295. data/sig/dodopayments/models/subscription_create_params.rbs +66 -0
  296. data/sig/dodopayments/models/subscription_create_response.rbs +47 -0
  297. data/sig/dodopayments/models/subscription_list_params.rbs +48 -0
  298. data/sig/dodopayments/models/subscription_retrieve_params.rbs +19 -0
  299. data/sig/dodopayments/models/subscription_status.rbs +18 -0
  300. data/sig/dodopayments/models/subscription_update_params.rbs +32 -0
  301. data/sig/dodopayments/models/time_interval.rbs +14 -0
  302. data/sig/dodopayments/models/webhook_event.rbs +50 -0
  303. data/sig/dodopayments/models/webhook_event_list_params.rbs +48 -0
  304. data/sig/dodopayments/models/webhook_event_retrieve_params.rbs +19 -0
  305. data/sig/dodopayments/pooled_net_requester.rbs +30 -0
  306. data/sig/dodopayments/request_options.rbs +46 -0
  307. data/sig/dodopayments/resources/customers/customer_portal.rbs +21 -0
  308. data/sig/dodopayments/resources/customers.rbs +55 -0
  309. data/sig/dodopayments/resources/discounts.rbs +73 -0
  310. data/sig/dodopayments/resources/disputes.rbs +33 -0
  311. data/sig/dodopayments/resources/invoices/payments.rbs +20 -0
  312. data/sig/dodopayments/resources/invoices.rbs +9 -0
  313. data/sig/dodopayments/resources/license_key_instances.rbs +42 -0
  314. data/sig/dodopayments/resources/license_keys.rbs +46 -0
  315. data/sig/dodopayments/resources/licenses.rbs +40 -0
  316. data/sig/dodopayments/resources/misc.rbs +16 -0
  317. data/sig/dodopayments/resources/payments.rbs +49 -0
  318. data/sig/dodopayments/resources/payouts.rbs +17 -0
  319. data/sig/dodopayments/resources/products/images.rbs +21 -0
  320. data/sig/dodopayments/resources/products.rbs +86 -0
  321. data/sig/dodopayments/resources/refunds.rbs +43 -0
  322. data/sig/dodopayments/resources/subscriptions.rbs +65 -0
  323. data/sig/dodopayments/resources/webhook_events.rbs +33 -0
  324. data/sig/dodopayments/util.rbs +136 -0
  325. data/sig/dodopayments/version.rbs +3 -0
  326. metadata +383 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ea1e686b49f8f9cdfb6fa371f4b38a2e3a211677800cf3325b73d6b33a4a6da8
4
+ data.tar.gz: 97eb659e36694f818538d4964cc68cfe60470718e966eb0491134ffbb41ad4e4
5
+ SHA512:
6
+ metadata.gz: dd2dc01f10510dcd353e62530d6749e6d385ae09d20d39f8dea998cc4bfd09990e7e3bef8bc658be5a5f8f17d0d48f92e58c8379bebc78a4aa7651a85ad9aeba
7
+ data.tar.gz: d42e173c8bc85cf90c9d60dca81b2d71f8f718be53d75a13a648343ead268f4265a3c39b2042b5e8573f4112a51cf4ae4bb76d1aa7c79600d7f312c41b1916d5
data/README.md ADDED
@@ -0,0 +1,154 @@
1
+ # Dodo Payments Ruby API library
2
+
3
+ The Dodo Payments Ruby library provides convenient access to the Dodo Payments REST API from any Ruby 3.0.0+ application.
4
+
5
+ It is generated with [Stainless](https://www.stainless.com/).
6
+
7
+ ## Documentation
8
+
9
+ Documentation for the most recent release of this gem can be found [on RubyDoc](https://gemdocs.org/gems/dodopayments/latest).
10
+
11
+ The underlying REST API documentation can be found on [docs.dodopayments.com](https://docs.dodopayments.com).
12
+
13
+ ## Installation
14
+
15
+ To use this gem during the beta, install directly from GitHub with Bundler by adding the following to your application's `Gemfile`:
16
+
17
+ ```ruby
18
+ gem "dodopayments", git: "https://github.com/dodopayments/dodopayments-ruby", branch: "main"
19
+ ```
20
+
21
+ To fetch an initial copy of the gem:
22
+
23
+ ```sh
24
+ bundle install
25
+ ```
26
+
27
+ To update the version used by your application when updates are pushed to GitHub:
28
+
29
+ ```sh
30
+ bundle update dodopayments
31
+ ```
32
+
33
+ ## Usage
34
+
35
+ ```ruby
36
+ require "bundler/setup"
37
+ require "dodopayments"
38
+
39
+ dodo_payments = Dodopayments::Client.new(
40
+ bearer_token: "My Bearer Token", # defaults to ENV["DODO_PAYMENTS_API_KEY"]
41
+ environment: "test_mode" # defaults to "live_mode"
42
+ )
43
+
44
+ payment = dodo_payments.payments.create
45
+
46
+ puts(payment.payment_id)
47
+ ```
48
+
49
+ ### Pagination
50
+
51
+ List methods in the Dodo Payments API are paginated.
52
+
53
+ This library provides auto-paginating iterators with each list response, so you do not have to request successive pages manually:
54
+
55
+ ```ruby
56
+ page = dodo_payments.payments.list
57
+
58
+ # Fetch single item from page.
59
+ payment = page.items[0]
60
+ puts(payment.payment_id)
61
+
62
+ # Automatically fetches more pages as needed.
63
+ page.auto_paging_each do |payment|
64
+ puts(payment.payment_id)
65
+ end
66
+ ```
67
+
68
+ ### Errors
69
+
70
+ 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::Error` will be thrown:
71
+
72
+ ```ruby
73
+ begin
74
+ payment = dodo_payments.payments.create
75
+ rescue Dodopayments::Error => e
76
+ puts(e.status) # 400
77
+ end
78
+ ```
79
+
80
+ Error codes are as followed:
81
+
82
+ | Cause | Error Type |
83
+ | ---------------- | -------------------------- |
84
+ | HTTP 400 | `BadRequestError` |
85
+ | HTTP 401 | `AuthenticationError` |
86
+ | HTTP 403 | `PermissionDeniedError` |
87
+ | HTTP 404 | `NotFoundError` |
88
+ | HTTP 409 | `ConflictError` |
89
+ | HTTP 422 | `UnprocessableEntityError` |
90
+ | HTTP 429 | `RateLimitError` |
91
+ | HTTP >=500 | `InternalServerError` |
92
+ | Other HTTP error | `APIStatusError` |
93
+ | Timeout | `APITimeoutError` |
94
+ | Network error | `APIConnectionError` |
95
+
96
+ ### Retries
97
+
98
+ Certain errors will be automatically retried 2 times by default, with a short exponential backoff.
99
+
100
+ Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict, 429 Rate Limit, >=500 Internal errors, and timeouts will all be retried by default.
101
+
102
+ You can use the `max_retries` option to configure or disable this:
103
+
104
+ ```ruby
105
+ # Configure the default for all requests:
106
+ dodo_payments = Dodopayments::Client.new(
107
+ max_retries: 0 # default is 2
108
+ )
109
+
110
+ # Or, configure per-request:
111
+ dodo_payments.payments.create(request_options: {max_retries: 5})
112
+ ```
113
+
114
+ ### Timeouts
115
+
116
+ By default, requests will time out after 60 seconds.
117
+
118
+ 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.
119
+
120
+ You can use the `timeout` option to configure or disable this:
121
+
122
+ ```ruby
123
+ # Configure the default for all requests:
124
+ dodo_payments = Dodopayments::Client.new(
125
+ timeout: nil # default is 60
126
+ )
127
+
128
+ # Or, configure per-request:
129
+ dodo_payments.payments.create(request_options: {timeout: 5})
130
+ ```
131
+
132
+ ## Sorbet Support
133
+
134
+ This library is written with [Sorbet type definitions](https://sorbet.org/docs/rbi). However, there is no runtime dependency on the `sorbet-runtime`.
135
+
136
+ What this means is that while you can use Sorbet to type check your code statically, and benefit from the [Sorbet Language Server](https://sorbet.org/docs/lsp) in your editor, there is no runtime type checking and execution overhead from Sorbet itself.
137
+
138
+ Due to limitations with the Sorbet type system, where a method otherwise can take an instance of `Dodopayments::BaseModel` class, you will need to use the `**` splat operator to pass the arguments:
139
+
140
+ ```ruby
141
+ model = PaymentCreateParams.new
142
+
143
+ dodo_payments.payments.create(**model)
144
+ ```
145
+
146
+ ## Versioning
147
+
148
+ This package follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions. As the library is in initial development and has a major version of `0`, APIs may change at any time.
149
+
150
+ This package considers improvements to the (non-runtime) `*.rbi` and `*.rbs` type definitions to be non-breaking changes.
151
+
152
+ ## Requirements
153
+
154
+ Ruby 3.0.0 or higher.
@@ -0,0 +1,453 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dodopayments
4
+ # @api private
5
+ #
6
+ # @abstract
7
+ class BaseClient
8
+ # from whatwg fetch spec
9
+ MAX_REDIRECTS = 20
10
+
11
+ # rubocop:disable Style/MutableConstant
12
+ PLATFORM_HEADERS = {
13
+ "x-stainless-arch" => Dodopayments::Util.arch,
14
+ "x-stainless-lang" => "ruby",
15
+ "x-stainless-os" => Dodopayments::Util.os,
16
+ "x-stainless-package-version" => Dodopayments::VERSION,
17
+ "x-stainless-runtime" => ::RUBY_ENGINE,
18
+ "x-stainless-runtime-version" => ::RUBY_ENGINE_VERSION
19
+ }
20
+ # rubocop:enable Style/MutableConstant
21
+
22
+ class << self
23
+ # @api private
24
+ #
25
+ # @param req [Hash{Symbol=>Object}]
26
+ #
27
+ # @raise [ArgumentError]
28
+ def validate!(req)
29
+ keys = [:method, :path, :query, :headers, :body, :unwrap, :page, :stream, :model, :options]
30
+ case req
31
+ in Hash
32
+ req.each_key do |k|
33
+ unless keys.include?(k)
34
+ raise ArgumentError.new("Request `req` keys must be one of #{keys}, got #{k.inspect}")
35
+ end
36
+ end
37
+ else
38
+ raise ArgumentError.new("Request `req` must be a Hash or RequestOptions, got #{req.inspect}")
39
+ end
40
+ end
41
+
42
+ # @api private
43
+ #
44
+ # @param status [Integer]
45
+ # @param headers [Hash{String=>String}, Net::HTTPHeader]
46
+ #
47
+ # @return [Boolean]
48
+ def should_retry?(status, headers:)
49
+ coerced = Dodopayments::Util.coerce_boolean(headers["x-should-retry"])
50
+ case [coerced, status]
51
+ in [true | false, _]
52
+ coerced
53
+ in [_, 408 | 409 | 429 | (500..)]
54
+ # retry on:
55
+ # 408: timeouts
56
+ # 409: locks
57
+ # 429: rate limits
58
+ # 500+: unknown errors
59
+ true
60
+ else
61
+ false
62
+ end
63
+ end
64
+
65
+ # @api private
66
+ #
67
+ # @param request [Hash{Symbol=>Object}] .
68
+ #
69
+ # @option request [Symbol] :method
70
+ #
71
+ # @option request [URI::Generic] :url
72
+ #
73
+ # @option request [Hash{String=>String}] :headers
74
+ #
75
+ # @option request [Object] :body
76
+ #
77
+ # @option request [Integer] :max_retries
78
+ #
79
+ # @option request [Float] :timeout
80
+ #
81
+ # @param status [Integer]
82
+ #
83
+ # @param response_headers [Hash{String=>String}, Net::HTTPHeader]
84
+ #
85
+ # @return [Hash{Symbol=>Object}]
86
+ def follow_redirect(request, status:, response_headers:)
87
+ method, url, headers = request.fetch_values(:method, :url, :headers)
88
+ location =
89
+ Kernel.then do
90
+ URI.join(url, response_headers["location"])
91
+ rescue ArgumentError
92
+ message = "Server responded with status #{status} but no valid location header."
93
+ raise Dodopayments::APIConnectionError.new(url: url, message: message)
94
+ end
95
+
96
+ request = {**request, url: location}
97
+
98
+ case [url.scheme, location.scheme]
99
+ in ["https", "http"]
100
+ message = "Tried to redirect to a insecure URL"
101
+ raise Dodopayments::APIConnectionError.new(url: url, message: message)
102
+ else
103
+ nil
104
+ end
105
+
106
+ # from whatwg fetch spec
107
+ case [status, method]
108
+ in [301 | 302, :post] | [303, _]
109
+ drop = %w[content-encoding content-language content-length content-location content-type]
110
+ request = {
111
+ **request,
112
+ method: method == :head ? :head : :get,
113
+ headers: headers.except(*drop),
114
+ body: nil
115
+ }
116
+ else
117
+ end
118
+
119
+ # from undici
120
+ if Dodopayments::Util.uri_origin(url) != Dodopayments::Util.uri_origin(location)
121
+ drop = %w[authorization cookie host proxy-authorization]
122
+ request = {**request, headers: request.fetch(:headers).except(*drop)}
123
+ end
124
+
125
+ request
126
+ end
127
+ end
128
+
129
+ # @api private
130
+ # @return [Dodopayments::PooledNetRequester]
131
+ attr_accessor :requester
132
+
133
+ # @api private
134
+ #
135
+ # @param base_url [String]
136
+ # @param timeout [Float]
137
+ # @param max_retries [Integer]
138
+ # @param initial_retry_delay [Float]
139
+ # @param max_retry_delay [Float]
140
+ # @param headers [Hash{String=>String, Integer, Array<String, Integer, nil>, nil}]
141
+ # @param idempotency_header [String, nil]
142
+ def initialize(
143
+ base_url:,
144
+ timeout: 0.0,
145
+ max_retries: 0,
146
+ initial_retry_delay: 0.0,
147
+ max_retry_delay: 0.0,
148
+ headers: {},
149
+ idempotency_header: nil
150
+ )
151
+ @requester = Dodopayments::PooledNetRequester.new
152
+ @headers = Dodopayments::Util.normalized_headers(
153
+ self.class::PLATFORM_HEADERS,
154
+ {
155
+ "accept" => "application/json",
156
+ "content-type" => "application/json"
157
+ },
158
+ headers
159
+ )
160
+ @base_url = Dodopayments::Util.parse_uri(base_url)
161
+ @idempotency_header = idempotency_header&.to_s&.downcase
162
+ @max_retries = max_retries
163
+ @timeout = timeout
164
+ @initial_retry_delay = initial_retry_delay
165
+ @max_retry_delay = max_retry_delay
166
+ end
167
+
168
+ # @api private
169
+ #
170
+ # @return [Hash{String=>String}]
171
+ private def auth_headers = {}
172
+
173
+ # @api private
174
+ #
175
+ # @return [String]
176
+ private def generate_idempotency_key = "stainless-ruby-retry-#{SecureRandom.uuid}"
177
+
178
+ # @api private
179
+ #
180
+ # @param req [Hash{Symbol=>Object}] .
181
+ #
182
+ # @option req [Symbol] :method
183
+ #
184
+ # @option req [String, Array<String>] :path
185
+ #
186
+ # @option req [Hash{String=>Array<String>, String, nil}, nil] :query
187
+ #
188
+ # @option req [Hash{String=>String, Integer, Array<String, Integer, nil>, nil}, nil] :headers
189
+ #
190
+ # @option req [Object, nil] :body
191
+ #
192
+ # @option req [Symbol, nil] :unwrap
193
+ #
194
+ # @option req [Class, nil] :page
195
+ #
196
+ # @option req [Class, nil] :stream
197
+ #
198
+ # @option req [Dodopayments::Converter, Class, nil] :model
199
+ #
200
+ # @param opts [Hash{Symbol=>Object}] .
201
+ #
202
+ # @option opts [String, nil] :idempotency_key
203
+ #
204
+ # @option opts [Hash{String=>Array<String>, String, nil}, nil] :extra_query
205
+ #
206
+ # @option opts [Hash{String=>String, nil}, nil] :extra_headers
207
+ #
208
+ # @option opts [Hash{Symbol=>Object}, nil] :extra_body
209
+ #
210
+ # @option opts [Integer, nil] :max_retries
211
+ #
212
+ # @option opts [Float, nil] :timeout
213
+ #
214
+ # @return [Hash{Symbol=>Object}]
215
+ private def build_request(req, opts)
216
+ method, uninterpolated_path = req.fetch_values(:method, :path)
217
+
218
+ path = Dodopayments::Util.interpolate_path(uninterpolated_path)
219
+
220
+ query = Dodopayments::Util.deep_merge(req[:query].to_h, opts[:extra_query].to_h)
221
+
222
+ headers = Dodopayments::Util.normalized_headers(
223
+ @headers,
224
+ auth_headers,
225
+ req[:headers].to_h,
226
+ opts[:extra_headers].to_h
227
+ )
228
+
229
+ if @idempotency_header &&
230
+ !headers.key?(@idempotency_header) &&
231
+ !Net::HTTP::IDEMPOTENT_METHODS_.include?(method.to_s.upcase)
232
+ headers[@idempotency_header] = opts.fetch(:idempotency_key) { generate_idempotency_key }
233
+ end
234
+
235
+ unless headers.key?("x-stainless-retry-count")
236
+ headers["x-stainless-retry-count"] = "0"
237
+ end
238
+
239
+ timeout = opts.fetch(:timeout, @timeout).to_f.clamp((0..))
240
+ unless headers.key?("x-stainless-timeout") || timeout.zero?
241
+ headers["x-stainless-timeout"] = timeout.to_s
242
+ end
243
+
244
+ headers.reject! { |_, v| v.to_s.empty? }
245
+
246
+ body =
247
+ case method
248
+ in :get | :head | :options | :trace
249
+ nil
250
+ else
251
+ Dodopayments::Util.deep_merge(*[req[:body], opts[:extra_body]].compact)
252
+ end
253
+
254
+ headers, encoded = Dodopayments::Util.encode_content(headers, body)
255
+ {
256
+ method: method,
257
+ url: Dodopayments::Util.join_parsed_uri(@base_url, {**req, path: path, query: query}),
258
+ headers: headers,
259
+ body: encoded,
260
+ max_retries: opts.fetch(:max_retries, @max_retries),
261
+ timeout: timeout
262
+ }
263
+ end
264
+
265
+ # @api private
266
+ #
267
+ # @param headers [Hash{String=>String}]
268
+ # @param retry_count [Integer]
269
+ #
270
+ # @return [Float]
271
+ private def retry_delay(headers, retry_count:)
272
+ # Non-standard extension
273
+ span = Float(headers["retry-after-ms"], exception: false)&.then { _1 / 1000 }
274
+ return span if span
275
+
276
+ retry_header = headers["retry-after"]
277
+ return span if (span = Float(retry_header, exception: false))
278
+
279
+ span = retry_header&.then do
280
+ Time.httpdate(_1) - Time.now
281
+ rescue ArgumentError
282
+ nil
283
+ end
284
+ return span if span
285
+
286
+ scale = retry_count**2
287
+ jitter = 1 - (0.25 * rand)
288
+ (@initial_retry_delay * scale * jitter).clamp(0, @max_retry_delay)
289
+ end
290
+
291
+ # @api private
292
+ #
293
+ # @param request [Hash{Symbol=>Object}] .
294
+ #
295
+ # @option request [Symbol] :method
296
+ #
297
+ # @option request [URI::Generic] :url
298
+ #
299
+ # @option request [Hash{String=>String}] :headers
300
+ #
301
+ # @option request [Object] :body
302
+ #
303
+ # @option request [Integer] :max_retries
304
+ #
305
+ # @option request [Float] :timeout
306
+ #
307
+ # @param redirect_count [Integer]
308
+ #
309
+ # @param retry_count [Integer]
310
+ #
311
+ # @param send_retry_header [Boolean]
312
+ #
313
+ # @raise [Dodopayments::APIError]
314
+ # @return [Array(Integer, Net::HTTPResponse, Enumerable)]
315
+ private def send_request(request, redirect_count:, retry_count:, send_retry_header:)
316
+ url, headers, max_retries, timeout = request.fetch_values(:url, :headers, :max_retries, :timeout)
317
+ input = {**request.except(:timeout), deadline: Dodopayments::Util.monotonic_secs + timeout}
318
+
319
+ if send_retry_header
320
+ headers["x-stainless-retry-count"] = retry_count.to_s
321
+ end
322
+
323
+ begin
324
+ response, stream = @requester.execute(input)
325
+ status = Integer(response.code)
326
+ rescue Dodopayments::APIConnectionError => e
327
+ status = e
328
+ end
329
+
330
+ # normally we want to drain the response body and reuse the HTTP session by clearing the socket buffers
331
+ # unless we hit a server error
332
+ srv_fault = (500...).include?(status)
333
+
334
+ case status
335
+ in ..299
336
+ [status, response, stream]
337
+ in 300..399 if redirect_count >= self.class::MAX_REDIRECTS
338
+ message = "Failed to complete the request within #{self.class::MAX_REDIRECTS} redirects."
339
+
340
+ stream.each { next }
341
+ raise Dodopayments::APIConnectionError.new(url: url, message: message)
342
+ in 300..399
343
+ request = self.class.follow_redirect(request, status: status, response_headers: response)
344
+
345
+ stream.each { next }
346
+ send_request(
347
+ request,
348
+ redirect_count: redirect_count + 1,
349
+ retry_count: retry_count,
350
+ send_retry_header: send_retry_header
351
+ )
352
+ in Dodopayments::APIConnectionError if retry_count >= max_retries
353
+ raise status
354
+ in (400..) if retry_count >= max_retries || !self.class.should_retry?(status, headers: response)
355
+ decoded = Dodopayments::Util.decode_content(response, stream: stream, suppress_error: true)
356
+
357
+ if srv_fault
358
+ Dodopayments::Util.close_fused!(stream)
359
+ else
360
+ stream.each { next }
361
+ end
362
+
363
+ raise Dodopayments::APIStatusError.for(
364
+ url: url,
365
+ status: status,
366
+ body: decoded,
367
+ request: nil,
368
+ response: response
369
+ )
370
+ in (400..) | Dodopayments::APIConnectionError
371
+ delay = retry_delay(response, retry_count: retry_count)
372
+
373
+ if srv_fault
374
+ Dodopayments::Util.close_fused!(stream)
375
+ else
376
+ stream&.each { next }
377
+ end
378
+ sleep(delay)
379
+
380
+ send_request(
381
+ request,
382
+ redirect_count: redirect_count,
383
+ retry_count: retry_count + 1,
384
+ send_retry_header: send_retry_header
385
+ )
386
+ end
387
+ end
388
+
389
+ # Execute the request specified by `req`. This is the method that all resource
390
+ # methods call into.
391
+ #
392
+ # @param req [Hash{Symbol=>Object}] .
393
+ #
394
+ # @option req [Symbol] :method
395
+ #
396
+ # @option req [String, Array<String>] :path
397
+ #
398
+ # @option req [Hash{String=>Array<String>, String, nil}, nil] :query
399
+ #
400
+ # @option req [Hash{String=>String, Integer, Array<String, Integer, nil>, nil}, nil] :headers
401
+ #
402
+ # @option req [Object, nil] :body
403
+ #
404
+ # @option req [Symbol, nil] :unwrap
405
+ #
406
+ # @option req [Class, nil] :page
407
+ #
408
+ # @option req [Class, nil] :stream
409
+ #
410
+ # @option req [Dodopayments::Converter, Class, nil] :model
411
+ #
412
+ # @option req [Dodopayments::RequestOptions, Hash{Symbol=>Object}, nil] :options
413
+ #
414
+ # @raise [Dodopayments::APIError]
415
+ # @return [Object]
416
+ def request(req)
417
+ self.class.validate!(req)
418
+ model = req.fetch(:model) { Dodopayments::Unknown }
419
+ opts = req[:options].to_h
420
+ Dodopayments::RequestOptions.validate!(opts)
421
+ request = build_request(req.except(:options), opts)
422
+ url = request.fetch(:url)
423
+
424
+ # Don't send the current retry count in the headers if the caller modified the header defaults.
425
+ send_retry_header = request.fetch(:headers)["x-stainless-retry-count"] == "0"
426
+ status, response, stream = send_request(
427
+ request,
428
+ redirect_count: 0,
429
+ retry_count: 0,
430
+ send_retry_header: send_retry_header
431
+ )
432
+
433
+ decoded = Dodopayments::Util.decode_content(response, stream: stream)
434
+ case req
435
+ in { stream: Class => st }
436
+ st.new(model: model, url: url, status: status, response: response, messages: decoded)
437
+ in { page: Class => page }
438
+ page.new(client: self, req: req, headers: response, page_data: decoded)
439
+ else
440
+ unwrapped = Dodopayments::Util.dig(decoded, req[:unwrap])
441
+ Dodopayments::Converter.coerce(model, unwrapped)
442
+ end
443
+ end
444
+
445
+ # @return [String]
446
+ def inspect
447
+ # rubocop:disable Layout/LineLength
448
+ base_url = Dodopayments::Util.unparse_uri(@base_url)
449
+ "#<#{self.class.name}:0x#{object_id.to_s(16)} base_url=#{base_url} max_retries=#{@max_retries} timeout=#{@timeout}>"
450
+ # rubocop:enable Layout/LineLength
451
+ end
452
+ end
453
+ end