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.
- checksums.yaml +7 -0
- data/README.md +154 -0
- data/lib/dodopayments/base_client.rb +453 -0
- data/lib/dodopayments/base_model.rb +1217 -0
- data/lib/dodopayments/base_page.rb +62 -0
- data/lib/dodopayments/client.rb +147 -0
- data/lib/dodopayments/default_page_number_pagination.rb +97 -0
- data/lib/dodopayments/errors.rb +183 -0
- data/lib/dodopayments/extern.rb +9 -0
- data/lib/dodopayments/models/attach_existing_customer.rb +19 -0
- data/lib/dodopayments/models/billing_address.rb +48 -0
- data/lib/dodopayments/models/country_code.rb +262 -0
- data/lib/dodopayments/models/create_new_customer.rb +44 -0
- data/lib/dodopayments/models/customer.rb +49 -0
- data/lib/dodopayments/models/customer_create_params.rb +36 -0
- data/lib/dodopayments/models/customer_limited_details.rb +34 -0
- data/lib/dodopayments/models/customer_list_params.rb +32 -0
- data/lib/dodopayments/models/customer_portal_session.rb +19 -0
- data/lib/dodopayments/models/customer_request.rb +18 -0
- data/lib/dodopayments/models/customer_retrieve_params.rb +18 -0
- data/lib/dodopayments/models/customer_update_params.rb +30 -0
- data/lib/dodopayments/models/customers/customer_portal_create_params.rb +27 -0
- data/lib/dodopayments/models/discount.rb +108 -0
- data/lib/dodopayments/models/discount_create_params.rb +87 -0
- data/lib/dodopayments/models/discount_delete_params.rb +18 -0
- data/lib/dodopayments/models/discount_list_params.rb +32 -0
- data/lib/dodopayments/models/discount_retrieve_params.rb +18 -0
- data/lib/dodopayments/models/discount_type.rb +12 -0
- data/lib/dodopayments/models/discount_update_params.rb +82 -0
- data/lib/dodopayments/models/dispute.rb +80 -0
- data/lib/dodopayments/models/dispute_list_params.rb +79 -0
- data/lib/dodopayments/models/dispute_retrieve_params.rb +18 -0
- data/lib/dodopayments/models/dispute_stage.rb +14 -0
- data/lib/dodopayments/models/dispute_status.rb +18 -0
- data/lib/dodopayments/models/intent_status.rb +22 -0
- data/lib/dodopayments/models/invoices/payment_retrieve_params.rb +20 -0
- data/lib/dodopayments/models/license_activate_params.rb +30 -0
- data/lib/dodopayments/models/license_deactivate_params.rb +30 -0
- data/lib/dodopayments/models/license_key.rb +113 -0
- data/lib/dodopayments/models/license_key_duration.rb +25 -0
- data/lib/dodopayments/models/license_key_instance.rb +43 -0
- data/lib/dodopayments/models/license_key_instance_list_params.rb +39 -0
- data/lib/dodopayments/models/license_key_instance_retrieve_params.rb +18 -0
- data/lib/dodopayments/models/license_key_instance_update_params.rb +24 -0
- data/lib/dodopayments/models/license_key_list_params.rb +53 -0
- data/lib/dodopayments/models/license_key_retrieve_params.rb +18 -0
- data/lib/dodopayments/models/license_key_status.rb +14 -0
- data/lib/dodopayments/models/license_key_update_params.rb +42 -0
- data/lib/dodopayments/models/license_validate_params.rb +30 -0
- data/lib/dodopayments/models/license_validate_response.rb +19 -0
- data/lib/dodopayments/models/misc_list_supported_countries_params.rb +18 -0
- data/lib/dodopayments/models/misc_list_supported_countries_response.rb +7 -0
- data/lib/dodopayments/models/one_time_product_cart_item.rb +33 -0
- data/lib/dodopayments/models/payment.rb +339 -0
- data/lib/dodopayments/models/payment_create_params.rb +90 -0
- data/lib/dodopayments/models/payment_create_response.rb +82 -0
- data/lib/dodopayments/models/payment_list_params.rb +79 -0
- data/lib/dodopayments/models/payment_list_response.rb +238 -0
- data/lib/dodopayments/models/payment_retrieve_params.rb +18 -0
- data/lib/dodopayments/models/payout_list_params.rb +32 -0
- data/lib/dodopayments/models/payout_list_response.rb +295 -0
- data/lib/dodopayments/models/price.rb +512 -0
- data/lib/dodopayments/models/product.rb +149 -0
- data/lib/dodopayments/models/product_create_params.rb +107 -0
- data/lib/dodopayments/models/product_delete_params.rb +18 -0
- data/lib/dodopayments/models/product_list_params.rb +54 -0
- data/lib/dodopayments/models/product_list_response.rb +293 -0
- data/lib/dodopayments/models/product_retrieve_params.rb +18 -0
- data/lib/dodopayments/models/product_unarchive_params.rb +18 -0
- data/lib/dodopayments/models/product_update_params.rb +124 -0
- data/lib/dodopayments/models/products/image_update_params.rb +26 -0
- data/lib/dodopayments/models/products/image_update_response.rb +27 -0
- data/lib/dodopayments/models/refund.rb +218 -0
- data/lib/dodopayments/models/refund_create_params.rb +40 -0
- data/lib/dodopayments/models/refund_list_params.rb +71 -0
- data/lib/dodopayments/models/refund_retrieve_params.rb +18 -0
- data/lib/dodopayments/models/refund_status.rb +15 -0
- data/lib/dodopayments/models/subscription.rb +309 -0
- data/lib/dodopayments/models/subscription_create_params.rb +106 -0
- data/lib/dodopayments/models/subscription_create_response.rb +73 -0
- data/lib/dodopayments/models/subscription_list_params.rb +71 -0
- data/lib/dodopayments/models/subscription_retrieve_params.rb +18 -0
- data/lib/dodopayments/models/subscription_status.rb +18 -0
- data/lib/dodopayments/models/subscription_update_params.rb +30 -0
- data/lib/dodopayments/models/time_interval.rb +15 -0
- data/lib/dodopayments/models/webhook_event.rb +73 -0
- data/lib/dodopayments/models/webhook_event_list_params.rb +71 -0
- data/lib/dodopayments/models/webhook_event_retrieve_params.rb +18 -0
- data/lib/dodopayments/pooled_net_requester.rb +164 -0
- data/lib/dodopayments/request_options.rb +110 -0
- data/lib/dodopayments/resources/customers/customer_portal.rb +34 -0
- data/lib/dodopayments/resources/customers.rb +97 -0
- data/lib/dodopayments/resources/discounts.rb +154 -0
- data/lib/dodopayments/resources/disputes.rb +59 -0
- data/lib/dodopayments/resources/invoices/payments.rb +30 -0
- data/lib/dodopayments/resources/invoices.rb +16 -0
- data/lib/dodopayments/resources/license_key_instances.rb +71 -0
- data/lib/dodopayments/resources/license_keys.rb +82 -0
- data/lib/dodopayments/resources/licenses.rb +72 -0
- data/lib/dodopayments/resources/misc.rb +26 -0
- data/lib/dodopayments/resources/payments.rb +93 -0
- data/lib/dodopayments/resources/payouts.rb +33 -0
- data/lib/dodopayments/resources/products/images.rb +34 -0
- data/lib/dodopayments/resources/products.rb +176 -0
- data/lib/dodopayments/resources/refunds.rb +80 -0
- data/lib/dodopayments/resources/subscriptions.rb +117 -0
- data/lib/dodopayments/resources/webhook_events.rb +57 -0
- data/lib/dodopayments/util.rb +717 -0
- data/lib/dodopayments/version.rb +5 -0
- data/lib/dodopayments.rb +128 -0
- data/manifest.yaml +14 -0
- data/rbi/lib/dodopayments/base_client.rbi +186 -0
- data/rbi/lib/dodopayments/base_model.rbi +606 -0
- data/rbi/lib/dodopayments/base_page.rbi +40 -0
- data/rbi/lib/dodopayments/client.rbi +117 -0
- data/rbi/lib/dodopayments/default_page_number_pagination.rbi +17 -0
- data/rbi/lib/dodopayments/errors.rbi +179 -0
- data/rbi/lib/dodopayments/extern.rbi +8 -0
- data/rbi/lib/dodopayments/models/attach_existing_customer.rbi +23 -0
- data/rbi/lib/dodopayments/models/billing_address.rbi +65 -0
- data/rbi/lib/dodopayments/models/country_code.rbi +266 -0
- data/rbi/lib/dodopayments/models/create_new_customer.rbi +61 -0
- data/rbi/lib/dodopayments/models/customer.rbi +85 -0
- data/rbi/lib/dodopayments/models/customer_create_params.rbi +60 -0
- data/rbi/lib/dodopayments/models/customer_limited_details.rbi +42 -0
- data/rbi/lib/dodopayments/models/customer_list_params.rbi +52 -0
- data/rbi/lib/dodopayments/models/customer_portal_session.rbi +23 -0
- data/rbi/lib/dodopayments/models/customer_request.rbi +15 -0
- data/rbi/lib/dodopayments/models/customer_retrieve_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/customer_update_params.rbi +50 -0
- data/rbi/lib/dodopayments/models/customers/customer_portal_create_params.rbi +37 -0
- data/rbi/lib/dodopayments/models/discount.rbi +161 -0
- data/rbi/lib/dodopayments/models/discount_create_params.rbi +124 -0
- data/rbi/lib/dodopayments/models/discount_delete_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/discount_list_params.rbi +52 -0
- data/rbi/lib/dodopayments/models/discount_retrieve_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/discount_type.rbi +17 -0
- data/rbi/lib/dodopayments/models/discount_update_params.rbi +119 -0
- data/rbi/lib/dodopayments/models/dispute.rbi +112 -0
- data/rbi/lib/dodopayments/models/dispute_list_params.rbi +116 -0
- data/rbi/lib/dodopayments/models/dispute_retrieve_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/dispute_stage.rbi +19 -0
- data/rbi/lib/dodopayments/models/dispute_status.rbi +23 -0
- data/rbi/lib/dodopayments/models/intent_status.rbi +27 -0
- data/rbi/lib/dodopayments/models/invoices/payment_retrieve_params.rbi +23 -0
- data/rbi/lib/dodopayments/models/license_activate_params.rbi +43 -0
- data/rbi/lib/dodopayments/models/license_deactivate_params.rbi +50 -0
- data/rbi/lib/dodopayments/models/license_key.rbi +170 -0
- data/rbi/lib/dodopayments/models/license_key_duration.rbi +31 -0
- data/rbi/lib/dodopayments/models/license_key_instance.rbi +68 -0
- data/rbi/lib/dodopayments/models/license_key_instance_list_params.rbi +63 -0
- data/rbi/lib/dodopayments/models/license_key_instance_retrieve_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/license_key_instance_update_params.rbi +35 -0
- data/rbi/lib/dodopayments/models/license_key_list_params.rbi +85 -0
- data/rbi/lib/dodopayments/models/license_key_retrieve_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/license_key_status.rbi +19 -0
- data/rbi/lib/dodopayments/models/license_key_update_params.rbi +66 -0
- data/rbi/lib/dodopayments/models/license_validate_params.rbi +50 -0
- data/rbi/lib/dodopayments/models/license_validate_response.rbi +23 -0
- data/rbi/lib/dodopayments/models/misc_list_supported_countries_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/misc_list_supported_countries_response.rbi +7 -0
- data/rbi/lib/dodopayments/models/one_time_product_cart_item.rbi +43 -0
- data/rbi/lib/dodopayments/models/payment.rbi +439 -0
- data/rbi/lib/dodopayments/models/payment_create_params.rbi +133 -0
- data/rbi/lib/dodopayments/models/payment_create_response.rbi +127 -0
- data/rbi/lib/dodopayments/models/payment_list_params.rbi +116 -0
- data/rbi/lib/dodopayments/models/payment_list_response.rbi +295 -0
- data/rbi/lib/dodopayments/models/payment_retrieve_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/payout_list_params.rbi +52 -0
- data/rbi/lib/dodopayments/models/payout_list_response.rbi +374 -0
- data/rbi/lib/dodopayments/models/price.rbi +603 -0
- data/rbi/lib/dodopayments/models/product.rbi +228 -0
- data/rbi/lib/dodopayments/models/product_create_params.rbi +162 -0
- data/rbi/lib/dodopayments/models/product_delete_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/product_list_params.rbi +78 -0
- data/rbi/lib/dodopayments/models/product_list_response.rbi +374 -0
- data/rbi/lib/dodopayments/models/product_retrieve_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/product_unarchive_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/product_update_params.rbi +191 -0
- data/rbi/lib/dodopayments/models/products/image_update_params.rbi +41 -0
- data/rbi/lib/dodopayments/models/products/image_update_response.rbi +33 -0
- data/rbi/lib/dodopayments/models/refund.rbi +267 -0
- data/rbi/lib/dodopayments/models/refund_create_params.rbi +64 -0
- data/rbi/lib/dodopayments/models/refund_list_params.rbi +104 -0
- data/rbi/lib/dodopayments/models/refund_retrieve_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/refund_status.rbi +20 -0
- data/rbi/lib/dodopayments/models/subscription.rbi +397 -0
- data/rbi/lib/dodopayments/models/subscription_create_params.rbi +154 -0
- data/rbi/lib/dodopayments/models/subscription_create_response.rbi +113 -0
- data/rbi/lib/dodopayments/models/subscription_list_params.rbi +104 -0
- data/rbi/lib/dodopayments/models/subscription_retrieve_params.rbi +21 -0
- data/rbi/lib/dodopayments/models/subscription_status.rbi +23 -0
- data/rbi/lib/dodopayments/models/subscription_update_params.rbi +50 -0
- data/rbi/lib/dodopayments/models/time_interval.rbi +20 -0
- data/rbi/lib/dodopayments/models/webhook_event.rbi +114 -0
- data/rbi/lib/dodopayments/models/webhook_event_list_params.rbi +104 -0
- data/rbi/lib/dodopayments/models/webhook_event_retrieve_params.rbi +21 -0
- data/rbi/lib/dodopayments/pooled_net_requester.rbi +47 -0
- data/rbi/lib/dodopayments/request_options.rbi +109 -0
- data/rbi/lib/dodopayments/resources/customers/customer_portal.rbi +30 -0
- data/rbi/lib/dodopayments/resources/customers.rbi +76 -0
- data/rbi/lib/dodopayments/resources/discounts.rbi +139 -0
- data/rbi/lib/dodopayments/resources/disputes.rbi +57 -0
- data/rbi/lib/dodopayments/resources/invoices/payments.rbi +23 -0
- data/rbi/lib/dodopayments/resources/invoices.rbi +15 -0
- data/rbi/lib/dodopayments/resources/license_key_instances.rbi +61 -0
- data/rbi/lib/dodopayments/resources/license_keys.rbi +77 -0
- data/rbi/lib/dodopayments/resources/licenses.rbi +44 -0
- data/rbi/lib/dodopayments/resources/misc.rbi +18 -0
- data/rbi/lib/dodopayments/resources/payments.rbi +91 -0
- data/rbi/lib/dodopayments/resources/payouts.rbi +28 -0
- data/rbi/lib/dodopayments/resources/products/images.rbi +29 -0
- data/rbi/lib/dodopayments/resources/products.rbi +164 -0
- data/rbi/lib/dodopayments/resources/refunds.rbi +75 -0
- data/rbi/lib/dodopayments/resources/subscriptions.rbi +112 -0
- data/rbi/lib/dodopayments/resources/webhook_events.rbi +50 -0
- data/rbi/lib/dodopayments/util.rbi +270 -0
- data/rbi/lib/dodopayments/version.rbi +5 -0
- data/sig/dodopayments/base_client.rbs +103 -0
- data/sig/dodopayments/base_model.rbs +246 -0
- data/sig/dodopayments/base_page.rbs +20 -0
- data/sig/dodopayments/client.rbs +58 -0
- data/sig/dodopayments/default_page_number_pagination.rbs +7 -0
- data/sig/dodopayments/errors.rbs +99 -0
- data/sig/dodopayments/extern.rbs +4 -0
- data/sig/dodopayments/models/attach_existing_customer.rbs +18 -0
- data/sig/dodopayments/models/billing_address.rbs +38 -0
- data/sig/dodopayments/models/country_code.rbs +508 -0
- data/sig/dodopayments/models/create_new_customer.rbs +37 -0
- data/sig/dodopayments/models/customer.rbs +42 -0
- data/sig/dodopayments/models/customer_create_params.rbs +32 -0
- data/sig/dodopayments/models/customer_limited_details.rbs +23 -0
- data/sig/dodopayments/models/customer_list_params.rbs +29 -0
- data/sig/dodopayments/models/customer_portal_session.rbs +18 -0
- data/sig/dodopayments/models/customer_request.rbs +11 -0
- data/sig/dodopayments/models/customer_retrieve_params.rbs +19 -0
- data/sig/dodopayments/models/customer_update_params.rbs +29 -0
- data/sig/dodopayments/models/customers/customer_portal_create_params.rbs +27 -0
- data/sig/dodopayments/models/discount.rbs +62 -0
- data/sig/dodopayments/models/discount_create_params.rbs +52 -0
- data/sig/dodopayments/models/discount_delete_params.rbs +19 -0
- data/sig/dodopayments/models/discount_list_params.rbs +29 -0
- data/sig/dodopayments/models/discount_retrieve_params.rbs +19 -0
- data/sig/dodopayments/models/discount_type.rbs +11 -0
- data/sig/dodopayments/models/discount_update_params.rbs +52 -0
- data/sig/dodopayments/models/dispute.rbs +50 -0
- data/sig/dodopayments/models/dispute_list_params.rbs +52 -0
- data/sig/dodopayments/models/dispute_retrieve_params.rbs +19 -0
- data/sig/dodopayments/models/dispute_stage.rbs +13 -0
- data/sig/dodopayments/models/dispute_status.rbs +24 -0
- data/sig/dodopayments/models/intent_status.rbs +32 -0
- data/sig/dodopayments/models/invoices/payment_retrieve_params.rbs +21 -0
- data/sig/dodopayments/models/license_activate_params.rbs +28 -0
- data/sig/dodopayments/models/license_deactivate_params.rbs +29 -0
- data/sig/dodopayments/models/license_key.rbs +66 -0
- data/sig/dodopayments/models/license_key_duration.rbs +21 -0
- data/sig/dodopayments/models/license_key_instance.rbs +39 -0
- data/sig/dodopayments/models/license_key_instance_list_params.rbs +32 -0
- data/sig/dodopayments/models/license_key_instance_retrieve_params.rbs +20 -0
- data/sig/dodopayments/models/license_key_instance_update_params.rbs +22 -0
- data/sig/dodopayments/models/license_key_list_params.rbs +44 -0
- data/sig/dodopayments/models/license_key_retrieve_params.rbs +19 -0
- data/sig/dodopayments/models/license_key_status.rbs +13 -0
- data/sig/dodopayments/models/license_key_update_params.rbs +32 -0
- data/sig/dodopayments/models/license_validate_params.rbs +29 -0
- data/sig/dodopayments/models/license_validate_response.rbs +18 -0
- data/sig/dodopayments/models/misc_list_supported_countries_params.rbs +20 -0
- data/sig/dodopayments/models/misc_list_supported_countries_response.rbs +8 -0
- data/sig/dodopayments/models/one_time_product_cart_item.rbs +23 -0
- data/sig/dodopayments/models/payment.rbs +408 -0
- data/sig/dodopayments/models/payment_create_params.rbs +58 -0
- data/sig/dodopayments/models/payment_create_response.rbs +51 -0
- data/sig/dodopayments/models/payment_list_params.rbs +52 -0
- data/sig/dodopayments/models/payment_list_response.rbs +356 -0
- data/sig/dodopayments/models/payment_retrieve_params.rbs +19 -0
- data/sig/dodopayments/models/payout_list_params.rbs +29 -0
- data/sig/dodopayments/models/payout_list_response.rbs +386 -0
- data/sig/dodopayments/models/price.rbs +717 -0
- data/sig/dodopayments/models/product.rbs +89 -0
- data/sig/dodopayments/models/product_create_params.rbs +71 -0
- data/sig/dodopayments/models/product_delete_params.rbs +19 -0
- data/sig/dodopayments/models/product_list_params.rbs +42 -0
- data/sig/dodopayments/models/product_list_response.rbs +379 -0
- data/sig/dodopayments/models/product_retrieve_params.rbs +19 -0
- data/sig/dodopayments/models/product_unarchive_params.rbs +19 -0
- data/sig/dodopayments/models/product_update_params.rbs +75 -0
- data/sig/dodopayments/models/products/image_update_params.rbs +27 -0
- data/sig/dodopayments/models/products/image_update_response.rbs +22 -0
- data/sig/dodopayments/models/refund.rbs +345 -0
- data/sig/dodopayments/models/refund_create_params.rbs +32 -0
- data/sig/dodopayments/models/refund_list_params.rbs +48 -0
- data/sig/dodopayments/models/refund_retrieve_params.rbs +19 -0
- data/sig/dodopayments/models/refund_status.rbs +14 -0
- data/sig/dodopayments/models/subscription.rbs +387 -0
- data/sig/dodopayments/models/subscription_create_params.rbs +66 -0
- data/sig/dodopayments/models/subscription_create_response.rbs +47 -0
- data/sig/dodopayments/models/subscription_list_params.rbs +48 -0
- data/sig/dodopayments/models/subscription_retrieve_params.rbs +19 -0
- data/sig/dodopayments/models/subscription_status.rbs +18 -0
- data/sig/dodopayments/models/subscription_update_params.rbs +32 -0
- data/sig/dodopayments/models/time_interval.rbs +14 -0
- data/sig/dodopayments/models/webhook_event.rbs +50 -0
- data/sig/dodopayments/models/webhook_event_list_params.rbs +48 -0
- data/sig/dodopayments/models/webhook_event_retrieve_params.rbs +19 -0
- data/sig/dodopayments/pooled_net_requester.rbs +30 -0
- data/sig/dodopayments/request_options.rbs +46 -0
- data/sig/dodopayments/resources/customers/customer_portal.rbs +21 -0
- data/sig/dodopayments/resources/customers.rbs +55 -0
- data/sig/dodopayments/resources/discounts.rbs +73 -0
- data/sig/dodopayments/resources/disputes.rbs +33 -0
- data/sig/dodopayments/resources/invoices/payments.rbs +20 -0
- data/sig/dodopayments/resources/invoices.rbs +9 -0
- data/sig/dodopayments/resources/license_key_instances.rbs +42 -0
- data/sig/dodopayments/resources/license_keys.rbs +46 -0
- data/sig/dodopayments/resources/licenses.rbs +40 -0
- data/sig/dodopayments/resources/misc.rbs +16 -0
- data/sig/dodopayments/resources/payments.rbs +49 -0
- data/sig/dodopayments/resources/payouts.rbs +17 -0
- data/sig/dodopayments/resources/products/images.rbs +21 -0
- data/sig/dodopayments/resources/products.rbs +86 -0
- data/sig/dodopayments/resources/refunds.rbs +43 -0
- data/sig/dodopayments/resources/subscriptions.rbs +65 -0
- data/sig/dodopayments/resources/webhook_events.rbs +33 -0
- data/sig/dodopayments/util.rbs +136 -0
- data/sig/dodopayments/version.rbs +3 -0
- 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
|