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