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
@@ -0,0 +1,717 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dodopayments
4
+ # rubocop:disable Metrics/ModuleLength
5
+
6
+ # @api private
7
+ module Util
8
+ # @api private
9
+ #
10
+ # @return [Float]
11
+ def self.monotonic_secs = Process.clock_gettime(Process::CLOCK_MONOTONIC)
12
+
13
+ class << self
14
+ # @api private
15
+ #
16
+ # @return [String]
17
+ def arch
18
+ case (arch = RbConfig::CONFIG["arch"])&.downcase
19
+ in nil
20
+ "unknown"
21
+ in /aarch64|arm64/
22
+ "arm64"
23
+ in /x86_64/
24
+ "x64"
25
+ in /arm/
26
+ "arm"
27
+ else
28
+ "other:#{arch}"
29
+ end
30
+ end
31
+
32
+ # @api private
33
+ #
34
+ # @return [String]
35
+ def os
36
+ case (host = RbConfig::CONFIG["host_os"])&.downcase
37
+ in nil
38
+ "Unknown"
39
+ in /linux/
40
+ "Linux"
41
+ in /darwin/
42
+ "MacOS"
43
+ in /freebsd/
44
+ "FreeBSD"
45
+ in /openbsd/
46
+ "OpenBSD"
47
+ in /mswin|mingw|cygwin|ucrt/
48
+ "Windows"
49
+ else
50
+ "Other:#{host}"
51
+ end
52
+ end
53
+ end
54
+
55
+ class << self
56
+ # @api private
57
+ #
58
+ # @param input [Object]
59
+ #
60
+ # @return [Boolean, Object]
61
+ def primitive?(input)
62
+ case input
63
+ in true | false | Integer | Float | Symbol | String
64
+ true
65
+ else
66
+ false
67
+ end
68
+ end
69
+
70
+ # @api private
71
+ #
72
+ # @param input [Object]
73
+ #
74
+ # @return [Boolean, Object]
75
+ def coerce_boolean(input)
76
+ case input.is_a?(String) ? input.downcase : input
77
+ in Numeric
78
+ !input.zero?
79
+ in "true"
80
+ true
81
+ in "false"
82
+ false
83
+ else
84
+ input
85
+ end
86
+ end
87
+
88
+ # @api private
89
+ #
90
+ # @param input [Object]
91
+ #
92
+ # @raise [ArgumentError]
93
+ # @return [Boolean, nil]
94
+ def coerce_boolean!(input)
95
+ case coerce_boolean(input)
96
+ in true | false | nil => coerced
97
+ coerced
98
+ else
99
+ raise ArgumentError.new("Unable to coerce #{input.inspect} into boolean value")
100
+ end
101
+ end
102
+
103
+ # @api private
104
+ #
105
+ # @param input [Object]
106
+ #
107
+ # @return [Integer, Object]
108
+ def coerce_integer(input)
109
+ case input
110
+ in true
111
+ 1
112
+ in false
113
+ 0
114
+ else
115
+ Integer(input, exception: false) || input
116
+ end
117
+ end
118
+
119
+ # @api private
120
+ #
121
+ # @param input [Object]
122
+ #
123
+ # @return [Float, Object]
124
+ def coerce_float(input)
125
+ case input
126
+ in true
127
+ 1.0
128
+ in false
129
+ 0.0
130
+ else
131
+ Float(input, exception: false) || input
132
+ end
133
+ end
134
+
135
+ # @api private
136
+ #
137
+ # @param input [Object]
138
+ #
139
+ # @return [Hash{Object=>Object}, Object]
140
+ def coerce_hash(input)
141
+ case input
142
+ in NilClass | Array | Set | Enumerator
143
+ input
144
+ else
145
+ input.respond_to?(:to_h) ? input.to_h : input
146
+ end
147
+ end
148
+ end
149
+
150
+ # Use this to indicate that a value should be explicitly removed from a data
151
+ # structure when using `Dodopayments::Util.deep_merge`.
152
+ #
153
+ # e.g. merging `{a: 1}` and `{a: OMIT}` should produce `{}`, where merging
154
+ # `{a: 1}` and `{}` would produce `{a: 1}`.
155
+ OMIT = Object.new.freeze
156
+
157
+ class << self
158
+ # @api private
159
+ #
160
+ # @param lhs [Object]
161
+ # @param rhs [Object]
162
+ # @param concat [Boolean]
163
+ #
164
+ # @return [Object]
165
+ private def deep_merge_lr(lhs, rhs, concat: false)
166
+ case [lhs, rhs, concat]
167
+ in [Hash, Hash, _]
168
+ # rubocop:disable Style/YodaCondition
169
+ rhs_cleaned = rhs.reject { |_, val| OMIT == val }
170
+ lhs
171
+ .reject { |key, _| OMIT == rhs[key] }
172
+ .merge(rhs_cleaned) do |_, old_val, new_val|
173
+ deep_merge_lr(old_val, new_val, concat: concat)
174
+ end
175
+ # rubocop:enable Style/YodaCondition
176
+ in [Array, Array, true]
177
+ lhs.concat(rhs)
178
+ else
179
+ rhs
180
+ end
181
+ end
182
+
183
+ # @api private
184
+ #
185
+ # Recursively merge one hash with another. If the values at a given key are not
186
+ # both hashes, just take the new value.
187
+ #
188
+ # @param values [Array<Object>]
189
+ #
190
+ # @param sentinel [Object, nil] the value to return if no values are provided.
191
+ #
192
+ # @param concat [Boolean] whether to merge sequences by concatenation.
193
+ #
194
+ # @return [Object]
195
+ def deep_merge(*values, sentinel: nil, concat: false)
196
+ case values
197
+ in [value, *values]
198
+ values.reduce(value) do |acc, val|
199
+ deep_merge_lr(acc, val, concat: concat)
200
+ end
201
+ else
202
+ sentinel
203
+ end
204
+ end
205
+
206
+ # @api private
207
+ #
208
+ # @param data [Hash{Symbol=>Object}, Array<Object>, Object]
209
+ # @param pick [Symbol, Integer, Array<Symbol, Integer>, nil]
210
+ # @param sentinel [Object, nil]
211
+ # @param blk [Proc, nil]
212
+ #
213
+ # @return [Object, nil]
214
+ def dig(data, pick, sentinel = nil, &blk)
215
+ case [data, pick, blk]
216
+ in [_, nil, nil]
217
+ data
218
+ in [Hash, Symbol, _] | [Array, Integer, _]
219
+ blk.nil? ? data.fetch(pick, sentinel) : data.fetch(pick, &blk)
220
+ in [Hash | Array, Array, _]
221
+ pick.reduce(data) do |acc, key|
222
+ case acc
223
+ in Hash if acc.key?(key)
224
+ acc.fetch(key)
225
+ in Array if key.is_a?(Integer) && key < acc.length
226
+ acc[key]
227
+ else
228
+ return blk.nil? ? sentinel : blk.call
229
+ end
230
+ end
231
+ in _
232
+ blk.nil? ? sentinel : blk.call
233
+ end
234
+ end
235
+ end
236
+
237
+ class << self
238
+ # @api private
239
+ #
240
+ # @param uri [URI::Generic]
241
+ #
242
+ # @return [String]
243
+ def uri_origin(uri)
244
+ "#{uri.scheme}://#{uri.host}#{uri.port == uri.default_port ? '' : ":#{uri.port}"}"
245
+ end
246
+
247
+ # @api private
248
+ #
249
+ # @param path [String, Array<String>]
250
+ #
251
+ # @return [String]
252
+ def interpolate_path(path)
253
+ case path
254
+ in String
255
+ path
256
+ in []
257
+ ""
258
+ in [String, *interpolations]
259
+ encoded = interpolations.map { ERB::Util.url_encode(_1) }
260
+ path.first % encoded
261
+ end
262
+ end
263
+ end
264
+
265
+ class << self
266
+ # @api private
267
+ #
268
+ # @param query [String, nil]
269
+ #
270
+ # @return [Hash{String=>Array<String>}]
271
+ def decode_query(query)
272
+ CGI.parse(query.to_s)
273
+ end
274
+
275
+ # @api private
276
+ #
277
+ # @param query [Hash{String=>Array<String>, String, nil}, nil]
278
+ #
279
+ # @return [String, nil]
280
+ def encode_query(query)
281
+ query.to_h.empty? ? nil : URI.encode_www_form(query)
282
+ end
283
+ end
284
+
285
+ class << self
286
+ # @api private
287
+ #
288
+ # @param url [URI::Generic, String]
289
+ #
290
+ # @return [Hash{Symbol=>String, Integer, nil}]
291
+ def parse_uri(url)
292
+ parsed = URI::Generic.component.zip(URI.split(url)).to_h
293
+ {**parsed, query: decode_query(parsed.fetch(:query))}
294
+ end
295
+
296
+ # @api private
297
+ #
298
+ # @param parsed [Hash{Symbol=>String, Integer, nil}] .
299
+ #
300
+ # @option parsed [String, nil] :scheme
301
+ #
302
+ # @option parsed [String, nil] :host
303
+ #
304
+ # @option parsed [Integer, nil] :port
305
+ #
306
+ # @option parsed [String, nil] :path
307
+ #
308
+ # @option parsed [Hash{String=>Array<String>}] :query
309
+ #
310
+ # @return [URI::Generic]
311
+ def unparse_uri(parsed)
312
+ URI::Generic.build(**parsed, query: encode_query(parsed.fetch(:query)))
313
+ end
314
+
315
+ # @api private
316
+ #
317
+ # @param lhs [Hash{Symbol=>String, Integer, nil}] .
318
+ #
319
+ # @option lhs [String, nil] :scheme
320
+ #
321
+ # @option lhs [String, nil] :host
322
+ #
323
+ # @option lhs [Integer, nil] :port
324
+ #
325
+ # @option lhs [String, nil] :path
326
+ #
327
+ # @option lhs [Hash{String=>Array<String>}] :query
328
+ #
329
+ # @param rhs [Hash{Symbol=>String, Integer, nil}] .
330
+ #
331
+ # @option rhs [String, nil] :scheme
332
+ #
333
+ # @option rhs [String, nil] :host
334
+ #
335
+ # @option rhs [Integer, nil] :port
336
+ #
337
+ # @option rhs [String, nil] :path
338
+ #
339
+ # @option rhs [Hash{String=>Array<String>}] :query
340
+ #
341
+ # @return [URI::Generic]
342
+ def join_parsed_uri(lhs, rhs)
343
+ base_path, base_query = lhs.fetch_values(:path, :query)
344
+ slashed = base_path.end_with?("/") ? base_path : "#{base_path}/"
345
+
346
+ parsed_path, parsed_query = parse_uri(rhs.fetch(:path)).fetch_values(:path, :query)
347
+ override = URI::Generic.build(**rhs.slice(:scheme, :host, :port), path: parsed_path)
348
+
349
+ joined = URI.join(URI::Generic.build(lhs.except(:path, :query)), slashed, override)
350
+ query = deep_merge(
351
+ joined.path == base_path ? base_query : {},
352
+ parsed_query,
353
+ rhs[:query].to_h,
354
+ concat: true
355
+ )
356
+
357
+ joined.query = encode_query(query)
358
+ joined
359
+ end
360
+ end
361
+
362
+ class << self
363
+ # @api private
364
+ #
365
+ # @param headers [Hash{String=>String, Integer, Array<String, Integer, nil>, nil}]
366
+ #
367
+ # @return [Hash{String=>String}]
368
+ def normalized_headers(*headers)
369
+ {}.merge(*headers.compact).to_h do |key, val|
370
+ case val
371
+ in Array
372
+ val.map { _1.to_s.strip }.join(", ")
373
+ else
374
+ val&.to_s&.strip
375
+ end
376
+ [key.downcase, val]
377
+ end
378
+ end
379
+ end
380
+
381
+ # @api private
382
+ #
383
+ # An adapter that satisfies the IO interface required by `::IO.copy_stream`
384
+ class ReadIOAdapter
385
+ # @api private
386
+ #
387
+ # @param max_len [Integer, nil]
388
+ #
389
+ # @return [String]
390
+ private def read_enum(max_len)
391
+ case max_len
392
+ in nil
393
+ @stream.to_a.join
394
+ in Integer
395
+ @buf << @stream.next while @buf.length < max_len
396
+ @buf.slice!(..max_len)
397
+ end
398
+ rescue StopIteration
399
+ @stream = nil
400
+ @buf.slice!(0..)
401
+ end
402
+
403
+ # @api private
404
+ #
405
+ # @param max_len [Integer, nil]
406
+ # @param out_string [String, nil]
407
+ #
408
+ # @return [String, nil]
409
+ def read(max_len = nil, out_string = nil)
410
+ case @stream
411
+ in nil
412
+ nil
413
+ in IO | StringIO
414
+ @stream.read(max_len, out_string)
415
+ in Enumerator
416
+ read = read_enum(max_len)
417
+ case out_string
418
+ in String
419
+ out_string.replace(read)
420
+ in nil
421
+ read
422
+ end
423
+ end
424
+ .tap(&@blk)
425
+ end
426
+
427
+ # @api private
428
+ #
429
+ # @param stream [String, IO, StringIO, Enumerable]
430
+ # @param blk [Proc]
431
+ def initialize(stream, &blk)
432
+ @stream = stream.is_a?(String) ? StringIO.new(stream) : stream
433
+ @buf = String.new.b
434
+ @blk = blk
435
+ end
436
+ end
437
+
438
+ class << self
439
+ # @param blk [Proc]
440
+ #
441
+ # @return [Enumerable]
442
+ def string_io(&blk)
443
+ Enumerator.new do |y|
444
+ y.define_singleton_method(:write) do
445
+ self << _1.clone
446
+ _1.bytesize
447
+ end
448
+
449
+ blk.call(y)
450
+ end
451
+ end
452
+ end
453
+
454
+ class << self
455
+ # @api private
456
+ #
457
+ # @param y [Enumerator::Yielder]
458
+ # @param boundary [String]
459
+ # @param key [Symbol, String]
460
+ # @param val [Object]
461
+ private def encode_multipart_formdata(y, boundary:, key:, val:)
462
+ y << "--#{boundary}\r\n"
463
+ y << "Content-Disposition: form-data"
464
+ unless key.nil?
465
+ name = ERB::Util.url_encode(key.to_s)
466
+ y << "; name=\"#{name}\""
467
+ end
468
+ if val.is_a?(IO)
469
+ filename = ERB::Util.url_encode(File.basename(val.to_path))
470
+ y << "; filename=\"#{filename}\""
471
+ end
472
+ y << "\r\n"
473
+ case val
474
+ in IO
475
+ y << "Content-Type: application/octet-stream\r\n\r\n"
476
+ IO.copy_stream(val, y)
477
+ in StringIO
478
+ y << "Content-Type: application/octet-stream\r\n\r\n"
479
+ y << val.string
480
+ in String
481
+ y << "Content-Type: application/octet-stream\r\n\r\n"
482
+ y << val.to_s
483
+ in true | false | Integer | Float | Symbol
484
+ y << "Content-Type: text/plain\r\n\r\n"
485
+ y << val.to_s
486
+ else
487
+ y << "Content-Type: application/json\r\n\r\n"
488
+ y << JSON.fast_generate(val)
489
+ end
490
+ y << "\r\n"
491
+ end
492
+
493
+ # @api private
494
+ #
495
+ # @param body [Object]
496
+ #
497
+ # @return [Array(String, Enumerable)]
498
+ private def encode_multipart_streaming(body)
499
+ boundary = SecureRandom.urlsafe_base64(60)
500
+
501
+ strio = string_io do |y|
502
+ case body
503
+ in Hash
504
+ body.each do |key, val|
505
+ case val
506
+ in Array if val.all? { primitive?(_1) }
507
+ val.each do |v|
508
+ encode_multipart_formdata(y, boundary: boundary, key: key, val: v)
509
+ end
510
+ else
511
+ encode_multipart_formdata(y, boundary: boundary, key: key, val: val)
512
+ end
513
+ end
514
+ else
515
+ encode_multipart_formdata(y, boundary: boundary, key: nil, val: body)
516
+ end
517
+ y << "--#{boundary}--\r\n"
518
+ end
519
+
520
+ [boundary, strio]
521
+ end
522
+
523
+ # @api private
524
+ #
525
+ # @param headers [Hash{String=>String}]
526
+ # @param body [Object]
527
+ #
528
+ # @return [Object]
529
+ def encode_content(headers, body)
530
+ content_type = headers["content-type"]
531
+ case [content_type, body]
532
+ in [%r{^application/(?:vnd\.api\+)?json}, Hash | Array]
533
+ [headers, JSON.fast_generate(body)]
534
+ in [%r{^application/(?:x-)?jsonl}, Enumerable]
535
+ [headers, body.lazy.map { JSON.fast_generate(_1) }]
536
+ in [%r{^multipart/form-data}, Hash | IO | StringIO]
537
+ boundary, strio = encode_multipart_streaming(body)
538
+ headers = {**headers, "content-type" => "#{content_type}; boundary=#{boundary}"}
539
+ [headers, strio]
540
+ in [_, StringIO]
541
+ [headers, body.string]
542
+ else
543
+ [headers, body]
544
+ end
545
+ end
546
+
547
+ # @api private
548
+ #
549
+ # @param headers [Hash{String=>String}, Net::HTTPHeader]
550
+ # @param stream [Enumerable]
551
+ # @param suppress_error [Boolean]
552
+ #
553
+ # @raise [JSON::ParserError]
554
+ # @return [Object]
555
+ def decode_content(headers, stream:, suppress_error: false)
556
+ case headers["content-type"]
557
+ in %r{^application/(?:vnd\.api\+)?json}
558
+ json = stream.to_a.join
559
+ begin
560
+ JSON.parse(json, symbolize_names: true)
561
+ rescue JSON::ParserError => e
562
+ raise e unless suppress_error
563
+ json
564
+ end
565
+ in %r{^application/(?:x-)?jsonl}
566
+ lines = decode_lines(stream)
567
+ chain_fused(lines) do |y|
568
+ lines.each { y << JSON.parse(_1, symbolize_names: true) }
569
+ end
570
+ in %r{^text/event-stream}
571
+ lines = decode_lines(stream)
572
+ decode_sse(lines)
573
+ in %r{^text/}
574
+ stream.to_a.join
575
+ else
576
+ # TODO: parsing other response types
577
+ StringIO.new(stream.to_a.join)
578
+ end
579
+ end
580
+ end
581
+
582
+ class << self
583
+ # @api private
584
+ #
585
+ # https://doc.rust-lang.org/std/iter/trait.FusedIterator.html
586
+ #
587
+ # @param enum [Enumerable]
588
+ # @param external [Boolean]
589
+ # @param close [Proc]
590
+ #
591
+ # @return [Enumerable]
592
+ def fused_enum(enum, external: false, &close)
593
+ fused = false
594
+ iter = Enumerator.new do |y|
595
+ next if fused
596
+
597
+ fused = true
598
+ if external
599
+ loop { y << enum.next }
600
+ else
601
+ enum.each(&y)
602
+ end
603
+ ensure
604
+ close&.call
605
+ close = nil
606
+ end
607
+
608
+ iter.define_singleton_method(:rewind) do
609
+ fused = true
610
+ self
611
+ end
612
+ iter
613
+ end
614
+
615
+ # @api private
616
+ #
617
+ # @param enum [Enumerable, nil]
618
+ def close_fused!(enum)
619
+ return unless enum.is_a?(Enumerator)
620
+
621
+ # rubocop:disable Lint/UnreachableLoop
622
+ enum.rewind.each { break }
623
+ # rubocop:enable Lint/UnreachableLoop
624
+ end
625
+
626
+ # @api private
627
+ #
628
+ # @param enum [Enumerable, nil]
629
+ # @param blk [Proc]
630
+ def chain_fused(enum, &blk)
631
+ iter = Enumerator.new { blk.call(_1) }
632
+ fused_enum(iter) { close_fused!(enum) }
633
+ end
634
+ end
635
+
636
+ class << self
637
+ # @api private
638
+ #
639
+ # @param enum [Enumerable]
640
+ #
641
+ # @return [Enumerable]
642
+ def decode_lines(enum)
643
+ re = /(\r\n|\r|\n)/
644
+ buffer = String.new.b
645
+ cr_seen = nil
646
+
647
+ chain_fused(enum) do |y|
648
+ enum.each do |row|
649
+ offset = buffer.bytesize
650
+ buffer << row
651
+ while (match = re.match(buffer, cr_seen&.to_i || offset))
652
+ case [match.captures.first, cr_seen]
653
+ in ["\r", nil]
654
+ cr_seen = match.end(1)
655
+ next
656
+ in ["\r" | "\r\n", Integer]
657
+ y << buffer.slice!(..(cr_seen.pred))
658
+ else
659
+ y << buffer.slice!(..(match.end(1).pred))
660
+ end
661
+ offset = 0
662
+ cr_seen = nil
663
+ end
664
+ end
665
+
666
+ y << buffer.slice!(..(cr_seen.pred)) unless cr_seen.nil?
667
+ y << buffer unless buffer.empty?
668
+ end
669
+ end
670
+
671
+ # @api private
672
+ #
673
+ # https://html.spec.whatwg.org/multipage/server-sent-events.html#parsing-an-event-stream
674
+ #
675
+ # @param lines [Enumerable]
676
+ #
677
+ # @return [Hash{Symbol=>Object}]
678
+ def decode_sse(lines)
679
+ # rubocop:disable Metrics/BlockLength
680
+ chain_fused(lines) do |y|
681
+ blank = {event: nil, data: nil, id: nil, retry: nil}
682
+ current = {}
683
+
684
+ lines.each do |line|
685
+ case line.sub(/\R$/, "")
686
+ in ""
687
+ next if current.empty?
688
+ y << {**blank, **current}
689
+ current = {}
690
+ in /^:/
691
+ next
692
+ in /^([^:]+):\s?(.*)$/
693
+ field, value = Regexp.last_match.captures
694
+ case field
695
+ in "event"
696
+ current.merge!(event: value)
697
+ in "data"
698
+ (current[:data] ||= String.new.b) << (value << "\n")
699
+ in "id" unless value.include?("\0")
700
+ current.merge!(id: value)
701
+ in "retry" if /^\d+$/ =~ value
702
+ current.merge!(retry: Integer(value))
703
+ else
704
+ end
705
+ else
706
+ end
707
+ end
708
+ # rubocop:enable Metrics/BlockLength
709
+
710
+ y << {**blank, **current} unless current.empty?
711
+ end
712
+ end
713
+ end
714
+ end
715
+
716
+ # rubocop:enable Metrics/ModuleLength
717
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dodopayments
4
+ VERSION = "0.0.1-alpha.0"
5
+ end